Skip to content

docs(pm-dispatch): director duty one puts to the maintainer only the landings no authorized account approved, one plain line each - #24259

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-24241-director-recognition-rows
Oct 18, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-24241-director-recognition-rows

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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.

 - 召唤时枚举近期落地的受管 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

…landings no authorized account approved, one plain line each

The director charter's duty one now says which audit rows are put to the
maintainer for recognition: only governed-path or size-limb landings that
carry no APPROVED review from an account in GOVERNED_APPROVERS; a landing
with such a review is recorded in the summary ledger and not put. Each row
put carries one plain-words line on what the change did, read from the
diff or body, not from the title alone. Provenance: the maintainer's order
of 2026-10-18, quoted verbatim in the card body.

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

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: b20dbc827388efdb34dcb3bd39fddf2ff6532059
Local-runs: none
Scope: .claude/skills/pm-dispatch/references/lanes/director.md + scripts/pm/check-governed-queue-guard.mjs (the GOVERNED_APPROVERS constant the new rule names), scripts/pm/check-governed-merges.mjs (the sweep the rule's rows come from), the maintainer's order quoted on card 24241 (read this act)

Face: governed rules text (.claude/**, Tier S) — no published schema, no narrowing line, Clause-②: no. Inputs: card 24241 (body with the order verbatim, the claim 6245553701, the order 6245558757, the report 6245780860) and PR 24259 (body, file list, the net diff +3/−0 at the head above); the head's check-runs at this read were green but for one aggregate still running — the landing check reads them again, this record judges the diff. Rendered in seat at 2026-10-18T04:51Z; the seat's served tier equals the value of CONTRACT_REVIEW_TIER.

① Derived judgments

  1. The rule's accept set (which landings reach the maintainer for recognition). BEFORE: 〈职责一〉 said to enumerate recent governed landings and their ## Contract review records and keep a summary ledger; it did not say which rows go to the maintainer, so every audited landing could be put. AFTER: only a landing (governed path or the size limb alike) that carries no APPROVED review from an account in GOVERNED_APPROVERS; one with such a review is recorded in the summary ledger and not put. Right: it is Scope 1 of the card, which quotes the order 「以后只呈"没有任何授权账号批准"的受管合并」; the constant is named, never the account list, so the rule follows the queue guard (SKILL.md 「批准判定单源 = 队列守卫常量 GOVERNED_APPROVERS」).
  2. The row's content. AFTER: each row put carries one plain-words line on what the change did, read from the diff or the body, ⛔ never the title alone. Right: Scope 2, the order's 「并且每行写一句改了什么」.
  3. Provenance: 「出处:维护者 2026-10-18 令,原话载卡 24241 正文。」 in the references' own 出处: convention; no #, no number inside an operative sentence (pnpm check:pm-skill-id-lint 87 files clean at the dev's run; CI's Lint · repo & tooling gates success on the head). Right. The card's Scope 3 spoke of a filing comment by id; the card has none (its comments are the claim and the order), so the body, which carries the order verbatim, is the filing record — the dev's reading is accepted.
  4. Scope 4 held: scripts/pm/check-governed-merges.mjs untouched; the clause 「the seat reads each row's reviews through REST」 is in the PR body, not the charter (it would have cost a fourth line). The sweep prints merged_by and no approver column, so the REST read at summon time is how rule 1 is applied — the body says so.
  5. Line budget. 66 → 69 lines, ceiling 72 unchanged (pnpm check:pm-skill-ratchet: headroom 3), the three lines 119 / 117 / 59 bytes under the 120-byte row pin. The order preferred net 0 and offered a fold as the fallback; the dev declined the fold as a re-wrap bought for new content (SKILL.md's ratchet row 「⛔ re-wrap 不得用作筹行,新增以删减付账」, which the order itself said outranks it) and found nothing the order made redundant. Accepted: the lines are the maintainer's order, the ceiling does not move, no raise is claimed; the headroom spent is recorded on the seat post.
  6. Public surface: none. .claude/** is unpublished; no code, gate, workflow or script changed.
  7. The dev's batch replay (summon 44's five rows re-read through REST this act by the dev): four objectstack rows carry an os-zhuang APPROVED and drop to the ledger; cloud 2921 (merged by hotlong, no review on the director's own reading 6227733044; the cloud repository answers 403 to a subagent of this session, so NOT MEASURED here) stays as the one row. The replay matches the card's problem statement (four of five already approved).

② Semver level

.claude/** publishes nothing: skip-changeset declared in the pr_create stroke (the PR carries skip-changeset, documentation, size/xs), Check Changeset success on the head. Body line 2 Clause-②: no: right.

③ Boundary flags

  • Dev reading note (not a re-decision): a landing merged by hand by an account in GOVERNED_APPROVERS with no review (cloud 2921) is still put under the rule as written, because the order says 「批准」 and the queue guard counts an APPROVED review. SKILL.md 〈路径分叉〉 ② separately says 「人工直合即审核记录」. The seat lands the rule as the order words it and does not widen it; whether a hand merge by an approver account counts as 「批准」 for recognition is the maintainer's to say, carried as a non-blocking question in the 速读 and on the seat post, not a decision card (no card is blocked on it).
  • Dev observations, outside the filing gate (no reach:), Acceptance notes only: AGENTS.md Prime Directive 14's 「with its approver and merger」 versus the sweep's merged_by-only print; scripts/pm/check-prior-rulings.mjs's header cites director.md:45 (comment line-number drift). Carrier: none; the seat post's carried pointers gain both lines.
  • open_questions: none. Deviations D1–D8 read: the fold refusal (judged above); the fourth-line clause moved to the body; the filing-comment reading; cloud NOT MEASURED; two pushes (rule 1's probe); trailer and footer forms per AGENTS.md; the formula/lint build the whole-tree gate needs; the re-run of nine gates whose first-pass logs were overwritten — all accepted.

Implemented-by: claude/issue-24241-director-recognition-rows
Reviewed-by: session_01QBcLjVCmcWbZEk6qhYMib2

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读

改了什么:总监席章程(.claude/skills/pm-dispatch/references/lanes/director.md)「职责一」加三行,66→69 行(上限 72 不动)。以后呈您认定的受管合并,只限没有任何 GOVERNED_APPROVERS 账号给过 APPROVED review 的那些(受管路径与超 3000 行两类同);已有授权账号批准的只记席位台账,不再呈您。呈您的每一行附一句白话说明这次改动做了什么,读自 diff 或正文,⛔ 不只凭标题。第三行是出处(您 2026-10-18 的原话,载于卡 24241 正文)。

为什么改:执行您的原话「以后只呈"没有任何授权账号批准"的受管合并,并且每行写一句改了什么。这要改总监席的规则,开一张卡给 skills 席去改。」上一场总监呈了 5 行光秃秃的 PR 号,其中 4 行您早已批准。dev 用新规则回放那 5 行:4 行落台账,只剩 cloud 2921(hotlong 亲手合并、无 review)一行会呈,并附一句说明。

风险与代价(含回滚):只改给 agent 读的章程文本,不动代码、门禁与脚本。代价:授权账号已批准的落地不再过您的眼,只在台账可查。回滚 = 删这三行(revert 本 PR 一个提交)。

席位意见:ACCEPT。席内达档契约复核 PASS(6245828997,head b20dbc82)逐条对照了您的两条指令与新三行;用了 3 行净增(余量 6→3)而非派发令偏好的净 0,因为可折的两行相加超 120 字节上限、且折行买新内容是棘轮禁止的筹行方式,席位认可 dev 的判断。head 38 个 check 26 绿、12 预期跳过、0 红。Tier S(.claude/**)由席位落地,不需要您的批准。

你要做的:无。一个非阻塞问题留给您:授权账号(如 hotlong)亲手合并、没有 review 的受管落地,按您原话「没有任何授权账号批准」的字面仍会呈您(如 cloud 2921);若亲手合并也算「批准」,在本 PR 评论一句,席位补一张一行 PR。

席位核对

Seat domain:skills#1 · session_01QBcLjVCmcWbZEk6qhYMib2 (sunhaolin) · read 2026-10-18T04:54Z · head b20dbc827388efdb34dcb3bd39fddf2ff6532059 · verdict: ACCEPT (Tier S — the seat lands it after the two pre-landing checks)

Implemented-by: claude/issue-24241-director-recognition-rows
Reviewed-by: session_01QBcLjVCmcWbZEk6qhYMib2

  1. Shape. Draft PR against main; body line 1 Fixes #24241, line 2 Clause-②: no (copied from claim 6245553701). The only closing keyword in the body is that line; PR numbers in the replay table are bare numbers beside no closing verb. File list: .claude/skills/pm-dispatch/references/lanes/director.md (+3/−0). mergeable true, mergeable_state clean at this read.
  2. Premise and acceptance, read by the seat. The maintainer's two rules are each one line in 〈职责一〉 under the enumeration bullet (contract review 6245828997 ①.1–①.3); the constant is named, never the account list; the provenance line follows the 出处: convention with no #; Scope 4 held (check-governed-merges.mjs untouched). The dev's replay of summon 44's five rows (four os-zhuang APPROVED rows drop; cloud 2921 stays) matches the card's problem statement. Line budget 66→69 within the 72 ceiling (the three lines 119/117/59 bytes under the 120-byte row pin); the order's net-0 preference yielded to the ratchet row the order itself said outranks it.
  3. Gates — check-runs pinned to head b20dbc82. 38 completed: 26 success (Lint & Repo Gates, TypeScript Type Check, Test Core, Governed Surface Queue Guard, Check Changeset, every Lint · and Type Check · lane, the four claim checks, Dogfood Regression Gate), 12 skipped all in the roster (check-expected-skips.mjs --pr 24259 OK, exit 0), 0 failed. check-governed-merges.mjs --pr 24259: GOVERNED, Tier S, .claude/** ×1, +3/−0 under the 3000-line threshold. The dev's local subset: 17 of 17 derived families exit 0, --ran reconciled; check:pm-governed-prose, check:pm-settings-deny-roster, check:pm-prior-rulings run beyond it, exit 0.
  4. Changeset. None owed (.claude/** unpublished); skip-changeset declared in the pr_create stroke and present, Check Changeset success. The seat concurs: the dev's declaration confirmed, not forwarded.
  5. Report hygiene. mcp_calls 1 (add_repo for cloud, read access, refused — a read, no GitHub write tool); api_writes 2 relay strokes (pr_create with assignee and labels; the report comment), no PATCH/PUT/DELETE; two git push. Deviations D1–D8 answered in the contract review ③. cloud 2921's reviews are NOT MEASURED by the dev (403 from a subagent) and rest on the director's own reading 6227733044.
  6. Out of scope. Two observations in the PR's Acceptance notes (Prime Directive 14's 「with its approver and merger」 versus the sweep's merged_by-only print; check-prior-rulings.mjs's stale director.md:45 citation), neither inside the filing gate; carried on the seat post, not filed. One non-blocking question to the maintainer (hand merge by an approver account as 「批准」) in the 速读 above.
  7. Landing (Tier S). Pre-landing check ①: the ## Contract review PASS record 6245828997 names this head. Check ②: every check green or an expected skip. Next act: relay pr_ready then automerge_enable; the probe-table landing comment follows when the queue ref is gone and origin/main carries the commit. subscribe_pr_activity is live on this PR since 2026-10-18T04:48Z.

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 18, 2026 04:55
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 18, 2026 04:55
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 18, 2026
Merged via the queue into main with commit fb6fb24 Oct 18, 2026
39 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-24241-director-recognition-rows branch October 18, 2026 05:06
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

Development

Successfully merging this pull request may close these issues.

director charter: put to the maintainer only the governed merges no approver account approved, each with one line on what changed (maintainer order)

2 participants