Skip to content

Commit ea33919

Browse files
os-elon-muskos-elon-muskclaude
authored
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)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9D9LYrYMoW5HPuB2zqqkLsgb)_ Fixes #25412 Clause-②: no Metadata-protocol: none ## 维护者速读(草稿) - **改了什么**:pm-dispatch 技能新增一份参考 `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` 改两行,棘轮加一条封顶行。 - **为什么改**:您 2026-10-23 在「车队机制迁往 Projects」线程的原话:「如果我同意这一整套机制,相关的 skills 是不是都要修改,文件应该落在仓库中」「你立卡并派发处理所有相关任务,跟踪落地」;再按 12:25「为什么我们需要区分项目类型?任何一个项目中都可以召唤总监啊,任何一个项目中也可以召唤分诊」与 12:27「我直接写 pm-dispatch 总监,pm-dispatch ui,pm-dispatch 分诊,这种应该都可以吧?」两次修正写成。 - **风险与代价(含回滚)**:纯规则文本,不碰代码与门禁逻辑;每个文件行数不变或为新文件,每行 ≤120 字节,无上限抬高;一次 revert 可回。三处要您知道:① #25385(#25379 的 PR)还没合,它把 SKILL.md 入口表写成「车道项目」「总监项目」两种项目,而您 12:25 已说只有一种;本 PR 避开它的 hunk,排在它之后落;它 14:44Z 合入后本 PR 已合 main 并补了一个提交(91e8600)把那四处改成单一形态;② 为付 SKILL.md 的一行,删了「一 PM 恰管一车道,一车道由一组座位管,一席一贴」这一行,三个子句分别住 `cross-repo-coordination.md` 规则 4 与分席行、`seat-post-protocol.md`,以及新文件的「每席恰一条席位线程、恰一车道,一席一贴」;③ `lanes/director.md` 改了两行而非一行:「⛔ 无 Routine/cron」与「未回字 = 停,⛔ 无巡检」都只对直连会话成立,否则项目里的总监席就跑不了每日摘要与每小时收件箱扫描。 - **席位意见**:席位 2 对 head b91d5d6 的契约复核 PASS(评论 6366112222);其边界项 1(席位词随 `lanes/server.md`)与 3(在飞卡按卡面无条件接管)已在跟进提交 91e8600 里改好,待席位对新 head 增量复核。 - **你要做的(一个动作)**:无。您 14:14Z 已在席位线程授权「按 pm-dispatch 复核通过的 PR 都可以落地」;席位对新 head 复核 PASS、检查全绿后由席位落地。 ## What changed | File | Change | |:--|:--| | `.claude/skills/pm-dispatch/references/project-forms.md` (new, 54 lines) | The project layer above the seats, six sections in the card's order: 一种项目形态 (one project form; what a project does is decided by the seats it holds; the only invariant is on the account and is already SKILL.md's 「批准账号永不跑席位」, restated in one line; role words only, logins only as evidence in ruling records) · 指令行即召唤 (the one-line instruction `pm-dispatch <席位> [<席位>…]`, first token = the skill directory name, ⛔ not `fleet`; 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 per `seat-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-account `Release:` + new `Claim:` with `Resume-from: BRANCH@SHA`, shape in `execution-duties.md`; ledger = labels + assignee + `Claim:` + `head:claude/` PRs read by `assignee:<old login>`, ⛔ never project memory) · 信箱 PR (PR-bound talk needs nothing new; one draft PR per project labelled `pm:mailbox` on `mailbox/<login>`, subscribed by a resident thread, never merged, closed on handover, first body line `To: <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` | +1 〈阶段细则索引〉 row for the new file (reader: the coordinator on every start; a seat before seating, takeover, handover and opening a mailbox PR); the 〈入口与角色〉 opening line now reads 「`/pm-dispatch [args]` 或项目指令行 `pm-dispatch <席位…>`,…」 (93 bytes, in place); −1: the 〈全体座位的不变量〉 line 「一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案」 — 一人恰一车道 and 一车道可坐多席 are `cross-repo-coordination.md` 规则 4 and its 分席 line, 一席一贴 is `seat-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 「无在任者、无接管」, which `lanes/director.md` L8 and `seat-lifecycle.md` 〈开轮互斥〉 L12 both still state. 91/91. | | `references/seat-lifecycle.md` 〈座位贴协议〉 | 「维护者强制接管令取席位、队列、未起工卡与待落地 PR;⛔ 不取在飞卡,由原认领者跟完」 → 「…;在飞卡归原认领者,不可达才接」 (118 bytes, in place): the takeover order reaches an in-flight card only when its claimer is unreachable (the walled-account case the card names; the reachable claimer keeps the card). **Rewritten in the follow-up commit** (seat review ③-3) to 「…取席位、队列、在飞卡、未起工卡与待落地 PR;⛔ 不等原认领者注记」 (118 bytes), the unconditional in-flight takeover the card's Wanted 5 states. Also L70 (from #25385): 「五项健康指标进总监项目的每日摘要」 → 「…进总监席的每日摘要」. 95/96. | | `references/lanes/director.md` 〈授权与形态〉 | L7 「授权面 = 人工定期召唤,…;⛔ 无 Routine、无 cron、无舰队位」 → 「授权面 = 人工召唤,任一项目可召;…;直连 ⛔ 无 Routine/cron」; L16 「未回字 = 不在 = 停,⛔ 无巡检…;⛔ 无任何例外」 → 「…;例外 = `../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.mjs` | A `CEILINGS` row for the new file at its landed count (54) and a `MAX_TABLE_ROW_BYTES` pin of 0 (no table row), placed beside `filing-gate.md` so 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 - **This PR lands after #25385** — merged 2026-10-23T14:44Z as `6c2699b3`, now merged into this branch (`7dd4eb61`, clean). Every hunk of the first commit is outside #25385's: SKILL.md L49, L82 and L97 vs its L33, L54, L56, L70–L71, L74, L275; `seat-lifecycle.md` L28 vs its L3, L26–L27, L92–L95; `seat-post-protocol.md` L13 vs its L17–L18, L51–L53, L58–L60; `lanes/director.md` L7/L16 vs its L1. `git merge-tree --write-tree` of this head against #25385's head: clean (checked before the push). - **Two of the card's one-line edits are already #25385's and are not repeated here**: `dispatch-runbook.md` 〈卡线程〉 (the dispatch order in the thread's opening message) and `rest-channel.md` (GitHub org Project → 「看板」). `cross-repo-coordination.md` 规则 5 reads 「org Project 只是维护者的聚合视图」 on `main`, but #25385's head already carries 「看板(org Project)只是维护者的聚合视图」 at L44, so nothing is left for the seat there. - **Follow-up commit `91e8600b`** (after the `main` merge): #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 「承办它的是坐该席的车队项目」, `director` row 「人工召唤,任一车队项目可召」, the 席位两形 bullet 「会话是车队项目的线程」, `seat-lifecycle.md` 「五项健康指标进总监席的每日摘要」; `git grep '车道项目\|总监项目' -- .claude/skills` → no hit; 「项目席」 (a seat form) stays. The same commit rewrites `project-forms.md` L19 to 「ui、skills、devx、server、spec、hotcrm」 (review ③-1: #25247 folded `cli`/`engine`/`services` into `lanes/server.md`) and `seat-lifecycle.md` L28 to the unconditional in-flight takeover (review ③-3). - #25255 and #25247 landed before the `main` merge; the ratchet on the merged tree reads SKILL.md 318/318. - Sibling card #25414 (the review/landing rule, triage duties, the decision inbox) lands after this PR, as its own body says. ## Line budget | File | Lines | Ceiling | Net | |:--|--:|--:|--:| | `references/project-forms.md` | 54 | 54 (new row) | new (1 edited in place in the follow-up) | | `SKILL.md` | 318 (319 before `main` shrank it) | 318 | 0 (+1 row, −1 line, 4 edited in place) | | `references/seat-post-protocol.md` | 91 | 91 | 0 (1 edited in place) | | `references/seat-lifecycle.md` | 95 | 96 | 0 (2 edited in place) | | `references/lanes/director.md` | 70 | 70 | 0 (2 edited in place) | Widest added or edited prose line 120 bytes (`lanes/director.md` L16); 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` + the `origin/main` merge `7dd4eb61` at `6c2699b3` + 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 on `b91d5d6` with the same result: - The four the card names: `pnpm check:pm-skill-ratchet` ✓ (self-test 164 cases; `project-forms.md` 54/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` ✓. Also `pnpm 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 no `node_modules`: 31 exit 0, 11 PREREQUISITE (`yaml` / `typescript` not installed, one 240 s cap). After `pnpm install --frozen-lockfile`: 41 exit 0, and `pnpm --filter @objectstack/lint run check:doc-formula-expressions` still exit 3 as a PREREQUISITE (`@objectstack/formula` and `@objectstack/lint` unbuilt in a fresh checkout — the reading the sibling skill PRs recorded); after `pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint` it 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). - No published package moves (`.claude/**` and one `scripts/pm` ledger row), so `skip-changeset` applies. ## Acceptance notes - The body's first line is the HTML-comment attribution block the project session requires; `os-dev.md` 〈干净收尾〉 forbids HTML comments in GitHub text. Reported as a deviation, not hidden. - `lanes/director.md` carries 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. - The card's 「Edits elsewhere」 list names `dispatch-runbook.md` 〈卡线程〉 and `rest-channel.md`; both lines already exist on #25385's head and are not duplicated here (see Serial constraints). - Both commits carry the model-free trailer pair the pre-push hook requires and no card trailer; the merge commit is git's default message; the card relation is this body's `Fixes` line only. - Governed surface `.claude/**` (Tier S): draft, awaiting the seat's `CONTRACT_REVIEW_TIER` re-read of `91e8600b`; 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. - Opened through the GitHub MCP, so the PR author is the login rather than the fleet bot; the seat ruled it stays as is, and every later write to this PR goes through the relay. --- _Generated by [Claude Code](https://claude.ai/code/session_01UJebcS3m7vf3CYnTfBD5oH)_ --------- Co-authored-by: os-elon-musk <elon@objectstack.ai> Co-authored-by: Claude <noreply@anthropic.com>
1 parent f7d6f5b commit ea33919

6 files changed

Lines changed: 71 additions & 10 deletions

File tree

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
4646

4747
## 入口与角色
4848

49-
`/pm-dispatch [args]`,自由组合,全部可选:
49+
`/pm-dispatch [args]` 或项目指令行 `pm-dispatch <席位…>`,自由组合,全部可选:
5050

5151
| arg | 含义 | 默认 |
5252
|---|---|---|
5353
| `triage` | 以分诊座位身份运行(只扫/分类/路由,永不认领) | — |
54-
| `<domain>`(如 `spec`、`skills`) | 以该 `domain:*` 车道的执行座位身份运行;承办该车道的项目即「车道项目」 | — |
54+
| `<domain>`(如 `spec`、`skills`) | 以该 `domain:*` 车道的执行座位身份运行;承办它的是坐该席的车队项目 | — |
5555
| `epic:#<n>` | 以父单 #n 的 epic PM 身份运行(见 `references/seat-lifecycle.md` 〈Epic 子树车道〉) | — |
56-
| `director` | 以总监席身份运行(人工召唤;所在项目即「总监项目」;三职与章程见 `references/lanes/director.md`) | — |
56+
| `director` | 以总监席身份运行(人工召唤,任一车队项目可召;三职与章程见 `references/lanes/director.md`) | — |
5757
| `coordinator` | 以协调者身份运行(项目会话:开席位线程与卡线程、跨车道调度;接口见 `references/coordinator.md`) | — |
5858
| `label:<name>` | backlog 过滤标签;`label:all` = 全部 open 未认领 | `pm:queue` |
5959
| `repo:<owner/name>` | 扫哪个仓的 backlog(单 issue 的落地仓看它自己的 `repo:*` 标签) | `objectstack-ai/objectstack` |
@@ -68,7 +68,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
6868
- fire = 一次唤醒;fire 到达时上一轮未清空的接续处理,⛔ 不重开、不重排。
6969
- 批 = 一个上下文里读完的 ≤5 张同族卡,是质量单位,⛔ 不是预算。
7070
- 班 = 一个会话的任期,只以交接或惰性回收结束。
71-
- 席位两形:Routine 席与项目席(会话是车道项目的线程);细则见 `references/seat-lifecycle.md`。
71+
- 席位两形:Routine 席与项目席(会话是车队项目的线程);细则见 `references/seat-lifecycle.md`。
7272
- 项目席唤醒 = PR 订阅事件 + 每项目一个巡查 routine;⛔ 无自绑 cron、无 `send_later` 链。
7373
- 探针先行:fire 的第一动作是一次最便宜的车道盘点查询,⛔ 在它之前不读任何长文本。
7474
- 队列空 + 无在飞 + 无待复核 + 决策箱无新答复 ⇒ 自退。
@@ -80,6 +80,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
8080
| 文件 | 谁在哪个 fire 读 | 承载的章节 |
8181
|:--|:--|:--|
8282
| `references/seat-lifecycle.md` | 每个座位每次 fire:开轮互斥读数前、收班前 | 开轮互斥 · 座位贴协议 · Epic 子树车道 · 轮次报告与节奏 · 停止条件与待命 · 断粮与跨墙恢复 |
83+
| `references/project-forms.md` | 协调者每次开场;席位坐席、接管、移交、开信箱 PR 前 | 一种项目形态 · 指令行即召唤 · 席位是读出来的 · 接管 · 信箱 PR · 总表 |
8384
| `references/reading-discipline.md` | 任一座位取读数、引读数或核验 main 的那一刻 | 平台读数纪律 |
8485
| `references/cross-repo-coordination.md` | 分诊席路由与查重前;执行席跨仓认领、派发或转移时 | 多仓协调 |
8586
| `references/triage-duties.md` | 分诊席每次 fire 开局 | 分诊座位职责 |
@@ -95,7 +96,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
9596
- 席位及其子代理 ⛔ 永不打印环境变量的值;判存在只用不印值的形式 `[ -n "${X+x}" ]`。
9697
- GitHub 上一切新内容用英文;中文只留四通道(维护者速读、轮报、裁决引文、四维分析)。
9798
- 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。
98-
- 一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案。
9999

100100
## 状态模型
101101

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
## 授权与形态
66

7-
- 授权面 = 人工定期召唤,处理 contract-review 与需决裁项;⛔ 无 Routine、无 cron、无舰队位。
7+
- 授权面 = 人工召唤,任一项目可召;处理 contract-review 与需决裁项;直连 ⛔ 无 Routine/cron。
88
- 只出裁决不持在飞状态:多场并行、无交班,新场不等不停不替,⛔ 无接管无在任者。
99
- 裁决只存在于本卡:聊天原话、台账行、他卡引述 ⛔ 都不是裁决;先记卡再动标签。
1010
- 同卡同笔只一场写,线程即顺序、后记者胜,裁前先读线程。
@@ -13,7 +13,7 @@
1313
- 裁决记录同笔写明所选字母的工作量,读数取自卡面工作量列。
1414
- 划掉原 ⛔ 不派断言,走 `post-stamped --body --ack-through`;漏此笔 ⇒ 接卡者先读正文退决策箱。
1515
- 入口:维护者说处理决裁或处理 contract-review,或 `/pm-dispatch director`。
16-
- 未回字 = 不在 = 停,⛔ 无巡检、审计、快照、聊天、卡评论;⛔ 无任何例外。
16+
- 未回字 = 不在 = 停,⛔ 无巡检、审计、快照、聊天、卡评论;例外 = `../project-forms.md` 例行。
1717
- 回来后先补跑审计与重挂复位一次,再只发一行「批 #N 待字;箱内另有 K 张新到未呈」。
1818
- 开场读一次服役档记入会话审计行,读法见 `../platform-readings.md`;⛔ 不因档位拒裁停三职。
1919
- 双射 carve-out:一张 `pm:seat` 座位贴,四段照旧;状态块逐场一行,各记己锚,⛔ 无占席人。
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 车队项目(项目形态)
2+
3+
协调者每次开场读本文;坐席、接管、移交、开信箱 PR 前再读。本文是席位之上的项目层。
4+
5+
## 一种项目形态
6+
7+
- 车队项目 = 任一账号上、指令行指向 pm-dispatch 的 Claude Code 项目;⛔ 不分项目类型。
8+
- 项目做什么只由它坐的席位决定;车道席、总监席、分诊席都是席位,由维护者召唤。
9+
- 车道席:认领、派发、PR、跨账号复审;总监席:决策箱与决裁批、发版、日报、总表。
10+
- 分诊席:只写标签与审计评论;分诊与总监可召进任一项目,⛔ 不绑定项目。
11+
- 唯一不变量在账号不在项目:批准账号永不跑席位(SKILL.md 全体座位的不变量);本文不另加。
12+
- 规则与指派只写角色词(总监账户、车道账户);登录名只在裁决记录里作既往事件的证据。
13+
14+
## 指令行即召唤
15+
16+
- 项目指令只有一行:`pm-dispatch <席位> [<席位>…]`,如 `pm-dispatch 总监`、`pm-dispatch ui skills`。
17+
- 首词恒为技能目录名 `pm-dispatch`;⛔ 不用 `fleet`,它已是 bot 与中继的名字。
18+
- 席位词 = 中文名或车道文件名:总监 = `lanes/director.md`,分诊 = `lanes/triage.md`。
19+
- 其余席位词同 `lanes/<lane>.md` 文件名:ui、skills、devx、server、spec、hotcrm。
20+
- 一车道多席:协调者取 🟢 行写本账号的那一席;无则取空席;再无则问维护者一次。
21+
- 其余一切住本文:⛔ 不往项目里贴模板;⛔ 不在账号层复制技能。
22+
23+
## 席位是读出来的,不是配出来的
24+
25+
- 项目的席位 = 🟢 行写本账号的座位贴(车道、总监、分诊同此);派发前先读座位贴。
26+
- 一张也没有 ⇒ 项目闲置;每席恰一条席位线程、恰一车道,一席一贴。
27+
- 指令行就是指派:维护者在项目里写下或改写这一行,是唯一的指派动作。
28+
- 项目聊天里的长句(「本账户坐 X;Y 的 PR 由本账户复审」)是等价写法。
29+
- 协调者每次开场把指令行与座位贴对照:逐席按 `seat-post-protocol.md` 坐席或接管。
30+
- 坐席即把本账号写进 🟢 行、每席开一条席位线程;⛔ 无花名册文件。
31+
- 首次坐席建本项目的 routine:巡逻每 2–4 小时;总监席加每日摘要与每小时收件箱扫描。
32+
- 分诊席加每小时裸卡轮;总监与分诊同在一个项目时两者可共用一个 routine。
33+
- 并发上限是维护者在该项目定的姿态;⛔ 不是协议常量,本文不写数字。
34+
35+
## 接管不等撞墙账号
36+
37+
- 🟢 行写着别的账号 ⇒ 指令行即维护者强制接管令,含在飞卡。
38+
- 撞墙账号写不出任何东西,接管永不等它的注记或简报。
39+
- 跨账号 `Release:` 点名旧会话与出处三件;新 `Claim:` 带 `Resume-from: BRANCH@SHA`,新 dev 续旧分支。
40+
- 四件形状见 `execution-duties.md` 认领节;台账 = 标签 + assignee + `Claim:` + `head:claude/` PR。
41+
- 台账按 `assignee:<旧登录名>` 读;⛔ 项目记忆与共享目录永不是台账,只是本账号的缓存。
42+
43+
## 信箱 PR
44+
45+
- 绑 PR 的对话不需要新东西:卡线程订阅自己的 PR,评论即唤醒。
46+
- 非 PR 对话:每项目至多一个 draft PR,标签 `pm:mailbox`,分支 `mailbox/<login>`,由常驻线程订阅。
47+
- 永不合并,移交或换账号时关闭;正文首行 `To: <login>`。
48+
- `pm:mailbox` PR 不欠 CI,一切落地与台账查询排除它。
49+
50+
## 总表
51+
52+
- objectstack 置顶 issue「车队总表」,一席一行;正文由总监席日报与坐席/接管/移交重生成。
53+
- 行 = 仓 · 车道 · 席 · 账号 · 在飞 · 待裁 · 待落地 · 撞墙注记 · 最近动静 · 信箱 PR。
54+
- 读自座位贴、标签、assignee 与 PR 查询;生成视图 ⛔ 不手改(`cross-repo-coordination.md` 规则 5)。

‎.claude/skills/pm-dispatch/references/seat-lifecycle.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
- 存根外的姿态、台账与轮报住项目;标题、assignee、坐席审计评论与跨账号移交简报照旧。
2828
- 正文只由在任座位 PM 编辑且为权威;标题与 assignee 是派生视图,三者同笔更新。
2929
- 标题只放慢状态,快状态留在说明段。
30-
- 维护者强制接管令取席位、队列、未起工卡与待落地 PR;⛔ 不取在飞卡,由原认领者跟完。
30+
- 维护者强制接管令取席位、队列、在飞卡、未起工卡与待落地 PR;⛔ 不等原认领者注记。
3131
- 子代理 dev 的返回消息、探活与续派只在派发会话;落地或 `Release:` 后归新席位。
3232
- 范围与常设承诺是岗位说明不是状态,版本化在 `references/lanes/<lane>.md`。
3333
- 贴内只放指向车道文件的指针,升级走技能 PR,⛔ 不手抄接力。
@@ -67,7 +67,7 @@
6767
## 轮次报告与节奏
6868

6969
- 每轮向维护者打中文轮次报告(chat 通道):issue → 判决 → PR 链接 → 备注的表。
70-
- 项目席轮报 = 卡线程清单,⛔ 不逐轮发聊天表;五项健康指标进总监项目的每日摘要。
70+
- 项目席轮报 = 卡线程清单,⛔ 不逐轮发聊天表;五项健康指标进总监席的每日摘要。
7171
- 报告加升级项、呈裁清单、awaiting a human merge 项、逐 PR 熔断命中项(无则 none)。
7272
- 报告含 `UNRECOGNISED` 行:对本轮门禁日志 grep `UNRECOGNISED` 逐行照录,`NOT APPLICABLE` 行也在内。
7373
- 健康指标五个:可派发库存(open `pm:queue` 未认领及趋势);决策箱(待维护者数)。

‎.claude/skills/pm-dispatch/references/seat-post-protocol.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
- 状态词表:`🟢 <github-login>` 在任、`🟢 Routine`、`⏳ vacant`、`⏸️ paused`。
1111
- assignee = 在任 PM 的 GitHub 账号,退场或回收时摘除;无 assignee = 空缺,与标题互为校验。
1212
- 例外:Routine 座位的 bot 身份通常不可被 assign,以标题为准。
13-
- 多场席(总监):`🟢` 后写召唤账号,状态块逐场一行(会话 ID + 锚);无在任者、无接管。
13+
- 直连多场总监席:`🟢` 后写召唤账号,逐场一行;项目席 🟢 即指派,接管见 `project-forms.md`。
1414
- 当前 PM 段登记三元:GitHub 账号(`get_me` 自查)、会话 ID 或 Routine ID、上任时刻。
1515
- 审计与认领评论的作者字段是平台盖章的硬读数,接管仲裁与活性判定优先用它对账正文。
1616
- 班次叙事 ⛔ 不进贴正文:逐卡状态在卡与 PR 上必填,轮次合计走轮次报告。

‎scripts/pm/check-skill-line-ratchet.mjs‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,6 +1335,12 @@ export const CEILINGS = new Map([
13351335
// CROSS_FILE_MOVES destination, so no `ruledRaises` record applies. Landed
13361336
// count, headroom 0, same convention.
13371337
['.claude/skills/pm-dispatch/references/filing-gate.md', 64],
1338+
// The project layer above the seats (maintainer's word: ONE project form, the
1339+
// instruction line 「pm-dispatch <席位…>」 is the summon, seats are read from the
1340+
// seat posts' 🟢 line, takeover never waits for a walled account, mailbox PRs,
1341+
// a generated roster board). A NEW file, so this is an added row that funds
1342+
// nothing; set at the landed line count, headroom 0, same convention as above.
1343+
['.claude/skills/pm-dispatch/references/project-forms.md', 54],
13381344
// The app-vs-platform boundary — the deciding question (could this be written
13391345
// from the metadata alone, with no knowledge of this company?), the publication
13401346
// test (one consumer is a use, two is a contract) and the two anti-patterns.
@@ -2133,6 +2139,7 @@ export const MAX_TABLE_ROW_BYTES = new Map([
21332139
['.claude/skills/pm-dispatch/references/triage-duties.md', 0],
21342140
['.claude/skills/pm-dispatch/references/execution-duties.md', 0],
21352141
['.claude/skills/pm-dispatch/references/filing-gate.md', 0],
2142+
['.claude/skills/pm-dispatch/references/project-forms.md', 0],
21362143
['.claude/skills/pm-dispatch/references/app-platform-boundary.md', 219],
21372144
['.claude/skills/pm-dispatch/references/lanes/server.md', 0],
21382145
['.claude/skills/pm-dispatch/references/lanes/devx.md', 0],

0 commit comments

Comments
 (0)