Skip to content
This repository was archived by the owner on Sep 28, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
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
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
},
{
"name": "skill-authoring",
"version": "0.1.0",
"version": "0.1.1",
"source": "./plugins/skill-authoring"
},
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
status: accepted
date: 2026-09-18
decision-makers: 负责人
---

# 自建 skill 的术语只用有出处的业界词,实践与规程分两层

## 背景与问题(Context and Problem Statement)

- 自建 skill 的核心词(来往、段、门、步、停靠记录、上线待办、硬问题、焦点、领域分支)全是自造概念,`plugins/CONTEXT.md` 用一整份词汇表加 Avoid 列表定义它们;那份词汇表第 3 行写「不自造」,同一份里却有两条标「自造」(停靠记录、硬问题)。
- 八条工程规程(`plugins/workcoding`)各自把实践内联进正文。对照 Matt Pocock 的 writing-for-agents:预训练里已有的词(leading word)一个 token 就能招来模型先验,自造词要用定义句去买;实践单独成 skill、规程只组合,正文才薄。
- 自造词分布(2026-09-18 统计):flow 62 处、skill-authoring 24、worktree-baseline 16、wrap-up 15、review-response 5、verify-evidence 3;workcoding 八条 0 处。

请负责人定的一件事:自建 skill 的术语该用什么,实践与规程要不要分成两层?

## 决策驱动因素(Decision Drivers)

- 模型读 skill 的可靠性:有先验的词比定义出来的词稳。
- 主人读 skill 的成本:想读任何一条 skill 都遇不到要先学的私有词汇。
- 一处真源:一条实践只在一个文件里。
- 跨仓一致:常驻规则、skill、评测用同一套词。

## 考虑过的方案(Considered Options)

| 方案 | 做法 | 适用场景 | 代价 |
|---|---|---|---|
| A 保留自造词,只瘦身正文 | 词汇表不动,删沉积节 | 词汇已经稳定、模型读得可靠 | 先验问题不解决,词汇表继续膨胀 |
| B 只用有出处的业界词,实践与规程分层 | 概念必须能引用标准、书或知名项目文档;中文用通行译名附英文与出处;实践 skill 进 `plugins/practices`,薄步进 `plugins/flow-steps`,`flow` 单独 | 词汇要被三个客户端与主人共同读懂 | 一次性改名波及常驻规则与 41 份评测文件;个别概念(停靠记录)业界词不完全贴合 |
| C 只准英文原词 | 正文里术语一律英文 | 读者全是英文语境 | 中文正文难读,与「中文回复」冲突 |

## 决定结果(Decision Outcome)

选 **B**。判据:概念必须有可引用的既有名字;查不到就不起名,用平语句子。替换表见 agent-system#115 实现决定第 2 条;盲测不一致的四行(来往、步、硬问题、上线待办)经两个独立 Sonnet 会话盲测后由 agent 推荐、负责人定。

接入顺序(每步可单独退,对应 agent-system#115 的三批):

1. 合同(本 ADR 随行的 PR,agent-system#116):`plugins/CONTEXT.md` 改成「业界词加英文原词加出处」的词汇表,旧词以「旧名」别名保留到收口票;Avoid 里的 user-invoked/model-invoked 转正为词条名;writing-rules 的骨架、术语、禁令三条改;eval-cases 加「判行为不判形状」;`skills.test.ts` 加两条机械守卫。
2. 常驻规则(agent-config#57):共用规则第 23、35、45、60 行的来往、焦点、领域分支换掉,第 60 行改「只用业界词」。
3. flow 与 flow-steps(agent-system#117):五条正文与评测副本、grader 同步换词。
4. practices(agent-system#118 到 #122):Matt 的四条实践复制入库(ADR-0007),workcoding 八条拆成实践加薄步。
5. 收口(agent-system#123):删「旧名」别名,`workcoding` 目录归档;skill-authoring 自身正文里的旧名(手动调用、自动调用、上线待办、第 N 段)在这一步换掉,前四步都没点名它。

不选 A:先验问题不解决,正文瘦了词汇表还在长。不选 C:中文正文难读。

### 后果(Consequences)

- 好的:任何一条 skill 里的术语都能在业界查到;一条实践只改一个文件;规程一眼看出点名了哪些实践;正面陈述让 agent 的注意力落在目标行为上。
- 坏的或要承担的:改名波及常驻规则与评测文件,分三批做;站会记录(standup update)与停靠记录的语义不完全重合,靠词条定义补;旧名别名在收口前两套词并存。
- 回退:revert 引入本 ADR 的 PR(agent-system#116 的 PR),词汇表与写法规则回到自造词版本;后续批次各自 revert。评测结果文件不需要回退。

### 确认(Confirmation)

- `node plugins/tests/skills.test.ts` 通过:所有 SKILL.md 与 `plugins/CONTEXT.md` 不含「自造」标记;词汇表每条带英文原词与出处。
- `plugins/CONTEXT.md` 每个词条标题形如 `**中文**(English;出处:…):`,替换表 15 行都有对应词条或平语说明。
- 第二、三批合并后:常驻规则编译出的 CLAUDE.md/AGENTS.md 与 flow、flow-steps 正文里没有旧词(别名行除外)。
- 落地后回来补实际结果。

## 更多信息(More Information)

- desk#152(机会 issue 与方案对齐记录)、agent-system#115(spec,含替换表与盲测备注)。
- ADR-0004(自建 skill 靠入口路由、按人敲的/模型可拿的分两档,本 ADR 只换名不改两档)、ADR-0005(路线放在流程 skill)、ADR-0007(Matt 的四条实践复制入库)。
- Matt Pocock,writing-for-agents(`vendor/mattpocock/skills/`,revision `6acc160`)。
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
status: accepted
date: 2026-09-18
decision-makers: 负责人
---

# Matt Pocock 的四条实践正文复制入库,不引用 vendor

## 背景与问题(Context and Problem Statement)

- `flow` 已在点名 `/grill-with-docs`、`/implement`、`tdd`、`code-review`,它们的实践正文在 `vendor/mattpocock/skills/`(revision `6acc160`),工作方法地图上却是「未接入」。
- ADR-0006 把实践层单列之后,这四条实践放哪:引用 vendor,还是复制进 `plugins/practices`。

请负责人定的一件事:四条实践的正文是引用 vendor、复制入库,还是自己重写?

## 决策驱动因素(Decision Drivers)

- 正文要能改成中文、贴本仓写法(两节骨架、正面陈述)。
- 与上游的关系:跟不跟 Matt 的更新。
- 许可证:vendor 为 MIT,允许复制修改,须保留版权与许可声明。
- 地图规则:未接入的资产不当现行规则用。

## 考虑过的方案(Considered Options)

| 方案 | 做法 | 适用场景 | 代价 |
|---|---|---|---|
| A 引用 vendor | 规程 skill 点名 vendor 的 skill 名,不复制 | 上游正文能原样用、要自动跟更新 | 正文是英文、骨架不同、不能改;四条要从未接入移进地图 |
| B 复制入库 | 正文抄进 `plugins/practices/skills/<名>/`,改中文与本仓写法;`plugins/practices/LICENSE-mattpocock` 保留声明;`SOURCE` 记来源 revision | 要按本仓合同改写、可接受手动跟上游 | 与上游脱钩,他更新不自动跟;四条各要评测用例 |
| C 全部自己重写 | 按同一实践的原始出处(Ousterhout、Feathers、Beck)重写 | 上游许可证不允许复制时 | 工作量最大,Matt 已做过的裁剪白费 |

## 决定结果(Decision Outcome)

选 **B**(负责人 2026-09-18 定:「允许复制、抄别人」)。vendor 目录保留为材料,地图上仍是未接入;`plugins/practices` 的四条是现行工具。

接入顺序(每步可单独退):

1. agent-system#118:建 `plugins/practices`,放 `LICENSE-mattpocock` 与 `SOURCE`,四条实践各建目录。
2. 每条复制的 SKILL.md 头部注明来源与 revision(当前 `6acc160`),正文改中文与两节骨架。
3. 每条各写评测用例并跑门评测;`flow` 的点名从 vendor 名改到入库名。
4. 以后要跟上游时按 `SOURCE` 里的 revision 做 diff 手动合。

不选 A:正文改不了,四条还要破例进地图。不选 C:MIT 已允许复制,重写是白费。

### 后果(Consequences)

- 好的:四条实践与自建实践同一套骨架、同一套词;地图上「现行」与「未接入」的边界不破例。
- 坏的或要承担的:上游更新不自动跟,要靠 revision diff 手动合;四条各要评测。
- 回退:revert agent-system#118 的 PR;`flow` 的点名回到 vendor 名。`vendor/mattpocock` 不受影响。

### 确认(Confirmation)

- `plugins/practices/LICENSE-mattpocock` 与 `SOURCE` 在,`SOURCE` 记的 revision 与 `vendor/mattpocock/SOURCE.json` 一致。
- 四条 SKILL.md 头部各有来源与 revision,正文通过 `skills.test.ts` 的词汇守卫。
- 落地后回来补实际结果。

## 更多信息(More Information)

- desk#152、agent-system#115(spec 实现决定第 3 条)、agent-system#118(practices 起步票)。
- ADR-0006(术语与分层)。
- `vendor/mattpocock/LICENSE`(MIT)、`vendor/mattpocock/SOURCE.json`。
2 changes: 2 additions & 0 deletions docs/adr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,5 @@
| [0003](./0003-证据里的本机用户名换成占位符不改写历史.md) | 证据与记录里的本机用户名换成 `<user>` 占位,不改写 git 历史 | accepted |
| [0004](./0004-自建skill靠入口路由并按手动自动调用分两档.md) | 自建 skill 靠入口路由、不靠描述触发,并按手动调用/自动调用分两档 | accepted |
| [0005](./0005-来往判法常驻提示词路线放在流程skill.md) | 来往判法常驻提示词,路线放在流程 skill 里、判为改动落地才读 | accepted |
| [0006](./0006-自建skill术语只用有出处的业界词并分实践与规程两层.md) | 自建 skill 的术语只用有出处的业界词,实践与规程分两层 | accepted |
| [0007](./0007-Matt的四条实践正文复制入库不引用vendor.md) | Matt Pocock 的四条实践正文复制入库,不引用 vendor | accepted |
119 changes: 80 additions & 39 deletions plugins/CONTEXT.md
Original file line number Diff line number Diff line change
@@ -1,99 +1,140 @@
# Skill 库

`plugins/` 下自建 skill 的词汇表。只收这个仓自己的概念,不写实现细节。用词原则:有标准中文用中文,没有就直接用英文,不自造。
`plugins/` 下自建 skill 的词汇表。只收这个仓自己用到的概念,不写实现细节。

用词合同(ADR-0006):每个词都是有出处的业界词——能在标准、书、知名框架或项目文档里查到;中文用通行译名,标题带英文原词与出处。查不到出处的概念不起名,用平语句子说清楚。旧名以 `_旧名_` 一行保留到收口票(agent-system#123)关闭为止,之后删掉。

词条形状(`plugins/tests/skills.test.ts` 守着):

```
**中文**(English;出处:哪个标准、书或文档):
定义。
_旧名_: 换下来的词
_Avoid_: 容易混进来的近义词,和为什么不用
```

## Language

### 主人开口之后

**来往**(interaction):
主人开口到拿回东西的一次往返。只有三种,按「要拿回什么」分;停下、交接、换机器不是第四种,是三种都能被打断。
主人开口到拿回东西的一次往返不设总称,要指它时说「请求」(request)就够。按「要拿回什么」分成下面三种;停下、交接、换机器不是第四种,是三种都能被打断。
_旧名_: 来往

**要答案**(answer):
**查询**(query;出处:CQRS,Greg Young):
问、查、看,不动文件。
_旧名_: 要答案

**小改动**(small change):
只有一种改法、改完一眼能验的改动。直接做,贴证据,不进任何段。
_Avoid_: 小修(旧规则里的说法)、快速修复
**标准变更**(standard change;出处:ITIL 4 变更使能):
预先批准、风险低、只有一种改法、改完一眼能验的变更。直接做,贴证据,不进任何阶段。
_旧名_: 小改动
_Avoid_: 小修、快速修复

**改动落地**(change delivery):
要在做法之间选,或改的是合同(规则、接口、路由、数据格式)的改动。走段,每段的门等主人说行,能从任一段进。九段的定义在流程 skill `flow` 的正文;为什么分九段见 wiki《vibeCoding 改动流转》。
**常规变更**(normal change;出处:ITIL 4 变更使能):
要在做法之间选,或改的是合同(规则、接口、路由、数据格式)的变更。按阶段走,每个阶段的门等主人说行,能从任一阶段进。九个阶段的定义在流程 skill `flow` 的正文;为什么分九个见 wiki《vibeCoding 改动流转》。
_旧名_: 改动落地
_Avoid_: 大改动(分的依据不是体量)、需求

### 进了段之后
### 进了阶段之后

**门**(gate):
一段结束时停下等主人说行的那一下。哪一段有门、门上判什么,写在流程 skill `flow` 的正文。
**阶段**(stage;出处:Cooper 的 Stage-Gate):
常规变更被切成的九个阶段之一,每个阶段有门和产物;顺序、门、产物在 `flow` 正文的九个阶段那张表。
_旧名_: 段

**段**(segment):
改动落地被切成的九个阶段之一,每段有门和产物;顺序、门、产物在 `flow` 正文的九段表。
**门**(gate;出处:Cooper 的 Stage-Gate):
一个阶段结束时停下等主人说行的那一下。哪个阶段有门、门上判什么,写在 `flow` 的正文。

**步**(step):
一段里被点名的一件事,由一条 skill 或一段手做承担。
**活动**(activity;出处:ISO/IEC/IEEE 12207、PMBOK):
一个阶段里被点名的一件事,由一条 skill 或一段手做承担。改旧代码时才开的活动不另起名,就这么说(最近的业界概念是 12207 的裁剪 tailoring);开哪几个在第 4 阶段的门口定。
_旧名_: 步;可选步(指改旧代码时才开的那几个)

**可选步**(optional step):
只在改旧代码时才开的步(先录旧行为、先看影响这类);开哪几步在第 4 段的门口定。

**停靠记录**(docking record,自造):
**站会记录**(standup update;出处:Scrum Guide 每日站会的三问加阻塞项):
一件事停下时写在它 issue 下的固定四栏评论(做成了、停在、下一步、等你),最后一条就是现状。
_Avoid_: 交接记录(那是第 9 段 `/handoff` 的产物,给换机器或换人用)
_旧名_: 停靠记录
_Avoid_: 交接记录(那是第 9 阶段 `/handoff` 的产物,给换机器或换人用)

### 验证与审查

**证据**(evidence):
**证据**(evidence;出处:ISO 19011 审核证据):
支撑一条声称的东西,三样齐才算(哪三样与怎么贴见 `verify-evidence`);没有的声称标「未验证」。
_Avoid_: 「应该没问题」「看着能过」

**硬问题**(hard finding,自造):
审查意见里违反仓里文档化规则或 spec 明写要求的那种。其余都是**判断题**(judgement call)。两个标签只帮主人分拣,修不修都由主人定。
**违例**(violation;出处:SonarQube 的 rule violation):
审查意见里违反仓里文档化规则或 spec 明写要求的那种。
_旧名_: 硬问题

**判断题**(judgement call;出处:Google 代码审查指南):
审查意见里不是违例的其余那些。两个标签只帮主人分拣,修不修都由主人定。

### skill 分哪两层

**实践**(practice;出处:Kent Beck《Extreme Programming Explained》的 practices):
讲怎么做一件事的 skill:grilling、tdd、特征化测试这类。一条实践只在一个文件里。

**规程**(procedure;出处:ISO 9000 对 procedure 的定义「进行某项活动的规定途径」):
按活动点名实践、把它们组合起来的 skill;`flow` 与 flow-steps 里的都是。正文只点名,做法在实践里。

**真源**(source of truth;出处:The Pragmatic Programmer 的 DRY 与 single source of truth):
一件事只在一处定义、其余处引用它的那一处。路线的真源现在是 `flow`。

### 决定走多长的路线

**路由 skill**(router):
会改变别的 skill 什么时候被用的 skill——入口、段的门、点名关系都算。其余的 skill 不另起名。
**路由 skill**(router skill;出处:Matt Pocock 的 writing-for-agents):
会改变别的 skill 什么时候被用的 skill——入口、阶段的门、点名关系都算。其余的 skill 不另起名。
_Avoid_: 入口 skill、流程 skill(那是某一条具体路由 skill 的名字,不是类别)

### 决定 frontmatter 怎么写

**手动调用**(manual invocation):
**人敲的**(user-invoked;出处:Claude Code Skills 文档的 `disable-model-invocation`):
只有主人敲 `/名` 才用的 skill;agent 只能说「请敲 /名」然后停下。
_Avoid_: 门 skill、user-invoked
_旧名_: 手动调用
_Avoid_: 门 skill

**自动调用**(automatic invocation):
**模型可拿的**(model-invoked;出处:Claude Code Skills 文档的 `disable-model-invocation`):
规则点名后由 agent 自己用的 skill。
_Avoid_: 步 skill、model-invoked
_旧名_: 自动调用

### 写完之后

**反馈**(feedback):
**反馈**(feedback;出处:The DevOps Handbook 的第二步「反馈」):
用一条 skill 时,它让做的和实际做的对不上或别扭的那一次现场,抄原文记成的一条 issue。
_Avoid_: 摩擦、硌手、痛点、坑(「坑」在工作区里指工具链或环境的失败案例,是另一回事)

**上线待办**(rollout):
**上线清单**(rollout checklist;出处:发布工程通用,Google SRE 的 launch checklist 为近例):
一条 skill 写好之后,要让它真正被点名或能敲,还需要在 skill 仓之外做的那几处改动:路由句、可见档、同步投影。
_旧名_: 上线待办
_Avoid_: 路由待办、部署待办

### 工作项容器

**在制品**(work in progress, WIP;出处:Kanban 的 WIP limit):
正在推进的事,挂在根 issue 正文最上面;上限 3 就是 WIP limit。
_旧名_: 焦点

**主题**(theme;出处:SAFe 与通用敏捷层级):
根 issue 下第一层、对应一个长期方向的 issue;工作项挂不到当前事项时挂到所属主题下。
_旧名_: 领域分支

### 评测

**基线**(baseline):
**基线**(baseline;出处:Kohavi《Trustworthy Online Controlled Experiments》):
SKILL.md 还是占位、或不装 skill 时跑出来的结果;正文只针对它写。

**对照组**(control group):
**对照组**(control group;出处:Kohavi《Trustworthy Online Controlled Experiments》):
评测里不装 skill 的那一组运行;装了 skill 的那一组叫**有 skill 组**,两组之差就是差值。
_Avoid_: 臂、with arm、without arm

**fixture**:
**fixture**(fixture;出处:xUnit Test Patterns,Meszaros):
用例开跑前准备好的仓库状态与文件。
_Avoid_: 夹具

**mock**:
**mock**(mock;出处:xUnit Test Patterns,Meszaros):
替代真实外部系统的假东西:假的 `gh`、假的 GitHub API、贴进去的假历史。
_Avoid_: 替身

**dry run**:
**dry run**(dry run;出处:命令行工具的 `--dry-run` 惯例):
授 Bash 的用例在没有沙箱时的写法:agent 只把要执行的命令按顺序写进文件,不执行。
_Avoid_: 干跑

**grader**:
用例里判分的一条;用模型判的那种叫**裁判模型**。
**grader**(grader;出处:Claude Code `claude plugin eval` 文档):
用例里判分的一条;用模型判的那种叫**裁判模型**。grader 判可观测行为,不判消息形状(见 skill-authoring 的 eval-cases)。
_Avoid_: 评分器
Loading
Loading