Repository navigation
docs(pm-dispatch): the project layer — one project form, 「pm-dispatch <席位…>」 as the summon, seats read from the seat posts' 🟢 line, takeover that never waits for a walled account, mailbox PRs, a generated roster board - #25427
Conversation
…tion line 「pm-dispatch <席位…>」 is the summon, seats read from the seat posts' 🟢 line, takeover that never waits for a walled account, mailbox PRs and a generated roster board A new reference `references/project-forms.md` (54 lines) defines the project layer above the seats on the maintainer's words of 2026-10-23, as amended at 12:25Z (ONE project form; the 总监席 and 分诊席 are seats like any other, summoned in whichever project the maintainer names) and 12:27Z (the project instruction IS the summon: 「pm-dispatch <席位…>」). SKILL.md: the 〈阶段细则索引〉 row for the new file and the project instruction line beside `/pm-dispatch [args]` in 〈入口与角色〉; paid by deleting the 〈全体座位的不变量〉 line 「一 PM 恰管一车道 … 一席一贴」, whose three clauses live in cross-repo-coordination.md 规则 4 and the 分席 line, seat-post-protocol.md 〈贴的四段〉, and the new reference's per-seat-thread line. 319/319. seat-post-protocol.md: the 🟢 account is the assignment and the project instruction line is the takeover order (one line, in place). seat-lifecycle.md: the takeover order leaves in-flight cards with their claimer only while the claimer is reachable (one line, in place). lanes/director.md: the 总监席 can be summoned in any project; the direct-session no-Routine rule and the 「未回字 = 停」 rule are scoped to the direct session, with the project routines as the one exception. check-skill-line-ratchet.mjs: a CEILINGS row (54) and a table-row pin (0) for the new file; no other row moves. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UJebcS3m7vf3CYnTfBD5oH
Contract reviewServed-tier: Reviewed at 2026-10-23T13:33Z by an isolated reviewer of the ① Derived judgmentsCard Wanted items against
Edits elsewhere, each verified in place and line-neutral:
Surface and invariants: the six changed paths are all inside the claim's file surface; no Tier H path ( Budgets: Check-runs on the head: 52, all completed, none failed. Merge compatibility (read-only ② Semver level
③ Boundary flags
Independence: the diff was produced by the card thread on branch Implemented-by: VERDICT: PASS |
…ords follow lanes/server.md; the takeover order reaches in-flight cards unconditionally After the merge of main (which brought #25385), the four lines that named two project types take the one-form wording the maintainer settled on 2026-10-23 12:25Z: SKILL.md's `<domain>` row 「承办它的是坐该席的车队项目」, its `director` row 「人工召唤,任一车队项目可召」, the 席位两形 bullet 「会话是车队项目的线程」, and seat-lifecycle.md's round-report line 「五项健康指标进总监席的每日摘要」. 「项目席」 (a seat form) stays. project-forms.md L19: the seat words now read 「ui、skills、devx、server、spec、hotcrm」 — main folded lanes/cli.md, lanes/engine.md and lanes/services.md into lanes/server.md after this branch's base (seat review ③-1). seat-lifecycle.md L28: the maintainer's takeover order takes in-flight cards as the card's Wanted 5 says, with no reachability condition, and waits for no note from the previous claimer (seat review ③-3). All six edits in place and line-neutral; every edited prose line ≤120 bytes; SKILL.md 318/318 on the merged tree. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UJebcS3m7vf3CYnTfBD5oH
Contract reviewServed-tier: Delta review written 2026-10-23T15:15Z by an isolated reviewer of the ① Derived judgmentsMerge commit Follow-up commit
Rulings 1A / 2A on #25379 (comment 6363872862) still hold. 1A: Budgets on the head (ceilings read from the head's Surface and invariants: the six changed paths ( Check-runs on the head (read 2026-10-23T15:15Z): Merge compatibility (read-only ② Semver level
③ Boundary flags
Independence: the diff was produced by the card thread on branch Implemented-by: VERDICT: PASS |
席位核对ACCEPT · Landing authority: the maintainer's own standing word in this seat's thread of the Claude Code project "Objectstack" (
Generated by Claude Code |
Requested by Elon · project thread
Fixes #25412
Clause-②: no
Metadata-protocol: none
维护者速读(草稿)
references/project-forms.md(54 行),把「项目层」写进仓库:只有一种车队项目,项目做什么全看它坐了哪些席;总监席、分诊席与车道席都是席位,由您在任一项目里写一行「pm-dispatch <席位…>」(如「pm-dispatch 总监」「pm-dispatch ui skills」)召唤;首词固定pm-dispatch(不用fleet,它已是 bot 与中继的名字);席位从座位贴的 🟢 行读出来、不另配;这一行写下或改写即指派;🟢 写着别的账号时这一行就是强制接管令,含在飞卡,不等撞墙账号写任何东西;台账只在 GitHub;每项目至多一个pm:mailbox信箱 PR 做跨账号非 PR 对话;置顶 issue「车队总表」是生成视图、永不手改;并发上限是您按项目定的姿态,不写进协议。SKILL.md 索引表加一行指向它,入口行旁注明项目指令行;另外三个参考各就地改一行、lanes/director.md改两行,棘轮加一条封顶行。cross-repo-coordination.md规则 4 与分席行、seat-post-protocol.md,以及新文件的「每席恰一条席位线程、恰一车道,一席一贴」;③lanes/director.md改了两行而非一行:「⛔ 无 Routine/cron」与「未回字 = 停,⛔ 无巡检」都只对直连会话成立,否则项目里的总监席就跑不了每日摘要与每小时收件箱扫描。lanes/server.md)与 3(在飞卡按卡面无条件接管)已在跟进提交 91e8600 里改好,待席位对新 head 增量复核。What changed
.claude/skills/pm-dispatch/references/project-forms.md(new, 54 lines)pm-dispatch <席位> [<席位>…], first token = the skill directory name, ⛔ notfleet; the seat-word mapping 总监 =lanes/director.md, 分诊 =lanes/triage.md, the rest by lane file name; several seat posts in one lane → the one whose 🟢 names this account, else the vacant one, else ask once; ⛔ no template pasted, ⛔ no account-level skill copy) · 席位是读出来的,不是配出来的 (seats = the seat posts whose 🟢 names this account; none ⇒ idle; the instruction line is the only assignment act, the long chat sentence is an equivalent form; on every coordinator start the line is compared with the posts, seat or take over perseat-post-protocol.md, one seat thread per seat; first seating creates the patrol routine every 2–4 h, the 总监席 adds the daily digest and hourly inbox scan, the 分诊席 the hourly bare-card run, shareable when both sit in one project; ⛔ no roster file; concurrency is a per-project posture, ⛔ not a protocol constant) · 接管不等撞墙账号 (a 🟢 naming another account makes the line the 维护者强制接管令, in-flight cards included; cross-accountRelease:+ newClaim:withResume-from: BRANCH@SHA, shape inexecution-duties.md; ledger = labels + assignee +Claim:+head:claude/PRs read byassignee:<old login>, ⛔ never project memory) · 信箱 PR (PR-bound talk needs nothing new; one draft PR per project labelledpm:mailboxonmailbox/<login>, subscribed by a resident thread, never merged, closed on handover, first body lineTo: <login>, owes no CI, excluded from landing and ledger queries) · 总表 (pinned 「车队总表」 issue, one row per seat, regenerated by the 总监席 digest and every seat/takeover/handover, a generated view ⛔ never hand-edited,cross-repo-coordination.md规则 5)..claude/skills/pm-dispatch/SKILL.md/pm-dispatch [args]或项目指令行pm-dispatch <席位…>,…」 (93 bytes, in place); −1: the 〈全体座位的不变量〉 line 「一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案」 — 一人恰一车道 and 一车道可坐多席 arecross-repo-coordination.md规则 4 and its 分席 line, 一席一贴 isseat-post-protocol.md〈贴的四段〉 L9, and the new reference carries 「每席恰一条席位线程、恰一车道,一席一贴」. 319/319.references/seat-post-protocol.md〈贴的四段与派生视图〉🟢后写召唤账号,状态块逐场一行(会话 ID + 锚);无在任者、无接管」 → 「直连多场总监席:🟢后写召唤账号,逐场一行;项目席 🟢 即指派,接管见project-forms.md」 (118 bytes, in place): the 🟢 account is the assignment and takeover is the maintainer's instruction line. Dropped from that line: 「(会话 ID + 锚)」 (format detail) and 「无在任者、无接管」, whichlanes/director.mdL8 andseat-lifecycle.md〈开轮互斥〉 L12 both still state. 91/91.references/seat-lifecycle.md〈座位贴协议〉references/lanes/director.md〈授权与形态〉../project-forms.md例行」. Two lines instead of the card's one, both in place (114 / 120 bytes): with only one of them edited, the 「两条细则冲突 ⇒ 按更严的一条」 rule would switch the project 总监席's digest and inbox scan off. 70/70.scripts/pm/check-skill-line-ratchet.mjsCEILINGSrow for the new file at its landed count (54) and aMAX_TABLE_ROW_BYTESpin of 0 (no table row), placed besidefiling-gate.mdso they sit in no open PR's hunk. A new file is not a raise and funds nothing; no other row moves.Serial constraints and the landing order
6c2699b3, now merged into this branch (7dd4eb61, clean). Every hunk of the first commit is outside docs(pm-dispatch): a project-run seat form beside the Routine form — the seat post as a stub, the dispatch order in the card thread, event wake plus one patrol per project, 项目总监 → 总监席 #25385's: SKILL.md L49, L82 and L97 vs its L33, L54, L56, L70–L71, L74, L275;seat-lifecycle.mdL28 vs its L3, L26–L27, L92–L95;seat-post-protocol.mdL13 vs its L17–L18, L51–L53, L58–L60;lanes/director.mdL7/L16 vs its L1.git merge-tree --write-treeof this head against docs(pm-dispatch): a project-run seat form beside the Routine form — the seat post as a stub, the dispatch order in the card thread, event wake plus one patrol per project, 项目总监 → 总监席 #25385's head: clean (checked before the push).dispatch-runbook.md〈卡线程〉 (the dispatch order in the thread's opening message) andrest-channel.md(GitHub org Project → 「看板」).cross-repo-coordination.md规则 5 reads 「org Project 只是维护者的聚合视图」 onmain, but docs(pm-dispatch): a project-run seat form beside the Routine form — the seat post as a stub, the dispatch order in the card thread, event wake plus one patrol per project, 项目总监 → 总监席 #25385's head already carries 「看板(org Project)只是维护者的聚合视图」 at L44, so nothing is left for the seat there.91e8600b(after themainmerge): docs(pm-dispatch): a project-run seat form beside the Routine form — the seat post as a stub, the dispatch order in the card thread, event wake plus one patrol per project, 项目总监 → 总监席 #25385's four two-project-type lines, the vocabulary the maintainer withdrew at 12:25Z, now read one-form, in place and line-neutral — SKILL.md<domain>row 「承办它的是坐该席的车队项目」,directorrow 「人工召唤,任一车队项目可召」, the 席位两形 bullet 「会话是车队项目的线程」,seat-lifecycle.md「五项健康指标进总监席的每日摘要」;git grep '车道项目\|总监项目' -- .claude/skills→ no hit; 「项目席」 (a seat form) stays. The same commit rewritesproject-forms.mdL19 to 「ui、skills、devx、server、spec、hotcrm」 (review ③-1: docs(pm-dispatch): fold the engine, services and cli lanes into domain:server #25247 foldedcli/engine/servicesintolanes/server.md) andseat-lifecycle.mdL28 to the unconditional in-flight takeover (review ③-3).mainmerge; the ratchet on the merged tree reads SKILL.md 318/318.Line budget
references/project-forms.mdSKILL.mdmainshrank it)references/seat-post-protocol.mdreferences/seat-lifecycle.mdreferences/lanes/director.mdWidest added or edited prose line 120 bytes (
lanes/director.mdL16); the new file's widest line 120 bytes; the one added table row is 208 bytes against SKILL.md's 342-byte pin. No re-wrap used as payment.Gates
On head
91e8600b(b91d5d6+ theorigin/mainmerge7dd4eb61at6c2699b3+ the follow-up commit), run in this checkout with each exit code captured before any pipe; the same 42 commands were run the same way onb91d5d6with the same result:pnpm check:pm-skill-ratchet✓ (self-test 164 cases;project-forms.md54/54, SKILL.md 318/318, widest row 0/0; total ceilings unchanged, no row moved),pnpm check:pm-skill-id-lint✓ (self-test 23),pnpm check:skill-frame-sync✓ (91 markdown files scanned, 1 declared copy),pnpm check:skill-frame-freshness✓. Alsopnpm check:pm-governed-prose✓.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack <the six changed paths>derives 42 commands; every one was run with its exit code captured before any pipe. First pass on a checkout with nonode_modules: 31 exit 0, 11 PREREQUISITE (yaml/typescriptnot installed, one 240 s cap). Afterpnpm install --frozen-lockfile: 41 exit 0, andpnpm --filter @objectstack/lint run check:doc-formula-expressionsstill exit 3 as a PREREQUISITE (@objectstack/formulaand@objectstack/lintunbuilt in a fresh checkout — the reading the sibling skill PRs recorded); afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lintit exits 0. 42 derived, 42 run, 42 × exit 0, 0 NOT-MEASURED. CI's check-runs on this head are the record either way.git grep -n 'os-bill\|hotlong\|os-elon-musk' -- .claude/skills/pm-dispatch/references/project-forms.md→ no hit (acceptance bullet 3)..claude/**and onescripts/pmledger row), soskip-changesetapplies.Acceptance notes
os-dev.md〈干净收尾〉 forbids HTML comments in GitHub text. Reported as a deviation, not hidden.lanes/director.mdcarries two in-place edits where the claim's File surface says 「one line each」; the reason is in the table above. Reported as a deviation.dispatch-runbook.md〈卡线程〉 andrest-channel.md; both lines already exist on docs(pm-dispatch): a project-run seat form beside the Routine form — the seat post as a stub, the dispatch order in the card thread, event wake plus one patrol per project, 项目总监 → 总监席 #25385's head and are not duplicated here (see Serial constraints).Fixesline only..claude/**(Tier S): draft, awaiting the seat'sCONTRACT_REVIEW_TIERre-read of91e8600b; landing by the seat under the maintainer's 14:14Z authorization in the seat thread; ⛔ not to be flipped ready, queued or armed by this thread.Generated by Claude Code