Skip to content

docs(pm-dispatch): the claim comment carries the clause-② line at the start of its own line — the enqueue gate reads that comment only (#17800) - #18208

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-17800-claim-form-three-lines
Sep 14, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-17800-claim-form-three-lines

Conversation

@claude

@claude claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Fixes #17800

What changed

.claude/skills/pm-dispatch/SKILL.md 〈执行座位职责〉 › 认领(先认领后动工), lines :472–:474 on base 99edfd008e: three lines → three lines. 812/812 held; every changed line ≤ 120 bytes. Nothing else in the tree moves — ⛔ not the 〈模板与表〉 template (P5), ⛔ not scripts/pm/check-clause2-carriers.mjs, ⛔ not the reader tolerance that #17098 is about (#17098 remains open), ⛔ no label, sweep or gate, ⛔ not references/core-rules.md (P3).

-- ② 认领评论(英文),固定形状见 模板与表 节;首行以字面 `Claim:` 开头是机器判据。
-- 巡查谓词只认 `Claim:` 这一个拼写且保持严格,修法是全舰队向它收敛,⛔ 不放宽谓词。
-- session ID 不可省;`mode:subagent` 的 dev 与 PM 同会话同 ID,甄别身份是分支。
+- ② 认领评论(英文)照抄 模板与表 节:`Claim:` 首行,`Branch:`、`Clause-②:` 各占一行且行首。
+- 条款②入队闸门只读认领评论且只读行首键:句中提及与另发评论皆读不到,卡即不可读。
+- 谓词保持严格、⛔ 不放宽;session ID 不可省,`mode:subagent` 下 dev 与 PM 同 ID,身份看分支。

Bytes per line (Buffer.byteLength, utf8, measured 2026-09-14T15:05:43Z): before 109 / 114 / 94 → after 116 / 118 / 114; the cap is MAX_LINE_BYTES = 120 in scripts/pm/check-skill-line-ratchet.mjs.

What each new line carries:

Triage direction (comment 5645818231, verbatim)

wherever the charter states the claim form, make the three lines non-optional (Claim: / Branch: / Clause-②: each at the start of its own line in the claim comment) and say why (the gate reads the claim comment only); ⛔ not the checker (right on both limbs); ⛔ not #17098 (the reader's tolerance — a different defect)

Where the charter states the claim form: SKILL.md :472 (the claim-discipline line) and 〈模板与表〉 :799–:811 (the template, already three-line). The rule line was the gap; the template was not.

Premises, read against origin/main 99edfd008e before writing

P1 — holds in substance; the instrument's predicted count was wrong. :472 and :475 read exactly as the dispatch quoted (2026-09-14T14:57Z). The grep 各占一行|各自一行|own line|行首 over SKILL.md, references/*.md, os-dev.md and AGENTS.md returned 5 hits, not 0 (14:57:17Z; the control 机器判据 in SKILL.md → 2, as predicted). Each read: SKILL.md:111 (Maintainer-action: line-initial — a different key), state-machine.md:25 and :42 (Blocked-by: / Release: — different keys), platform-readings.md:352 (CLAIM_COMMENT_MARKER recognises line-initial Claim: — the marker, not the declaration), and platform-readings.md:350–:351 「认领腿 CLAUSE2_KEY_LINE 的轴是行首位置:引用块、项目符、粗体、反引号全容,冒号可在外。只有 # 标题与行中键破它」 — a READING of the checker's axis in the readings reference, not a rule binding the claim comment's shape, and not at the place the charter states the claim form. No line said the gate reads the claim comment only. The rule gap the card names is real; the new :473 is its first rule-layer statement and agrees with that readings line.

P2 — falsified in its literal form; direction unchanged, "why" stronger. grep -c 'Branch:' scripts/pm/check-clause2-carriers.mjs23 (14:57:17Z). The checker DOES read the claim's Branch: line: it imports claimedBranches from check-half-states.mjs (:608), whose reader is line-anchored — /^\s*(?:[-*+]\s+)?>?\s*Branch(?:es)?\s*:\s*(.*)$/gim (check-half-states.mjs :4789) — and governingClaim picks "the newest claim comment from which at least one branch parses" (:4802). An inline Branch: parses to zero and the pair is reported UNJUDGED with the remedy "a Branch: line of its OWN … ⛔ not inside the Claim: sentence, which no reader parses" (check-clause2-carriers.mjs :3194–:3200, pinned at :5209–:5221). So the gate reads ONE comment and all three keys line-anchored: Claim: as the marker (CLAIM_COMMENT_MARKER, check-half-states.mjs :1134), Branch: to resolve which claim governs the pair, Clause-②: as the declaration (CLAUSE2_KEY_LINE, :762). The new :473 says exactly that — 「只读认领评论且只读行首键」 — and neither claims nor denies anything beyond it; :479 「分支名必须带 issue 号」 is untouched. Reported per the three-zone rule (mechanism assumption tested, falsification reported, ruling's intent kept), not as a stop.

P3 — SKILL.md only. references/core-rules.md :109 reads 「认领原子对:一次标签写入完成认领与状态对调,随后留 Claim: 开头的评论并重读全线程。」 (151/151, headroom 0). It states the atomic pair and the Claim:-initial comment and nothing about the other two keys' placement, and the new :472 leaves that sentence true. The placement of Branch: / Clause-②: is form detail of the template (细则), not a principle (核心条款); 〈优先级〉's same-PR sync clause 「一条规则在本文与核心条款一处改动,另一处同 PR 同改」 fires on a rule that lives in both files and changes in one — no core-rules sentence changed meaning. Touching core-rules would have cost a trim in a 0-headroom file for a detail; not taken.

P4 — holds. Base pnpm check:pm-skill-ratchet exit 0 at 2026-09-14T15:00:16Z: 「.claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0)」, 「widest table row is 342 bytes (pin 342; headroom 0)」; base pnpm check:skill-frame-sync exit 0 at 15:00:17Z. git ls-remote --heads origin at 15:13:32Z: only claude/issue-17800-claim-form-three-lines matches issue-17497|issue-17800 — no #17497 branch exists. After the edit origin/main advanced by one commit (d4554d4f5a, #18191, a content/docs page); git diff --stat 99edfd008e origin/main -- .claude/skills/pm-dispatch/ .claude/agents/os-dev.md AGENTS.md is empty (15:15:22Z) — no governed file moved; the merge-base is still 99edfd008e.

P5 — holds. 〈模板与表〉 :799–:811 (read 14:57:13Z) carries Claim: PM loop round N, Branch: …, Clause-②: yes | no each on its own line at column 0. The template is untouched.

Gates — this tree, 4c91f60ef2

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; changeset from merge-base 99edfd008: committed 1, working tree 0, untracked 0 — .claude/skills/pm-dispatch/SKILL.md) derived 16 commands. Each run in the foreground, exit captured by redirect-then-$?:

command exit
node scripts/check-closing-keyword-parity.mjs 0
node scripts/check-closing-keyword-parity.mjs --self-test 0
node scripts/check-comment-mask-corpus.mjs 0
node scripts/pm/check-governed-queue-guard.mjs --self-test 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions 3 → 0 (see below)
pnpm check:agent-test-spelling 0
pnpm check:doc-authoring 0
pnpm check:driver-memory-census 0
pnpm check:nul-bytes 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 0
pnpm check:refd-timer-probe 0
pnpm check:skill-frame-sync 0
pnpm check:watch-hint-literal 0

check:doc-formula-expressions first exited 3 — 「PREREQUISITE NOT MET — the workspace package @objectstack/formula is not built … Nothing was measured」 — not a reading. Built @objectstack/formula and @objectstack/lint under scripts/pm/os-verify-lock.sh (「VERDICT command-exit 0 · held the lock 219s (3m39s) · waited 0s」), rerun → exit 0 at 15:13:30Z.

--ran reconciliation (15:15:20Z): 「Run reconciliation — 16 derived, 16 run, 0 NOT-MEASURED, 0 UNRUN.」 … 「✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED (a DERIVED zero — all 16 recorded an exit code and none of them is 3).」

Post-edit ratchet (pnpm check:pm-skill-ratchet exit 0, 15:08:39Z): 「.claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0)」, 「widest table row is 342 bytes (pin 342; headroom 0)」. pnpm check:skill-frame-sync exit 0: 「the one declared copy of the decision frame is internally coherent」. pnpm check:pm-skill-id-lint exit 0: 「27 file(s) clean」 — the new lines cite no card number. pnpm check:nul-bytes exit 0; the control-character self-scan of SKILL.md → no hits.

Not derived, not run: pnpm lint (repo-wide eslint, CI-owned; markdown is outside its population) and docs:check-links. Not run: pnpm test / pnpm typecheck — the diff touches no package.

Changeset: none. .claude/** publishes nothing (fast lane: no files[] of any released package ships it). No label is written from this container.

维护者速读(草稿)

  • 改了什么/为什么改:认领评论里 Clause-②:(连同 Claim:Branch:)必须各自独占一行、写在行首,因为条款②入队闸门只读认领评论、只按行首读键——写进派发令的句子里或另发一条评论,闸门都读不到,卡就不可读。模板不变、脚本不变,只把规则层这三行改成 3→3(812/812 不动)。
  • 风险与代价(含回滚)/席位意见/你要做的:零运行时影响,纯规则文本,回滚即 revert 本 PR 的一个 commit;席位意见:(留空,席位定稿成评论);你要做的:授权审批后由席位落地(裁决 C)。

Acceptance notes

Clause-②: no


Generated by Claude Code

… start of its own line — the enqueue gate reads that comment only

Three claim-discipline lines in SKILL.md 〈执行座位职责〉, 3 → 3 (812/812 held,
every line ≤ 120 bytes):

- the claim comment copies the 〈模板与表〉 template — `Claim:` as the first
  line, `Branch:` and `Clause-②:` each on a line of its own, at the start of
  the line;
- why: the clause-② enqueue gate reads only the claim comment and only
  line-initial keys — a key mentioned inside a sentence or posted as a
  separate comment is unread, and the card is then illegible;
- the readers stay strict and are never widened; the session-ID and
  subagent-identity clauses of the old third line are kept, compressed.

The template itself and the checker are unchanged.

Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8
Co-authored-by: Claude <noreply@anthropic.com>
@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: 4/4 CONTRACT_REVIEW_TIER
Head-sha: 4c91f60ef278ce7221f92e82a911d5ae6631dde5

In-seat record on the GOVERNED rules layer (.claude/skills/pm-dispatch/SKILL.md — one of the four pieces; the landing waits for an authorized approval under ruling C), domain:skills execution PM seat, 2026-09-14T15:23Z. Spelled from node scripts/pm/check-clause2-carriers.mjs --template on origin/main; the stamp control is the reviewing round's own count off the seat's transcript. The dev's os-dev-report is the newest comment on #17800; the judgments below are the seat's own reading of the diff and of the head in its own worktree.

① Derived judgments

  • One 3→3 replacement, net 0 lines (git diff --numstat 3/3 against merge-base 99edfd008e): :472 binds the claim comment to the 〈模板与表〉 shape — Claim: first line, Branch: and Clause-②: each on its own line at the start of the line, 照抄 (116 B); :473 states the reason in the line — the clause-② enqueue gate reads the claim comment only and only line-initial keys, so an in-sentence mention or a separate comment is unread and the card is illegible (118 B); :474 carries the old :473 + :474 compressed — strict predicate, ⛔ never widened; session ID mandatory; under mode:subagent the dev and the PM share the ID and identity is the branch (114 B). Every line ≤ 120 B as check-skill-line-ratchet.mjs measures.
  • Ratchets and frame, seat's own run on the head: SKILL.md 812/812 (widest row 342/342); frame block :733–:754 md5 3327d02c56f8a0eca88569dad2270f32 identical to main. check:skill-frame-sync, check-governed-prose, check-skill-id-lint exit 0 in the seat's worktree; check-clause2-carriers --pair 18208 exit 0.
  • The card's direction, mapped: the triage's three-line shape (5645818231) is bound at :472; the why at :473; ⛔ template untouched (it already carried the three keys), ⛔ checker untouched, ⛔ [finding] check-clause2-carriers reads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098's reader tolerance untouched, core-rules untouched (its :109 states only the atomic pair and the Claim:-initial comment, still true). The dev's P2 correction stands: the gate reads all three keys line-anchored (claimedBranches / governingClaim in check-half-states.mjs), and the new wording is true of all three — this seat's dispatch word was wrong on that limb, recorded on the card's ACCEPT.
  • Facts layer agreement: platform-readings :350–:351 already reads the checker's axis as line position; :473 agrees, no restatement (dev's grep, seat's re-read).
  • Gates as reported by the dev: 16 derived families, all exit 0 after one PREREQUISITE build under the verify lock, reconciled 16/16 with --ran; control-byte scan clean; 0 MCP calls, 4 REST writes. CI on the head at the seat's read: 12 success, 8 skipped, 4 in progress, two reds outside the diff — the docs-links job died before any link was checked ([finding] Check Documentation Links goes red without running the link check — lychee-action's binary download from the releases CDN failed on three separate PRs today #8238 shape; the seat's one re-run queued) and the changeset check read no skip-changeset (the dev container writes no labels; the seat hung it and read it back) — the landing step re-reads it green before anything moves.

② Semver level

None. .claude/** only; skip-changeset applied and read back; nothing published.

③ Boundary flags

  • Governed rules layer (SKILL.md). Four-piece applied: ACCEPT on the card, draft kept, needs-user-decision on this PR, reviewers os-zhuang + hotlong requested. ⛔ This seat never approves; ⛔ no ready / enqueue / auto-merge before an authorized APPROVED review (os-zhuang / hotlong, latest-decisive, not dismissed); after one exists this seat lands per ruling C.
  • Clause ②: no, judged the same. A claim-discipline line binds a shape the gate already reads; no accepted set, contract or gate strength moves; ⛔ nothing mechanised.
  • Vocabulary for later controls: the new lines spell 照抄 模板与表, 只读认领评论且只读行首键, 卡即不可读; a post-landing grep fires on 只读行首键 / 各占一行且行首.
  • Observed, successor owed: the seat's own dispatch orders write the Clause-② key inside a sentence (the very form :473 now names) — the seat's next orders carry the template lines verbatim instead; Lock 1 is inert in running sessions: the harness loads .claude/settings.json and os-dev.md from the shared checkout at clone time — an MCP-created PR after both deny lists landed, and the charter's constant-claude[bot] lines are false #18205 (queued, p2) carries the write-channel and propagation lines and is serial behind this PR on SKILL.md.

Implemented-by: claude/issue-17800-claim-form-three-lines
Reviewed-by: session_01DAcomhvR9kKizeYgg89Vo8

VERDICT: PASS


Generated by Claude Code

@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

维护者速读

改了什么:认领纪律的三行重写,不加行:认领评论必须照抄模板——Claim: 在首行,Branch:Clause-②: 各自独占一行、写在行首;并把原因写进规则本身——条款②入队闸门只读认领评论、只按行首读键,写进派发令句子里或另发一条评论,闸门都读不到,卡就不可读。原「谓词严格不放宽」「session ID 不可省、身份看分支」两行压成一行保留。模板不动、脚本不动、812/812 不动。

为什么改:cli 席自己立了这张卡,第二天写的三份派发令又全部踩中同一个坑(把「必须独占一行」写在一句话里),说明靠注意力修不了;规则层没有一行说这个形状是硬性的、也没说为什么。

风险与代价(含回滚):纯规则文本,零机械化;回滚即 revert。

席位意见:派发令里 dev 指出本席的前提 P2 写错了(闸门也读 Branch: 行),已采信、记在 ACCEPT 上;新文对三个键都成立。两处 CI 红都不在 diff 内(链接检查的二进制下载失败、changeset 检查缺标签),本席已重跑一次、补挂 skip-changeset,落地前重读绿。

你要做的:os-zhuang 或 hotlong 一次 approve;之后由本席落地。是 / 否?


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 14, 2026 15:27
@os-zhuang
os-zhuang enabled auto-merge September 14, 2026 15:27
@claude

claude Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

Landing under ruling Cdomain:skills seat, 2026-09-14T15:28Z. An authorized APPROVED review exists: 5199625770 by os-zhuang (GOVERNED_APPROVERS), submitted 2026-09-14T15:27Z on the reviewed head 4c91f60ef278ce7221f92e82a911d5ae6631dde5, not dismissed. The review of record naming that head is 5666346192 (**VERDICT: PASS**, ACCEPT 5666345791 on #17800); check-clause2-carriers --pair 18208 re-read exit 0 at 2026-09-14T15:28Z; CI on the head at that read: 13 success / 11 skipped on the latest run per check, the Governed Surface Queue Guard and Lint & Repo Gates re-running on the approval, no failure on a latest run (the earlier docs-links red was the #8238 download shape, re-run once and green; the earlier changeset red is superseded by the skip-changeset runs). The approver flipped the PR ready and armed auto-merge at 2026-09-14T15:27Z (no queue ref yet at the read — it enqueues when the checks settle), so the seat leaves auto-merge as set, cleared needs-user-decision in this act (read-back: documentation, size/xs, skip-changeset), and will read the landing by content on origin/main (只读行首键 / 各占一行且行首 at SKILL.md :472–:473). Next on SKILL.md after this lands: #18205 (p2, maintainer-directed), then #17497.


Generated by Claude Code

@os-zhuang
os-zhuang added this pull request to the merge queue Sep 14, 2026
Merged via the queue into main with commit af3add1 Sep 14, 2026
38 of 40 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-17800-claim-form-three-lines branch September 14, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants