diff --git a/docs/task/256-client采购尺码候选完整采集.md b/docs/task/256-client采购尺码候选完整采集.md new file mode 100644 index 0000000..668678a --- /dev/null +++ b/docs/task/256-client采购尺码候选完整采集.md @@ -0,0 +1,62 @@ +# 256 Client:采购尺码不匹配时完整采集真机候选 + +- 类型:需求 +- 父级大工单:#96 +- 所属 MVP / 版本:#253 +- 状态:已完成 +- 日期:2026-08-17 +- Gitea 工单: + +## 背景与目标 + +采购任务已经选中正确颜色,但目标尺码不在页面时,后续规格解析需要一份完整、 +可复核的当前颜色尺码候选。候选采集必须只读,并且不能把页面不完整、点击失败或 +候选不稳定误判成需要远端解析。 + +## 最终方案 + +采购 Adapter 复用 `PddCollectService` 已有的第二规格遍历,不另写一套滚动算法。 +采购候选模式要求确认遍历起点和终点;滚动中规格状态改变、页面丢失或达到上限时, +返回普通采购失败。 + +只有颜色已经可靠选中、尺码失败原因为 `target_not_visible`,并且完整列表中也不存在 +目标原文或唯一繁简等价文字时,才生成 `PddPurchaseSpecResolutionRequired`。内存快照 +保留规格名称、全部原文、可用状态和页面顺序;可购买项按顺序编号为 `c1`、`c2`,并按 +`spec-resolution-v1` 契约计算 SHA-256。不可购买项不进入待解析候选。 + +本工单不请求 Admin、不点击解析结果,也不把候选或控件树写入 SQLite、日志或文档。 + +## 改了哪些 + +- `client/src/pdd_collect_service.py`:开放严格、只读的第二规格候选遍历入口。 +- `client/src/pdd_purchase_adapter.py`:增加观察项、候选快照和待解析异常对象。 +- `client/src/pdd_u2_purchase_adapter.py`:接入候选采集门禁,并区分待解析与普通失败。 +- `client/test/test_pdd_collect_service.py`:验证公开入口复用原第二规格遍历。 +- `client/test/test_pdd_u2_purchase_adapter.py`:验证触发门禁、可用状态、编号、哈希和失败分流。 +- `docs/client/01-requirements.md`:补充采购尺码候选采集需求。 +- `docs/client/02-architecture.md`:记录复用边界、快照结构和职责分工。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 复用现有第二规格遍历,不复制滚动算法 | 通过 | +| 保留规格名称、原文、可用状态、页面顺序和稳定候选编号 | 通过 | +| 快照哈希符合 `spec-resolution-v1` 契约 | 通过 | +| 仅在颜色已选且目标确实不在完整列表时返回待解析结果 | 通过 | +| 扫描不完整、目标仍存在和未选颜色均按普通采购失败处理 | 通过 | +| 不调用 Admin、不点击解析结果、不持久化 XML 或候选 | 通过 | + +## 测试 + +- 执行的命令:`$env:PYTHONPATH='client'; C:/Python310/python.exe -m pytest client/test/test_pdd_u2_purchase_adapter.py client/test/test_pdd_collect_service.py -q` +- 结果:127 passed。 +- 执行的命令:`$env:PYTHONPATH='client'; C:/Python310/python.exe -m pytest client/test -q` +- 结果:480 passed,2 failed;失败是工作区版本号已为 `0.1.2`,两个旧测试仍固定期望 `0.1.0`,与本工单无关。 +- 执行的命令:`C:/Python310/python.exe -m py_compile client/src/pdd_purchase_adapter.py client/src/pdd_collect_service.py client/src/pdd_u2_purchase_adapter.py` +- 结果:通过。 +- **没验证到的部分**:未连接真机执行一次实际长尺码列表遍历;本工单使用模拟控件树和设备行为验证。 + +## 相关提交 + +- `58dc902` feat: 完整采集采购尺码候选 (#256)