Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions .claude/skills/pm-dispatch/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,11 @@ references);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出
## 多仓协调(五条规则)

产品横跨三仓,依赖方向固定:`objectstack`(后端;`packages/spec` 是唯一契约)→ `objectui`(前端,构
建产物经 `pnpm objectui:refresh` 回流)与 `cloud`。
建产物经 `pnpm objectui:refresh` 回流)与 `cloud`。第四仓 `objectos`(纯文档与站点,不入上述依赖链):
分诊照扫,执行折入 `domain:devx`(已辖 `content/docs/**` + `apps/docs`),⛔ 现在不铸 `repo:objectos`
座位;规则 4 预登记的拆分触发任一命中(单轮逼近 fire 周期 / objectos 队列持续断粮)⇒ 升格完整座位,
是记录在案的转换(维护者 2026-08-18:「就按 B,带你补的两条,落地吧」)。该仓无 changeset 流、无
`packages/`、无合并队列(落地 = 人工合并),CI 形状与三仓不同 —— 派发预期照实设,⛔ 不要求不存在的机制。

1. **Issue 住在修复落地的仓,分诊时按判据严格执行**(维护者 2026-08-10 裁决;2026-08-16 重申收紧)。判
据:正文抽掉 objectstack 还成立 ⇒ file-at-destination,分诊当场转仓 —— console/UI 缺陷即转 objectui
Expand All@@ -156,7 +160,7 @@ references);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出
3. **联动杂事立单,不靠记忆。** 已验收 PR 的产物流向另一仓时,由**接受那个 PR 的执行座位**立即
在消费仓立后续单(带 `Blocked-by:`);`domain:*` 仍由分诊补。
4. **纵向拆分:一个分诊 PM + N 个执行 PM,一人一车道双射**(维护者 2026-08-05 拍板;2026-08-16 裁
定分诊统一收归一座)。分诊座位**三仓唯一**:objectstack、objectui、cloud 全部 backlog 的分诊/
定分诊统一收归一座)。分诊座位**四仓唯一**:objectstack、objectui、cloud、objectos 全部 backlog 的分诊/
定级/路由/type 由它一座生产,只扫/分类/打标签/拆分/查重/转仓,⛔ 永不认领、永不派发、永不写代
码。执行座位信任标签、只在本车道认领,误标**不自行改**、留言上报;姊妹仓 `repo:*` 座位收窄为**
执行座位**(在本仓认领/派发/复核/落地,同一套执行座位纪律,⛔ 不产 `domain:*`/type/定级;skills
Expand DownExpand Up@@ -245,8 +249,8 @@ of record)。**读侧闭环(维护者 2026-08-12 批准):接管与巡检只读

## 分诊座位职责

(执行座位 ⛔ 跳过本节动作 —— 读到标签当既成事实。)本节全部职责**对三仓统一执行**(维护者
2026-08-16 裁定):sweep、首触定级、发版板、查重/shadow 检查与代裁通道逐仓各跑一遍;**代裁权限唯
(执行座位 ⛔ 跳过本节动作 —— 读到标签当既成事实。)本节全部职责**对四仓统一执行**(三仓归一维护者
2026-08-16 裁定,objectos 并入 2026-08-18 裁定):sweep、首触定级、发版板(objectos 无发版板,跳过)、查重/shadow 检查与代裁通道逐仓各跑一遍;**代裁权限唯
一归本座位**,任何执行座位(含姊妹仓 `repo:*`)⛔ 不代裁。

**Backlog sweep(常设职责,不等请求)。** 每轮扫任一析取命中的卡:① 全裸(无`pm:*`、
Expand DownExpand Up@@ -275,11 +279,11 @@ objectui pin 落后且其队列已空 ⇒ 在本仓立/刷新 console bump 单;
扫必烂),新卡即时打、存量卡下次碰到补。读者三个:代裁路由(`Feature` 机械落人工地板,`Bug`/
`Task` 才是代裁候选)、发版板缺陷扫描(`type:Bug is:open`)、普通队列 Bug 优先平手判据。

**路由即分诊的技术判断,永不升级「哪个仓?」。** 读三仓代码定落点;跨仓的按contract-first 拆分;
**路由即分诊的技术判断,永不升级「哪个仓?」。** 读四仓代码定落点;跨仓的按contract-first 拆分;
父单已有子结构的,父单队列标签即可(sub-issue 自动成为候选),分诊逐个展开路由、补 `Blocked-by:`
排序,父单是协调节点**永不派发**。每张留一条英文审计评论(「Triage: lands in …; rationale: …」)
,可选带 `Size/model suggestion:` 行供执行席参考。跨仓查重(shadow 检查):跟跨仓引用 + 关键词搜
两姊妹仓 —— 在飞 ⇒ `Blocked-by:` 不派;open 未认领 ⇒ 先收敛成一个派发入口;已完成 ⇒ 卡可能过期
各姊妹仓 —— 在飞 ⇒ `Blocked-by:` 不派;open 未认领 ⇒ 先收敛成一个派发入口;已完成 ⇒ 卡可能过期
。**「生产者在哪?」是常设分诊问题**:declared ≠ enforced 形状的卡先问谁在写这个字段 —— 答案通
常就是根因,并在派发前改变卡的范围与域标签。

Expand DownExpand Up@@ -495,7 +499,9 @@ not-reachable 是设计非故障(维护者 2026-08-11 裁定)⛔ 不复测;**接
**ACCEPT 之后的路径分叉(动手之前先分,不是事后对照)。** 翻 ready / 挂 auto-merge / 入队前,先
取一次 PR 的路径面(`get_files`,⛔ 不看报告自述)。governed 面统一定义(维护者 2026-08-18
「同意」):`docs/adr/**` + `.claude/**`(全量,含 agents/hooks/settings)+ `skills/**` +
`AGENTS.md` + `CLAUDE.md`。路径面**一条命中** ⇒ ACCEPT 换终局三件套:① 复核结论照常写在
`AGENTS.md` + `CLAUDE.md`;agent 指令文件按此跨仓同判 —— objectui、cloud、objectos 一并在内(维护者
2026-08-18:「任何对 agents.md 等文件的修改…包括 objectui cloud仓库」→「同意」;objectos 执行虽折
入 devx,其指令面 PR 照样 draft/人工合并)。路径面**一条命中** ⇒ ACCEPT 换终局三件套:① 复核结论照常写在
issue 上(不能合 ≠ 不复核;技能面 PR 的复核席须跑在契约复审档位,档位单源见条款②闸门);
② PR 留给维护者,**看得见地悬着** —— **人工合并即审核记录,本条座位纪律是唯一的 merge 前防线**
(per-PR 事前门已退役,没有机器会替你挡):⛔ 永不翻 ready、永不入队、永不挂 auto-merge;③ 轮次报
Expand DownExpand Up@@ -621,28 +627,22 @@ pull(今天谁撞上;零拉动默认 defer/ remove);③ AI-agent error-resistanc

## 护栏(Guardrails,有约束力)

- PM **不写任何文件**;合并只对**已复核全绿的 dev-agent PR 经合并队列**发生 —— 永不合自己
的 PR、永不合红的或未复核的、永不绕过队列。唯一例外(维护者 2026-08-06 批准):维护者逐 PR 明
示授权的 `.claude/` 内部工具 PR,授权原话引用在 PR 正文,复核需另一座位或维护者 walkthrough,⛔ 不得自审自合。
- **版本发布必须人工**(维护者 2026-08-07 拍板)。任何 AI 座位 ⛔ 不得执行或触发发布动作
:`changeset publish` / release 脚本、推版本 tag、`workflow_dispatch` 触发发布类 workflow、
**合并 Version Packages PR**。围绕发布的工作(发版板、pin bump、对账、状态核验)照旧归座位;
「发布」本身不归任何座位。发现未经人工的发布痕迹按事故立案,⛔ 不代跑补救性发布 —— 机械通道
的存在不构成授权,遇到那类通道当缺陷上报。
- PM **不写任何文件**(唯一例外及其全部条件见全体座位不变量,⛔ 不另抄第二份);合并只对**已复核
全绿的 dev-agent PR 经合并队列**发生 —— 永不合自己的 PR、永不合红的或未复核的、永不绕过队列。
- **版本发布必须人工**(维护者 2026-08-07 拍板;发布动作的完整清单与「围绕发布的工作照旧归座位」
细则以 AGENTS.md「release act」段为权威,含**合并 Version Packages PR**)。发现未经人工的发布痕
迹按事故立案,⛔ 不代跑补救性发布 —— 机械通道的存在不构成授权,遇到那类通道当缺陷上报。
- **Governed 面由维护者人工合并,合并即审核记录**(三裁一脉:2026-08-08「adr 只能由维护者自己确
认,人工合并,ai 不得擅自合并」;2026-08-11「所有 skills 的更新和adr 类似,需要人工审核」;
2026-08-18 对「人工合并即人工审核,事后审计代替事前门」整包:「同意。」)。面 = ACCEPT 路径分叉
的统一定义;任何 AI 座位对 governed PR ⛔ 不得合并、入队、挂 auto-merge —— 唯一的 merge 前防线
(per-PR 门已退役);起草、推分支、开 PR 都可以,「已复核 + 已批准 + 全绿」不构成例外;已入队
只有转 draft 才真的离队。事后防线 = 审计清单,维护者不认识的条目 = 席位违规,立案回滚。
的统一定义,禁令三条与离队出口同见该节;事后防线 = 审计清单,维护者不认识的条目 = 席位违规,立案回滚。
- **决定属于维护者:永不代维护者回答产品/架构问题**(唯一例外:分诊职责里已裁的代裁车道,边界恰
与其置信门重合,不得更宽);**永不派发 assignee 是别人的 issue;永不派发带 `needs-user-decision` 的 issue**。
- 每个 dev agent 都在**每仓专属的自有 worktree** 里干活(hook 强制;os-dev 定义重申);并行度
以 `batch` 封顶,同批**按构造文件面不相交**(唯一松动是维护者明示豁免时的替代四条,申
报降到区域级,不是取消不相交)。**分诊座位永不认领、永不派发、永不写代码;执行座位只在自己那
一个车道认领**(例外两条:分诊指定的跨域例外单、简单阻塞项直接接手);**`domain:*` 只有一个生
产者**,执行座位不改标签只上报误标。
- 与 AGENTS.md 冲突时,**AGENTS.md 胜**。

## 报告契约(Report contract,os-dev 返回什么)

Expand Down
9 changes: 8 additions & 1 deletion scripts/pm/ensure-pm-labels.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -28,7 +28,14 @@

set -uo pipefail

for R in objectstack-ai/objectstack objectstack-ai/objectui objectstack-ai/cloud; do
# objectos joined the triage sweep under Option B (maintainer ruling 2026-08-18,
# 「就按 B,带你补的两条,落地吧」): it gets the full pm state-machine vocabulary
# below, but stays OUT of the domain-lane loop (lanes are main-repo-only — its
# execution folds into domain:devx) and OUT of the target:<major> loop (docs/site
# repo, no changeset/release flow, no release board). Those absences are
# deliberate, not oversights. Actually RUNNING this against objectos is a PM
# landing step (needs label-write credentials on that repo).
for R in objectstack-ai/objectstack objectstack-ai/objectui objectstack-ai/cloud objectstack-ai/objectos; do
gh label create pm:queue -R "$R" -c 0e8a16 -d "Ready for the PM dispatch loop" 2>/dev/null || true
gh label create pm:dispatched -R "$R" -c 1d76db -d "Dispatched to a dev agent by /pm-dispatch" 2>/dev/null || true
gh label create needs-user-decision -R "$R" -c d93f0b -d "Blocked on a maintainer decision — do not dispatch" 2>/dev/null || true
Expand Down
Loading