Client:AI 规格返回后先选尺码再核对完整组合 #267

Open
opened 2026-08-18 14:13:45 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:缺陷修订
  • 父级大工单:#96(关联 Client Epic #1)
  • 所属 MVP / 版本:#253 采购运行时 AI 规格纠偏闭环
  • 阶段:阶段 5,真机规格上下文复核
  • 关联工单:#257、#260、#266

要解决什么

#266 通过“AI 返回后先恢复颜色区域”消除了颜色节点滑出控件树造成的误判,但会在已经位于尺码区域时强制回到颜色区域,之后重新遍历尺码并再次查找返回尺码,步骤重复。任务要求的颜色、目标尺码、该颜色下候选快照和 Admin 返回结果已经记录;当前是否仍在规格面板可以由页面类型、尺码候选、数量和确认控件共同判断,不应把颜色节点当前可见作为规格面板存在的必要条件。

仍须区分历史记录与当前状态:记录“曾经选中颜色”不能代替提交前的最新规格复核。最终方案是在尺码区域复算候选、选择 AI 返回尺码,再从最新“已选”摘要一次核对颜色和尺码;摘要不完整时才恢复颜色区域兜底。任何无法确认都在不可逆阶段前停止。

做什么 / 不做什么

  • 做:AI 返回后保持当前尺码上下文;先确认规格面板并重新完整读取候选、复算哈希;直接选择返回尺码;使用最新控件树一次核对目标颜色和返回尺码;仅当尺码已确认而颜色因摘要缺失或截断无法确认时,有界恢复颜色区域兜底;更新诊断和测试。
  • 不做:不把内存或数据库记录当成当前选中证据;不移除最终颜色复核;不允许近似规格;不改变 Admin 接口、AI 结果、数据库结构、数量价格门禁、不可逆标记、单次提交或付款规则。

已确认的实现方案

  • 修改 client/src/pdd_u2_purchase_adapter.py 的 apply_resolved_size:
    1. 先用页面级组合语义确认仍为 order_confirmation,颜色节点无需在当前视口。
    2. 在当前规格面板重新完整读取第二规格候选并比对维度、候选原文和快照哈希。
    3. 不预先调用 _restore_purchase_panel_color_region,从最新尺码上下文选择 Admin 返回的原文尺码。
    4. 点击后读取最新 XML,必须先确认返回尺码明确选中。
    5. 同一 XML 能确认目标颜色时直接完成;不能确认时才调用 _restore_purchase_panel_color_region,并用返回的最新 XML 兜底确认颜色。
    6. 兜底后仍不能确认目标颜色,返回 PURCHASE_SPEC_CONTEXT_CHANGED;恢复失败沿用 PURCHASE_PANEL_COLOR_REGION_NOT_FOUND。所有失败都发生在不可逆标记之前。
  • 保留任务目标、PurchaseSpecCandidateSnapshot、SQLite 规格解析请求/结果中的颜色、目标尺码、候选和实际采用尺码记录;这些记录用于一致性比对和审计,不单独作为当前页面证据。
  • 修改 client/test/test_pdd_u2_purchase_adapter.py:覆盖完整摘要无需回到颜色、摘要缺失后一次兜底恢复、明确换色安全停止、候选变化不点击、返回尺码未确认安全停止。
  • 同步 docs/client/06-quality-security.md。

预计修改文件:

  • client/src/pdd_u2_purchase_adapter.py
  • client/test/test_pdd_u2_purchase_adapter.py
  • docs/client/06-quality-security.md

验收标准

  • AI 返回后,当前视口只有尺码区域时仍能识别规格确认页并复算候选,不要求颜色节点可见。
  • 候选快照一致后选择 Admin 返回的原文尺码,不因颜色节点离屏提前失败。
  • 最新“已选”摘要同时确认颜色和尺码时,不滚回颜色区域。
  • 尺码明确选中但颜色摘要不完整时,只执行一次有界颜色区域兜底复核。
  • 明确换色、颜色无法确认、返回尺码未选中、候选变化或页面变化均在不可逆阶段前停止。
  • 任务原规格、候选快照、AI 结果和实际采用规格记录保持完整。
  • Python 3.10 语法检查、定向测试、Client 全量测试和离屏 UI 冒烟完成。

验证方式

从 client/ 目录执行:

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

真机验收观察颜色选择、尺码候选遍历、AI 返回尺码选择和最终组合复核;若进入真实提交,仍须遵守单次提交门禁且绝不付款。

风险和回退

风险是把历史选中记录误当当前页面事实,或在同色不同尺码候选相同的商品上漏掉换色。实现必须在选择返回尺码后核对最新页面中的完整组合;摘要不足才执行颜色兜底,任何无强证据状态均停止。回退恢复 #266 的“先恢复颜色再复核”流程,不涉及数据迁移,绝不能通过删除颜色复核回退。

## 基本信息 - 类型:缺陷修订 - 父级大工单:#96(关联 Client Epic #1) - 所属 MVP / 版本:#253 采购运行时 AI 规格纠偏闭环 - 阶段:阶段 5,真机规格上下文复核 - 关联工单:#257、#260、#266 ## 要解决什么 #266 通过“AI 返回后先恢复颜色区域”消除了颜色节点滑出控件树造成的误判,但会在已经位于尺码区域时强制回到颜色区域,之后重新遍历尺码并再次查找返回尺码,步骤重复。任务要求的颜色、目标尺码、该颜色下候选快照和 Admin 返回结果已经记录;当前是否仍在规格面板可以由页面类型、尺码候选、数量和确认控件共同判断,不应把颜色节点当前可见作为规格面板存在的必要条件。 仍须区分历史记录与当前状态:记录“曾经选中颜色”不能代替提交前的最新规格复核。最终方案是在尺码区域复算候选、选择 AI 返回尺码,再从最新“已选”摘要一次核对颜色和尺码;摘要不完整时才恢复颜色区域兜底。任何无法确认都在不可逆阶段前停止。 ## 做什么 / 不做什么 - 做:AI 返回后保持当前尺码上下文;先确认规格面板并重新完整读取候选、复算哈希;直接选择返回尺码;使用最新控件树一次核对目标颜色和返回尺码;仅当尺码已确认而颜色因摘要缺失或截断无法确认时,有界恢复颜色区域兜底;更新诊断和测试。 - 不做:不把内存或数据库记录当成当前选中证据;不移除最终颜色复核;不允许近似规格;不改变 Admin 接口、AI 结果、数据库结构、数量价格门禁、不可逆标记、单次提交或付款规则。 ## 已确认的实现方案 - 修改 `client/src/pdd_u2_purchase_adapter.py` 的 `apply_resolved_size`: 1. 先用页面级组合语义确认仍为 `order_confirmation`,颜色节点无需在当前视口。 2. 在当前规格面板重新完整读取第二规格候选并比对维度、候选原文和快照哈希。 3. 不预先调用 `_restore_purchase_panel_color_region`,从最新尺码上下文选择 Admin 返回的原文尺码。 4. 点击后读取最新 XML,必须先确认返回尺码明确选中。 5. 同一 XML 能确认目标颜色时直接完成;不能确认时才调用 `_restore_purchase_panel_color_region`,并用返回的最新 XML 兜底确认颜色。 6. 兜底后仍不能确认目标颜色,返回 `PURCHASE_SPEC_CONTEXT_CHANGED`;恢复失败沿用 `PURCHASE_PANEL_COLOR_REGION_NOT_FOUND`。所有失败都发生在不可逆标记之前。 - 保留任务目标、`PurchaseSpecCandidateSnapshot`、SQLite 规格解析请求/结果中的颜色、目标尺码、候选和实际采用尺码记录;这些记录用于一致性比对和审计,不单独作为当前页面证据。 - 修改 `client/test/test_pdd_u2_purchase_adapter.py`:覆盖完整摘要无需回到颜色、摘要缺失后一次兜底恢复、明确换色安全停止、候选变化不点击、返回尺码未确认安全停止。 - 同步 `docs/client/06-quality-security.md`。 预计修改文件: - `client/src/pdd_u2_purchase_adapter.py` - `client/test/test_pdd_u2_purchase_adapter.py` - `docs/client/06-quality-security.md` ## 验收标准 - [x] AI 返回后,当前视口只有尺码区域时仍能识别规格确认页并复算候选,不要求颜色节点可见。 - [x] 候选快照一致后选择 Admin 返回的原文尺码,不因颜色节点离屏提前失败。 - [x] 最新“已选”摘要同时确认颜色和尺码时,不滚回颜色区域。 - [x] 尺码明确选中但颜色摘要不完整时,只执行一次有界颜色区域兜底复核。 - [x] 明确换色、颜色无法确认、返回尺码未选中、候选变化或页面变化均在不可逆阶段前停止。 - [x] 任务原规格、候选快照、AI 结果和实际采用规格记录保持完整。 - [x] Python 3.10 语法检查、定向测试、Client 全量测试和离屏 UI 冒烟完成。 ## 验证方式 从 `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 ``` 真机验收观察颜色选择、尺码候选遍历、AI 返回尺码选择和最终组合复核;若进入真实提交,仍须遵守单次提交门禁且绝不付款。 ## 风险和回退 风险是把历史选中记录误当当前页面事实,或在同色不同尺码候选相同的商品上漏掉换色。实现必须在选择返回尺码后核对最新页面中的完整组合;摘要不足才执行颜色兜底,任何无强证据状态均停止。回退恢复 #266 的“先恢复颜色再复核”流程,不涉及数据迁移,绝不能通过删除颜色复核回退。
Author
Owner

实施完成,等待用户验收

  • 实现提交:39c6258
  • 归档提交:233ff16
  • 归档:docs/task/267-AI规格返回后先选尺码再核对完整组合.md
  • 定向测试:86 项通过
  • 离屏 UI:通过(输出 OK)
  • Client 全量测试:530 项通过、2 项失败;失败均为现有 version.py=0.1.2 与旧测试期待 0.1.0 的基线差异,与 #267 无关
  • 真机未验证:尚未验证长尺码列表、完整/不完整“已选”摘要和按需颜色兜底;未执行真实下单

#267 已取代 #266 的强制先恢复颜色顺序;工单保持开启,待用户真机验收后关闭并同步父工单。

## 实施完成,等待用户验收 - 实现提交:`39c6258` - 归档提交:`233ff16` - 归档:`docs/task/267-AI规格返回后先选尺码再核对完整组合.md` - 定向测试:86 项通过 - 离屏 UI:通过(输出 `OK`) - Client 全量测试:530 项通过、2 项失败;失败均为现有 `version.py=0.1.2` 与旧测试期待 `0.1.0` 的基线差异,与 #267 无关 - 真机未验证:尚未验证长尺码列表、完整/不完整“已选”摘要和按需颜色兜底;未执行真实下单 #267 已取代 #266 的强制先恢复颜色顺序;工单保持开启,待用户真机验收后关闭并同步父工单。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#267