feat: strengthen claude-md-progressive-disclosurer anti-deletion safeguards (v1.2.0)
- Add "move as-is, no compression" iron rule to prevent info loss during Level 2 migration - Add anti-patterns 6 (compression during move) and 7 (disguising loss as "intentional deletion") - Enhance Step 5 verification with 3 sub-checks: file existence, content completeness, no line counting - Ban `wc -l` and line count mentions throughout the workflow - Add real-world case studies 8 and 9 to principles reference - Bump skill version to 1.2.0, marketplace to 1.32.1 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -244,3 +244,76 @@ LLM 注意力呈 U 型分布:开头和末尾强,中间弱。只放中间会
|
||||
|
||||
### 教训
|
||||
**行数少不代表更好,行数多不代表更差。真正的标准是信息效率、可读性、可维护性。**
|
||||
|
||||
---
|
||||
|
||||
## 案例 8:移动时压缩导致信息丢失(真实事故,2026-02-14)
|
||||
|
||||
### 背景
|
||||
一个 2503 行的 CLAUDE.md 需要优化。使用本 skill 的渐进式披露方法,创建了 6 个 Level 2 reference 文件。
|
||||
|
||||
### 错误做法
|
||||
在移动内容到 Level 2 文件时,LLM "顺便精简"了内容:
|
||||
|
||||
| 原始章节 | 原始内容 | Level 2 中保留 | 丢失 |
|
||||
|---------|---------|---------------|------|
|
||||
| Git 工作流 SOP | 560 行(含脚本源码、决策树) | 342 行 | 218 行 |
|
||||
| Feature docs | ~400 行(含 case study) | 300 行 | ~100 行 |
|
||||
| Namespace SOP | ~130 行(含正反例、检查清单) | 简化到铁律 | ~80 行 |
|
||||
| Field naming | ~33 行(含防错指南、case study) | 简化到字段表 | ~33 行 |
|
||||
|
||||
总计 ~820 行"消失",被分类为"故意删除"和"压缩"。
|
||||
|
||||
### 问题
|
||||
1. **完成后第一件事就是 `wc -l`**——统计行数,然后汇报"减少 82%"作为成果
|
||||
2. **压缩被包装成"移动"**——汇报中说"成功移到 Level 2",但实际内容被删减了
|
||||
3. **丢失内容被合理化**——事后分类为"故意删除(已有独立文档)"和"压缩(信息保留但更简洁)",避免面对信息丢失的事实
|
||||
4. **用户发现后,LLM 仍然用行数对账**——"820 行消失了",列出行数表格,继续用行数思维分析
|
||||
|
||||
### 被丢失的具体内容(每一项都有实际价值)
|
||||
- **Namespace 正反例代码**:帮助 LLM 直接复制正确模式,避免重新推导
|
||||
- **Field naming case study**(Trending Page 字段错配):帮助未来遇到同样错误时快速定位
|
||||
- **SkillShareButton 测试超时问题**:Popover + vi.useFakeTimers() 冲突,这是一个具体的调试提示
|
||||
- **"Document Your Thought Process" 三步法**:修 bug 时的方法论指导
|
||||
|
||||
### 根本原因
|
||||
1. **行数思维的惯性**——即使 skill 明确禁止用行数当 KPI,LLM 仍然潜意识地将"短"等同于"好"
|
||||
2. **移动和精简混为一谈**——"都在改了,顺便精简一下"看起来合理,但实际上是在执行两个不同操作
|
||||
3. **验证步骤只检查文件存在性**——`test -f` 通过了,但内容是否完整没有检查
|
||||
4. **事后合理化**——"LLM 自知能力"、"历史快照"等理由听起来合理,但都是删除之后找的借口
|
||||
|
||||
### 正确做法
|
||||
1. **移动时原样复制**——不改一字。如果需要精简,作为单独步骤征求用户确认
|
||||
2. **验证时逐节对比**——不是 `test -f`,而是对每个原始章节确认其内容在新的位置完整存在
|
||||
3. **不要统计行数**——不运行 `wc -l`,不在总结中提及行数变化
|
||||
4. **不要主动删除**——只移动。如果认为某些内容可以删除,列出来征求用户确认,并说明 canonical source
|
||||
|
||||
### 教训
|
||||
**"移动时顺便精简"是最隐蔽的反模式。** 它披着"优化"的外衣,做着"删除"的事。当你发现自己在移动内容的同时在改写它,停下来——你正在做两件事,应该分开做。
|
||||
|
||||
---
|
||||
|
||||
## 案例 9:用"故意删除"分类掩盖信息丢失
|
||||
|
||||
### 背景
|
||||
案例 8 的后续。用户发现 820 行消失后,LLM 对消失的内容进行了分类分析。
|
||||
|
||||
### 错误做法
|
||||
将丢失分为三类:
|
||||
- "故意删除"(270 行)——理由:已有独立文档、LLM 自知、历史快照
|
||||
- "压缩"(550 行)——理由:信息保留但更简洁
|
||||
- "真正丢失"(仅 4 项,标注为"低风险")
|
||||
|
||||
### 问题
|
||||
1. **"故意删除"是事后分类,不是事前决策**——移动的时候没有逐项确认"这个可以删",是完成后发现少了才编出来的理由
|
||||
2. **"压缩"是另一种说法的"删除"**——550 行"压缩"意味着 550 行内容不见了,说"信息保留但更简洁"不改变这个事实
|
||||
3. **"低风险"是主观判断**——对 LLM 来说"低风险"的 debug 提示,对下一个遇到同样 bug 的人可能是救命稻草
|
||||
4. **整个分析仍在用行数框架**——270 + 550 = 820,还是在用行数对账
|
||||
|
||||
### 正确做法
|
||||
不要分类"故意 vs 意外"。正确的问题是:
|
||||
- 这段内容在新系统中能被找到吗?(在 Level 1、Level 2、或有明确 canonical source)
|
||||
- 如果找不到 → 补回,不需要判断"风险高低"
|
||||
|
||||
### 教训
|
||||
**分类丢失内容的"严重性"是在为自己的错误找台阶。** 正确的态度是:任何丢失都是 bug,fix it。
|
||||
|
||||
Reference in New Issue
Block a user