Repository navigation
Commit 345f0b1
docs(pm-dispatch, os-dev): the claim template and the dev definition carry the
<!-- claude-projects-attribution: {"github_login":"os-bill"} -->
_Requested by **Bill** · [project
thread](https://claude.ai/code/project/chan_016iMXWSZDzqWRWvWzdNo8wg?thread=cmsg_016iMXWSZDzqWRWvWzdNo8wg4pchBqTn9cQG5gfEpLYo8a)_
Fixes #25115
Clause-②: no
Metadata-protocol: none
## What changes
The `.claude/**` half of the maintainer's ruling A on changeset levels
(the level follows the metadata protocol alone): the fleet's own
dispatch path now knows the `Metadata-protocol:` declaration line that
PR #25114 installed beside `Clause-②:`.
- `.claude/skills/pm-dispatch/SKILL.md` — the claim template carries
`Metadata-protocol: added | narrowed | semantic | none` right under
`Clause-②: yes | no`, with a parenthetical pointing the seat at the
level table by its subject (AGENTS.md's Post-Task Checklist, step 3) and
naming the two bodies the dev copies it into.
- `.claude/agents/os-dev.md` — the claim-copy rule widens from one line
to the pair and names both carriers: the two lines are copied verbatim
at line start into the PR body, and into every changeset body, where
`Check Changeset` reads them (a kind grades `minor`, `none` grades
`patch`). Same 「无则零写,⛔ 不自造」 discipline.
- `.claude/skills/pm-dispatch/references/execution-duties.md` — claim
step ② names the third line-initial key, and the `Clause-②` spelling
rule gains a sibling: the four values and the level table live in
AGENTS.md's Post-Task Checklist ③.
Not touched, by measurement: `references/contract-review.md` and
`references/landing-operations.md` route the contract review on
`Clause-②` (the review tier follows the FACE of the diff, the level
follows the KIND), so neither needs to read the kind; `os-dev.md`'s
dogfood trigger still reads the `(narrowing)` arm. The reader
(`scripts/pm/clause2-line.mjs`), the level axis
(`check-changeset-no-major.mjs`), `AGENTS.md` and `pr-automation.yml`
are out of scope and unchanged.
## Line budget (`check:pm-skill-ratchet`, every file at headroom 0 on
the base)
| File | Base | Head | Paid with |
|:--|--:|--:|:--|
| `.claude/skills/pm-dispatch/SKILL.md` | 319 / 319 | 318 / 319 | +1
template line; −2: the template caption line 「认领评论(英文,固定形状;首行字面
`Claim:`):」 and its trailing blank. Its content is carried by
execution-duties ② (「认领评论照抄 SKILL.md 模板」), SKILL.md 全体座位的不变量 (GitHub
上一切新内容用英文) and AGENTS.md (the identity record is the `Claim:` comment,
first line beginning `Claim:`). |
| `.claude/agents/os-dev.md` | 404 / 404 | 404 / 404 | +1 (the copy rule
is now two lines); −1: 「正文以 session-URL 形式的署名页脚收尾(见字节与 sanitizer 纪律节)。」,
an intra-file pointer to the footer block two sections down, whose own
annotation already says 「session-URL:创建 PR 正文用」 (and AGENTS.md's
identical block says "session-URL: use in PR BODIES"). First candidate
measured and rejected: the commit-trailer rule 「卡片关系只在 PR 正文声明一次…」 is
quoted verbatim by `scripts/check-commit-card-trailers.mjs`, whose
self-test pins the quotation to the file, so deleting it reds
`check:commit-card-trailers`. |
| `.claude/skills/pm-dispatch/references/execution-duties.md` | 188 /
188 | 187 / 188 | +1 (the kind pointer); −2: the preamble line 「执行席每次
fire 读本文:候选、认领、派发、收集、复核;落地窗口另读 `landing-operations.md`。」 and its
trailing blank. SKILL.md's 阶段细则索引 rows carry the same reader, moment and
sections for this file and for landing-operations.md. |
No line was re-wrapped; every new bullet is under the 120-byte cap (110
/ 111 / 114 / 113 B); every sentence a script quotes from these files is
still there verbatim (measured with a scan of `scripts/**`,
`.github/**`, `.githooks/**` and `.claude/hooks/**` for each edited
file's base lines). The four-axis frame is untouched (md5 of its 21
lines: `abff5f852c8fd09b79ec0623439aa4f0`, same as on the base). The two
ceilings left at headroom 1 can be lowered to 318 and 187 by the seat at
landing or in the next tooling PR; `scripts/**` is outside this card's
surface.
## Proof the new lines read
- `node scripts/pm/post-stamped.mjs --dry-run --comment=25115
--file=claim.md` on a claim written from the new template (both lines at
line start): exit 0, `Stamp verdict: stamped-by-this-act`, no keyed-line
refusal.
- `scripts/pm/clause2-line.mjs` imported directly over a PR-body sample
and a changeset-body sample carrying both lines: `readClause2Line` →
`declared no` / `declared yes (widening)`; `readMetadataProtocolLine` →
`declared none` / `declared added` (trailing reasoning ignored, as the
reader documents). The template placeholders themselves read
`malformed`, as they should — a seat that forgets to fill the line is
refused, never read as `none`.
- This PR body carries both lines at line start, which is the behaviour
the card installs.
## Gates
Local subset, run on the committed head `588f0599` in the card worktree,
every exit code captured before any pipe (`cmd > log 2>&1; EXIT=$?`),
reconciled with `node scripts/pm/dispatch-gates.mjs --ran` (22 derived,
22 run, 0 NOT-MEASURED, 0 UNRUN; changed lines 12, +5 / −7, 3 files):
| Command | Exit |
|:--|--:|
| `node scripts/check-closing-keyword-parity.mjs` (+ `--self-test`) | 0
/ 0 |
| `node scripts/check-comment-mask-corpus.mjs` | 0 |
| `node scripts/pm/check-governed-queue-guard.mjs --self-test` | 0 |
| `node scripts/pm/check-harness-current.mjs --self-test` | 0 |
| `pnpm --filter @objectstack/lint run check:doc-formula-expressions`
(after `turbo run build --filter=@objectstack/formula
--filter=@objectstack/lint` under the verify lock; a first run exited 3,
prerequisite not met) | 0 |
| `pnpm check:agent-model-declared` | 0 |
| `pnpm check:agent-test-spelling` | 0 |
| `pnpm check:commit-card-trailers` | 0 |
| `pnpm check:cross-package-test-inputs` | 0 |
| `pnpm check:doc-authoring` | 0 |
| `pnpm check:driver-memory-census` | 0 |
| `pnpm check:gitlink-declared` | 0 |
| `pnpm check:nul-bytes` | 0 |
| `pnpm check:pm-expected-skips` | 0 |
| `pnpm check:pm-governed-merges` | 0 |
| `pnpm check:pm-governed-prose` | 0 |
| `pnpm check:pm-skill-id-lint` | 0 |
| `pnpm check:pm-skill-ratchet` (SKILL.md 318 / 319 · os-dev.md 404 /
404 · execution-duties.md 187 / 188) | 0 |
| `pnpm check:refd-timer-probe` | 0 |
| `pnpm check:skill-frame-sync` | 0 |
| `pnpm check:watch-hint-literal` | 0 |
`check:skill-frame-freshness` (local-only family) was not run: the
worktree is at `origin/main` 03de83b plus this one commit, and the
frame block is untouched. The whole-tree farm, the type-check lanes and
`Check Changeset` are CI's; the PR check-runs are the record for those.
No package is touched, so there is no ① build closure and no ② package
test to owe; no changeset is written (`.claude/**` is the fast lane,
nothing is published, `skip-changeset` rides the create).
One interim red worth recording: the first payment chosen for os-dev.md
deleted its commit-trailer rule line, and `check:commit-card-trailers
--self-test` went red because that script quotes the sentence verbatim
and pins the quotation to the file. The line was restored and the
footer-pointer line paid instead; the final run above is on that tree.
## 维护者速读(草稿)
### 改了什么
PM 派发技能的认领模板、os-dev 开发定义和执行席细则,补上 `Metadata-protocol: added | narrowed |
semantic | none` 这一行:席位认领时申报本卡改了元数据作者能写的什么,dev 把它和 `Clause-②:` 一起原样抄进 PR
正文和每个 changeset 正文。三个文件各加一行、各删一行付棘轮账,不动任何脚本。
### 为什么改
你 10-21 的裁决 A 定了「changeset 定级只随元数据协议」,PR #25114
把读这一行的门禁落了地,但派发路径自己还不知道这行:模板只有 `Clause-②:`,os-dev 定义还写着「无则零写、不自造」。结果每个带
changeset 的派发 PR 都会先吃一次 `not-measured-material` 红,changeset 里也没有发布说明分组要的
kind。这张卡是裁决 A 没落地的那一半。
### 风险与代价(含回滚)
纯规则文本,`.claude/**` 受管面 Tier S,CI 门禁(棘轮、id-lint、frame-sync
等)全绿才入队。风险只在删掉的三行是否真的冗余:模板题注(内容在执行席细则与 AGENTS.md)、commit trailer
规则(pre-push 门禁 check-commit-card-trailers 机械强制,AGENTS.md
已载)、执行席细则文首导读(SKILL.md 索引行已载)。回滚 = revert 本 PR,无数据、无运行时影响。
### 席位意见
(席位填写)
### 你要做的
无需动作:Tier S 由 skills 席位契约复核 PASS 后入队落地。
## Acceptance notes
- Out-of-scope observation, carrier: the skills seat at landing —
`scripts/pm/check-skill-line-ratchet.mjs` ceilings for SKILL.md (319 →
318) and execution-duties.md (188 → 187) can be lowered; `scripts/**` is
outside this card's declared surface.
- Out-of-scope observation, noted, not filed —
`scripts/check-commit-card-trailers.mjs` pins one os-dev.md sentence
verbatim, and no index says which rule lines are script-pinned; a future
ratchet payment finds out by running the gate, as this one did.
- Out-of-scope observation, noted, not filed — the first line of this PR
body is the harness-prescribed HTML-comment attribution marker, which
os-dev.md's 干净收尾 forbids in GitHub text; the seat's #25214 review
already queued a skills card for that conflict (its OOS-2), so nothing
new is filed here.
- Standing conflict reported, not silently resolved: the dispatch order
asked the card thread to post the `Claim:` and write the assignee; the
runbook that landed with #25214 (〈卡线程(mode:thread)〉) and AGENTS.md give
both acts to the seat, so the thread handed the seat a dry-run-clean
claim text and started after the seat posted it.
---
_Generated by [Claude
Code](https://claude.ai/code/session_014c2nFpk7VDtwqxvaGaHPu3)_
Co-authored-by: Claude <noreply@anthropic.com>Metadata-protocol: line beside Clause-②: (#25240)1 parent 9340181 commit 345f0b1
3 files changed
Lines changed: 5 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
277 | 277 | | |
278 | 278 | | |
279 | 279 | | |
280 | | - | |
| 280 | + | |
| 281 | + | |
281 | 282 | | |
282 | 283 | | |
283 | 284 | | |
| |||
287 | 288 | | |
288 | 289 | | |
289 | 290 | | |
290 | | - | |
291 | 291 | | |
292 | 292 | | |
293 | 293 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
299 | 299 | | |
300 | 300 | | |
301 | 301 | | |
302 | | - | |
303 | | - | |
304 | 302 | | |
305 | 303 | | |
306 | 304 | | |
| |||
312 | 310 | | |
313 | 311 | | |
314 | 312 | | |
| 313 | + | |
315 | 314 | | |
316 | 315 | | |
317 | 316 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
5 | 3 | | |
6 | 4 | | |
7 | 5 | | |
| |||
63 | 61 | | |
64 | 62 | | |
65 | 63 | | |
66 | | - | |
| 64 | + | |
67 | 65 | | |
68 | 66 | | |
69 | 67 | | |
| 68 | + | |
70 | 69 | | |
71 | 70 | | |
72 | 71 | | |
| |||
0 commit comments