用途
本技能用于审计本仓库技能与根提示词的交付面完整性。其定位是“机械化演进回路”的选择端:变异端产出新规则候选,选择端判断哪条候选更好;本技能只做选择端中机械可证的部分,把“哪条规则需要修”从模型的意见换成脚本的退出码。技能的核心立论是:凡不能被一条命令复现的“改进建议”,一律不产生 finding。
触发条件
- 独立调用(主路径):用户或智能体显式执行全量审计(7 技能 + 根提示词),可用
--skills缩窄范围。 - goal-loop P5 增量挂载:交付归档阶段复查本次交付触及的
skills/<n>/,不做全量扫描。
结构性排除(不适用):评价“这个技能该不该存在”“职责是否重叠”“设计是否过重”,因其无客观信号;评价判据阈值本身是否合理(如“1000 行是否应为 800 行”)。
硬不变式
- 零 LLM、零网络:判定器不得调用任何模型,不得访问网络;同一份输入永远得到同一份输出。
- 只读:采集与判定不修改任何文件,修改由人类裁决后另行发起。
- 事实与发现分离:采集器只回答“是什么”,判定器才回答“哪里不对”;二者分属不同进程,禁止合并。
- 人类裁决不外判:报告由判定器写到“人类裁决”标题即停止;任何由模型代填的裁决内容均视为门禁违规(GI-4 断言防护)。
使用方式
快速开始:
python3 skills/spec-evolution/scripts/collect-facts.py --out /tmp/facts.json
python3 skills/spec-evolution/scripts/judge.py --facts /tmp/facts.json \
--json /tmp/findings.json --report /tmp/report.md
echo "exit=$?" # 0 = 无 BLOCKER/HIGH;1 = 存在 BLOCKER/HIGH;2 = 用法或输入错误
缩窄范围(P5 增量复查时用于缩短耗时):
python3 skills/spec-evolution/scripts/collect-facts.py --no-gates --skills goal-loop,doc-governance --out /tmp/facts.json
注意:--no-gates 会跳过 S1 门禁事实采集,因而 C-09 在本轮不执行;报告对该项输出“未采集门禁事实 —— C-09 未执行”而非“无失败”,退出码也不再反映既有门禁状态。放行前的最终复查必须不带 --no-gates。
判据
| ID | 判据 | 严重度 |
|---|---|---|
| C-01 | 技能无 tests/ 或其中无 test_*.py | HIGH |
| C-02 | 技能无架构设计书 docs/explanation/architecture/<n>-design.md | MID |
| C-03 | 技能交付面缺 references/ / scripts/ / templates/,或存在但为空 | MID |
| C-04 | description 字符数 > 500(软性建议值,非硬限) | MID |
| C-05 | description 字符数 ≥ 1024(Agent Skills 规范硬限) | HIGH |
| C-06 | 单文件行数 > 1000 | MID |
| C-07 | 技能在 4 个注册面中存在缺登记 | HIGH |
| C-08 | 技能内存在跨技能相对链接 | HIGH |
| C-09 | 既有门禁任一非零退出 | BLOCKER |
| C-10 | 根提示词相对基线净增长 | MID |
十条判据的完整定义、严重度语义与已知表达上限见 references/checks-spec.md。
锚点契约
每条 finding 携带可被人直接核验的锚点。锚点路径不存在时判定器自身报错退出 2(防锚点幻觉)。三种形式与校验规则见 references/anchor-contract.md。
退出码
| 码 | 含义 |
|---|---|
| 0 | 无 BLOCKER/HIGH(可含 MID advisory;C-09 未采集时该项不参与判定) |
| 1 | 存在 BLOCKER/HIGH |
| 2 | 用法或输入错误(含锚点路径不存在 = 锚点幻觉) |
权威定义在 scripts/judge.py 与 references/checks-spec.md。
红线
- 不得自动修复 finding——那会让本技能沦为“自动改自己规则的规则”,即 ball of mud 的机器化版本。
- 不得往
contexts/AGENTS.md增加条款——该文件准入判据禁止净增长。 - 不得把本技能接入 CI 或引入第三方依赖。