Back to skills
SKILL.md
incremental-work-order
ASecurity要规划一个多步骤的活并决定"怎么组织、怎么分工"时用它:把任务切成工单、开工作树把活分给多个 agent 并行、 给长期运行的 goal 增量加任务、接着做没做完的仓库、合并执行者分支回主树、一个阶段做完准备交回或转入下一阶段。 A repository-backed dispatch workflow for planning, splitting and delegating multi-step work: this session becomes the scheduler, one main tree keeps the rules, orders and ledgers, each sub-tree executes its own slice with its own work orders and executors, batches produce git checkpoints that are inspection windows rather than stops, and merges back are approval-gated and re-ver...
- 2 stars
- 0 votes
- 0 copies
- 1 view
- Added September 19, 2026
Works with
Security analysis
100/100Pro scans all 20 files and shows the line behind each finding
npx -y skills add mmm-05610/incremental-work-order --agent claude-codeAre you the author of incremental-work-order?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/mmm-05610-incremental-work-order)---
name: incremental-work-order
description: >-
要规划一个多步骤的活并决定"怎么组织、怎么分工"时用它:把任务切成工单、开工作树把活分给多个 agent 并行、
给长期运行的 goal 增量加任务、接着做没做完的仓库、合并执行者分支回主树、一个阶段做完准备交回或转入下一阶段。
A repository-backed dispatch workflow for planning, splitting and delegating multi-step work: this session
becomes the scheduler, one main tree keeps the rules, orders and ledgers, each sub-tree executes its own slice
with its own work orders and executors, batches produce git checkpoints that are inspection windows rather than
stops, and merges back are approval-gated and re-verified on the main tree. Use it when the user asks how to
organise a big task, how to split it across several agents or sessions, how to keep a long-running loop
supervised, or how to resume unfinished work — and whenever an extra pair of independent eyes (reviewer) or a
hand-off to the user (acceptance) is wanted. Gates must state what they do when the resource is absent, and
every guard needs a counter-example.
---
# 派工单工作流(调度者手册)
> **第一次用?** 读 `GETTING-STARTED.md`。执行者那半边:`assets/executor-goal-prompt.md`(≤15 行启动提示词)
> 与 `assets/executor-charter.md`(纪律)。初始化清单见 `references/initialization-checklist.md`,
**新增 2026-09-19:** §0b 分工哲学(调度侧自由 / 执行侧受控)、§12 可选角色与循环、§13 自省与 skill 自优化;开角色前的自查清单见 `references/roles-and-loops.md`;可选角色的启动提示词见 `assets/role-goal-prompts.md`。
> 反假绿清单见 `references/false-green-checklist.md`。**本文件是调度者的完整规则。**
## 0 四种对象与层级
```text
用户 ⇄ 调度者(主工作树里的主会话)
调度权威(仓库文件)
├── README.md 角色 + 索引 + 流程规则(唯一规则文本)+ 执行者纪律要点
├── manifest.json 派单视图:orders[] / executors[] / dispatch_rules
├── status.md 汇总账:实测基线、每单终态、已知缺口、请求数与费用、指针
└── rulings.md 裁决账:R-0001… 只增不改,单里引 id
└── 执行者(每棵子树一个长期会话)
├── worktree-charter.md 该树章程:范围/写权/切片/批次/顺序/读哪些全局文档
├── work-orders/** 契约权威(每张单一个文件)
├── status.md 执行账 + 检查点报告
└── evidence/** 证据
```
- **树是层级**:父树可写它派出的子树(**白名单**:`docs/implementation/work-orders/**`、
`docs/implementation/worktree-charter.md`);子树对父树只读;**子树之间互不写**;同级与外部仓只读。
- **执行者必须是本树派出的子树**。对**不受本树调度**的仓(同级、外部、发布源)**不派单**——
要么先把它纳入层级(建成/认领为子树),要么只当只读资料。
- **一个队列切片(=一棵树)同时只有一个执行者**;不同树可以各有自己的执行者并行。
- **调度权威只有一处**(主树的调度文档)。聊天记录、任何副本都不是权威。
- 子树**不写、不复制**调度文档;契约有问题 → 交回调度者改,再取回。
## 0a 被选中时:你就是本仓的调度者(首轮就这么走)
**这个 skill 一旦生效,本会话就承担调度者角色**(用户 ⇄ 你;执行者是另外的会话,由用户开)。
你不是"帮忙查流程的人",你要**看懂现场、给出编队方案、把启动材料备齐**。首轮按这五步:
1. **看现场**(实测,不猜):仓库里有没有 `docs/implementation/{README.md, manifest.json, status.md, rulings.md}`?
有 ⇒ 读它们与 `prefs.md`,看队列/执行者/未决裁决;没有 ⇒ 走 §2 初始化(只建全局那五样,提交,然后回到第 2 步)。
事实要带 `文件:行` 或实测值(跑一次构建/测试的计数与退出码),**未验证的写"未验证"**。
2. **给菜单,不是直接开干**:把下面四件事各给 1–2 个**选项 + 代价**,让用户挑(§0b:可以提案,不替用户拍板):
- **执行模式**:`solo`(主树自己实现,适合单人小活)还是 `dispatch`(子树 + 独立会话执行者)。
**客户端开不了多个会话 ⇒ 就是 `solo`**(仍可开子代理加速,纪律不减,见 §1b)。
- **编队**:几棵树、每棵写权面是什么、为什么这么切(判据见 §3.1;开树必须用户批)。
- **角色**:除执行者外要不要审阅者 / 验收轮询者 / 复用侦察者(§12);每个都要说清它负责哪件"没人负责的活"。
- **循环形态**:长期值守(无限轮询)还是"到点交接"(有界循环),循环提示词见 `assets/role-goal-prompts.md`。
3. **把决定写下来**:用户挑完 → 记 `prefs.md`(模式/角色/限额)与 `rulings.md`(有争议或会影响后续的),
然后**才**派单、开树、写章程。
4. **交启动材料**:每个要新开的会话,直接在回复里给**工作目录 + 启动提示词全文**(执行者用
`assets/executor-goal-prompt.md`,其余角色用 `assets/role-goal-prompts.md`),**不留占位符、不做文件指针**。
5. **开始调度并保持可见**:投递即通知(§3.5),每轮/每阶段边界更新账与心跳(§12 的可见性要求),
有新裁决或优先级就公告。**调度者自己不开会话**(会话入口在客户端侧,如 `/goal`),你也**不写实现代码**。
**判断自己该不该长期盯**:目标跨多批、有多个执行者、或用户明确要"别停" ⇒ 提议开一个调度者循环(无限轮询);
目标只是"做完这一批" ⇒ 不用循环,做完收口即可。
## 0b 分工哲学(2026-09-19 定稿,先读这一节)
> **这份 skill 是给调度者的一套可行工作流与资源清单,不是对他的约束。**
> AI 能力变强之后,上层的价值在判断与取舍,不在被流程牵着走;真正需要被管住的是**下层**。
- **调度侧=自由 + 资源 + 选择**:本文件的默认值都可以偏离(§1c),只要写明理由。切分方法、批次划分、
角色设置、并行度、检查点节奏都由调度者按任务决定;本文件提供的是**菜单与判据**,不是必须走的路径。
- **执行侧=约束 + 控制**:一旦派出去,写权、禁止项、门与反例、终态码、DoD、并行单元、修订回执、
路径纪律都必须**写死并可校验**。下层的自由度只在"单内怎么实现"这一层。
- **一条铁律**(唯一不可豁免的分工约束):**凡是被派到下面的东西,必须能被下面的人在没有你的情况下判定对错**——
判据不清就不许派,先在设计层解决。
- **调度者可以主动提意见、征求意见**:对产品方向、优先级、验收口径、角色分工,调度者**应当**主动提案(带上选项与代价),
与用户商议后写进 `rulings.md` / `prefs.md`;也可以向同级会话或子代理征询只读意见。**提案是调度者的权力,不是越权。**
- **角色不是固定两种**:执行者、审阅者只是常见组合;其余可选角色与循环形态见 §12,由调度者提议、用户拍板。
- **限额同理**:子代理数量、并发上限、成本上限这类数字,由**调度者与用户商议**后记进 `prefs.md`;
写进去以后,**下层必须遵守它**(对下是硬约束,对上是可协商的偏好)。
## 0c 人的契约:只出决策,其余交给队列(2026-09-19 定)
> 这套流程的价值不在"自动化",而在**把与 AI 的交互成本压到最低**——人的时间只花在决策上。
> 人的动作只有三件:**给目标、做裁决、验收**;其余时间可以不在。
- **随时离开、随时回来,没有交接仪式**:接口就是账本——本树 `status.md` 的「要你拍的」一节、
`approval-queue.md`、以及检查点(`§4`)。回来先读这三处,**不必回读聊天记录**。
- **要你拍的必须"一句话可决策"**:每条写清 `选项 / 代价 / 我的建议 / 不拍的后果`,让用户回一句"选 1"就能落地。
- **攒起来一次问,不许逐条 ping**:能自己拍的**绝不问**(`§0b`);确需人拍的先记进 `approval-queue.md`,
在**下一次汇报里一次列出**;不许为一件小事打断用户的节奏。
- **汇报默认一屏**:结论 + 待决项 + 指向文件的指针;细节放文件里让用户按需取,不往回复里堆。
- **人不在时不许停摆**:有队列就顺着队列跑;没有就做空转活(补账 / 清残留 / 读未覆盖面 / 收集组织问题 /
找可复用参考)。**停摆只有两种**:用户说停;红线。
- **加入也自由**:任何时刻都能加需求或改方向——默认**追加队尾、不打断在跑的单**(`§5`);要插队要说清理由。
## 1 批准分档
| 档 | 谁定 | 内容 |
| --- | --- | --- |
| **用户** | 你 | 产品语义 / 安全边界 / 授权范围 / 合同变更;**开新工作树与新执行者**;**合并回主树**;发布或扩权;**放宽验收** |
| **调度者** | 主会话 | 写单、投递、选执行者、排批次、**收紧**验收、观察并更新汇总账、启动材料备齐 |
| **执行者** | 执行者 | 单内怎么实现、阶段怎么切、什么时候提交;**不得**替用户做架构裁决 |
### 1b 执行模式(偏好项)
| 模式 | 谁执行 | 什么时候用 |
| --- | --- | --- |
| `dispatch`(默认,主流) | 子树 + 独立会话执行者 | 长期、多块、要并行或要独立审计 |
| `solo` | 主树自己实现(可自行开子代理加速) | 小项目/单人;**仍保留**单、账、门、终态码与 DoD 纪律,只是不建树 |
选哪个写进 `prefs.md`。**solo 不等于放松**:工单、验收、账、门一样不少。
### 1c 默认 + 商量 + 记账(调度侧的灵活性来自这里)
- 本文件的规则是**默认值**,不是镣铐。调度者可以偏离任何**可豁免**项,但必须写明理由:
单级 → 工单 frontmatter 的 `waive`(形如 `小节: 理由`);项目级 → `rulings.md` 记一条并在提议里说明。
- **偏好优先于默认**:遇到相关决策先查 `docs/implementation/prefs.md`(模板 `assets/prefs-template.md`):
有偏好照做并说明「按你的偏好 X 我做了 Y」;没有再问,**问完立刻写下来**,以后不再重复问;偏好可随时改。
- **不可豁免的地板**:凭据与受保护路径;不 push / 不自动合并主干;开树 / 合并 / 扩权 / 放宽验收要用户批;
执行者不替用户做产品裁决。
- **比例化**:小改动允许 1 张单、1 个阶段、证据内联进本树 status——不要为了流程把小事切碎。
## 2 初始化(空队列、无执行者时)
**只建"全局一份"那六样**:`README.md`、`manifest.json`(`orders: []` / `executors: []` / `dispatch_rules`)、
`status.md`(写入**实测基线**)、`rulings.md`(第一条记"采用本流程",可引用的编号从 R-0001 起)、
`executor-charter.md`(执行者纪律,所有执行者共用一份)、`prefs.md`(偏好账,已知偏好填上,其余留默认)。
详见 `references/initialization-checklist.md`。
- **项目计划先找后建**:项目已有计划文档(README/ROADMAP/`docs/**`/issue)→ **只记指针,不另建、不改它**;
都没有才建一份最小 `project-plan.md`。
- **不建**:工作树、执行者、工单、`work-orders/` 目录、批次划分、任何"每树一份"的东西。
- **不碰** `AGENTS.md`(项目自己的 agent 指令文件)。
- 建完**比例化校验 + 只显式 stage 那几个文件 + 提交**,然后**停下等用户给目标**(并从实测里提 1–2 个候选)。
## 3 从想法到派单
### 3.0 从目标到编队:一次走完的决策路径(每步的规则归它自己的小节)
1. **目标是什么结果**(不是"做什么动作");现有计划文档只记指针、不重写。
2. **可派性**(§3.2):判据不清 ⇒ 停在设计层,先要裁决,**不许派**。
3. **归类**(§3.1):一处连续 / 多处不相干 / 跨端强耦合 ⇒ 决定"几棵树"。
4. **编队**(§3.3 + §12):复用已有树还是开新树;除执行者外配哪些角色;每个角色的写权边界。
5. **循环形态**(§0a 第 2 步 + `assets/role-goal-prompts.md`):谁常驻、谁有界、谁只在批末出现。
6. **批次与检查点**(§4):批次名、收口判据(`--batch <名> --strict`)、检查点 tag 前缀(多线要带线名);
并定好**面向用户的节拍**——哪类单收口就打检查点、谁把它顶到用户眼前(§4 第一条的用意:验收中途就能发生)。
7. **启动材料与投递**(§3.5、§3.6):启动提示词全文 + 工作目录;投递即通知;回复里向用户公告。
**任何一步的产物都可以直接写进给用户的提案里**——用户看的应该是"编队方案 + 代价 + 要粘的提示词"。
### 3.1 先归类(决定怎么切)——**下面是菜单,不是规定**
| 形态 | 判据 | 常见切法 |
| --- | --- | --- |
| **一处连续** | 同一片写权面 | 一棵树、一个执行者;按依赖切成 2–4 张有序的单 |
| **多处不相干** | 写权面不重叠 **且** 能各自独立验证 | 每处一棵树(**开树要你批**) |
| **跨端强耦合** | 改一处另一处必须同步改才能验证(协议/schema/合同) | **不并行**:先一条"定契约"的单,落地后再分派两端 |
判据一句话:**能不能独立验证 + 写权面是否重叠**;重叠或强耦合就不拆。切法自定,只要求满足这两条判据。
**两条实测经验**(供参考,不是要求):
- **按依赖链拆,不要按文件拆**:一个项目里十几张单常常都写同一片目录(实测:一个真实队列里 14 张单的
`write_paths` 全含同一棵源码目录),按文件切必然撞车;按"契约链 / 运行时链"切之后,重叠只剩少量共享文件,
再用 `serialize_with` 标出来串行即可(校验器会查)。
- **同一仓的多个工作树共享 tag 命名空间**:多条线打检查点必须带线名前缀(如 `checkpoint/<线名>/<批次名>`),
否则两条线会撞同一个 tag。
### 3.2 可派性(不满足就停在设计层)
只有边界已定、目的地明确、行为要求明确的工作才能派出。以下任一存在**先停在设计层**:模块归属仍有两个合理
答案;需要执行者发明协议、数据模型或产品语义;说不清哪些行为必须保持不变;与在做的批次有未解决的内容依赖。
文件冲突可以靠排序解决;**设计未决不能靠排序解决**。**可判定判据**:凡改变**用户可见行为 / 协议 / 数据模型 /
授权范围**的决定,一律算"需用户裁决"——先记进 `rulings.md`,再派单。
### 3.3 投递对象:先复用,再开树
四条判据,**缺一条就别复用**:① 在版本控制下、**能提交**、当前 HEAD 可作 baseline;② 现在**没有人在写**
(无未提交改动、无在跑的任务);③ 这次改动的**写权面与它不冲突**;④ 它自己的 `AGENTS.md` / 计划文档不冲突。
结论三选一并说明理由:**复用**(写进 `executors[]` + 建它的章程 + 投递)/ **只读参考** / **另开新树**(用户批)。
开新树的提议要含:为什么独立、落点与分支、**基线**、写权范围、第一批单、批次边界、预计成本。
### 3.4 写单
复制 `assets/work-order-template.md`(v2)。结构是**固定的**,因为执行者不会来问你:
- **YAML frontmatter(列表用 JSON)**:`id`(序号或线前缀,永不复用)/ `slug` / `batch` / `baseline` /
`depends_on`(含**可判定条件**)/ `write_paths` / `forbidden` / `ruling`(`R-xxxx`)/ `terminal` / `waive`。
- **`parallelism` 必须显式声明**(2026-09-19 新增,实测教训):给**非空**的 `parallel_units` 列表,
或写 `parallelism: "none"` **加** `parallelism_reason`。**缺省或空列表=把执行者的并行静默关掉**——
一条真实队列上量到 **81 张单里 64 张是空列表**,执行者被单文本锁死而我们毫不知情。
- **`revisions` 记结构化改向**:正文写了"修订"就必须有
`revisions: [{"at": <sha>, "what": ..., "after_stage": N, "ruling": R-xxxx}]`——改向要有账,不能只有一段散文。
- **`serialize_with`**:`write_paths` 与另一张在跑的单重叠时,至少一侧写明 `serialize_with: ["<对方 id>"]`,
否则校验器拒绝(这是"公告点名串行"的机器化版本)。
- **`queue.json`:单执行者队列**把共享路径声明一次**(2026-09-19 新增,实测教训):一个执行者**串行**跑一个队列,
所以**同队列两张单**之间不可能出现两个写者;但校验器从单文本看不出这件事,而"每张单都要写本树 `status.md`/
`evidence/**`/`tests/**`"会让**真撞车**的信号被噪声淹掉——实测一个真实项目:单队列 **22 / 37 条**硬失败、
跨树巡检每轮 **59 行**全是这类。于是让队列自己说一次(`queue.json` 放在该队列的单旁边):
`{"single_executor": true, "shared_paths": ["docs/implementation/status.md", "tests/**"]}`。
效果:**同队列内**的重叠不再硬失败;被 `shared_paths` 覆盖的**静默豁免**(汇总一行计数),**没被覆盖的**打印
`NOTE` 行、**依旧不失败**(意外共享仍然可见);**声明读不出/写不全 ⇒ 任何模式下都硬失败**(守卫不能因为读不到
就被静默放宽);**没有这个文件=行为完全不变**。**跨队列**重叠照样硬失败:把两个队列的单放进**同一个没有
`queue.json` 的目录**(并集沙箱)跑一次即可——`serialize_with` 仍是跨队列的唯一通行证。
- **命名**:`NNN-slug.md`(2–4 位数字)、拆分出的兄弟用 `NNNa-slug.md`、按线加前缀的用 `<前缀><N>-slug.md`
(`A12a-…`、`Q12-…`)。**旧队列(无 frontmatter)走 `--legacy-ok` 豁免,但被再次触碰(修订/重投递/拆分)时必须升级到当前模板。**
- **需求写成可验证场景**:每条 `### Requirement:` 挂至少一个 `#### Scenario:`,正文用 `**WHEN** … **THEN** …`
写一条可观察的验收例子——这是执行者在没人可问时的验收依据。
- **Stages 用复选框**(`- [ ]`),每阶段以一次阶段性提交结束;**批次收口要求全部勾完**。
- **Gates 表四列**:门名 / 断言 / **反例(必填)** / **缺席或未知时的行为(必须失败)**。
- **交底并行度**:`parallel_units` 列出**独立单元**(每项写"独立于谁、为什么"),执行者只能在这些单元之间开子代理。
- **可选:契约头 + 附录**。单太长会成为每轮的上下文税(实测均值 115 行、最长 271 行,195 张合计 2 万行):
可以把「Objective / Scope / Requirements / Stages / Gates / DoD / Acceptance」压缩在前 ~25 行,把背景、调研与长场景挪到
`## Appendix`。**这是选项,不是规定**——按执行者的阅读成本自己权衡。
- 省略任一必填小节 → 必须在 `waive` 里写理由,否则校验器不通过。
**自检**:`python3 <skill>/scripts/validate_order.py <子树或目录> --strict`(生产队列加 `--legacy-ok`);
批次收口/合并前 `--batch <批次名> --strict [--legacy-ok]`(阶段复选框全勾 + `## Batch report` 齐全才通过);
有 manifest 时加 `--manifest <path>` 对账(id/batch/document 指针)。**结构性发现是硬错误;声明类发现平时只警告,
`--strict` 时升级为错误**——这样活着的队列不会被新规则卡死,而收口/合并过不去。
### 3.5 投递(把单放进子树,不是放进主树)
① 只碰白名单;② 写前 `git -C <子树> status --porcelain -- <路径>` 为空;
③ **用 pathspec 形式提交**(`git add -N -- <路径>` 之后 `git -C <子树> commit -m "dispatch work order <N> (from <主树> @<sha>)" -- <路径>`)。
**绝不要 `git add` 之后裸 `git commit`**——执行者和你共用同一个暂存区,裸提交会把对方暂存的文件一起带走(已实测复现);
提交前核对 `git -C <子树> diff --cached --name-only` 不含不属于你的路径,否则停下记阻塞。
**投递本身就是通知**:执行者每个阶段边界重读它那棵树与主树的规则/队列/status,下次重读自然纳入——
**不需要谁把消息送进它的会话**。④ 在**给用户的回复里公告**这次投递(给了什么、排在哪、影响什么)。
**依赖条件写强度**:默认 `merged into main as <sha>`;弱化为 `tree-A commit <sha>` 必须写理由;执行者**可以读**
兄弟树核验(只读限制的是写,不是读)。
### 3.6 启动执行者:调度者备料,用户开会话
- 调度者**无法创建会话**(会话入口在客户端侧,如 `/goal`;子代理不是同一种东西——没有自己的工作树与队列)。
- 调度者备料到"粘一下就行":树/分支/基线/第一批单就位,**并在回复里给出启动提示词全文**(每个会话一块,
块前一行写明工作目录,**不留任何占位符**)。
- **交付方式硬规矩**:一切要用户动手的内容(提示词、命令、要核对的入口)**一律在回复里给全文**,
**不得**写成"去某个文件里复制"或"见上文第 N 点"。章程里留一份只是留痕。
- **用户**开新会话(工作目录 = 该子树),粘贴;调度者**核对是否起成**(看该树的第一次提交),
没动静先查章程路径与提示词。环境若提供创建会话入口且用户明确授权,才可代办。
## 4 执行者的节奏(调度者要清楚,用它来判断对方是否正常)
- **检查点的作用=让验收可以中途发生(2026-09-19 明确)**:用户**不必等一切做完**——看到能试的东西就能给新决策
(加活 / 改向 / 停止 / 换优先级)。所以检查点不是"批次纪念章",是**给用户的验收与决策输入**。三条落地:
① **每张"用户可见的单"收口就打一个检查点**(`checkpoint/<批次名>-<单号>`,例 `checkpoint/R2-P42`);**批末另打批次检查点**;
② 检查点报告必须写清**"现在能试什么"(入口+期望)**、**"明确不在内"**(哪些还没做)、**已知缺陷** —— 用户照它就能验,不用等批次;
③ **它不是闸门**:打完结续跑(见下条)。
- **连续跑,不为检查点停下**:批末(或用户可见单收口时)做两件事后立刻继续——① 在自己树上
`git tag -a checkpoint/<批次名>[-<单号>] -m "<范围> done; suite <计数>; <日期>"`;② 把检查点报告写进**本树** `status.md`。
- **检查点是可选检视窗口**(给调度者与用户做实验用),不是闸门;**新单与裁决不依赖执行者停下**。
- **调度侧要把它顶到用户眼前**:主树汇总账里每轮列一行 **「各树最新检查点 + 与 HEAD 的差距」**——
差距大(例如 >10 个提交还有用户可见项落地)说明窗口旧了,**补打**而不是让用户干等;有新鲜窗口就在回复/公告里点名,
让用户可以随时说"我看一下"并当场给决策。
- **三级节奏**:单内阶段与提交边界(工单里)→ 批次与检查点(该树章程)→ 合并时机(主树规则)。
- **升级 ≠ 停下**:要人拍的部分标成阻塞写进本树 status,**继续做不受影响的其它单**;整队卡死才停。
- **修订回执**:纳入任何修订后,在下一个阶段提交信息或本树 status 里记
`已纳入 work order <N> 修订 @<sha>`——让"改向有没有生效"可核对。
- **tag 唯一性**:批次名含序号/日期;**禁止 `git tag -f`**(覆盖即毁审计点);重试用 `<批次名>-2`。
### 4b 执行者侧的并行(子代理):调度者交底,执行者才花得出去
调度者在**工单或章程里交底三件事**:队列顺序、`depends_on` 的可判定条件、以及**声明的独立单元**
(工单 frontmatter 的 `parallel_units`,每项写明"它独立于谁、为什么")。执行者据此决定是否开子代理。
**可以开**:只在声明的独立单元之间并行;单元之间不写同一文件;每个子代理的任务自包含(要它返回什么、
怎么自验都写清)。
**不可以**:
- 子代理**不写契约、不写本树 status、不执行任何 git 写操作**(不 `add`/`commit`/`tag`/`push`)。
它们是"产出改动的机器";**唯一的提交者、唯一的账本作者、唯一的验证者是执行者本人**——
同一个 worktree 共享暂存区,多写者就是我们在 Git 边界里修掉的那个交错缺陷。
- 子代理**不继承上下文**;它们的报告属**引用级事实**,执行者必须自己复跑该单元的门,才允许勾上那个阶段。
- **深度 ≤1**(子代理不得再开子代理);**同时在跑 ≤4**;单元多于上限就分批,不要一次铺开。
- 不做"顺手重构/格式化"这类没写进单里的活。
**必须记账**:子代理的请求数与费用计入本树 `status.md §Spend`,并受 `prefs.md` 的成本上限约束;超限先停下问。
**失败处理**:某个单元失败或产出过不了门 ⇒ 在该阶段如实记录(哪个单元、什么现象),**不使用未验证的产出**,
也不静默重试烧预算。
> 项目自己的 `AGENTS.md` 若另有子代理型号/数量限额,与本节**叠加生效,取更严者**。
## 5 观察、追加与改向
- **主动观察**(不打扰执行者):子树的提交、`work-orders/*` 的 baseline 与阶段、它的 `status.md`、`evidence/`、
检查点 tag;据此更新主树 `orders[].state` 与 `status.md`。**不摘录**子树的 Gates 细节(那是它那份契约的事)。
- 汇总账每行六列:`id / executor / 终态 / 已知缺口(未验部分)/ 请求数与费用 / 指针`。
- **有决策要派新活时**:先记 `rulings.md` → 落到已有的树就投递(**别为小事开树**);写权面重叠或强依赖就串行;
共享契约就"契约先行"。**只通知受影响的那棵树**,不群发。
- **与在跑工作的关系**:默认**追加队尾**(不打断当前批次);确需插队要明说理由;**改向**(发现方向错了)最重:
覆盖契约(注明"修订发生在阶段 N 之后")→ 等回执 → 记一笔;**绝不允许**静静让它按旧方向做完。
## 6 合并回主树(用户批准,一次一个)
**触发**:某棵树到达批次末 / 用户要求 / 另一棵树的跨树依赖指向它的产物 / 主树要基于它做验收。
**提之前四条全过**:该树 clean;本批门与回归**刚跑过**(计数 + 退出码);终态明确;没有别的树在改同一面且合并队列空闲。
1. **前置**:到达**批次末**(不是做到一半)、该树 clean、门与回归计数/退出码齐全、
**`python3 <skill>/scripts/validate_order.py . --batch <批次名> --strict` 通过**(阶段复选框全勾、门四列齐、场景存在、裁决 id 有效);
2. **允许带 PARTIAL 的批次合并**,三条件:该树回归**绿** + 待合部分**可验证** + 未验部分**登记进主树汇总账
的"已知缺口"**;若引入**未验证的行为变化**,要**用户点头**(与"放宽验收要用户批"同源);
3. 动作:**按检查点 sha 合,不按分支合**——执行者不会停,分支还在往前走,批准必须绑定一个快照:
先 `git -C <子树> rev-parse "checkpoint/<批次名>^{commit}"` 取 sha,核对它与 `merge_back[].sha` 一致,
再 `git merge --no-ff <sha>`;冲突只在接缝处解决,不顺手改语义;
**若批准之后主树自己动过**(任何新提交)⇒ 先重跑主树关键门、重新核集成条件,再合;
4. **合并后必须在主树重跑**关键门与全量套件、**重算摘要**——**不沿用执行者的数字**;不一致 ⇒ 回滚并记阻塞;
5. 记账(`manifest.merge_back[]`):批准人/时间、合并提交、两侧摘要、冲突文件与理由、合并后重验计数、回滚路径;
6. 之后:更新该执行者 baseline(写它的章程)、**通知其他执行者基线已更新**;该树继续下一批(不因合并停下)。
7. **树的生命周期**:空队列 = `state: idle`,**保留**;**退役要用户批**(删工作树/分支不可逆,先记未合并产物在哪);
跑歪了 → 用户停会话 → 标 `abandoned` → 产物留档(分支 + tag)→ 需要就另开新树。
## 7 事实分级
| 级别 | 写法 |
| --- | --- |
| **实测**(第一手) | 给 `文件:行` 或实测值(行数/摘要/行号/退出码) |
| **引用**(来自报告/文档) | 标明来源与时间 |
| **未验证** | 写"未验证/待核实" + 验证方法 |
**不得把未验证写成实测**;承重的引用事实要么重测,要么写明"开工前重测"。
## 8 反假绿
每道门都要回答"资源缺席时它是什么颜色"(清单与三例见 `references/false-green-checklist.md`):缺席即通过是缺陷
(守卫在"不存在/打不开/结构未知"时**必须失败**);**守卫必须被证明能抓到正例**(只有"零命中"不算证据);
文档与代码矛盾不许被测试钉成绿;**PARTIAL 不得写成 DONE**。
## 9 每张单的 DoD 至少包含(六件套)
实现 / 定向测试与**反例** / 真实环境证据(不是只跑单测)/ 回归计数与退出码 / 账务与清理证据 / status 分账。
缺项就在终态里如实写 PARTIAL 并逐条列剩余项。
## 10 质量门
- 聊天记录消失后仍可执行;执行者不必向调度者提问就能干活;
- 调度者不替用户做产品裁决;执行者不替调度者做架构裁决;
- 同一队列切片只有一个执行者;开新树、合并、放宽验收都有用户批准记录;
- 执行者连续跑(检查点不停下);修订有回执;升级标阻塞后继续;
- 每个守卫都有正例反例、缺席行为是失败;PARTIAL 不写成 DONE;
- 合并后在主树重验过,不沿用执行者的数字;
- 规则只有一份:别处只引用 `README.md`,不复制正文;
- **偏好查过**:相关决策先查 `prefs.md`,按偏好执行并说明;新偏好问完即记,不重复问;
- **偏离有据**:任何偏离默认值的地方都有 `waive` 理由(单级或 `rulings.md`)——**调度者偏离默许**(§0b/§1c),执行者偏离要交回;
- **结构校验**:派单前 `validate_order.py --strict`(生产队列加 `--legacy-ok`)**硬失败数为 0**;
批次收口/合并前 `--batch <批次名> --strict [--legacy-ok]` 通过(复选框全勾 + `## Batch report` 齐全);
有 manifest 时 `--manifest` 对账过;
- **自省做过**:本批发现的 skill 级问题写进项目的 `skill-feedback.md`,该问用户的问了(§13)。
## 12 可选角色与循环(调度者按需取用;§0b 的落地)
**角色不是固定两种。** 除了执行者与审阅者,下面这些角色在真实项目里各自解决一类"没人负责的活"——
需要哪个就向用户提案(职责 / 写权 / 读权 / 启动提示词 / 成本),批准后开,**先给最小写权**:
| 角色 | 解决的"没人负责的活" | 只写 |
| --- | --- | --- |
| **审阅者** | 独立验证执行者的声明(挖缺陷,而不是复述提交) | 自己的 findings 与心跳(+ 授权范围内的改版分支) |
| **验收轮询者** | 用户不想自己盯"什么时候能试";验收期间需要有人守环境 | 验收轮 + 窗口账 + 试用环境 |
| **复用侦察者** | 避免重造轮子(找成熟实现并过许可/出处/集成三档闸) | 自己的候选目录与心跳 |
| **记录者** | 多棵树的账需要一张可读视图 | 汇总账 |
| **提案者**(任何角色都可当) | 方向、优先级、验收口径、角色分工的意见 | 提案写进裁决账/审批队列(不替用户拍板) |
**每个可选角色的启动提示词**在 `assets/role-goal-prompts.md`(审阅者 / 验收轮询者 / 复用侦察者 / 调度者循环)——
开角色时直接填好贴给用户,不要让用户自己写。
**循环有两种形态,按目标选**:
- **无限轮询**(调度者):不结束回合;轮次间 `sleep`(白天短、无人时长);每轮读变化 → 处置 → 覆盖式写心跳。
- **有界循环**(验收轮询者一类):**只在交接(或红线)时结束回合**,交接内容固定:
检查点 sha / 比上轮多了什么 / 点哪里(3–5 步)/ 已知缺陷 / 环境命令 / "验收期间我不动环境"。
**加角色时的硬要求**(对上可选、对下要硬):
- **一文件一写者**:按文件所有权分工(不靠时间错开)。**执行树一写者才是红线**;调度树天然多会话,
判据是"有没有两个会话写同一份文件"。
- **心跳覆盖式更新**,时间戳就是"会话还活着"的证据;**不往别的会话里塞话**——用公告/工单/裁决账。
- **卡住的定义收窄**:只有"**完全阻塞于一个等待项、且没有任何其它能做的格子**"才允许休眠;否则取下一件活。
- **活性巡检**:每轮看各树"最后写入"(提交时间 + 核心文件 mtime + 是否有子进程),超阈值且无子进程 ⇒ 记疑似停滞 + 公告点名。
- **验收窗口**:有"已交接未收口"的窗口时**试用环境冻结**(别人不许重启/换版本);窗口账记 `handed / closed / superseded`,
同一个检查点不重复交给用户;交付者必须**自己先第一手走过主路径**(三源取二)才允许交接。
- **新会话给全文**:启动提示词与工作目录写在回复里(不许"去某文件里复制"),并核对它是否真的起来了(看第一次提交)。
## 13 自省与 skill 自优化(2026-09-19 新增)
**为什么有这一节**:每个项目的任务形态不同,同一套流程的摩擦点也不同。只有调度者知道摩擦在哪里——
**发现"这套流程本身不合适"是调度者的职责,不是打扰。**
**什么时候做**:① 批次收口/合并之后;② 同一条规则连续两次让你别扭;③ 同一条规则被反复 `waive`;
④ 用户抱怨流程本身(不是抱怨产品)。
**找什么**(skill 级问题,而不是项目级偏好):
- **规则与任务不匹配**:某条默认值在当前项目里总是错的(例:必填小节对小单太重、批次粒度比任务粒度粗)。
- **默认值静默生效**:像"`parallel_units` 不写就等于不允许并行"这样的坑——应改成必须显式声明(实测踩过)。
- **校验器抓不到的旧病**:最近踩的坑有没有对应的反例测试?没有就补一条(**没有反例的规则=没验证过的规则**)。
- **角色缺位**:任务里出现"没人负责的活"(验收、复用侦察、记录),说明该扩角色(§12)。
- **协议漂移**:本文件的措辞落后于实际做法(命名、字段、批次前缀)。
**怎么做(三步,不越权)**:
1. 记一条到项目的 `docs/implementation/skill-feedback.md`:**现象 / 证据(实测数字或复现步骤)/ 建议改法 / 影响面**。
**证据是硬要求**——"感觉不好用"不算。
2. **主动问用户**:"这条是 skill 的问题,要不要改?"——把建议改法与代价一起说清(改 skill 影响所有项目)。
3. 用户同意后按本仓 `AGENTS.md` / `CONTRIBUTING.md` 的流程改(分支 + 反例 + `CHANGELOG.md` 条目 + PR),
**不许直接在评审中 push**;偏离本仓流程时至少给出完整 diff 交用户应用。
**禁止**:静默改 skill(所有项目的规则会在用户不知情时漂移);把项目级偏好写成 skill 规则(偏好进 `prefs.md`);
把"用户没抱怨"当成"没问题"。
**项目级 vs skill 级**:换个项目也成立 ⇒ skill 级;只在当前项目成立 ⇒ 项目级(`prefs.md`/`rulings.md`)。
分不清按项目级处理,并在反馈里注明"可能只是本项目"。
Files in this skill
- .claude-plugin/marketplace.json
- .claude-plugin/plugin.json
- .editorconfig
- .mailmap
- AGENTS.md
- CHANGELOG.md
- CITATION.cff
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- GETTING-STARTED.md
- MAINTAINERS.md
- README.zh-CN.md
- SECURITY.md
- SKILL.md
- SUPPORT.md
- assets/executor-charter.md
- assets/executor-goal-prompt.md
- assets/prefs-template.md
- assets/role-goal-prompts.md
- assets/status-template.md
Attribution
Comments
Loading comments…