pm-dispatch: a project-run seat form — seat post as a stub, posture and ledger in the Claude Code project, dispatch order in the card thread, branch named before the thread opens; 项目总监 → 总监席 (maintainer's word 2026-10-23) #25379
Description
Ruled: 6363872862 · batch #4 letters 1 A · 2 A · 2026-10-23T11:29:31Z (item 3 of this card's Wanted list is ruled as letter A there; item 3 of the batch is hotcrm#2252)
Filing gate ③: a maintainer-direct task, the maintainer's words quoted verbatim. Filed from the Claude Code project "Objectstack" (account os-elon-musk) by the research thread 车队机制迁往 Projects on the maintainer's word there. ⛔ Not a claim. Lane self-applied under exception 二 (.claude/**, the lane table's domain:skills row); grade suggested p2; triage may regrade.
Reader (who acts): the domain:skills seat 2 (seat post #19287), in one PR on .claude/skills/pm-dispatch/** (Tier S) plus the ratchet ceiling rows in scripts/pm/check-skill-line-ratchet.mjs. The card thread runs at CONTRACT_REVIEW_TIER.
The maintainer's words (2026-10-23, the project's thread 车队机制迁往 Projects, verbatim)
The research memo (五张决裁卡, recommended letters 「1B 2A 3B 4B 5B」, plus section 9 on naming and skill loading) was presented at 04:03Z and 04:28Z. The maintainer answered:
同意,你现在就立卡派发处理。
Earlier in the same thread, the facts this card rests on:
我现在测试下来 claude code projects 非常好用,拍一个fable调研一下我们之前的车队机制改如何优化以及尽量过渡到 projects 模式。
我的车队还有一个核心痛点是我有很多claude code 20x账户,分别在运行。
现在的命名也有问题,Claude code 叫projects,我们之前有一个项目总监
What was measured (this project, 2026-10-22 14:22Z – 10-23 03:46Z)
- A Claude Code project is single-account: its threads, memory, shared folder and inter-thread messages never cross accounts. GitHub stays the only cross-account bus; the seat post, the six-state labels,
Claim:and the fleet bot are exactly that bus and stay. - The seat-post protocol (
seat-lifecycle.md〈座位贴协议〉,seat-post-protocol.md) was written for a seat with no memory and no threads, so posture, ledger and shift narrative all go into the post body. A project already carries those, so every one of them was written twice: seating a seat cost 3–5 relay writes, dispatching one card 6–10 (claim 2–3, order read-back 1, ACCEPT 1, landing 1–2, close-out 1–2); [PM seat] domain:devx @ objectstack — 🟢 os-elon-musk · 由 os-elon-musk 账户的项目负责 #6023 carries 439 comments; this account fired 100fleet-writeruns between 00:56Z and 03:36Z on 10-23 alone. - Of the seat post's four sections, other accounts read three facts: which account holds the lane, who is seated, the hot-file serial queue.
- The card-thread handshake (thread pushes an empty branch → seat writes
Claim:→ thread starts) took 5–10 minutes per card (pm-dispatch: merge domain:engine, domain:services and domain:cli into domain:server (maintainer 乙, 2026-10-22), with a no-interrupt alias transition, and move packages/qa (dogfood) to domain:devx #24907: 14:39Z → 14:51Z). - The protocol's round report (
seat-lifecycle.md〈轮次报告与节奏〉) was not written once in two days; the thread checklist carried it. - No seat had a Routine; the issue side was never patrolled, and a seat that hit the usage wall (17:56Z → 21:04Z) left three landed-ready PRs unwatched.
- The protocol names 「项目总监 (Project Director)」 (SKILL.md L56, L274;
lanes/director.mdL1;lanes/skills.mdonce) and 「项目协调者」 (PR docs(pm-dispatch): a project-coordinator reference — the cross-lane scheduling rules a Claude Code project runs by, so its instructions name only its lanes #25255'scoordinator.md), while the platform calls the container itself 项目 (a Project) and GitHub's board an org Project.
Wanted
A project-run seat form in pm-dispatch, beside the Routine-seat form, chosen when the seat session is a project thread (the mode:thread condition already in dispatch-runbook.md 〈卡线程〉):
- Seat post = stub. Body holds only: seated account · the project's name · seating time · the hot-file serial queue · one pointer line 「posture and ledger live in the project」 · an optional wall note (「本席撞墙,预计 HH:MM 恢复」). Posture, inherited ledger, shift narrative and round reports are ⛔ not written to the post. Title, assignee and the seating audit comment stay as today. Hand-over to ANOTHER account still writes the clock-out brief comment (that is the one cross-account read).
- Dispatch order rides the card thread's opening message, written by the coordinator when it opens the thread;
/mnt/project-files/<seat>/dispatch-<N>.mdis no longer required; the card's dispatch comment keeps one pointer line. - Branch named before the thread opens.
The seat claims first (assignee +Ruled 2026-10-23 (comment 6363872862, letter A): the branch is platform-assigned at thread creation and cannot be named beforehand; the coordinator reads it from the new thread's session record at spawn and hands it to the seat, the seat claims, the thread verifies the newestpm:dispatched+Claim:naming the branch the coordinator will give the thread), then asks for the thread; the thread verifies the newestClaim:names its branch as today and starts at once.Claim:names its branch and starts (fallback: the thread reports its branch as today). The empty-branch probe push is dropped. - Wake = events + one patrol routine per project. PR side:
subscribe_pr_activityon every card PR (already a rule). Issue side: one project routine every 2–4 hours runs the collection step ofexecution-duties.mdfor every lane the project holds (unlock scan, hold release, stale premise, awaiting-landing list, wall note). The per-seat Routine, the self-bound cron and the cross-wall timer chain inseat-lifecycle.mddo not apply to this form. Ruled 2026-10-23 (comment 6363872862, batch item 2, letter A): a seat run as a plain direct session (neither a UI Routine nor a project thread) is summoned by hand like the 总监席 — no self-wake, no Routine, not resident. - Round report = the thread checklist; the five health figures move to the project's daily digest (the 总监项目's routine), ⛔ not a chat table per round.
- Naming. 「项目总监」→「总监席」 (SKILL.md L56, L274;
lanes/director.mdL1;lanes/skills.md), 「项目协调者」→「协调者」 (in docs(pm-dispatch): a project-coordinator reference — the cross-lane scheduling rules a Claude Code project runs by, so its instructions name only its lanes #25255'scoordinator.md, re-pointed by its author after this lands, as pm-dispatch: revoke every autonomous-adjudication channel — a seat analyses and recommends, everyneeds_decisiongoes to the maintainer's director ruling batch (maintainer's word 2026-10-23) #25344 did for item 5), GitHub's org Project →「看板」 (rest-channel.mdL78). The Claude Code project is 「项目」; the project hosting the director seat is 「总监项目」, a project holding lanes is 「车道项目」.
Rule after the change, in one sentence: GitHub keeps what another account reads (six-state labels, assignee, Claim:/Release:, the seat stub, the PR and its ACCEPT, the ruling record); the project keeps the working layer (posture, ledger, orders, round reports, memory).
Out of this card's scope: the account topology itself (which account holds which lane — the maintainer assigns it per project instructions), the decision-card landing authorization trial, the director project's inbox-scan routine, and any AGENTS.md (Tier H) line.
Acceptance
seat-lifecycle.md/seat-post-protocol.mdcarry the stub template and say which form applies when;dispatch-runbook.md〈卡线程〉 carries items 2–4;coordinator.md(after docs(pm-dispatch): a project-coordinator reference — the cross-lane scheduling rules a Claude Code project runs by, so its instructions name only its lanes #25255 lands) points at them, ⛔ no second copy.git grep -n '项目总监' -- .claude/skillsreturns nothing;git grep -n '总监席' -- .claude/skills/pm-dispatch/SKILL.mdhits L56 and L274's successors.pnpm check:pm-skill-ratchetgreen: new lines are paid for by deleting Routine-seat-only lines that the project form makes conditional (the self-bound cron, the hourly cross-wall Routine, thesend_lateraccelerator), ceilings lowered where a file shrank;pnpm check:pm-skill-id-lint,pnpm check:skill-frame-sync,pnpm check:skill-frame-freshnessgreen.- The three seat posts this project holds ([PM seat] domain:skills · seat 2 — 🟢 os-elon-musk #19287, [PM seat] domain:devx @ objectstack — 🟢 os-elon-musk · 由 os-elon-musk 账户的项目负责 #6023, hotcrm#1353) are rewritten to the stub on their next write-side refresh — by the seats, ⛔ not by this PR.
- Tier S landing: a
CONTRACT_REVIEW_TIERPASS on the head, then the owning seat lands it on the maintainer's word.
Dedupe
MCP search_issues, objectstack, "pm-dispatch project-run seat form seat post stub ledger in Claude Code project dispatch order card thread event-driven wake session start hook" → 40 hits; the top ten are #25219 (open, PR #25255 — the coordinator reference this card builds on, not a duplicate), #25185 (closed — introduced mode:thread), #24585, #20966, #21118, #19287, #20154 (closed — posture not inherited through the brief), #22060 (open tracking — rule-text diet; this card deletes lines, so it serves that program), #18917, #7623. None defines the project-run seat form or the stub. New.
Dedupe words: project-run seat form seat post stub · dispatch order in card thread opening message · rename 项目总监 总监席.
Activity
objectstack-fleet commentedon Oct 23, 2026
Claim: PM loop round 1 (card thread) · 2026-10-23T04:54Z · p2,
tooling,domain:skills. Writes the project-run seat form into pm-dispatch on the maintainer's 2026-10-23 word on the card: seat post as a stub, posture and ledger in the project, dispatch order in the card thread's opening message, the claim/branch handshake, event wake plus one project patrol, round report as the thread checklist, and the 项目总监 → 总监席 naming.Session:
session_0178pvZcJjqXL36QzPi1jbSX(card thread ofdomain:skillsseat 2, seat sessionsession_01REMuzhz6MWRjg8uohedMnM)Account:
os-elon-musk(the seat's linked user; always the card's assignee)Branch:
claude/project-thread-hxtlri(the card thread's designated push branch, platform-assigned at thread creation; the coordinator could not name it beforehand, measured 2026-10-23, so this claim follows the thread's branch report as today)Worktree: the card thread's own checkout
Domain:
domain:skillsSeat:
domain:skills#2(seat post #19287)File surface:
.claude/skills/pm-dispatch/SKILL.md(⛔ not the 〈域车道〉 lane table, PR #25247's region);references/seat-lifecycle.md,references/seat-post-protocol.md,references/dispatch-runbook.md〈卡线程〉,references/execution-duties.md,references/lanes/director.md,references/lanes/skills.md,references/rest-channel.md(the org Project naming line);references/coordinator.mdonly after PR #25255 lands;scripts/pm/check-skill-line-ratchet.mjs(ceiling rows, lowered or at landed count). (stop on breach; explain in the report)⛔ Not in scope: any Tier H file (
AGENTS.md,CLAUDE.md,docs/NORTH-STAR.md,skills/**,.github/workflows/**, CODEOWNERS); the seat posts themselves;.claude/settings.jsonand.claude/hooks/**(#25380); account topology; any otherscripts/**.Container & model:
L,mode:thread(the maintainer's word: one project thread per M-or-larger or p1 card),model: CONTRACT_REVIEW_TIER(dispatch-gates.mjs --tier --repo objectstack-ai/objectstack .claude/skills/pm-dispatch/SKILL.mdatd12e650d: "MANDATORY: … clause ① of the model-tiering ruling (narrowed to protocol semantics, 2026-08-20)"),effort: xhigh(L). Governed surface.claude/**is Tier S: aCONTRACT_REVIEW_TIERPASS record on the PR's head plus all-green checks; landing waits for the maintainer.Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (a maintainer word not yet written into the skill)
Thread-read: none
Serial constraints cleared: seat-2 PRs open on the same tree — #25348 (revoke delegated rulings; SKILL.md lands 319/319), #25255 (new
coordinator.md, SKILL.md 入口与角色 row, deletes the SKILL.md 项目总监席 summons line), #25247 (SKILL.md 〈域车道〉, lane files). This card starts frommain, keeps out of their hunks where it can, and mergesmainafter each lands; thecoordinator.mdpointer waits for #25255. Re-check the open-PR list for.claude/skills/pm-dispatch/**before your first push and name what you found.Generated by Claude Code
os-elon-musk commentedon Oct 23, 2026
Ruling: batch #4 items 1 / 2 · letters A / A · maintainer 「同意」 2026-10-23T11:29:31Z
Recorded by the director ruling thread 「待决策汇总」 (Claude Code project "Objectstack", account
os-elon-musk). Batch doc: https://claude.ai/artifact/Ld4xLWTrTSuhQ7eu2uAbHd. The maintainer's one word covers the three recommendations named in the batch's 回批 line (「1A 2A 3B」或「同意」); item 3 (hotcrm release number) is recorded on hotcrm#2252. The ruling thread only records; the card thread and the owning seat execute.Item 1 — A (coordinator reads, seat claims, thread verifies). This card's item 3 as written (branch named before the thread opens) is not possible: a project card thread's branch
claude/project-thread-<random>is platform-assigned at thread creation (measured on PR #25385's own thread, A2; confirmed cross-session by the ruling thread and by the coordinator viaget_session(session_id)→session_context.outcomes[].git_repository.git_info.branches, present before any push). Ruled shape: the coordinator reads the new thread's branch from its session record the moment it is spawned and hands it to the seat in the same stroke; the seat writes assignee +pm:dispatched+ theClaim:naming that branch; the thread's first act stays 「verify the newestClaim:names my branch」 and it starts as soon as the claim is up; if the coordinator cannot read it, the thread reports its branch as today (fallback). The empty-branch probe push is dropped for card threads (the branch is platform-designated and every later push takes the harness route), which needs one line in.claude/agents/os-dev.mdrule 1 — the seat widens the claim's file surface by that one file, same Tier S. Workload:references/dispatch-runbook.md〈卡线程〉 L141–L142 edited in place (line-neutral, ≤120 bytes each, exact wording by the card thread) + 1 line inos-dev.md, as a follow-up commit on PR #25385; thecoordinator.mdpointer still waits for PR #25255 as the card foresees.Item 2 — A (direct sessions are summoned only). PR #25385 deletes SKILL.md L70 「入座即建唯一自绑 cron Routine(
create_trigger,own_followup)作默认唤醒」 as Routine-seat payment, which leaves a seat run as a plain direct session (neither a UI Routine nor a project thread; SKILL.md L74 「分诊席跑普通直连会话」) without a written wake rule (contract review 6358117147 ③-2). Ruled shape: a direct-session seat is summoned by hand like the 总监席 — it runs one round when called, ⛔ no self-wake, no Routine, not resident; PR subscription events still wake it. Workload: one clause added in place on SKILL.md L70 (「席位两形…」) or L74, line-neutral, same follow-up commit; no new line, no deletion elsewhere.Execution: the card thread 项目承办席位形态 pushes the follow-up commit on PR #25385 (head now
7198a099);domain:skillsseat 2 re-reviews the new head at CONTRACT_REVIEW_TIER; landing still waits on the maintainer's own 「可以落地」 (Tier S).Generated by Claude Code