Client:兼容无维度名摘要的纵向颜色列表归位 #268

Open
opened 2026-08-24 11:29:03 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#96(关联 Client Epic #1)
  • 所属 MVP / 版本:#97 真实采购首单闭环(不支付)
  • 阶段:规格面板纵向颜色选择
  • 关联工单:#230、#260、#264、#267

要解决什么

采购任务目标颜色为 寵粉誘惑-E01【一件】,PDD 控件树使用简体规格。现有 normalize_spec_text 已把目标归一化为 宠粉诱惑-e01【一件】,繁简比较本身正常;失败诊断为 selection_failure=target_not_visible。

现场只读检查发现,规格面板记住了上次位置,当前纵向颜色列表停在 E09~E16,目标 E01 位于列表顶部。当前“已选”摘要只包含已选颜色和尺码,不包含“颜色分类”字样。_needs_color_region_restore 要求摘要里出现颜色维度名称,因此没有触发归位;select_color 在颜色标题和目标都离屏时无法定位颜色区域,最终报“没有找到目标颜色”。

做什么 / 不做什么

  • 做:兼容“已选摘要不含颜色维度名称”的纵向颜色列表中部状态;用规格面板、唯一纵向滚动容器、第二规格标题以及标题上方多个候选卡片建立强结构证据;有证据时有界归位到颜色标题后,继续使用现有精确/唯一繁简等价匹配选择目标;补充中部归位、简繁匹配和误判保护测试。
  • 不做:不修改繁简转换规则;不做模糊颜色匹配;不按 E 编号猜测或点击;不无限滑动;不修改 Admin、数据库、AI、任务结构、不可逆标记、提交订单或付款逻辑。

已确认的实现方案

  • 修改 client/src/pdd_u2_purchase_adapter.py:
    • 保留现有“摘要包含颜色分类 + 第二规格标题”的归位证据。
    • 新增结构兜底:摘要以“已选/已选择”开头但不含维度名时,必须同时满足:存在第二规格标题;规格面板只有一个可靠纵向滚动容器;容器内第二规格标题上方存在至少两个完整、可见、可点击且非操作控件的规格卡片。
    • 结构证据成立才进入既有 _restore_purchase_panel_color_region 有界向顶部滑动;看到正式颜色标题和可靠颜色选项后停止。
    • 证据不足时不滑动、不点击,维持安全失败。
  • client/src/util/select_color_size.py 的 Windows LCMapStringEx 繁简归一化和唯一候选规则保持不变;目标原文仍用于显示、点击确认和审计。
  • 修改 client/test/test_pdd_u2_purchase_adapter.py:覆盖纵向列表停在 E09~E16、摘要不含“颜色分类”、归位后出现简体 E01 并与繁体目标匹配;覆盖单规格尺码面板、候选不足和多个滚动容器不触发归位。
  • 同步 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

验收标准

  • 目标繁体、PDD 规格简体时继续使用现有唯一繁简等价匹配。
  • 纵向颜色列表停在中部且摘要不含“颜色分类”时,满足强结构证据后能有界归位到颜色标题。
  • 归位后看到目标 E01 时,只点击唯一的目标颜色卡片并确认选中。
  • 单规格尺码面板、候选不足、滚动容器不唯一或页面证据不足时不触发颜色归位。
  • 归位达到稳定边界仍没有颜色标题时安全停止,不循环滑动或猜测点击。
  • 既有横向、纵向、多行网格颜色选择和 #267 规格返回流程保持通过。
  • 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_select_color_size.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

真机验收只允许观察规格面板归位、唯一颜色点击和选中确认;继续采购时仍执行既有数量、价格、不可逆标记和单次提交门禁,绝不付款。

风险和回退

风险是把单规格尺码列表或页面其他 RecyclerView 误当颜色列表。结构兜底必须同时满足唯一面板滚动容器、第二规格标题、标题上方多个规格卡片和已选摘要;任一证据缺失即不滑动。回退为删除结构兜底,恢复原安全失败;不涉及数据迁移,也不得通过放宽文字近似匹配回退。

## 基本信息 - 类型:缺陷 - 父级大工单:#96(关联 Client Epic #1) - 所属 MVP / 版本:#97 真实采购首单闭环(不支付) - 阶段:规格面板纵向颜色选择 - 关联工单:#230、#260、#264、#267 ## 要解决什么 采购任务目标颜色为 `寵粉誘惑-E01【一件】`,PDD 控件树使用简体规格。现有 `normalize_spec_text` 已把目标归一化为 `宠粉诱惑-e01【一件】`,繁简比较本身正常;失败诊断为 `selection_failure=target_not_visible`。 现场只读检查发现,规格面板记住了上次位置,当前纵向颜色列表停在 E09~E16,目标 E01 位于列表顶部。当前“已选”摘要只包含已选颜色和尺码,不包含“颜色分类”字样。`_needs_color_region_restore` 要求摘要里出现颜色维度名称,因此没有触发归位;`select_color` 在颜色标题和目标都离屏时无法定位颜色区域,最终报“没有找到目标颜色”。 ## 做什么 / 不做什么 - 做:兼容“已选摘要不含颜色维度名称”的纵向颜色列表中部状态;用规格面板、唯一纵向滚动容器、第二规格标题以及标题上方多个候选卡片建立强结构证据;有证据时有界归位到颜色标题后,继续使用现有精确/唯一繁简等价匹配选择目标;补充中部归位、简繁匹配和误判保护测试。 - 不做:不修改繁简转换规则;不做模糊颜色匹配;不按 E 编号猜测或点击;不无限滑动;不修改 Admin、数据库、AI、任务结构、不可逆标记、提交订单或付款逻辑。 ## 已确认的实现方案 - 修改 `client/src/pdd_u2_purchase_adapter.py`: - 保留现有“摘要包含颜色分类 + 第二规格标题”的归位证据。 - 新增结构兜底:摘要以“已选/已选择”开头但不含维度名时,必须同时满足:存在第二规格标题;规格面板只有一个可靠纵向滚动容器;容器内第二规格标题上方存在至少两个完整、可见、可点击且非操作控件的规格卡片。 - 结构证据成立才进入既有 `_restore_purchase_panel_color_region` 有界向顶部滑动;看到正式颜色标题和可靠颜色选项后停止。 - 证据不足时不滑动、不点击,维持安全失败。 - `client/src/util/select_color_size.py` 的 Windows `LCMapStringEx` 繁简归一化和唯一候选规则保持不变;目标原文仍用于显示、点击确认和审计。 - 修改 `client/test/test_pdd_u2_purchase_adapter.py`:覆盖纵向列表停在 E09~E16、摘要不含“颜色分类”、归位后出现简体 E01 并与繁体目标匹配;覆盖单规格尺码面板、候选不足和多个滚动容器不触发归位。 - 同步 `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] 目标繁体、PDD 规格简体时继续使用现有唯一繁简等价匹配。 - [x] 纵向颜色列表停在中部且摘要不含“颜色分类”时,满足强结构证据后能有界归位到颜色标题。 - [x] 归位后看到目标 E01 时,只点击唯一的目标颜色卡片并确认选中。 - [x] 单规格尺码面板、候选不足、滚动容器不唯一或页面证据不足时不触发颜色归位。 - [x] 归位达到稳定边界仍没有颜色标题时安全停止,不循环滑动或猜测点击。 - [x] 既有横向、纵向、多行网格颜色选择和 #267 规格返回流程保持通过。 - [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_select_color_size.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 ``` 真机验收只允许观察规格面板归位、唯一颜色点击和选中确认;继续采购时仍执行既有数量、价格、不可逆标记和单次提交门禁,绝不付款。 ## 风险和回退 风险是把单规格尺码列表或页面其他 RecyclerView 误当颜色列表。结构兜底必须同时满足唯一面板滚动容器、第二规格标题、标题上方多个规格卡片和已选摘要;任一证据缺失即不滑动。回退为删除结构兜底,恢复原安全失败;不涉及数据迁移,也不得通过放宽文字近似匹配回退。
Author
Owner

实施完成,等待用户验收

  • 实现提交:ad9f4e6
  • 归档提交:d2acbd8
  • 归档:docs/task/268-兼容无维度名摘要的纵向颜色列表归位.md
  • 定向测试:83 项通过
  • 离屏 UI:通过(输出 OK)
  • Client 全量测试:532 项通过、2 项失败;失败均为现有 version.py=0.1.2 与旧测试期待 0.1.0 的基线差异,与 #268 无关
  • 当前真实设备控件树只读判定:RESTORE_REQUIRED=True,未滑动、未点击
  • 真机未验证:尚未执行真实纵向归位和 E01 点击;未执行真实下单

工单保持开启,待用户真机验收后关闭并同步父工单。

## 实施完成,等待用户验收 - 实现提交:`ad9f4e6` - 归档提交:`d2acbd8` - 归档:`docs/task/268-兼容无维度名摘要的纵向颜色列表归位.md` - 定向测试:83 项通过 - 离屏 UI:通过(输出 `OK`) - Client 全量测试:532 项通过、2 项失败;失败均为现有 `version.py=0.1.2` 与旧测试期待 `0.1.0` 的基线差异,与 #268 无关 - 当前真实设备控件树只读判定:`RESTORE_REQUIRED=True`,未滑动、未点击 - 真机未验证:尚未执行真实纵向归位和 E01 点击;未执行真实下单 工单保持开启,待用户真机验收后关闭并同步父工单。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/cmautobuy#268