# #266 Client:修正规格候选遍历后的颜色复核顺序 - 工单号:#266 - 类型:缺陷修复 - 父级大工单:#96(关联 #1) - 所属 MVP:#253 - 状态:待验收 - 日期:2026-08-18 - Gitea: ## 背景与目标 Client 完整遍历 PDD 第二规格后,规格面板可能停在尺码列表末端,已选颜色因滑出当前无障碍控件树而暂时不可见。原实现先复核颜色、后恢复颜色区域,会把“暂时不可见”误报为 `PURCHASE_SPEC_CONTEXT_CHANGED`。本任务调整安全复核顺序,同时保留颜色、页面、候选快照和最终选中门禁。 ## 最终方案 - Admin 返回规格解析结果后,先确认页面仍为规格确认页。 - 使用既有有界手势恢复颜色区域,并使用恢复函数返回的最新控件树复核目标颜色。 - 颜色仍明确选中才重新完整读取尺码候选、复算候选快照并点击返回尺码。 - 无法恢复颜色区域时返回 `PURCHASE_PANEL_COLOR_REGION_NOT_FOUND`;恢复后目标颜色没有选中证据时仍返回 `PURCHASE_SPEC_CONTEXT_CHANGED`。 - 不跳过颜色复核,不改变 Admin 接口、AI 结果、不可逆标记或单次提交规则。 ## 改了哪些文件 - `client/src/pdd_u2_purchase_adapter.py` - `client/test/test_pdd_u2_purchase_adapter.py` - `docs/client/06-quality-security.md` 实现提交:`b0cddb9` ## 验收结果 - [x] 颜色节点仅因第二规格遍历滑出控件树时,先恢复颜色区域再复核。 - [x] 恢复后重新读取控件树,并继续使用繁简体归一化后的强选中证据。 - [x] 明确换色仍返回 `PURCHASE_SPEC_CONTEXT_CHANGED`,不会点击返回尺码。 - [x] 无法恢复颜色区域时返回 `PURCHASE_PANEL_COLOR_REGION_NOT_FOUND`,不会读取候选或点击尺码。 - [x] 页面、候选快照和最终尺码选中门禁保持不变。 - [x] 全部操作仍发生在不可逆标记之前。 ## 测试 在 `client/` 目录执行: ```powershell C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_adapter.py C:/Python310/python.exe -m pytest -q test/test_pdd_u2_purchase_adapter.py test/test_purchase_task_service.py C:/Python310/python.exe -m pytest -q test $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 ``` 结果: - 语法检查通过。 - 定向测试 84 项全部通过。 - Client 全量测试 528 项通过、2 项失败;失败是工作区现有 `src/version.py` 为 `0.1.2`,两项旧测试仍期待 `0.1.0`,与本任务无关。 - 离屏 UI 冒烟打印 `OK`。 未验证到的部分:未在真实 Android 设备上复现长尺码列表后的颜色区域恢复;未执行真实规格点击、提交订单或付款。