用途
本技能用于测试任意技能(skill)的指令质量。做法是:在一个真实任务上逐字遵循该技能的指令流程,记录每一处指令无法指导下一步操作的地方,并修复其根本原因。
触发边界——在以下情况使用本技能:
- 测试某个技能的指令是否完整、无歧义
- 在发布前审计技能的指令质量
- 在真实任务上运行技能流程以试用(dogfood)该技能
- 收到“令人困惑或不完整”的反馈后改进技能
- 验证对技能指令的修复是否真正解决了原有摩擦
不适用于:
- 从零构建新技能(应使用 build-skills)
- 评估技能输出质量(应使用评估套件)
- 审查拉取请求中的代码变更(应使用 review-pr)
- 与技能指令无关的一般文档改进
主要能力
- 逐字执行技能指令,抑制领域知识,凡指令未明确说明之处均记为摩擦点
- 在真实、非平凡任务上测试,以触发分支逻辑、错误处理和交叉引用
- 为每个脱轨点分配编号(F-01、F-02……)和 P0/P1/P2 严重度
- 收集证据并计算指标:尝试步骤总数、干净通过数、P0/P1/P2 数量
- 构建脱轨密度图,显示哪个工作流阶段摩擦最多
- 为每个摩擦点标注根本原因代码
- 撰写结构化脱轨记录报告
- 直接修复技能源文件,而非创建勘误文件
- 修复后使用 grep 一致性检查和路由完整性检查进行验证
使用方式
必需工作流:
-
选择测试对象和任务:选定要测试的技能(含 SKILL.md 及可选 references)和一个真实、有代表性、在技能触发边界内的测试任务。任务须真正在技能范围内、足够复杂以走完整个工作流、且在当前环境可执行。记录测试元数据:被测技能、测试任务、日期、方法。
-
预扫描技能:完整阅读 SKILL.md,记录总步骤数、分支点、交叉引用;列出 references/ 目录树;列出外部依赖(工具、MCP 服务器、API);记录技能声明的触发边界。此步骤不执行任何操作,仅作定位。
-
逐字执行(核心循环):对技能工作流中的每一步,只读当前步骤、不提前看后续;仅使用技能中提供的信息尝试执行;记录结果——干净通过、脱轨(无法仅凭指令确定下一步,记为摩擦点)、或使用了隐含知识(能执行但依赖未说明的知识,记为较低严重度摩擦点)。每个脱轨点按格式记录:F-[NN] — 标题(P[0-2])、发生了什么、指令说了什么、缺失或含糊之处、修复建议。严重度分配规则见 references/friction-classification.md。
-
收集证据:完成所有步骤后计算指标(尝试步骤总数、干净通过数、P0/P1/P2 数量),构建脱轨密度图,并为每个摩擦点标注根本原因代码(见 references/root-cause-taxonomy.md)。
-
撰写脱轨记录:将报告写入项目根目录的 derail-notes/NN-dogfood-[topic].md,结构包含:标题、日期、被测技能、测试任务、方法、摩擦点(按阶段/步骤分组)、表现良好之处、优先级汇总表。
-
应用修复:修复优先级为所有 P0、然后所有 P1、时间允许再 P2。对每个摩擦点直接修改技能源文件。修复须就地、自包含、最小化。修复模式见 references/fix-patterns.md。
-
验证修复:术语一致性(grep 过时术语)、路由完整性(确认每个引用文件仍可从 SKILL.md 到达)、交叉引用一致性(文档间无矛盾)、大小约束(SKILL.md 仍少于 500 行)、无回归(修复未引入新歧义)。示例验证命令:
grep -r "old_term" skills/[skill-name]/ # should be zero find skills/[skill-name]/references -type f -name "*.md" | while read f; do grep -q "$(basename "$f" .md)" skills/[skill-name]/SKILL.md || echo "ORPHAN: $f" done wc -l skills/[skill-name]/SKILL.md # should be under 500
- 可选:重跑测试。黄金标准是在修复后的技能上用不同任务重跑测试。新脱轨点写入新的 derail-notes 文件(02-dogfood-[topic].md)。跨运行比较指标以验证改进。
决策规则
- 若技能没有 references,只测试 SKILL.md 步骤
- 若脱轨实际是外部工具的 bug(而非指令问题),记录但标记为 external,不为他人的 bug 修改技能
- 若 3 个以上 P1 聚集在同一步骤,将该聚集视为复合 P0
- 若技能引用了其他技能,只测试当前技能的指令,不测试被引用技能的工作流
- 若发现技能的触发边界有误(在错误查询上触发),记为摩擦点并单独标记为触发问题
适用场景
- 技能发布前的指令质量审计
- 在真实任务上试用技能并记录摩擦
- 根据“令人困惑或不完整”的反馈改进技能
- 验证修复是否解决原有摩擦
限制与护栏
- 不要跳过预扫描,否则会把“按设计工作”误判为脱轨
- 不要在未阅读根本原因分类法的情况下修复摩擦点,否则问题会复发
- 不要创建勘误文件,修复直接进入源文件
- 不要在缺少“表现良好之处”部分的情况下宣布测试完成
- 不要用同一任务重跑测试,每次运行使用不同的代表性任务
- 不要测试正在构建中的技能,先用 build-skills 构建再测试
输出契约(按此顺序交付):测试元数据、预扫描摘要、摩擦点登记表(F-01 至 F-NN,含严重度和根本原因)、脱轨密度图、表现良好之处、优先级汇总表、已应用修复(哪个文件、哪个摩擦点)、验证结果。
参考路由:references/friction-classification.md(分配严重度时读)、references/root-cause-taxonomy.md(标注根本原因代码时读)、references/fix-patterns.md(匹配修复模式时读)、references/metrics-and-iteration.md(跨多次运行跟踪改进时读)、references/adaptation-domains.md(将脱轨测试应用于非技能指令集如 runbook、SOP、API 文档时读)。
最终检查:脱轨记录文件存在于 derail-notes/NN-dogfood-[topic].md;每个摩擦点有 ID、严重度和根本原因代码;所有 P0 修复已应用;所有 P1 修复已应用(或附理由推迟);存在“表现良好之处”部分;存在优先级汇总表;验证 grep 显示零过时术语;路由完整性确认无孤立引用文件;被测技能的 SKILL.md 修复后仍少于 500 行。