From b91d5d64232da3a128147a862fd463f0da11bd9e Mon Sep 17 00:00:00 2001 From: os-elon-musk Date: Fri, 23 Oct 2026 12:56:54 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs(pm-dispatch):=20the=20project=20layer?= =?UTF-8?q?=20=E2=80=94=20one=20project=20form=20whose=20instruction=20lin?= =?UTF-8?q?e=20=E3=80=8Cpm-dispatch=20<=E5=B8=AD=E4=BD=8D=E2=80=A6>?= =?UTF-8?q?=E3=80=8D=20is=20the=20summon,=20seats=20read=20from=20the=20se?= =?UTF-8?q?at=20posts'=20=F0=9F=9F=A2=20line,=20takeover=20that=20never=20?= =?UTF-8?q?waits=20for=20a=20walled=20account,=20mailbox=20PRs=20and=20a?= =?UTF-8?q?=20generated=20roster=20board?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_01UJebcS3m7vf3CYnTfBD5oH --- .claude/skills/pm-dispatch/SKILL.md | 4 +- .../pm-dispatch/references/lanes/director.md | 4 +- .../pm-dispatch/references/project-forms.md | 54 +++++++++++++++++++ .../pm-dispatch/references/seat-lifecycle.md | 2 +- .../references/seat-post-protocol.md | 2 +- scripts/pm/check-skill-line-ratchet.mjs | 7 +++ 6 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 .claude/skills/pm-dispatch/references/project-forms.md diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 07553435fbe..8cef0a052d7 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -46,7 +46,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 ## 入口与角色 -`/pm-dispatch [args]`,自由组合,全部可选: +`/pm-dispatch [args]` 或项目指令行 `pm-dispatch <席位…>`,自由组合,全部可选: | arg | 含义 | 默认 | |---|---|---| @@ -79,6 +79,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 | 文件 | 谁在哪个 fire 读 | 承载的章节 | |:--|:--|:--| | `references/seat-lifecycle.md` | 每个座位每次 fire:开轮互斥读数前、收班前 | 开轮互斥 · 座位贴协议 · Epic 子树车道 · 轮次报告与节奏 · 停止条件与待命 · 断粮与跨墙恢复 | +| `references/project-forms.md` | 协调者每次开场;席位坐席、接管、移交、开信箱 PR 前 | 一种项目形态 · 指令行即召唤 · 席位是读出来的 · 接管 · 信箱 PR · 总表 | | `references/reading-discipline.md` | 任一座位取读数、引读数或核验 main 的那一刻 | 平台读数纪律 | | `references/cross-repo-coordination.md` | 分诊席路由与查重前;执行席跨仓认领、派发或转移时 | 多仓协调 | | `references/triage-duties.md` | 分诊席每次 fire 开局 | 分诊座位职责 | @@ -94,7 +95,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 席位及其子代理 ⛔ 永不打印环境变量的值;判存在只用不印值的形式 `[ -n "${X+x}" ]`。 - GitHub 上一切新内容用英文;中文只留四通道(维护者速读、轮报、裁决引文、四维分析)。 - 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。 -- 一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案。 ## 状态模型 diff --git a/.claude/skills/pm-dispatch/references/lanes/director.md b/.claude/skills/pm-dispatch/references/lanes/director.md index b9f99361a24..b77ea6d7e68 100644 --- a/.claude/skills/pm-dispatch/references/lanes/director.md +++ b/.claude/skills/pm-dispatch/references/lanes/director.md @@ -4,7 +4,7 @@ ## 授权与形态 -- 授权面 = 人工定期召唤,处理 contract-review 与需决裁项;⛔ 无 Routine、无 cron、无舰队位。 +- 授权面 = 人工召唤,任一项目可召;处理 contract-review 与需决裁项;直连 ⛔ 无 Routine/cron。 - 只出裁决不持在飞状态:多场并行、无交班,新场不等不停不替,⛔ 无接管无在任者。 - 裁决只存在于本卡:聊天原话、台账行、他卡引述 ⛔ 都不是裁决;先记卡再动标签。 - 同卡同笔只一场写,线程即顺序、后记者胜,裁前先读线程。 @@ -13,7 +13,7 @@ - 裁决记录同笔写明所选字母的工作量,读数取自卡面工作量列。 - 划掉原 ⛔ 不派断言,走 `post-stamped --body --ack-through`;漏此笔 ⇒ 接卡者先读正文退决策箱。 - 入口:维护者说处理决裁或处理 contract-review,或 `/pm-dispatch director`。 -- 未回字 = 不在 = 停,⛔ 无巡检、审计、快照、聊天、卡评论;⛔ 无任何例外。 +- 未回字 = 不在 = 停,⛔ 无巡检、审计、快照、聊天、卡评论;例外 = `../project-forms.md` 例行。 - 回来后先补跑审计与重挂复位一次,再只发一行「批 #N 待字;箱内另有 K 张新到未呈」。 - 开场读一次服役档记入会话审计行,读法见 `../platform-readings.md`;⛔ 不因档位拒裁停三职。 - 双射 carve-out:一张 `pm:seat` 座位贴,四段照旧;状态块逐场一行,各记己锚,⛔ 无占席人。 diff --git a/.claude/skills/pm-dispatch/references/project-forms.md b/.claude/skills/pm-dispatch/references/project-forms.md new file mode 100644 index 00000000000..5489ad7fda6 --- /dev/null +++ b/.claude/skills/pm-dispatch/references/project-forms.md @@ -0,0 +1,54 @@ +# 车队项目(项目形态) + +协调者每次开场读本文;坐席、接管、移交、开信箱 PR 前再读。本文是席位之上的项目层。 + +## 一种项目形态 + +- 车队项目 = 任一账号上、指令行指向 pm-dispatch 的 Claude Code 项目;⛔ 不分项目类型。 +- 项目做什么只由它坐的席位决定;车道席、总监席、分诊席都是席位,由维护者召唤。 +- 车道席:认领、派发、PR、跨账号复审;总监席:决策箱与决裁批、发版、日报、总表。 +- 分诊席:只写标签与审计评论;分诊与总监可召进任一项目,⛔ 不绑定项目。 +- 唯一不变量在账号不在项目:批准账号永不跑席位(SKILL.md 全体座位的不变量);本文不另加。 +- 规则与指派只写角色词(总监账户、车道账户);登录名只在裁决记录里作既往事件的证据。 + +## 指令行即召唤 + +- 项目指令只有一行:`pm-dispatch <席位> [<席位>…]`,如 `pm-dispatch 总监`、`pm-dispatch ui skills`。 +- 首词恒为技能目录名 `pm-dispatch`;⛔ 不用 `fleet`,它已是 bot 与中继的名字。 +- 席位词 = 中文名或车道文件名:总监 = `lanes/director.md`,分诊 = `lanes/triage.md`。 +- 其余席位词同 `lanes/.md` 文件名:ui、skills、devx、cli、engine、services、spec、hotcrm。 +- 一车道多席:协调者取 🟢 行写本账号的那一席;无则取空席;再无则问维护者一次。 +- 其余一切住本文:⛔ 不往项目里贴模板;⛔ 不在账号层复制技能。 + +## 席位是读出来的,不是配出来的 + +- 项目的席位 = 🟢 行写本账号的座位贴(车道、总监、分诊同此);派发前先读座位贴。 +- 一张也没有 ⇒ 项目闲置;每席恰一条席位线程、恰一车道,一席一贴。 +- 指令行就是指派:维护者在项目里写下或改写这一行,是唯一的指派动作。 +- 项目聊天里的长句(「本账户坐 X;Y 的 PR 由本账户复审」)是等价写法。 +- 协调者每次开场把指令行与座位贴对照:逐席按 `seat-post-protocol.md` 坐席或接管。 +- 坐席即把本账号写进 🟢 行、每席开一条席位线程;⛔ 无花名册文件。 +- 首次坐席建本项目的 routine:巡逻每 2–4 小时;总监席加每日摘要与每小时收件箱扫描。 +- 分诊席加每小时裸卡轮;总监与分诊同在一个项目时两者可共用一个 routine。 +- 并发上限是维护者在该项目定的姿态;⛔ 不是协议常量,本文不写数字。 + +## 接管不等撞墙账号 + +- 🟢 行写着别的账号 ⇒ 指令行即维护者强制接管令,含在飞卡。 +- 撞墙账号写不出任何东西,接管永不等它的注记或简报。 +- 跨账号 `Release:` 点名旧会话与出处三件;新 `Claim:` 带 `Resume-from: BRANCH@SHA`,新 dev 续旧分支。 +- 四件形状见 `execution-duties.md` 认领节;台账 = 标签 + assignee + `Claim:` + `head:claude/` PR。 +- 台账按 `assignee:<旧登录名>` 读;⛔ 项目记忆与共享目录永不是台账,只是本账号的缓存。 + +## 信箱 PR + +- 绑 PR 的对话不需要新东西:卡线程订阅自己的 PR,评论即唤醒。 +- 非 PR 对话:每项目至多一个 draft PR,标签 `pm:mailbox`,分支 `mailbox/`,由常驻线程订阅。 +- 永不合并,移交或换账号时关闭;正文首行 `To: `。 +- `pm:mailbox` PR 不欠 CI,一切落地与台账查询排除它。 + +## 总表 + +- objectstack 置顶 issue「车队总表」,一席一行;正文由总监席日报与坐席/接管/移交重生成。 +- 行 = 仓 · 车道 · 席 · 账号 · 在飞 · 待裁 · 待落地 · 撞墙注记 · 最近动静 · 信箱 PR。 +- 读自座位贴、标签、assignee 与 PR 查询;生成视图 ⛔ 不手改(`cross-repo-coordination.md` 规则 5)。 diff --git a/.claude/skills/pm-dispatch/references/seat-lifecycle.md b/.claude/skills/pm-dispatch/references/seat-lifecycle.md index 9e549c69845..b1e644e0aca 100644 --- a/.claude/skills/pm-dispatch/references/seat-lifecycle.md +++ b/.claude/skills/pm-dispatch/references/seat-lifecycle.md @@ -25,7 +25,7 @@ - 贴 = 座位(标签 `pm:seat`),正文固定四段现值:当前 PM / 继承台账 / 热文件串行队 / 说明。 - 正文只由在任座位 PM 编辑且为权威;标题与 assignee 是派生视图,三者同笔更新。 - 标题只放慢状态,快状态留在说明段。 -- 维护者强制接管令取席位、队列、未起工卡与待落地 PR;⛔ 不取在飞卡,由原认领者跟完。 +- 维护者强制接管令取席位、队列、未起工卡与待落地 PR;在飞卡归原认领者,不可达才接。 - 子代理 dev 的返回消息、探活与续派只在派发会话;落地或 `Release:` 后归新席位。 - 范围与常设承诺是岗位说明不是状态,版本化在 `references/lanes/.md`。 - 贴内只放指向车道文件的指针,升级走技能 PR,⛔ 不手抄接力。 diff --git a/.claude/skills/pm-dispatch/references/seat-post-protocol.md b/.claude/skills/pm-dispatch/references/seat-post-protocol.md index 1f33a4a9ffe..74fe16e3175 100644 --- a/.claude/skills/pm-dispatch/references/seat-post-protocol.md +++ b/.claude/skills/pm-dispatch/references/seat-post-protocol.md @@ -10,7 +10,7 @@ - 状态词表:`🟢 ` 在任、`🟢 Routine`、`⏳ vacant`、`⏸️ paused`。 - assignee = 在任 PM 的 GitHub 账号,退场或回收时摘除;无 assignee = 空缺,与标题互为校验。 - 例外:Routine 座位的 bot 身份通常不可被 assign,以标题为准。 -- 多场席(总监):`🟢` 后写召唤账号,状态块逐场一行(会话 ID + 锚);无在任者、无接管。 +- 直连多场总监席:`🟢` 后写召唤账号,逐场一行;项目席 🟢 即指派,接管见 `project-forms.md`。 - 当前 PM 段登记三元:GitHub 账号(`get_me` 自查)、会话 ID 或 Routine ID、上任时刻。 - 审计与认领评论的作者字段是平台盖章的硬读数,接管仲裁与活性判定优先用它对账正文。 - 班次叙事 ⛔ 不进贴正文:逐卡状态在卡与 PR 上必填,轮次合计走轮次报告。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 73b21e631cd..93b52acfaa5 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1312,6 +1312,12 @@ export const CEILINGS = new Map([ // CROSS_FILE_MOVES destination, so no `ruledRaises` record applies. Landed // count, headroom 0, same convention. ['.claude/skills/pm-dispatch/references/filing-gate.md', 64], + // The project layer above the seats (maintainer's word: ONE project form, the + // instruction line 「pm-dispatch <席位…>」 is the summon, seats are read from the + // seat posts' 🟢 line, takeover never waits for a walled account, mailbox PRs, + // a generated roster board). A NEW file, so this is an added row that funds + // nothing; set at the landed line count, headroom 0, same convention as above. + ['.claude/skills/pm-dispatch/references/project-forms.md', 54], // The app-vs-platform boundary — the deciding question (could this be written // from the metadata alone, with no knowledge of this company?), the publication // test (one consumer is a use, two is a contract) and the two anti-patterns. @@ -2108,6 +2114,7 @@ export const MAX_TABLE_ROW_BYTES = new Map([ ['.claude/skills/pm-dispatch/references/triage-duties.md', 0], ['.claude/skills/pm-dispatch/references/execution-duties.md', 0], ['.claude/skills/pm-dispatch/references/filing-gate.md', 0], + ['.claude/skills/pm-dispatch/references/project-forms.md', 0], ['.claude/skills/pm-dispatch/references/app-platform-boundary.md', 219], ['.claude/skills/pm-dispatch/references/lanes/engine.md', 0], ['.claude/skills/pm-dispatch/references/lanes/services.md', 0], From 91e8600b55d9a61499653cf13c64795992fdab9a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 23 Oct 2026 14:46:19 +0000 Subject: [PATCH 2/2] docs(pm-dispatch): one project form in the lines #25385 wrote; lane words follow lanes/server.md; the takeover order reaches in-flight cards unconditionally MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 `` 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 Claude-Session: https://claude.ai/code/session_01UJebcS3m7vf3CYnTfBD5oH --- .claude/skills/pm-dispatch/SKILL.md | 6 +++--- .claude/skills/pm-dispatch/references/project-forms.md | 2 +- .claude/skills/pm-dispatch/references/seat-lifecycle.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 189cf0745d0..f8415b417fd 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -51,9 +51,9 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 | arg | 含义 | 默认 | |---|---|---| | `triage` | 以分诊座位身份运行(只扫/分类/路由,永不认领) | — | -| ``(如 `spec`、`skills`) | 以该 `domain:*` 车道的执行座位身份运行;承办该车道的项目即「车道项目」 | — | +| ``(如 `spec`、`skills`) | 以该 `domain:*` 车道的执行座位身份运行;承办它的是坐该席的车队项目 | — | | `epic:#` | 以父单 #n 的 epic PM 身份运行(见 `references/seat-lifecycle.md` 〈Epic 子树车道〉) | — | -| `director` | 以总监席身份运行(人工召唤;所在项目即「总监项目」;三职与章程见 `references/lanes/director.md`) | — | +| `director` | 以总监席身份运行(人工召唤,任一车队项目可召;三职与章程见 `references/lanes/director.md`) | — | | `coordinator` | 以协调者身份运行(项目会话:开席位线程与卡线程、跨车道调度;接口见 `references/coordinator.md`) | — | | `label:` | backlog 过滤标签;`label:all` = 全部 open 未认领 | `pm:queue` | | `repo:` | 扫哪个仓的 backlog(单 issue 的落地仓看它自己的 `repo:*` 标签) | `objectstack-ai/objectstack` | @@ -68,7 +68,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - fire = 一次唤醒;fire 到达时上一轮未清空的接续处理,⛔ 不重开、不重排。 - 批 = 一个上下文里读完的 ≤5 张同族卡,是质量单位,⛔ 不是预算。 - 班 = 一个会话的任期,只以交接或惰性回收结束。 -- 席位两形:Routine 席与项目席(会话是车道项目的线程);细则见 `references/seat-lifecycle.md`。 +- 席位两形:Routine 席与项目席(会话是车队项目的线程);细则见 `references/seat-lifecycle.md`。 - 项目席唤醒 = PR 订阅事件 + 每项目一个巡查 routine;⛔ 无自绑 cron、无 `send_later` 链。 - 探针先行:fire 的第一动作是一次最便宜的车道盘点查询,⛔ 在它之前不读任何长文本。 - 队列空 + 无在飞 + 无待复核 + 决策箱无新答复 ⇒ 自退。 diff --git a/.claude/skills/pm-dispatch/references/project-forms.md b/.claude/skills/pm-dispatch/references/project-forms.md index 5489ad7fda6..38b8df87bf1 100644 --- a/.claude/skills/pm-dispatch/references/project-forms.md +++ b/.claude/skills/pm-dispatch/references/project-forms.md @@ -16,7 +16,7 @@ - 项目指令只有一行:`pm-dispatch <席位> [<席位>…]`,如 `pm-dispatch 总监`、`pm-dispatch ui skills`。 - 首词恒为技能目录名 `pm-dispatch`;⛔ 不用 `fleet`,它已是 bot 与中继的名字。 - 席位词 = 中文名或车道文件名:总监 = `lanes/director.md`,分诊 = `lanes/triage.md`。 -- 其余席位词同 `lanes/.md` 文件名:ui、skills、devx、cli、engine、services、spec、hotcrm。 +- 其余席位词同 `lanes/.md` 文件名:ui、skills、devx、server、spec、hotcrm。 - 一车道多席:协调者取 🟢 行写本账号的那一席;无则取空席;再无则问维护者一次。 - 其余一切住本文:⛔ 不往项目里贴模板;⛔ 不在账号层复制技能。 diff --git a/.claude/skills/pm-dispatch/references/seat-lifecycle.md b/.claude/skills/pm-dispatch/references/seat-lifecycle.md index 249b372ac33..913f53f8e3b 100644 --- a/.claude/skills/pm-dispatch/references/seat-lifecycle.md +++ b/.claude/skills/pm-dispatch/references/seat-lifecycle.md @@ -27,7 +27,7 @@ - 存根外的姿态、台账与轮报住项目;标题、assignee、坐席审计评论与跨账号移交简报照旧。 - 正文只由在任座位 PM 编辑且为权威;标题与 assignee 是派生视图,三者同笔更新。 - 标题只放慢状态,快状态留在说明段。 -- 维护者强制接管令取席位、队列、未起工卡与待落地 PR;在飞卡归原认领者,不可达才接。 +- 维护者强制接管令取席位、队列、在飞卡、未起工卡与待落地 PR;⛔ 不等原认领者注记。 - 子代理 dev 的返回消息、探活与续派只在派发会话;落地或 `Release:` 后归新席位。 - 范围与常设承诺是岗位说明不是状态,版本化在 `references/lanes/.md`。 - 贴内只放指向车道文件的指针,升级走技能 PR,⛔ 不手抄接力。 @@ -67,7 +67,7 @@ ## 轮次报告与节奏 - 每轮向维护者打中文轮次报告(chat 通道):issue → 判决 → PR 链接 → 备注的表。 -- 项目席轮报 = 卡线程清单,⛔ 不逐轮发聊天表;五项健康指标进总监项目的每日摘要。 +- 项目席轮报 = 卡线程清单,⛔ 不逐轮发聊天表;五项健康指标进总监席的每日摘要。 - 报告加升级项、呈裁清单、awaiting a human merge 项、逐 PR 熔断命中项(无则 none)。 - 报告含 `UNRECOGNISED` 行:对本轮门禁日志 grep `UNRECOGNISED` 逐行照录,`NOT APPLICABLE` 行也在内。 - 健康指标五个:可派发库存(open `pm:queue` 未认领及趋势);决策箱(待维护者数)。