采购运行时 AI 规格纠偏端到端安全验收 #258

Open
opened 2026-08-24 11:28:52 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求 / 验收
  • 父级大工单:#96
  • 所属 MVP / 版本:#253 采购运行时 AI 规格纠偏闭环
  • 阶段:5. 跨端集成与受控真机验收
  • 依赖:#254、#255、#256、#257

要解决什么

运行时规格纠偏横跨 Admin MySQL、AI 服务、Client SQLite、HTTP 幂等、uiautomator2 页面读取和真实采购安全门禁。单侧单元测试无法证明契约一致,也无法证明 AI 返回后页面变化、断网或崩溃不会导致错误规格或重复下单,需要独立的跨端集成和受控真机验收。

做什么 / 不做什么

  • 做:
    • 对 Admin 与 Client 的请求、响应、错误码、幂等键和候选哈希执行同一份契约用例。
    • 使用伪模型和脱敏页面固件覆盖规则命中、AI命中、不确定、冲突、低置信度、超时、网络失败、页面变化和崩溃恢复。
    • 在独立 MySQL 8.4 _test 和临时 Client SQLite 中验证迁移、并发幂等和审计完整性。
    • 在项目负责人指定的测试商品、账号、Client 和 Android 设备上进行受控真机验收;成功路径最多创建一个未付款订单。
    • 核对不会点击支付,不可逆后只核单,失败路径不会自动重下单。
    • 记录未验证项;发现实现缺陷时回到对应单元工单或新建缺陷,不在验收工单混入无关修复。
  • 不做:
    • 不自动付款,不绕过登录、验证码或风控。
    • 不批量创建真实订单,不使用生产 root 数据库账号,不在测试中清理生产数据。
    • 不把真实 XML、姓名、手机号、地址、Cookie、Token 或 API Key写入工单、日志和 Git。
    • 本工单不负责生产部署;验收通过后另建部署工单。

怎么做

  1. 建立跨端契约测试向量,Admin Handler 与 Client HTTP/Mock 对同一 JSON 得到一致结果。
  2. 建立确定性案例:繁简唯一、45-55公斤→90-110斤 唯一命中、多个区间重叠、禁用尺码、候选超限和候选快照变化。
  3. 建立 AI 案例:白名单命中、伪造候选、低置信度、不确定、冲突、超时和响应格式错误。
  4. 建立故障注入:请求发送前后崩溃、Admin 已决策但响应丢失、Client 已持久化但尚未点击、点击后未确认、不可逆标记前后崩溃。
  5. 自动化验证全部通过后,制定真机验收清单并由项目负责人确认测试商品和价格上限;先只读/停在提交前检查,再执行一次真实未付款订单闭环。
  6. 真机产生订单后只读核对订单编号、时间和未付款状态;绝不触碰支付控件。

预计修改文件:

  • Admin/Client 跨端契约测试与脱敏测试数据
  • docs/admin/06-quality-security.md
  • docs/client/06-quality-security.md
  • 完成后归档 docs/task/<工单号>-采购运行时规格纠偏端到端验收.md

验收标准

  • Admin、Client HTTP 和 Mock 对协议字段、错误和幂等行为完全一致。
  • 规则唯一命中不调用模型;重叠区间和多候选不会自动选择。
  • AI 伪造、低置信度、不确定、冲突、超时和格式错误均安全停止。
  • 响应丢失和并发重试不会产生第二个有效决策或不同结果。
  • Client 响应后页面变化不会点击旧候选。
  • 规格解析和点击全程发生在不可逆标记之前;不可逆后只能核单。
  • 成功路径最终仍通过商品、实际规格、数量、订单总价上限和唯一提交按钮复核。
  • 受控真机最多生成一个匹配的未付款订单,不点击或尝试支付。
  • 原始 XML 和个人数据只保存在本机非 Git 目录,对外记录已脱敏。
  • Go 1.23.0、Python 3.10、MySQL 8.4 _test 和 Client SQLite 全量测试通过,未验证项明确记录。

怎么验证

Admin:

Set-Location admin
$env:GOTOOLCHAIN='go1.23.0'
go build ./...
go test ./... -count=1
go vet ./...
Remove-Item Env:GOTOOLCHAIN

Client:

Set-Location client
C:/Python310/python.exe -m pytest -q
$env:QT_QPA_PLATFORM='offscreen'
C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()"
Remove-Item Env:QT_QPA_PLATFORM

真机验收必须在工单实施记录中写明设备、测试商品、是否点击提交订单和最终是否产生未付款订单;敏感信息全部脱敏。

风险和回退

  • 风险:真机验收会创建真实未付款订单。只使用项目负责人确认的低金额测试商品和一个任务,生成后交人工决定是否取消或支付;系统不执行支付。
  • 风险:测试故障导致结果不确定。不可逆后立即转只读核单,不再次运行采购 Adapter。
  • 回退:停止真机验收并关闭运行时解析入口;未付款订单由人工处理,审计和不可逆记录不得删除。
## 基本信息 - 类型:需求 / 验收 - 父级大工单:#96 - 所属 MVP / 版本:#253 采购运行时 AI 规格纠偏闭环 - 阶段:5. 跨端集成与受控真机验收 - 依赖:#254、#255、#256、#257 ## 要解决什么 运行时规格纠偏横跨 Admin MySQL、AI 服务、Client SQLite、HTTP 幂等、uiautomator2 页面读取和真实采购安全门禁。单侧单元测试无法证明契约一致,也无法证明 AI 返回后页面变化、断网或崩溃不会导致错误规格或重复下单,需要独立的跨端集成和受控真机验收。 ## 做什么 / 不做什么 - 做: - 对 Admin 与 Client 的请求、响应、错误码、幂等键和候选哈希执行同一份契约用例。 - 使用伪模型和脱敏页面固件覆盖规则命中、AI命中、不确定、冲突、低置信度、超时、网络失败、页面变化和崩溃恢复。 - 在独立 MySQL 8.4 `_test` 和临时 Client SQLite 中验证迁移、并发幂等和审计完整性。 - 在项目负责人指定的测试商品、账号、Client 和 Android 设备上进行受控真机验收;成功路径最多创建一个未付款订单。 - 核对不会点击支付,不可逆后只核单,失败路径不会自动重下单。 - 记录未验证项;发现实现缺陷时回到对应单元工单或新建缺陷,不在验收工单混入无关修复。 - 不做: - 不自动付款,不绕过登录、验证码或风控。 - 不批量创建真实订单,不使用生产 root 数据库账号,不在测试中清理生产数据。 - 不把真实 XML、姓名、手机号、地址、Cookie、Token 或 API Key写入工单、日志和 Git。 - 本工单不负责生产部署;验收通过后另建部署工单。 ## 怎么做 1. 建立跨端契约测试向量,Admin Handler 与 Client HTTP/Mock 对同一 JSON 得到一致结果。 2. 建立确定性案例:繁简唯一、`45-55公斤→90-110斤` 唯一命中、多个区间重叠、禁用尺码、候选超限和候选快照变化。 3. 建立 AI 案例:白名单命中、伪造候选、低置信度、不确定、冲突、超时和响应格式错误。 4. 建立故障注入:请求发送前后崩溃、Admin 已决策但响应丢失、Client 已持久化但尚未点击、点击后未确认、不可逆标记前后崩溃。 5. 自动化验证全部通过后,制定真机验收清单并由项目负责人确认测试商品和价格上限;先只读/停在提交前检查,再执行一次真实未付款订单闭环。 6. 真机产生订单后只读核对订单编号、时间和未付款状态;绝不触碰支付控件。 预计修改文件: - Admin/Client 跨端契约测试与脱敏测试数据 - `docs/admin/06-quality-security.md` - `docs/client/06-quality-security.md` - 完成后归档 `docs/task/<工单号>-采购运行时规格纠偏端到端验收.md` ## 验收标准 - [ ] Admin、Client HTTP 和 Mock 对协议字段、错误和幂等行为完全一致。 - [ ] 规则唯一命中不调用模型;重叠区间和多候选不会自动选择。 - [ ] AI 伪造、低置信度、不确定、冲突、超时和格式错误均安全停止。 - [ ] 响应丢失和并发重试不会产生第二个有效决策或不同结果。 - [ ] Client 响应后页面变化不会点击旧候选。 - [ ] 规格解析和点击全程发生在不可逆标记之前;不可逆后只能核单。 - [ ] 成功路径最终仍通过商品、实际规格、数量、订单总价上限和唯一提交按钮复核。 - [ ] 受控真机最多生成一个匹配的未付款订单,不点击或尝试支付。 - [ ] 原始 XML 和个人数据只保存在本机非 Git 目录,对外记录已脱敏。 - [ ] Go 1.23.0、Python 3.10、MySQL 8.4 `_test` 和 Client SQLite 全量测试通过,未验证项明确记录。 ## 怎么验证 Admin: ```powershell Set-Location admin $env:GOTOOLCHAIN='go1.23.0' go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN ``` Client: ```powershell Set-Location client C:/Python310/python.exe -m pytest -q $env:QT_QPA_PLATFORM='offscreen' C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()" Remove-Item Env:QT_QPA_PLATFORM ``` 真机验收必须在工单实施记录中写明设备、测试商品、是否点击提交订单和最终是否产生未付款订单;敏感信息全部脱敏。 ## 风险和回退 - 风险:真机验收会创建真实未付款订单。只使用项目负责人确认的低金额测试商品和一个任务,生成后交人工决定是否取消或支付;系统不执行支付。 - 风险:测试故障导致结果不确定。不可逆后立即转只读核单,不再次运行采购 Adapter。 - 回退:停止真机验收并关闭运行时解析入口;未付款订单由人工处理,审计和不可逆记录不得删除。
Author
Owner

状态:进行中。已开始核对 #254–#257 的跨端协议与自动化覆盖;本工单不会混入工作区现有的 Client 界面改动,真实设备验收将在自动化门禁通过且测试商品/价格上限明确后执行。

状态:进行中。已开始核对 #254–#257 的跨端协议与自动化覆盖;本工单不会混入工作区现有的 Client 界面改动,真实设备验收将在自动化门禁通过且测试商品/价格上限明确后执行。
Author
Owner

实施进度:自动化联合验收完成,待受控真机

已完成

  • #257 审核时发现 Mock 与真实 Admin 在请求大小、字段边界、任务归属等错误码上存在漂移,已按工单边界单独修复并回写 #257:1009e54、24f91bb。
  • #258 新增 Admin/Client 共用的脱敏 JSON 契约向量,覆盖 12 个规则/AI 结论和 15 个 HTTP/幂等错误场景。
  • 增加 Admin Service 决策/并发重放、Admin Handler HTTP、Client HTTP Gateway/Mock 同源测试。
  • 更新两端质量基线,明确候选快照、页面复读、不可逆门禁和真机验收限制。
  • 实现提交:be900b2、29cf66c。

验证结果

  • Admin Go 1.23.0:go test ./... -count=1、go build ./...、go vet ./... 全部通过。
  • 共享契约:Admin Handler/Service 通过;Client 3 项通过。
  • MySQL 8.4.8:隔离的 _test 库完成 v25→v26 迁移、重放、唯一键、冲突和审计验证;未连接、清理或修改生产业务库。
  • Client 规格解析、页面变化、不可逆前后恢复等安全矩阵:24 项通过。
  • Client 离屏 UI:输出 OK。
  • Client 相关回归:499 项通过、2 项排除;这 2 项是当前工作区已有未提交版本号 0.1.2 与更新模块测试仍写死 0.1.0 的无关差异,不属于 #258,未混入本工单修改。
  • 测试数据均为虚构标识,无真实订单、账号、设备号、个人信息或凭据。

待项目负责人提供后执行

受控真机验收仍待指定:测试商品/任务、测试账号、Client、Android 设备和价格上限。当前没有连接设备、没有点击提交、没有产生未付款订单。指定后只执行一次未付款订单闭环;不可逆后只核单,绝不重新下单或进入付款。

因此 #258 暂保持进行中,不归档、不关闭,父工单也暂不标记完成。

## 实施进度:自动化联合验收完成,待受控真机 ### 已完成 - #257 审核时发现 Mock 与真实 Admin 在请求大小、字段边界、任务归属等错误码上存在漂移,已按工单边界单独修复并回写 #257:`1009e54`、`24f91bb`。 - #258 新增 Admin/Client 共用的脱敏 JSON 契约向量,覆盖 12 个规则/AI 结论和 15 个 HTTP/幂等错误场景。 - 增加 Admin Service 决策/并发重放、Admin Handler HTTP、Client HTTP Gateway/Mock 同源测试。 - 更新两端质量基线,明确候选快照、页面复读、不可逆门禁和真机验收限制。 - 实现提交:`be900b2`、`29cf66c`。 ### 验证结果 - Admin Go 1.23.0:`go test ./... -count=1`、`go build ./...`、`go vet ./...` 全部通过。 - 共享契约:Admin Handler/Service 通过;Client 3 项通过。 - MySQL 8.4.8:隔离的 `_test` 库完成 v25→v26 迁移、重放、唯一键、冲突和审计验证;未连接、清理或修改生产业务库。 - Client 规格解析、页面变化、不可逆前后恢复等安全矩阵:24 项通过。 - Client 离屏 UI:输出 `OK`。 - Client 相关回归:499 项通过、2 项排除;这 2 项是当前工作区已有未提交版本号 `0.1.2` 与更新模块测试仍写死 `0.1.0` 的无关差异,不属于 #258,未混入本工单修改。 - 测试数据均为虚构标识,无真实订单、账号、设备号、个人信息或凭据。 ### 待项目负责人提供后执行 受控真机验收仍待指定:测试商品/任务、测试账号、Client、Android 设备和价格上限。当前没有连接设备、没有点击提交、没有产生未付款订单。指定后只执行一次未付款订单闭环;不可逆后只核单,绝不重新下单或进入付款。 因此 #258 暂保持进行中,不归档、不关闭,父工单也暂不标记完成。
Author
Owner

本地联合验收发现的 PURCHASE_SPEC_RESOLUTION_ADMIN_FAILED:Admin 规格解析超时 已在 #257 修复:Client 规格解析独立等待 60 秒,Admin 运行时 AI 上限 30 秒。实现提交 6345b00,归档提交 02be709。代码回归已通过;#258 仍需在运行最新 Admin/Client、且 AI 服务商连接测试成功并启用后,重新执行真实 Admin + Android 真机链路。当前未触发下单或付款。

本地联合验收发现的 `PURCHASE_SPEC_RESOLUTION_ADMIN_FAILED:Admin 规格解析超时` 已在 #257 修复:Client 规格解析独立等待 60 秒,Admin 运行时 AI 上限 30 秒。实现提交 `6345b00`,归档提交 `02be709`。代码回归已通过;#258 仍需在运行最新 Admin/Client、且 AI 服务商连接测试成功并启用后,重新执行真实 Admin + Android 真机链路。当前未触发下单或付款。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/cmautobuy#258