修复 SYB 规格顺序颠倒并重建受污染导入规格 #216

Open
opened 2026-09-04 19:16:09 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:缺陷修复
  • 所属范围:采购 MVP
  • 阶段:待验收
  • 前置工单:#215;本单以其“真机探测后按角色封闭匹配”为验证入口。
  • Gitea 交互:当前会话无项目 Gitea MCP,按规则回退 Gitea API;凭据仅从安全配置读取。

原始需求与事实

用户于 2026-09-04 反馈:SYB 订单 2609045BU9XFDW 规格为“均碼 / 黑色”,PDD 当次候选为颜色“黑色”、尺码“均码”,本地任务 cg69 第一趟探测后提示没有找到可采购的颜色或尺码;用户授权单独建工单后实施。

只读核对确认:原始 productSpec=均碼,黑色;旧解析器固定按“逗号前=颜色、逗号后=尺码”,保存成颜色“均碼”、尺码“黑色”,并把错误角色合并进虾皮档案。#215 按角色封闭匹配,因而正确拒绝跨维度选择。确定性比较会繁转简;AI 和 Android 点击保留 PDD 原始标签,简繁不是根因。

目标与方案

  1. SYB 两段规格在有明确、唯一尺码角色证据时支持 颜色,尺码 与 尺码,颜色 两种顺序;证据冲突时 fail-closed。
  2. 保守识别均码、字母尺码和明确尺码单位;不以模糊颜色词库猜测。
  3. 提供幂等迁移,只修复非人工确认、按新规则得到明确不同角色的 SYB 行,不改 raw_json。
  4. 对受影响虾皮商品从当前 SYB 成功/人工确认事实重建 source=import 的颜色/尺码值;保留非导入来源、人工映射及其他人工字段。
  5. 不改写已终态采购任务;数据修复后由既有重试/重建流程创建新任务。

非目标与安全边界

  • 不修改 AI 封闭候选规则,不允许跨角色、相近值或猜测。
  • 不修改 Android,不使用 OCR/VLM,不保存控件树或截图。
  • 不改历史采购 attempt 或订单;不创建采购任务、不运行真机采购、不改地址、不创建订单、不付款。
  • 数据迁移属高风险;用户已明确授权本工单实施。执行前精确限定记录,使用事务和幂等测试。

验收标准

  • 均碼,黑色 => 颜色“黑色”、尺码“均碼”、success。
  • 白色,L【备注】 保持颜色“白色”、尺码“L”。
  • 冲突证据不静默交换。
  • 迁移跳过人工确认、保留 raw_json、重复执行一致。
  • 虾皮档案清除错误 import 角色且保留人工/非导入值和映射。
  • sybimport、迁移、purchase、aimatching 测试及 Server 构建通过。
  • 严格模板、diff 检查、提交、推送及工单回写完成;保持待验收。

文档影响

长期 SYB productSpec 解析规则变化,更新 Wiki SYB-ERP-Interface,在线回读 revision 后执行一次 sync 和一次 sync --check。标准流程不创建任务快照。

## 基本信息 - 类型:缺陷修复 - 所属范围:采购 MVP - 阶段:待验收 - 前置工单:#215;本单以其“真机探测后按角色封闭匹配”为验证入口。 - Gitea 交互:当前会话无项目 Gitea MCP,按规则回退 Gitea API;凭据仅从安全配置读取。 ## 原始需求与事实 用户于 2026-09-04 反馈:SYB 订单 `2609045BU9XFDW` 规格为“均碼 / 黑色”,PDD 当次候选为颜色“黑色”、尺码“均码”,本地任务 `cg69` 第一趟探测后提示没有找到可采购的颜色或尺码;用户授权单独建工单后实施。 只读核对确认:原始 `productSpec=均碼,黑色`;旧解析器固定按“逗号前=颜色、逗号后=尺码”,保存成颜色“均碼”、尺码“黑色”,并把错误角色合并进虾皮档案。#215 按角色封闭匹配,因而正确拒绝跨维度选择。确定性比较会繁转简;AI 和 Android 点击保留 PDD 原始标签,简繁不是根因。 ## 目标与方案 1. SYB 两段规格在有明确、唯一尺码角色证据时支持 `颜色,尺码` 与 `尺码,颜色` 两种顺序;证据冲突时 fail-closed。 2. 保守识别均码、字母尺码和明确尺码单位;不以模糊颜色词库猜测。 3. 提供幂等迁移,只修复非人工确认、按新规则得到明确不同角色的 SYB 行,不改 raw_json。 4. 对受影响虾皮商品从当前 SYB 成功/人工确认事实重建 `source=import` 的颜色/尺码值;保留非导入来源、人工映射及其他人工字段。 5. 不改写已终态采购任务;数据修复后由既有重试/重建流程创建新任务。 ## 非目标与安全边界 - 不修改 AI 封闭候选规则,不允许跨角色、相近值或猜测。 - 不修改 Android,不使用 OCR/VLM,不保存控件树或截图。 - 不改历史采购 attempt 或订单;不创建采购任务、不运行真机采购、不改地址、不创建订单、不付款。 - 数据迁移属高风险;用户已明确授权本工单实施。执行前精确限定记录,使用事务和幂等测试。 ## 验收标准 - [ ] `均碼,黑色` => 颜色“黑色”、尺码“均碼”、success。 - [ ] `白色,L【备注】` 保持颜色“白色”、尺码“L”。 - [ ] 冲突证据不静默交换。 - [ ] 迁移跳过人工确认、保留 raw_json、重复执行一致。 - [ ] 虾皮档案清除错误 import 角色且保留人工/非导入值和映射。 - [ ] `sybimport`、迁移、`purchase`、`aimatching` 测试及 Server 构建通过。 - [ ] 严格模板、diff 检查、提交、推送及工单回写完成;保持待验收。 ## 文档影响 长期 SYB `productSpec` 解析规则变化,更新 Wiki `SYB-ERP-Interface`,在线回读 revision 后执行一次 `sync` 和一次 `sync --check`。标准流程不创建任务快照。
Author
Owner

实施完成,待验收

已按用户 2026-09-04 授权完成 #216;未创建采购任务、未执行真机采购、未修改地址、未创建订单、未付款。

实现

  • sybimport.Parse 不再固定认为逗号前是颜色:两侧恰好一侧具有明确尺码证据时,以该侧作为尺码,支持 颜色,尺码 和 尺码,颜色;两侧都像尺码时保持 uncertain。
  • 不使用颜色词库、AI 或跨维度候选猜测角色;PDD 原始候选和 Android 精确点击标签仍不改写。
  • 新增幂等角色修复:只处理未人工确认且新旧值构成严格对调的 SYB 行,保留原始 raw_json 和历史采购任务。
  • 虾皮档案只删除已经没有可靠 SYB 行引用、且没有映射的旧 source=import 错误角色值;人工规格、映射和其他档案字段保留。
  • 真实迁移反馈发现复杂颜色包含 + 时应纠正角色但保持 uncertain,增加第二个幂等补充迁移覆盖已经执行首版迁移的本地环境。

本地迁移与运行验证

  • 已执行迁移版本:1787984000000、1787984100000。
  • 共修复 15 条严格反序 SYB 明细、10 个关联虾皮档案;人工确认行未更新;明确反序剩余数为 0。
  • 订单 2609045BU9XFDW 当前为颜色 黑色、尺码 均碼、success;关联虾皮档案同样为颜色 黑色、尺码 均碼。
  • 原任务 cg69 继续保持终态失败,目标快照和 attempt 历史未改写。
  • 本地 goauto-admin-api 已由 Supervisor 重启并稳定运行;迁移重复启动安全跳过。

自动验证

通过:

  • go test -count=1 ./app/goauto/sybimport ./cmd/migrate/migration/version-local ./app/goauto/purchase ./app/goauto/aimatching
  • go build ./...
  • python dev_scripts/harness.py check --strict
  • git diff --check 与 staged diff 检查
  • Wiki sync 和 sync --check

Wiki

  • SYB-ERP-Interface-Contract 已更新双顺序解析、安全回填和原始标签规则。
  • 在线回读 revision:ad9adc22e69e48c9a8fd87d7121066eecca55fd6。
  • 同步时同时补齐线上已有、当前分支尚未落盘的核心只读镜像修订。

Git

  • 分支:fix/216-syb-spec-role-order
  • 提交:bd386cf fix(syb): 修正规格颜色尺码反序 (#216)
  • 已推送:origin/fix/216-syb-spec-role-order

验收说明

修复后需要通过既有重试/重建入口为该 SYB 明细创建新采购任务;cg69 不会原地复活。创建新采购任务及其后续真机 live 下单属于高风险动作,本工单没有自动执行。

工单保持 open / 待验收。

## 实施完成,待验收 已按用户 2026-09-04 授权完成 #216;未创建采购任务、未执行真机采购、未修改地址、未创建订单、未付款。 ### 实现 - `sybimport.Parse` 不再固定认为逗号前是颜色:两侧恰好一侧具有明确尺码证据时,以该侧作为尺码,支持 `颜色,尺码` 和 `尺码,颜色`;两侧都像尺码时保持 `uncertain`。 - 不使用颜色词库、AI 或跨维度候选猜测角色;PDD 原始候选和 Android 精确点击标签仍不改写。 - 新增幂等角色修复:只处理未人工确认且新旧值构成严格对调的 SYB 行,保留原始 `raw_json` 和历史采购任务。 - 虾皮档案只删除已经没有可靠 SYB 行引用、且没有映射的旧 `source=import` 错误角色值;人工规格、映射和其他档案字段保留。 - 真实迁移反馈发现复杂颜色包含 `+` 时应纠正角色但保持 `uncertain`,增加第二个幂等补充迁移覆盖已经执行首版迁移的本地环境。 ### 本地迁移与运行验证 - 已执行迁移版本:`1787984000000`、`1787984100000`。 - 共修复 15 条严格反序 SYB 明细、10 个关联虾皮档案;人工确认行未更新;明确反序剩余数为 0。 - 订单 `2609045BU9XFDW` 当前为颜色 `黑色`、尺码 `均碼`、`success`;关联虾皮档案同样为颜色 `黑色`、尺码 `均碼`。 - 原任务 `cg69` 继续保持终态失败,目标快照和 attempt 历史未改写。 - 本地 `goauto-admin-api` 已由 Supervisor 重启并稳定运行;迁移重复启动安全跳过。 ### 自动验证 通过: - `go test -count=1 ./app/goauto/sybimport ./cmd/migrate/migration/version-local ./app/goauto/purchase ./app/goauto/aimatching` - `go build ./...` - `python dev_scripts/harness.py check --strict` - `git diff --check` 与 staged diff 检查 - Wiki `sync` 和 `sync --check` ### Wiki - `SYB-ERP-Interface-Contract` 已更新双顺序解析、安全回填和原始标签规则。 - 在线回读 revision:`ad9adc22e69e48c9a8fd87d7121066eecca55fd6`。 - 同步时同时补齐线上已有、当前分支尚未落盘的核心只读镜像修订。 ### Git - 分支:`fix/216-syb-spec-role-order` - 提交:`bd386cf` `fix(syb): 修正规格颜色尺码反序 (#216)` - 已推送:`origin/fix/216-syb-spec-role-order` ### 验收说明 修复后需要通过既有重试/重建入口为该 SYB 明细创建新采购任务;`cg69` 不会原地复活。创建新采购任务及其后续真机 live 下单属于高风险动作,本工单没有自动执行。 工单保持 open / 待验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#216