docs(pm): the director seat is a decision function — concurrent summons, no handover - #16346
Conversation
… summons, no handover The director charter's 授权与形态 described a single-occupancy seat: a takeover notion, an incumbent, and a closing brief owed before another summon starts. State instead that the seat only adjudicates and holds no in-flight state, so any number of summons run at once, a new summon neither waits for, stands down nor supersedes another, and the takeover/incumbent notion is retired here. What still holds is written as rules about the artefacts, not the seat: a ruling is recorded on its card before the label moves, two summons never write one card's state in the same stroke (the comment thread is the ordering, the last ruling recorded wins, and a summon reads the thread before ruling), and the seat post's status block carries one line and its own audit anchors per summon instead of a single occupant. Line-neutral at the pinned 72: the two new rules are paid for by two folds inside the same section — the summon guard folds into the authorization line, and the standing-release rule folds into the parking line, dropping the restated 召唤节奏 clause and the 与分诊席同款 claim the ruling retires. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
|
ACCEPT — contract-tier review of PR #16346, head Implemented-by: Verified in a detached compare worktree at the PR head, not from the report:
Ruling on the open question — A. The generic seat mutex (SKILL.md 〈入口与角色〉 readings one and two, the 自退 rule, and core-rules' digest of it) still makes a director summon stand down when it finds an active session with no closing brief, which is what the ruling forbids. One carve-out sentence naming the director seat exempt from those readings is the tightening shape: enumerated, greppable, the generic rule untouched for Out-of-scope finding #16343 (seat-post-protocol's single-occupancy vocabulary and its 「标题词表不扩」 line, the SKILL.md / core-rules mutex sentences, and the stale quotation of the old authorization sentence in the ratchet map's comment): graded Landing regime: governed ( Generated by Claude Code |
维护者速读事情:您昨天裁的「总监席只是做裁决,开多少场都没关系,也不用交班」,现在写进了总监席的岗位说明。以前那份说明只写得下一个占席人:第二场召唤要么等前一场的收班简报,要么等您出面让前一场停下,于是每次并行都要您临场再分一次工。 改了什么:两句规则。一句说座位形态——只出裁决、不持在飞状态,多场并行、无交班,新场不等、不停、不替旧场,不再有「接管」「在任者」;一句说并行时怎么不撞车——裁决先记在卡上再动标签,同一张卡同一笔只由一场写,卡上的评论线程就是先后顺序,后记的算数,动手前先读线程。座位贴仍是一张,状态块改成每场一行、各记各的审计锚,不再有「谁在任」。 没动什么:档位保险丝、不达档只做免档整理、不占车道、永不认领 backlog,一字未改。文件仍是 72 行,两条新规则由同一节两处合并腾出,合并只删了一句描述节奏的话,没有规则丢失。 要请您留意的:通用座位规则(SKILL.md 的开轮互斥、座位贴协议的状态词表)仍是「一席一人」,与这条裁决在总监席上冲突——dev 已立卡 #16343,席位裁定在 SKILL.md 加一句总监席豁免,等 flight A 的 PR 合并后随该卡落地,不在本 PR 里。 席位意见:建议合并。受管面,人工合并;合并后 #16172 自动关闭。 Generated by Claude Code |
Fixes #16172
Executes the ruling recorded on that card at 14:10Z — neither option the card proposed — as governance text in ONE file:
.claude/skills/pm-dispatch/references/lanes/director.md, section 授权与形态. The director seat is a decision function: any number of summons run concurrently, no closing brief is owed before another starts, and a new summon neither waits for, stands down nor supersedes another. The takeover / incumbent notion is retired for this seat; what still holds is restated as rules about the artefacts, not about the seat.Governed surface (
.claude/**): draft PR, human merge. No seat flips this ready, enqueues it, or arms auto-merge.Before to after, line by line
origin/main3e270d4)- 授权面 = 由人工定期指挥,负责处理 contract-review 类别的和需要决裁的。8
- 人工召唤,⛔ 无 Routine、无 cron、无常设舰队位。- 授权面 = 人工定期召唤,处理 contract-review 与需决裁项;⛔ 无 Routine、无 cron、无舰队位。(fold; pays for one new line)- 只出裁决不持在飞状态:多场并行、无交班,新场不等不停不替,⛔ 无接管无在任者。(NEW — the ruling)- 裁决先记卡再动标签;同卡同笔只一场写,线程即顺序、后记者胜,裁前先读线程。(NEW — the artefact rules)- 召唤间隔里决策卡与审计窗口停放是设计安全态;召唤节奏即决裁与审计节奏。11
- 复核放行常设归派发席席内,不因本席未被召唤而停。- 召唤间隔里决策卡与审计窗口停放是设计安全态;复核放行不在其内,常设归派发席席内。(fold; pays for the second new line)- 双射 carve-out:一张 `pm:seat` 座位贴、四段协议照旧,与分诊席同款。- 双射 carve-out:一张 `pm:seat` 座位贴,四段照旧;状态块逐场一行,各记己锚,⛔ 无占席人。(rewrite)Unchanged in the section, per the ruling: the entry line, the tier constant, the per-summon downgrade fuse, the 不达档 handling, 不占
domain:*, 永不认领 backlog. Nothing outside 授权与形态 moves; no other file is touched.What each fold deletes
The ratchet's currency is deleted content, never a re-wrap, so both folds carry a real cut rather than only a join:
Line-neutral at the pinned ceiling: 72 lines before, 72 after (
check-skill-line-ratchet:director.md is 72 lines (ceiling 72; headroom 0)). Widest line in the file is unchanged at 119 bytes (line 3, untouched); every rewritten line is at or under 118 bytes byLC_ALL=C awk. Register unchanged: rules only, no dates, no quotations, no issue numbers, no session ids, no model names.Gates
Derived on the final file list with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, every command run, reconciled with--ranat headdb7cc8f232:Named beyond the derived union, all at
db7cc8f232:pnpm check:pm-skill-ratchet(self-test + live) — exit 0;director.md is 72 lines (ceiling 72; headroom 0).pnpm check:pm-skill-id-lint,pnpm check:skill-frame-sync,pnpm check:pm-governed-prose,pnpm check:pm-half-states(self-test) — exit 0 each.node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/lanes/director.md— exit 3,GOVERNED — a human merge is the review record for this PR.pnpm lint(eslint . --no-inline-config) throughbash scripts/pm/os-verify-lock.sh(slotissue-16172) —VERDICT command-exit 0 · held the lock 110s. Not a narrowed run: the whole tree was linted.check-half-statespins any sentence rewritten here — every deleted sentence was grepped overscripts/and.claude/hooks; the single hit is a descriptive comment, reported below.Every exit code was captured before any pipe (
cmd > file 2>&1; EXIT=$?), and each verdict above is the gate's own printed line.Reported, not fixed
Filed as #16343: the generic seat-post protocol (
references/seat-post-protocol.md, its 状态词表 on line 9 and the 在任 / assignee / 接管 lines around it) and the seat-mutex sentences inSKILL.mdandreferences/core-rules.mdstill describe a single-occupancy seat. Those files are held by other flights, so no sentence in them was touched here. The same card records thatscripts/pm/check-skill-line-ratchet.mjs:720quotes the authorization sentence reworded above, so that comment is now a stale quotation — a comment, not a pin, and green either way.维护者速读(草稿)
事情:你昨天裁的那条——总监席只是做裁决,开多少场都没关系,也不用交班——现在写进了总监席的岗位说明里。以前那份说明只写得下一个占席人:第二场召唤要么等前一场的收班简报,要么等你出面让前一场停下。这个 PR 把「接管」和「在任者」这两个说法从总监席删掉了。
为什么值得改:规则空着的时候,分工只活在两个会话各自的评论里,下一场召唤读不到,于是每次并行都要你临场再说一遍。写进说明之后,新开的一场自己就知道:不用等、不用停、也不用替别人收尾。
改了什么:一句话说清座位形态(只出裁决、不持在飞状态、多场并行、无交班),再一句话说清并行时怎么不撞车——裁决先记在卡上再动标签,同一张卡同一笔只由一场写,卡上的评论线程就是先后顺序,后记的算数,动手前先读线程。座位贴还是一张,状态块改成每场一行、各记各的审计锚,不再有「谁在任」这个字段。
没动什么:档位保险丝、不达档只做免档整理、不占车道、永不认领 backlog,一个字没改。文件行数也没变(还是 72 行),两条新规则是靠同一节里两处合并腾出来的。总监席之外的通用座位规则(分诊席那些)仍然是一席一人,这次没碰——它们和新裁决的冲突另立了一张卡给 skills 席看。
你要做的:这是受管面,要你人工合并。看一眼上面的改前改后表,认可就合。
席位意见:
Generated by Claude Code