test(server): sybimport 12 个用例断言 #272/#274 已变更的旧契约 #285

Open
opened 2026-09-15 14:21:25 +08:00 by ila · 1 comment
Owner

原始需求

来源:2026-09-15 部署 #275~#280 前的线上核对,作为相邻问题单独记录,不混入当前任务。

问题

app/goauto/sybimport 有 12 个失败用例,自 be03972(2026-09-14 已部署上线)起持续为红。它们断言的是 #272/#274 故意改变的旧契约,属于测试未随实现更新,不是实现缺陷。

失败清单:

TestRepairReversedSpecRolesKeepsAmbiguousColorUncertain
TestScheduledAIParseConfirmsClosedCandidatesAndDoesNotRepeat
TestScheduledAIParseLeavesLowConfidenceUnmatchedForSameFingerprint
TestScheduledAIParseRetriesProviderFailureAtMostThreeTimes
TestApplyDetailOnlyMergesSuccessfullyParsedSpecIntoArchive
TestParseRealSample_AmbiguousColorWithAnnotationAndSeparator
TestParseNoSeparatorIsUncertainNotFailed
TestParseBothSidesEmptyAfterStrippingIsUncertain
TestReparseUpdatesStatusWhenRuleImproves
TestManualCorrectMergesIntoArchiveLikeASuccessfulParse
TestReimportPreservesIdenticalAIInputAndInvalidatesChangedSource
TestServiceListFiltersByOrderCodesShopAndParseStatus

两类原因

  1. uncertain 语义已移除:#272(aed295c)在落库前把 uncertain 降级为 failed,迁移 1789200000000 并把线上 syb_product.parse_status 的 check 约束收窄为 ('success','failed')。仍断言 uncertain 的用例必然失败。
  2. 解析结果变化:#274(e0ed05d、b83f20c)改变了单维度判定。以 TestScheduledAIParse* 为例,夹具 seedAIParseCandidate(..., "黑色 XL") 过去解析为 uncertain 所以能进 AI 队列,现在解析为 success 不再是候选,于是 provider calls=0, want 3。

为什么单独建单

按 AGENTS.md「新发现的相邻问题记录或另建工单,不混入当前任务」。更正这些断言需要先确定 #272/#274 期望的新契约(例如「逗号两侧均像尺码」现在应判 failed 还是别的),这属于该工单作者的判断;由无关工单替其猜测并写死断言,比保持红色更有害。

风险

该包目前没有有效的回归保护。任何后续改动都无法通过「测试是否变红」判断是否破坏了既有行为,只能靠逐个比对失败集合。

验收

  • 逐条确认每个用例期望的新契约,更新断言或替换夹具。
  • go test ./app/goauto/sybimport/... 全绿。
  • 不通过删除用例或降低断言强度来"变绿"。

文档影响

如确认新契约与 Wiki 业务规则页面记载不一致,一并更新。

## 原始需求 来源:2026-09-15 部署 #275~#280 前的线上核对,作为相邻问题单独记录,不混入当前任务。 ## 问题 `app/goauto/sybimport` 有 12 个失败用例,自 `be03972`(2026-09-14 已部署上线)起持续为红。它们断言的是 #272/#274 **故意改变**的旧契约,属于测试未随实现更新,不是实现缺陷。 失败清单: ``` TestRepairReversedSpecRolesKeepsAmbiguousColorUncertain TestScheduledAIParseConfirmsClosedCandidatesAndDoesNotRepeat TestScheduledAIParseLeavesLowConfidenceUnmatchedForSameFingerprint TestScheduledAIParseRetriesProviderFailureAtMostThreeTimes TestApplyDetailOnlyMergesSuccessfullyParsedSpecIntoArchive TestParseRealSample_AmbiguousColorWithAnnotationAndSeparator TestParseNoSeparatorIsUncertainNotFailed TestParseBothSidesEmptyAfterStrippingIsUncertain TestReparseUpdatesStatusWhenRuleImproves TestManualCorrectMergesIntoArchiveLikeASuccessfulParse TestReimportPreservesIdenticalAIInputAndInvalidatesChangedSource TestServiceListFiltersByOrderCodesShopAndParseStatus ``` ## 两类原因 1. **`uncertain` 语义已移除**:#272(`aed295c`)在落库前把 `uncertain` 降级为 `failed`,迁移 `1789200000000` 并把线上 `syb_product.parse_status` 的 check 约束收窄为 `('success','failed')`。仍断言 `uncertain` 的用例必然失败。 2. **解析结果变化**:#274(`e0ed05d`、`b83f20c`)改变了单维度判定。以 `TestScheduledAIParse*` 为例,夹具 `seedAIParseCandidate(..., "黑色 XL")` 过去解析为 `uncertain` 所以能进 AI 队列,现在解析为 `success` 不再是候选,于是 `provider calls=0, want 3`。 ## 为什么单独建单 按 `AGENTS.md`「新发现的相邻问题记录或另建工单,不混入当前任务」。更正这些断言需要先确定 #272/#274 **期望**的新契约(例如「逗号两侧均像尺码」现在应判 `failed` 还是别的),这属于该工单作者的判断;由无关工单替其猜测并写死断言,比保持红色更有害。 ## 风险 该包目前没有有效的回归保护。任何后续改动都无法通过「测试是否变红」判断是否破坏了既有行为,只能靠逐个比对失败集合。 ## 验收 - [ ] 逐条确认每个用例期望的新契约,更新断言或替换夹具。 - [ ] `go test ./app/goauto/sybimport/...` 全绿。 - [ ] 不通过删除用例或降低断言强度来"变绿"。 ## 文档影响 如确认新契约与 Wiki 业务规则页面记载不一致,一并更新。
Author
Owner

状态更新(2026-09-15)

本工单记录的 12 个失败用例在今日上线(1d01186,发布 20260915-1d01186)后依然存在且数量不变。

#284 修复 parse.go 时逐条 diff 了失败集合,前后完全一致(12 → 12),未新增、未减少。因此本工单的范围与清单保持有效。

[必须] 该包目前没有有效的回归保护。#284 只能通过「比对失败集合是否变化」来证明自己没有破坏既有行为,这不是测试应有的工作方式。在本工单收尾前,app/goauto/sybimport 的任何改动都需要同样的人工比对。

## 状态更新(2026-09-15) 本工单记录的 12 个失败用例在今日上线(`1d01186`,发布 `20260915-1d01186`)后**依然存在且数量不变**。 #284 修复 `parse.go` 时逐条 diff 了失败集合,前后完全一致(12 → 12),未新增、未减少。因此本工单的范围与清单保持有效。 `[必须]` 该包目前没有有效的回归保护。#284 只能通过「比对失败集合是否变化」来证明自己没有破坏既有行为,这不是测试应有的工作方式。在本工单收尾前,`app/goauto/sybimport` 的任何改动都需要同样的人工比对。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#285