Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion .spec/knowledge/lessons.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,18 @@ metadata:

## 条目

(暂无;从第一条复发问题开始。)
### 上游裁决点名更正某条事实时,同节其余「现状实测」陈述必须一并复跑

- 日期:2026-08-29
- 现象:R-00259 设计文档 §6.1「现状(实测)」是 2026-08-28 一次性写下的快照。TD 裁决只点名其中「generated 包 TFM 为 `net8.0`」一条要改;执行更正时按段落复跑,发现同节「6 包 8 个 `.cs` 计 437 行、无类型本体、无 validator」同样已被架构仓 ADR-048 推翻(实为 11 文件 1772 行,含闭合契约类型本体与可执行 gate)。**同一类漏检在本卡上出现三次、分属三个角色**:交付方写入时未标注快照批次;QA 核销只核被点名项;TD 复核表把「generated 面 6 包」判为「✅ 属实」——只核了包数,放过同节 catalog-only 口径,而后者才影响设计结论。
- 根因:「某处被发现失真」被当成关于**那一句**的信号,实际是关于**该段落维护状态**的信号。同批写下的陈述出自同一次快照,一句过期,其余大概率同样过期。
- 规避:更正任何「现状 / 实测 / 截至 <日期>」类陈述时,**以段落为单位复跑,不以被点名的句子为单位**;复跑输出贴进证据,并把该段落的日期戳与上游锚点(commit SHA)一并更新。只改被点名句而保留旧日期戳 = 给过期内容盖新章。
- 来源:R-00259 更正交付(提交 `9c6e592`);TD 总调度追认,并同步落架构仓 `.spec/knowledge/lessons.md`。

### 「一直没出过问题」有两种原因——守护有效,或根本没机会触发

- 日期:2026-08-29
- 现象:**首现,非复发**(收录理由见「来源」)。R-00259 §7 的 S3 验收项③「不引用 `Lumio.Gen.*` 有架构测试」,原始理由是「generated 包单 `net8.0`,`netstandard2.1` 目标无法引用」。架构仓改双 TFM 后该理由消失,裁决据此问「这条验收项是否该删」。默认直觉是「前提没了 → 约束多余」,实际相反:此前即使无人写这个测试,`netstandard2.1` 目标也物理引用不到,约束一直由环境**免费执行**;双 TFM 后两个目标都能引用,这条分层纪律的唯一兜底才第一次真正落到该测试上。
- 根因:把「约束从未被违反」读成「约束不必要」,忽略它可能一直由环境(编译期屏障、权限、拓扑)代为执行。环境一变,免费执行消失,约束才第一次需要被真正执行。
- 规避:删除任何「从未触发过」的守护前,先回答一句——**它这些年是拦住过什么,还是没机会拦?** 若是后者,且原先代为执行的环境条件正在改变,则该守护不是变多余,而是变更必要;判断依据写进文档或卡面,不留在讨论里。
- 来源:R-00259 §6.2-2 / §7 更正(提交 `9c6e592`),TD 总调度评价「反直觉且正确」并收进核销评论;用户 2026-08-29 明确要求收录。本条属首现,破例记录;若三次内未被复用,按本文档「防噪音」准入原则清出。
Loading