#256 只能形成真机候选观察。要在同一次采购中安全继续,Client 还需要通过专用 Gateway 幂等请求 Admin、持久化请求和解析结果、处理网络/AI失败,并在页面可能已经变化的情况下重新读取、精确选择返回候选。该流程发生在真实采购中,不能只在内存里临时替换任务尺码,也不能绕过任务原有安全门禁。
AdminGateway
matched
resolve_purchase_spec(...)
PurchaseTaskService
purchase_resolve_options
uncertain/rejected/failed
预计修改文件:
client/src/admin_gateway.py
client/src/http_admin_gateway.py
client/src/mock_admin_gateway.py
client/src/purchase_task_service.py
client/src/task_repository.py
client/src/task_models.py
client/src/pdd_u2_purchase_adapter.py
docs/client/03-data-model.md
docs/client/06-quality-security.md
docs/task/<工单号>-client安全应用运行时规格解析.md
从 client/ 执行:
client/
C:/Python310/python.exe -m pytest -q C:/Python310/python.exe -m py_compile src/admin_gateway.py src/http_admin_gateway.py src/purchase_task_service.py src/task_repository.py $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
使用 Mock 覆盖全部响应与崩溃点;使用脱敏 XML 验证页面变化。真实设备执行留给 #258,不作为普通自动测试。
HttpAdminGateway
failed
ADMIN_TIMEOUT
resolve_purchase_spec
matched / uncertain / rejected / failed
开始实施。已确认依赖 #254、#255、#256 均已有实现提交。按工单分五层推进:先统一 Gateway DTO/HTTP/Mock,再新增独立 SQLite 解析记录和幂等复用,然后由 PurchaseTaskService 捕获 #256 的结构化观察、发送前落库、单次调用 Admin,最后让 U2 Adapter 重新遍历并核对快照后精确点击原始候选。既有数量、价格、地址、不可逆标记、单次下单和核单门禁保持原路径;不会查询任务状态、无限重试、自动付款或把原始 XML/凭据写入数据库。
#257 已完成实现并进入待验收。
pytest -q
test/
tools/
pytest test -q
afc1cdf719a86ebdf1f1bc65371c620c9e0c3964
e5ac327d357934b72115171e6ee8de32f7cedaec
docs/task/257-client安全应用运行时规格解析.md
工单保持打开,等待用户验收;验收通过后再关闭并同步父工单。
#258 联合契约审查发现 #257 的遗漏:MockAdminGateway._validate_spec_observation 尚未完整执行权威契约 §7.1 的字段长度/控制字符、observed_at 时区、请求体 64 KiB,以及 selected_color / target_size 必须来自领取任务原规格的校验;真实 Admin 会拒绝这些请求,Mock 却可能接受。
MockAdminGateway._validate_spec_observation
observed_at
selected_color / target_size
该修复仍属于本工单“HTTP 与 Mock 使用完全相同 DTO、幂等及错误语义”的原验收范围,不改变接口或采购结果。将补齐 Mock 校验和回归测试,单独提交引用 #257,然后返回 #258 的共享契约向量与端到端验收。
根因与修复方案已补入本工单正文并完成实施。
提交:6345b00(实现)、02be709(归档)。
6345b00
02be709
验证:Admin 的格式、全量测试、构建和 go vet 全部通过;Client 定向 19 项通过,全量 500 项通过、2 项既有版本号断言失败,排除既有失败后 480 项通过;PyQt5 离屏 UI 冒烟通过。
go vet
未执行真实 Admin + Android 真机完整联调,也未触发下单或付款。重测前需运行最新 Admin/Client,并确认 AI 服务商连接测试成功且处于启用状态。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
#256 只能形成真机候选观察。要在同一次采购中安全继续,Client 还需要通过专用 Gateway 幂等请求 Admin、持久化请求和解析结果、处理网络/AI失败,并在页面可能已经变化的情况下重新读取、精确选择返回候选。该流程发生在真实采购中,不能只在内存里临时替换任务尺码,也不能绕过任务原有安全门禁。
做什么 / 不做什么
AdminGateway、HTTP 和 Mock,实现 #254 的一次性规格解析命令。matched且字段、哈希、候选编号均通过本地校验时才准备继续。怎么做
resolve_purchase_spec(...),HTTP 和 Mock 使用完全相同 DTO、幂等及错误语义;更新双方契约测试。PurchaseTaskService在收到 #256 的结构化观察后进入purchase_resolve_options步骤,确认本次运行尚无不可���标记,再调用 Gateway。uncertain/rejected/failed和响应字段异常统一安全结束,并通过现有失败 Outbox 上报明确错误码。matched响应先持久化,再重新读取页面和候选;候选哈希不同、商品/颜色变化或候选不可点击时停止。预计修改文件:
client/src/admin_gateway.pyclient/src/http_admin_gateway.pyclient/src/mock_admin_gateway.pyclient/src/purchase_task_service.pyclient/src/task_repository.pyclient/src/task_models.pyclient/src/pdd_u2_purchase_adapter.pydocs/client/03-data-model.mddocs/client/06-quality-security.mddocs/task/<工单号>-client安全应用运行时规格解析.md验收标准
怎么验证
从
client/执行:使用 Mock 覆盖全部响应与崩溃点;使用脱敏 XML 验证页面变化。真实设备执行留给 #258,不作为普通自动测试。
风险和回退
2026-08-18 本地联调缺陷:规格解析超时预算不一致
已确认根因
HttpAdminGateway让登记、领取、结果提交和规格解析共用默认 3 秒超时。failed,Client 只看到ADMIN_TIMEOUT。这不是 PDD 页面或 Android 设备超时。purchase_resolve_options,没有进入不可逆阶段,不会造成重复订单。用户确认的修复���案
resolve_purchase_spec使用独立的 60 秒等待上限。matched / uncertain / rejected / failed;Client 超时后仍保持安全失败,不自动循环请求或重新下单。补充验收标准
ADMIN_TIMEOUT。开始实施。已确认依赖 #254、#255、#256 均已有实现提交。按工单分五层推进:先统一 Gateway DTO/HTTP/Mock,再新增独立 SQLite 解析记录和幂等复用,然后由
PurchaseTaskService捕获 #256 的结构化观察、发送前落库、单次调用 Admin,最后让 U2 Adapter 重新遍历并核对快照后精确点击原始候选。既有数量、价格、地址、不可逆标记、单次下单和核单门禁保持原路径;不会查询任务状态、无限重试、自动付款或把原始 XML/凭据写入数据库。#257 已完成实现并进入待验收。
实现结果
验证
pytest -q会收集test/与tools/同名脚本产生冲突;本次全量使用pytest test -q。提交与归档
afc1cdf719a86ebdf1f1bc65371c620c9e0c3964e5ac327d357934b72115171e6ee8de32f7cedaecdocs/task/257-client安全应用运行时规格解析.md工单保持打开,等待用户验收;验收通过后再关闭并同步父工单。
#258 联合契约审查发现 #257 的遗漏:
MockAdminGateway._validate_spec_observation尚未完整执行权威契约 §7.1 的字段长度/控制字符、observed_at时区、请求体 64 KiB,以及selected_color / target_size必须来自领取任务原规格的校验;真实 Admin 会拒绝这些请求,Mock 却可能接受。该修复仍属于本工单“HTTP 与 Mock 使用完全相同 DTO、幂等及错误语义”的原验收范围,不改变接口或采购结果。将补齐 Mock 校验和回归测试,单独提交引用 #257,然后返回 #258 的共享契约向量与端到端验收。
2026-08-18 实施完成:对齐跨端超时预算
根因与修复方案已补入本工单正文并完成实施。
resolve_purchase_spec使用 60 秒等待上限,其他 Admin 请求继续使用原短超时。提交:
6345b00(实现)、02be709(归档)。验证:Admin 的格式、全量测试、构建和
go vet全部通过;Client 定向 19 项通过,全量 500 项通过、2 项既有版本号断言失败,排除既有失败后 480 项通过;PyQt5 离屏 UI 冒烟通过。未执行真实 Admin + Android 真机完整联调,也未触发下单或付款。重测前需运行最新 Admin/Client,并确认 AI 服务商连接测试成功且处于启用状态。