Skip to content

Commit fb6fb24

Browse files
docs(pm-dispatch): director duty one puts to the maintainer only the landings no authorized account approved, one plain line each (#24259)
Fixes #24241 Clause-②: no ## What this changes One file, `.claude/skills/pm-dispatch/references/lanes/director.md`, section 〈职责一:契约复核记录事后审计与抽查(可选)〉: three lines inserted directly under the enumeration bullet, where the charter already speaks of the audit. Nothing else in the file moves. ```diff - 召唤时枚举近期落地的受管 PR 及其 `## Contract review` 记录,查复核质量与漏网。 +- 呈维护者认定的只限无 `GOVERNED_APPROVERS` 账号 `APPROVED` review 的落地,受管路径与行数肢同。 +- 有者只记摘要台账不呈;所呈每行一句白话讲改了什么,读自 diff 或正文,⛔ 不只凭标题。 +- 出处:维护者 2026-10-18 令,原话载卡 24241 正文。 ``` - **Rule 1 (card Scope 1).** The rows put to the maintainer for recognition are limited to landings, governed path and size limb alike, that carry no `APPROVED` review from an account in `GOVERNED_APPROVERS`. The charter names the constant, never its account list, so the rule follows the queue guard (SKILL.md: 「批准判定单源 = 队列守卫常量 `GOVERNED_APPROVERS`」). A landing that carries such a review is recorded in the summary ledger and is not put to the maintainer. - **Rule 2 (card Scope 2).** Each row put to the maintainer carries one plain-words line on what the change did, read from the diff or the body, never from the title alone. - **Provenance (card Scope 3).** One line in the references' own `出处:` convention (as `instrument-discipline.md` writes it): the maintainer's order of 2026-10-18, quoted verbatim in this card's body. There is no `#` before the number and no number inside an operative sentence (`pnpm check:pm-skill-id-lint` reads this file). The card body is the filing record. The card has no separate filing comment (its two comments are the claim and the dispatch order), so the line cites the card. - **Out of scope (card Scope 4).** `scripts/pm/check-governed-merges.mjs` is untouched: no new column, gate, flag or script. Its sweep prints `merged_by` only, so the seat reads each candidate row's reviews through REST at summon time. The charter does not spell that clause out because it would cost a fourth line (see the line budget below). ## How the new rule would have changed summon 44's batch Ledger block B on the director seat post (comment 6243622639) put five bare rows to the maintainer. I read each row's reviews through REST in this session on 2026-10-18: | Row | Merged by | `APPROVED` by a `GOVERNED_APPROVERS` account | Under the new rule | |---|---|---|---| | objectstack 24211 | `os-zhuang` | `os-zhuang`, 2026-10-17T21:21Z | dropped: ledger only | | objectstack 23825 (Version Packages) | `os-zhuang` | `os-zhuang` twice, 2026-10-17T06:12Z and 07:00Z | dropped: ledger only | | objectstack 23824 | `os-zhuang` | `os-zhuang`, 2026-10-16T13:39Z | dropped: ledger only | | objectstack 23906 | `os-zhuang` | `os-zhuang`, 2026-10-16T12:45Z | dropped: ledger only | | cloud 2921 | `hotlong` | none, on the seat's own reading (comment 6227733044: "no governed path, no review"). NOT MEASURED here: the cloud repository answers 403 to this session | stays: the one row put to the maintainer | So four rows drop and one survives. The surviving row would carry one plain line on what cloud 2921 did (+5,911/−270 over 23 files on the seat's reading), read from its diff or body. This session cannot read the cloud repository, so that line is the seat's to write at the next summon. A reading note for the seat's contract review, not a re-decision: cloud 2921 was merged by `hotlong`, which is itself an account in `GOVERNED_APPROVERS`, with no review at all. Under the order as written (an `APPROVED` review), a merge click is not an approval, so the row stays. That matches the question the recognition answers under AGENTS.md Prime Directive 14 ("a merger the maintainer does not recognise"): `merged_by` names an account, not a principal. ## Line budget - `director.md`: **66 → 69 lines**, ceiling **72 unchanged**. `pnpm check:pm-skill-ratchet` prints "director.md is 69 lines (ceiling 72; headroom 3)". The three new lines are 119, 117 and 59 bytes, inside the ratchet's 120-byte line cap. - **Why not net 0, as the order preferred:** - The ratchet caps every line at 120 bytes, and the enumeration bullet already spends 104 of them. Neither rule fits in its tail, so each rule needs its own line and the provenance a third. - The order makes nothing in 〈职责一〉 redundant, so there is no content to delete in exchange. - The order's fallback was to fold L36 into the bullet above it as a lossless merge. That is a re-wrap bought for new content, which SKILL.md's ratchet row forbids (「⛔ re-wrap 不得用作筹行,新增以删减付账」) and `.claude/agents/os-dev.md` repeats. The order says those files win where they conflict with it. (The two lines together are also over the 120-byte cap.) - The ruling of record orders all three lines, and they fit the file's existing headroom, so no ceiling moves and no raise is claimed. ## Verification (at HEAD `b20dbc82`) Derived after the final commit with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`, with no paths. The change set came from merge base `f5ef054a7`: 1 path, +3/−0. That gives 17 commands. I ran all 17 locally and captured each exit code before any pipe: | Command | Exit | Verdict line (excerpt) | |---|---|---| | `node scripts/check-closing-keyword-parity.mjs` | 0 | OK (3 parsers agree on all 9 keywords …) | | `node scripts/check-closing-keyword-parity.mjs --self-test` | 0 | 40 assertions, 5 mutations … driven to red | | `node scripts/check-comment-mask-corpus.mjs` | 0 | 9457 files, 0 disagree, 0 unparseable | | `node scripts/pm/check-harness-current.mjs --self-test` | 0 | all 26 cases passed | | `pnpm --filter @objectstack/lint run check:doc-formula-expressions` | 0 | 22 record-scoped formula example(s) … judged clean | | `pnpm check:agent-test-spelling` | 0 | 0 violations | | `pnpm check:cross-package-test-inputs` | 0 | 31 package(s) read outside themselves, all declared | | `pnpm check:doc-authoring` | 0 | 53 published skill files clean … no growth | | `pnpm check:driver-memory-census` | 0 | every declaration is ledgered | | `pnpm check:gitlink-declared` | 0 | 0 gitlink(s) | | `pnpm check:nul-bytes` | 0 | 12120 text file(s) … no raw ASCII control bytes | | `pnpm check:pm-governed-merges` | 0 | --self-test: 500 assertions | | `pnpm check:pm-skill-id-lint` | 0 | 87 file(s) clean | | `pnpm check:pm-skill-ratchet` | 0 | director.md is 69 lines (ceiling 72; headroom 3) | | `pnpm check:refd-timer-probe` | 0 | 9451 source file(s) swept | | `pnpm check:skill-frame-sync` | 0 | the one declared copy of the decision frame is internally coherent | | `pnpm check:watch-hint-literal` | 0 | 74 declaration(s) across 4 rostered name(s) | - **Reconciliation.** `--ran` printed "17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED (a DERIVED zero — all 17 recorded an exit code and none of them is 3)". - **One refusal along the way.** `check:doc-formula-expressions` first refused with exit 3 (PREREQUISITE NOT MET: `@objectstack/formula` and `@objectstack/lint` were unbuilt in this fresh worktree). I built them with `pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --concurrency=2` under the verify lock (VERDICT command-exit 0), and the re-run was green. - **Run beyond the derivation, all exit 0.** `pnpm check:pm-governed-prose`, `pnpm check:pm-settings-deny-roster` (its roster lives under `.claude`) and `pnpm check:pm-prior-rulings` (its header cites `director.md`). - **Not owed here.** The diff touches no package, so there is no build closure and no package test. It changes no tested behaviour, so there is no ablation or reverse verification. `test:repo`, `pnpm lint` and the type-check lanes run in CI. ## Acceptance notes - AGENTS.md Prime Directive 14 says the post-merge audit "lists every governed-surface merge with its approver and merger". Its sweep prints `merged_by` only; `--pr` mode reads the approval only for the size lift. This is an observation, not filed: the seat's REST read covers it, and the card keeps the script as it is. Carrier: none. - The header of `scripts/pm/check-prior-rulings.mjs` cites `references/lanes/director.md:45` for the `git grep` prescription. That line was already at L52 on `main` and is L55 after this PR. This is comment drift, not filed. Carrier: none. ## 维护者速读(草稿) **改了什么**:总监席章程「职责一」加了三行。以后请您认定的受管合并,只限没有任何授权账号(`GOVERNED_APPROVERS`)给过 `APPROVED` 的那些;已有授权账号批准的,只记进席位台账,不再呈给您。呈给您的每一行都附一句白话,说明这次改动具体做了什么,从 PR 的改动或正文读出,不只看标题。 **为什么改**:执行您的原话「以后只呈"没有任何授权账号批准"的受管合并,并且每行写一句改了什么。」上一场总监呈了 5 行光秃秃的 PR 编号,其中 4 行您的账号早已批准。按新规则那 5 行只剩 1 行(cloud 2921,没有任何 review),并附一句说明。 **风险与代价(含回滚)**:只改给 agent 读的规则文本,不动代码、门禁或脚本;文件 66→69 行,仍在 72 行上限内。代价:授权账号已批准的落地不再请您过目,只在台账可查。回滚:删掉这一个文件里新加的三行即可。 **席位意见**: **你要做的**:无需操作。这是 Tier S(`.claude/**`)改动,席位做完契约复核后自行落地。cloud 2921 是 hotlong 合并、但没有 review,按您的原话仍会呈给您;如果您认为合并点击也算批准,告诉席位即可。 --- _Generated by [Claude Code](https://claude.ai/code/session_01QBcLjVCmcWbZEk6qhYMib2)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent ef9557c commit fb6fb24

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

‎.claude/skills/pm-dispatch/references/lanes/director.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030

3131
- 本职是审计位,非放行链:放行常设归派发席席内复核,归属与全链见 `../contract-review.md`。
3232
- 召唤时枚举近期落地的受管 PR 及其 `## Contract review` 记录,查复核质量与漏网。
33+
- 呈维护者认定的只限无 `GOVERNED_APPROVERS` 账号 `APPROVED` review 的落地,受管路径与行数肢同。
34+
- 有者只记摘要台账不呈;所呈每行一句白话讲改了什么,读自 diff 或正文,⛔ 不只凭标题。
35+
- 出处:维护者 2026-10-18 令,原话载卡 24241 正文。
3336
- 非机械 CI 红交回具名读者;机械红可接手,经派发 dev 执行。
3437
- 处理三分支之一,收尾 PASS 且工已完 ⇒ 跟到合并为止。
3538
- 非受管 code PR 绿加 ACCEPT 即入队落地;受管面两层落地见 `../contract-review.md` 落地前检②。

0 commit comments

Comments
 (0)