Client:安全兼容采购规格繁简体唯一匹配 #251

Open
opened 2026-08-17 15:14:38 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2
  • 阶段:采购规格安全匹配与诊断

要解决什么

最新采购任务 cg44 在 PDD 规格面板中实际存在目标颜色,但 Admin 下发繁体规格名,PDD 无障碍控件树显示简体规格名。Client 当前只做大小写无关的严格字符串比较,不能识别繁简等价文字,横向扫描约 11.6 秒后错误返回 PURCHASE_OPTIONS_MISMATCH / target_not_visible。

同时,选色函数返回 False 后才在性能计时上下文外抛错,导致 purchase_select_color 日志错误记录为 succeeded。尺码路径存在同类问题。

复现:

  1. Admin 创建真实采购任务,规格值使用繁体中文。
  2. PDD 商品规格面板显示对应简体中文选项。
  3. Client 能打开规格面板并扫描颜色,但无法匹配,任务在不可逆阶段前失败。

做什么 / 不做什么

  • 做:采购颜色和尺码比较增加 Windows 原生繁体转简体规范化,不新增第三方依赖。
  • 做:原始文字完全相等时保持现有优先级;只有规范化后唯一匹配才允许点击。
  • 做:同一页面存在多个规范化等价点击候选时明确返回歧义失败,绝不猜测。
  • 做:点击后仍使用最新控件树确认选中状态。
  • 做:让选色、选尺码失败在性能计时阶段内记录为 failed。
  • 做:补充繁简颜色、繁简尺码、重复候选、原有精确匹配和计时结果测试。
  • 不做:不修改 Admin 接口、数据库结构、任务状态、地址规则、价格/数量复核、不可逆门禁和下单逻辑;不付款。
  • 不做:不使用编辑距离、包含关系或其他模糊匹配。

怎么做

  • 在 client/src/util/select_color_size.py 增加可单测的规格文字规范化函数:
    • 先执行 Unicode NFKC 和现有空白/大小写处理;
    • Windows 下调用 LCMapStringEx(..., LCMAP_SIMPLIFIED_CHINESE, ...) 转为简体比较键;
    • 非 Windows 环境安全退化为 Unicode 规范化,生产 Client 仍固定运行于 Windows。
  • 保留原始标签用于点击与诊断,不修改 Admin 原始 payload 和 SQLite 保存值。
  • 将匹配到的点击边界去重;规范化后出现多个不同安全点击边界时返回稳定歧义原因,不选择任意一个。
  • 在 client/src/pdd_u2_purchase_adapter.py 为颜色和尺码选择失败生成准确诊断,并把失败抛出移入对应性能阶段。
  • 预计修改:
    • client/src/util/select_color_size.py
    • client/src/pdd_u2_purchase_adapter.py
    • client/test/test_select_color_size.py
    • client/test/test_pdd_u2_purchase_adapter.py

验收标准

  • 繁体目标颜色能唯一匹配并选中 PDD 简体颜色。
  • 繁体目标尺码能唯一匹配并选中 PDD 简体尺码。
  • 原有完全一致的颜色、尺码仍按原逻辑选择。
  • 规范化后存在多个不同候选时停止采购并返回明确歧义错误,不点击任何候选。
  • 不使用包含关系或编辑距离,不把相似规格误当目标。
  • 颜色或尺码选择返回失败时,对应性能阶段记录为 failed。
  • 失败保持在不可逆阶段前,不进入地址、提交或付款。
  • 采购规格专项测试和 Client 全量测试通过,既有无关失败单独说明。

怎么验证

从 client/ 执行:

C:/Python310/python.exe -m py_compile src/util/select_color_size.py src/pdd_u2_purchase_adapter.py
C:/Python310/python.exe -m pytest test/test_select_color_size.py test/test_pdd_u2_purchase_adapter.py -q --disable-warnings
C:/Python310/python.exe -m pytest test -q --disable-warnings

真机验收:创建尚未进入不可逆阶段的新采购任务,Admin 规格使用繁体、PDD 页面显示唯一简体等价项;确认正确选择颜色和尺码。歧义固件只做 Fake Device 测试,不真机试单。

风险���回退

  • 风险:繁简转换可能让两个不同原文得到同一比较键;必须要求安全点击边界唯一,否则停止。
  • 风险:Windows API 调用失败;安全退化为现有 Unicode 严格匹配,不允许宽松猜测。
  • 风险:属于真实采购下单前步骤;自动测试只使用 Fake Device/XML,不连接真机、不创建订单。
  • 回退:移除繁简比较键,恢复原严格匹配;采购安全门禁、地址和不可逆状态不受影响。
## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 - 阶段:采购规格安全匹配与诊断 ## 要解决什么 最新采购任务 cg44 在 PDD 规格面板中实际存在目标颜色,但 Admin 下发繁体规格名,PDD 无障碍控件树显示简体规格名。Client 当前只做大小写无关的严格字符串比较,不能识别繁简等价文字,横向扫描约 11.6 秒后错误返回 `PURCHASE_OPTIONS_MISMATCH / target_not_visible`。 同时,选色函数返回 `False` 后才在性能计时上下文外抛错,导致 `purchase_select_color` 日志错误记录为 `succeeded`。尺码路径存在同类问题。 复现: 1. Admin 创建真实采购任务,规格值使用繁体中文。 2. PDD 商品规格面板显示对应简体中文选项。 3. Client 能打开规格面板并扫描颜色,但无法匹配,任务在不可逆阶段前失败。 ## 做什么 / 不做什么 - 做:采购颜色和尺码比较增加 Windows 原生繁体转简体规范化,不新增第三方依赖。 - 做:原始文字完全相等时保持现有优先级;只有规范化后唯一匹配才允许点击。 - 做:同一页面存在多个规范化等价点击候选时明确返回歧义失败,绝不猜测。 - 做:点击后仍使用最新控件树确认选中状态。 - 做:让选色、选尺码失败在性能计时阶段内记录为 `failed`。 - 做:补充繁简颜色、繁简尺码、重复候选、原有精确匹配和计时结果测试。 - 不做:不修改 Admin 接口、数据库结构、任务状态、地址规则、价格/数量复核、不可逆门禁和下单逻辑;不付款。 - 不做:不使用编辑距离、包含关系或其他模糊匹配。 ## 怎么做 - 在 `client/src/util/select_color_size.py` 增加可单测的规格文字规范化函数: - 先执行 Unicode NFKC 和现有空白/大小写处理; - Windows 下调用 `LCMapStringEx(..., LCMAP_SIMPLIFIED_CHINESE, ...)` 转为简体比较键; - 非 Windows 环境安全退化为 Unicode 规范化,生产 Client 仍固定运行于 Windows。 - 保留原始标签用于点击与诊断,不修改 Admin 原始 payload 和 SQLite 保存值。 - 将匹配到的点击边界去重;规范化后出现多个不同安全点击边界时返回稳定歧义原因,不选择任意一个。 - 在 `client/src/pdd_u2_purchase_adapter.py` 为颜色和尺码选择失败生成准确诊断,并把失败抛出移入对应性能阶段。 - 预计修改: - `client/src/util/select_color_size.py` - `client/src/pdd_u2_purchase_adapter.py` - `client/test/test_select_color_size.py` - `client/test/test_pdd_u2_purchase_adapter.py` ## 验收标准 - [ ] 繁体目标颜色能唯一匹配并选中 PDD 简体颜色。 - [ ] 繁体目标尺码能唯一匹配并选中 PDD 简体尺码。 - [ ] 原有完全一致的颜色、尺码仍按原逻辑选择。 - [ ] 规范化后存在多个不同候选时停止采购并返回明确歧义错误,不点击任何候选。 - [ ] 不使用包含关系或编辑距离,不把相似规格误当目标。 - [ ] 颜色或尺码选择返回失败时,对应性能阶段记录为 `failed`。 - [ ] 失败保持在不可逆阶段前,不进入地址、提交或付款。 - [ ] 采购规格专项测试和 Client 全量测试通过,既有无关失败单独说明。 ## 怎么验证 从 `client/` 执行: ```powershell C:/Python310/python.exe -m py_compile src/util/select_color_size.py src/pdd_u2_purchase_adapter.py C:/Python310/python.exe -m pytest test/test_select_color_size.py test/test_pdd_u2_purchase_adapter.py -q --disable-warnings C:/Python310/python.exe -m pytest test -q --disable-warnings ``` 真机验收:创建尚未进入不可逆阶段的新采购任务,Admin 规格使用繁体、PDD 页面显示唯一简体等价项;确认正确选择颜色和尺码。歧义固件只做 Fake Device 测试,不真机试单。 ## 风险���回退 - 风险:繁简转换可能让两个不同原文得到同一比较键;必须要求安全点击边界唯一,否则停止。 - 风险:Windows API 调用失败;安全退化为现有 Unicode 严格匹配,不允许宽松猜测。 - 风险:属于真实采购下单前步骤;自动测试只使用 Fake Device/XML,不连接真机、不创建订单。 - 回退:移除繁简比较键,恢复原严格匹配;采购安全门禁、地址和不可逆状态不受影响。
Author
Owner

实施完成,等待真机验收

最终实现

  • 使用 Windows 原生 LCMapStringEx 生成简体规格比较键,不新增依赖。
  • 原文精确匹配保持最高优先级;繁简规范化后只有唯一安全点击边界时才允许点击。
  • 同一卡片的外层与文字边界会合并;多个不同等价候选返回 target_ambiguous,不点击。
  • 颜色和尺码共用安全匹配规则,点击后仍读取最新控件树确认选中。
  • 颜色、尺码选择失败现在在对应性能阶段内抛出,日志正确记录为 failed。
  • 未修改 Admin、SQLite、任务状态、地址、价格数量复核、不可逆门禁和下单流程。

验证

  • Python 语法检查:通过。
  • 规格选择与采购 Adapter 专项:60 项全部通过。
  • Client 全量:478 项中 476 项通过。
  • 2 项既有失败仍是当前版本 0.1.2 与旧测试固定期待 0.1.0 不一致,与 #251 无关。
  • 当前真机控件树只读验证:cg44 的繁体目标可以唯一定位到简体颜色卡片;未执行点击、地址修改、下单或付款。

提交与归档

  • 实现提交:134514e
  • 归档提交:b11a586
  • 归档:docs/task/251-安全兼容采购规格繁简体唯一匹配.md

当前状态:代码已完成,等待用户用新的、尚未进入不可逆阶段的采购任务真机验收。Epic #1 和 MVP #2 的 #251 清单暂保持未勾选。

## 实施完成,等待真机验收 ### 最终实现 - 使用 Windows 原生 `LCMapStringEx` 生成简体规格比较键,不新增依赖。 - 原文精确匹配保持最高优先级;繁简规范化后只有唯一安全点击边界时才允许点击。 - 同一卡片的外层与文字边界会合并;多个不同等价候选返回 `target_ambiguous`,不点击。 - 颜色和尺码共用安全匹配规则,点击后仍读取最新控件树确认选中。 - 颜色、尺码选择失败现在在对应性能阶段内抛出,日志正确记录为 `failed`。 - 未修改 Admin、SQLite、任务状态、地址、价格数量复核、不可逆门禁和下单流程。 ### 验证 - Python 语法检查:通过。 - 规格选择与采购 Adapter 专项:60 项全部通过。 - Client 全量:478 项中 476 项通过。 - 2 项既有失败仍是当前版本 `0.1.2` 与旧测试固定期待 `0.1.0` 不一致,与 #251 无关。 - 当前真机控件树只读验证:cg44 的繁体目标可以唯一定位到简体颜色卡片;未执行点击、地址修改、下单或付款。 ### 提交与归档 - 实现提交:`134514e` - 归档提交:`b11a586` - 归档:`docs/task/251-安全兼容采购规格繁简体唯一匹配.md` 当前状态:代码已完成,等待用户用新的、尚未进入不可逆阶段的采购任务真机验收。Epic #1 和 MVP #2 的 #251 清单暂保持未勾选。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#251