高风险:删除 #188 采购规格已保存匹配门禁 enforcePersistedMatch(B 类) #191

Open
opened 2026-09-01 16:50:14 +08:00 by ila · 0 comments
Owner

原始需求摘要

用户 2026-09-01 明确指示:「彻底删掉 #188 的 enforcePersistedMatch」。该决定在被两次提示风险后由用户重申。配套工单见 #190(A 类低风险摩擦项)。

目标

移除 enforcePersistedMatch,使 SYB 商品列表与批量创建采购不再要求「规格映射已保存且命中当前可售 SKU 组合」。

当前事实(代码)

server/app/goauto/purchase/batch.go:483-521 定义 enforcePersistedMatch,在 batch.go:114 附近被调用,拦截三种情况:

  1. source == "unresolved" → 「规格尚未匹配并保存,请先完成 AI 匹配或人工确认」
  2. len(combinations) == 0 → 「缺少当前 PDD 商品的完整可售 SKU 组合,请先重新采集」
  3. !validSKUCombination(...) → 「已保存规格映射不属于当前可售的 PDD 规格组合,请重新匹配」

该函数由 #188 引入(提交 776db13、4a1b4af)。删除后,previewFromDataset 中的临时 DeterministicMatch 结果即可直接进入采购流程。

方案

  • 删除 enforcePersistedMatch 函数及其调用点
  • 同步删除或改写 batch_spec_match_test.go、batch_test.go 中依赖该门禁的用例
  • 保留 validSKUCombination:ai_match_eligibility.go 仍在使用

明确记录:本次移除的保护

删除后,服务端不再校验「即将采购的颜色/尺码在当前 PDD 商品上确实存在且可售」。

残留风险为采购到错误规格的商品,且该动作不可逆(真实下单、真实付款)。AGENTS.md 禁止 Agent 端猜测或复核规格,因此删除后该校验在系统中无任何其他位置执行。

此为用户明确决策,非实施疏漏,在此留档。

待确认(未纳入范围)

是否在批量创建确认弹窗中,把每条即将采购的 MappedColor / MappedSize 明文列出供人工过目?不阻断流程,仅提供下单前最后一次人工核对。用户尚未答复,暂不纳入本单范围;如需要则追加或另建工单。

前置依赖与并行

  • 建议在 #190 之后实施(两者改动 batch.go 同一区域)

子项目影响

  • server/:app/goauto/purchase 包
  • web/:仅在采纳上述「待确认」项时涉及

设计证据

纯服务端门禁移除,不强制 UI 原型。若后续采纳确认弹窗展示,则需截图确认。

风险

高风险。属 AGENTS.md 定义的「创建订单」类不可逆操作,实施前需再次等待人工确认。

验收

  • 曾被三种 PURCHASE_SPEC_MAPPING_REQUIRED 文案拦截的明细可直接创建采购任务
  • 已支付订单、未结束任务、重采购授权、价格上限四项门禁行为完全不变
  • 相关测试用例已按新行为改写,无残留失败

验证

  • .\scripts\verify.ps1 -Component all

文档影响

  • docs/03-business-rules-and-glossary.md:必须更新,规格匹配是已记录的业务规则
  • docs/12-syb-erp-interface.md:可能涉及(该文件当前工作区已有未提交改动,本单不触碰)
  • 需走一轮 Wiki 更新 + 在线回读 + sync + sync --check
## 原始需求摘要 用户 2026-09-01 明确指示:「彻底删掉 #188 的 `enforcePersistedMatch`」。该决定在被两次提示风险后由用户重申。配套工单见 #190(A 类低风险摩擦项)。 ## 目标 移除 `enforcePersistedMatch`,使 SYB 商品列表与批量创建采购不再要求「规格映射已保存且命中当前可售 SKU 组合」。 ## 当前事实(代码) `server/app/goauto/purchase/batch.go:483-521` 定义 `enforcePersistedMatch`,在 `batch.go:114` 附近被调用,拦截三种情况: 1. `source == "unresolved"` → 「规格尚未匹配并保存,请先完成 AI 匹配或人工确认」 2. `len(combinations) == 0` → 「缺少当前 PDD 商品的完整可售 SKU 组合,请先重新采集」 3. `!validSKUCombination(...)` → 「已保存规格映射不属于当前可售的 PDD 规格组合,请重新匹配」 该函数由 #188 引入(提交 776db13、4a1b4af)。删除后,`previewFromDataset` 中的临时 `DeterministicMatch` 结果即可直接进入采购流程。 ## 方案 - 删除 `enforcePersistedMatch` 函数及其调用点 - 同步删除或改写 `batch_spec_match_test.go`、`batch_test.go` 中依赖该门禁的用例 - **保留** `validSKUCombination`:`ai_match_eligibility.go` 仍在使用 ## 明确记录:本次移除的保护 删除后,服务端不再校验「即将采购的颜色/尺码在当前 PDD 商品上确实存在且可售」。 残留风险为**采购到错误规格的商品,且该动作不可逆(真实下单、真实付款)**。`AGENTS.md` 禁止 Agent 端猜测或复核规格,因此删除后该校验在系统中**无任何其他位置执行**。 此为用户明确决策,非实施疏漏,在此留档。 ## 待确认(未纳入范围) 是否在批量创建确认弹窗中,把每条即将采购的 `MappedColor` / `MappedSize` 明文列出供人工过目?不阻断流程,仅提供下单前最后一次人工核对。**用户尚未答复,暂不纳入本单范围**;如需要则追加或另建工单。 ## 前置依赖与并行 - 建议在 #190 之后实施(两者改动 `batch.go` 同一区域) ## 子项目影响 - `server/`:`app/goauto/purchase` 包 - `web/`:仅在采纳上述「待确认」项时涉及 ## 设计证据 纯服务端门禁移除,不强制 UI 原型。若后续采纳确认弹窗展示,则需截图确认。 ## 风险 **高风险**。属 `AGENTS.md` 定义的「创建订单」类不可逆操作,**实施前需再次等待人工确认**。 ## 验收 - [ ] 曾被三种 `PURCHASE_SPEC_MAPPING_REQUIRED` 文案拦截的明细可直接创建采购任务 - [ ] 已支付订单、未结束任务、重采购授权、价格上限四项门禁行为完全不变 - [ ] 相关测试用例已按新行为改写,无残留失败 ## 验证 - `.\scripts\verify.ps1 -Component all` ## 文档影响 - `docs/03-business-rules-and-glossary.md`:**必须更新**,规格匹配是已记录的业务规则 - `docs/12-syb-erp-interface.md`:可能涉及(该文件当前工作区已有未提交改动,本单不触碰) - 需走一轮 Wiki 更新 + 在线回读 + `sync` + `sync --check`
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#191