feat(skill): 技能治理 v0.2 —— 分桶/调用模式/校验/安全/清单/安装矩阵

- 新增 SCOPE.md 收录门槛 + .out-of-scope/ 拒绝档案
- 生命周期分桶 promoted/beta/deprecated,marketplace 只发布 promoted
- 调用模式 model-invoked/user-invoked(user-invoked 不占模型目录)
- 新增脚本 validate-skills.py / generate-catalog.py / scan-skill.sh(+allowlist)
- 新增 beta 技能 skill-creator、ai-proj-helper-entry、verification-before-completion(各带 evals)
- install-skills.sh: --agent dsh / --link / --audit / --include-beta / --no-validate
- 融合:dev-review 接收评审意见、req-design 依赖边、agent-swarm 并行编排、dev-test TDD
- catalog.json 61 个技能(58 promoted / 3 beta);validate 0 错误;scan 0 高危;现有测试通过
This commit is contained in:
johnQ
2026-10-31 22:03:13 +08:00
parent dde146995e
commit d43b414fc9
28 changed files with 1714 additions and 4 deletions
@@ -0,0 +1,55 @@
---
name: verification-before-completion
description: 汇报「完成/修好/通过」或关闭任务、提交 PR、宣布 REQ 完成之前,必须先运行验证命令并附证据;没有证据不得声称完成。当准备说完成、关闭任务、或汇报交付前使用。
metadata:
invocation: model-invoked
owner: qiudl
---
# 完成前验证
## 0. 一句话
**没有证据的「完成」不算完成。**
## 1. 何时用
- 准备说「搞定了 / 修好了 / 通过了 / 可以发了」
- 准备把任务标 `completed`、关 issue、提 PR
- 准备宣布 REQ 完成或可发布
- 收到「你确认一下」这类要求时
何时不用:还在探索阶段、明确记录的是中间发现(这时要写「未验证」而不是「完成」)。
## 2. 证据三件套
1. **命令**:原样可复制,别人能重跑
2. **输出关键行**:可读文本,不要只看截图
3. **判定**:退出码 / 通过数 / 失败数
格式:`验证:<命令> → <结果>(通过 N / 失败 M),证据:<日志路径或输出片段>`
## 3. 按类型的验证清单
| 改动类型 | 必须验证 |
| --- | --- |
| 代码改动 | 构建 + 单测 + 类型检查(有则跑) |
| bug 修复 | 先复现(证明坏)→ 修复 → 同一用例再跑(证明好) |
| 需求级交付 | 验收标准逐条打勾 + PDV 验收通过 |
| 发布/部署 | 健康检查 + E2E + 回滚预案可用 |
| 配置/文档 | 生效验证(如 `--dump-config` 结果、命令输出) |
| 数据变更 | 变更前后数据抽查 + 回滚脚本验证 |
## 4. 反模式
- 「应该可以」「本地没问题」「理论上过了」
- 只贴成功截图,不贴命令
- 跳过失败用例不说明
- 把「编译通过」当成「功能可用」
- 把「测试跑了一部分」说成「全部通过」
## 5. 与 ai-proj 对接
- 任务标 `completed` 前,把证据挂到该任务文档;
- REQ 未 `released` 时不得报需求完成(见 `ai-proj-helper-entry` 的交付终点);
- 证据缺失时,正确做法是状态写 `in_progress` 并说明「还差哪项验证」。
@@ -0,0 +1,24 @@
{
"skill_name": "verification-before-completion",
"skill_version": "0.1.0",
"evals": [
{
"id": 1,
"kind": "happy_path",
"prompt": "我改完了登录接口,可以提交了吗",
"expected_output": "要求给出构建/单测命令与结果、失败数;附证据路径后再提交"
},
{
"id": 2,
"kind": "edge_case",
"prompt": "测试环境没有依赖装不上,先合了吧,本地我手动看过没问题",
"expected_output": "拒绝以「手动看过」作为证据;说明缺失依赖要记录为未验证项,状态保持 in_progress"
},
{
"id": 3,
"kind": "failure_recovery",
"prompt": "测试跑过了 10 个,还有 2 个没跑,能说全部通过吗",
"expected_output": "不能:必须写明通过 10 / 未跑 2 及原因,不得声称全部通过"
}
]
}