Skip to content

Commit 1327cb4

Browse files
os-zhuangclaude
andauthored
docs(pm-dispatch): complete the spec-lane merge — fold domain:spec-surface / domain:spec-tooling into the single domain:spec lane (#9003)
Maintainer ruling 2026-08-16 (verbatim: 「A」): full merge. The seat layer merged 2026-08-14; this lands the table and label layers. - Domain table: three spec rows become one domain:spec row covering the whole packages/spec surface; the tooling-vs-devx boundary (2026-08-09 ruling) stays as a clause of the merged row; the devx row's cross-reference is re-anchored to domain:spec. - The 一包三席 section is demoted to the spec seat's internal dispatch reference: the boundary test, surface-changeset-always-patch, tooling's no-go zones and artifacts-follow-source survive as in-seat criteria; the labels are stated retired; the anchoring-rule bijection is restored. - Model tiering: per-sub-lane tier lines folded into single-lane guidance; the fable-mandatory clause for contract accept/reject-behavior cards is unchanged in strength. - ensure-pm-labels.sh: both labels retired per the script's own header convention (reason + date recorded in the header, the authority). Claude-Session: https://claude.ai/code/session_017TNzEetykdh7ceZGwuAPLq Co-authored-by: Claude <noreply@anthropic.com>
1 parent 601fbc4 commit 1327cb4

2 files changed

Lines changed: 19 additions & 17 deletions

File tree

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

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -183,25 +183,24 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout
183183
| `domain:drivers` | `packages/drivers/driver-*`(维护者 2026-08-05 对 `driver-memory` / `driver-mongodb` 族有投入冻结指令;`formula` / `driver-sql` 不受影响) |
184184
| `domain:services` | `packages/services/*``packages/connectors/*``packages/triggers/*``plugin-approvals``plugin-webhooks``plugin-email``plugin-reports``embedder-openai``knowledge-*` |
185185
| `domain:identity` | `plugin-auth``plugin-security``plugin-sharing``plugin-audit` |
186-
| `domain:devx` | `packages/lint``packages/sdui-parser``content/docs/**``apps/docs``scripts/`(门禁类)—— 与 `spec-tooling` 相交的三面按「是否围着 spec 契约转」切分 |
186+
| `domain:devx` | `packages/lint``packages/sdui-parser``content/docs/**``apps/docs``scripts/`(门禁类)—— 与 `domain:spec` 相交的三面按「是否围着 spec 契约转」切分 |
187187
| `domain:skills` | 两个技能根:`.claude/skills/**`(含本文件)+ `skills/**`(维护者 2026-08-11 裁定单设座位,与维护者走专题讨论;skills 更新 ADR-class,见 Guardrails) |
188-
| `domain:spec` | `packages/spec`**语义面**:schema 形状、`contracts/**`、退役行为半边、strictness 台账 —— 判据是**接受面变化** |
189-
| `domain:spec-surface` | `packages/spec`**文本面**:describe/JSDoc/墓碑散文/错误 guidance 与 alias 表 —— changeset 恒 patch |
190-
| `domain:spec-tooling` | `packages/spec`**机器面**:`packages/spec/scripts/**``packages/spec/docs/**`;围着 spec 契约转的工具链(门禁/生成器/lint 规则/报错散文/references 管线)归此,一般开发工具面留 `devx`(维护者 2026-08-09 裁决);⛔ 不碰 `packages/spec/src/**/*.zod.ts` 与 strictness 台账 |
188+
| `domain:spec` | `packages/spec` 整包唯一契约,语义/文本/机器三面同席:schema 形状、`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误 guidance 与 alias 表;`packages/spec/scripts/**``packages/spec/docs/**` 及围着 spec 契约转的工具链(门禁/生成器/lint 规则/报错散文/references 管线)—— 一般开发工具面留 `devx`(维护者 2026-08-09 裁决);席内分派判据见下文「spec 席内分派参考」 |
191189
| `domain:cli` | `packages/cli``runtime``verify``qa``types``packages/rest``packages/mcp``packages/observability``packages/client*``cloud-connection``create-objectstack``packages/adapters/*``plugin-hono-server``plugin-dev` |
192190
| (无固定归属,按落点分诊) | `packages/apps/*``packages/console`(dist 由脚本生成 ⛔ 手改;UI 缺陷走 `repo:objectui`,pin/刷新脚本归 `scripts/` 行)、`examples/*`(归它演练的子系统) |
193191

194192
表未覆盖的包在首次分诊时归类并**走 PR 更新本表**;**新增或退役一个 `domain:*` 必须同批改本表
195193
**(在流通而不在表 = 无主车道)。座位在编情况以 `label:pm:seat` 索引为准,每
196194
`domain:*``repo:*` 恰一张座位贴。
197195

198-
**`packages/spec` 一包三席**(维护者 2026-08-07 批准;anchoring rule 的显式例外):语义/文本两席
199-
按「合法元数据集合变没变」分派 —— 改动前能过校验的输入,改动后逐字节同判 ⇒ `spec-surface`,否
200-
`spec`;**任何改变接受/拒绝行为的卡,不论多小,归`domain:spec`**。tooling 席改「围着契约转的
201-
机器」,与 surface 无交集。产物随源走: describe/JSDoc 改动重生成的 references 产物归触发它的
202-
源 PR(生成物门禁重生成提交,⛔ 手改)。`metadata``engine-core` 的二次切分按包边界(无例外);
203-
改元数据**格式/接受面**的照旧归 `domain:spec`,`/meta` 路由本体在 `packages/rest`
204-
`domain:cli`;拿不准 FLAG 回分诊。surface 席默认 sweep-first 运行。
196+
**spec 席内分派参考**(维护者 2026-08-16 裁定合并车道:原 `domain:spec-surface` / `domain:spec-tooling` 标签已退役,
197+
三面同归 `domain:spec` 一席,anchoring rule 双射恢复;以下判据降为席内分派与定价依据):语义/文本按
198+
「合法元数据集合变没变」分 —— 改动前能过校验的输入,改动后逐字节同判 ⇒ 文本面(changeset 恒 patch,
199+
默认 sweep-first),否则语义面;**任何改变接受/拒绝行为的卡,不论多小,按语义面处理**。机器面改
200+
「围着契约转的机器」,与文本面无交集,⛔ 不碰 `packages/spec/src/**/*.zod.ts` 与 strictness 台账。
201+
产物随源走:describe/JSDoc 改动重生成的 references 产物归触发它的源 PR(生成物门禁重生成提交,⛔ 手改)。
202+
`metadata``engine-core` 的二次切分按包边界(无例外);改元数据**格式/接受面**的照旧归 `domain:spec`,
203+
`/meta` 路由本体在 `packages/rest``domain:cli`;拿不准 FLAG 回分诊。
205204

206205
**单一生产者。** `domain:*` 只由分诊座位产出;打标签 ≠ 认领;**未打标签的 issue 任何人不得认领
207206
** —— 那意味着分诊还没走到,不是「可以自己判一下」。
@@ -387,13 +386,13 @@ dev 侧推分支要早 —— 远程分支是在飞工作最硬的证据。**Sta
387386
性由门禁农场机械判定,失败在漏跑门不在判断);默认判断档 `opus`(M/L、裁决实施、任何带设计判断的卡;
388387
拿不准就升一档 —— 错派低档的返工贵过省下的额度);上限 `fable`(最重协议/流程/编排卡,按卡取用非新
389388
默认)。**⛔ 强制条款两条**:① 凡改 `.claude/skills/pm-dispatch/**` 的卡一律
390-
`model: "claude-fable-5"`;② 凡**改变契约接受/拒绝行为或扩大公开面**的卡(`domain:spec` 语义车道;
391-
判据即分诊代裁的机械边界测试与一包三席分席判据,⛔ 不另抄第二份)一律 `claude-fable-5`(维护者
389+
`model: "claude-fable-5"`;② 凡**改变契约接受/拒绝行为或扩大公开面**的卡(`domain:spec` 语义面;
390+
判据即分诊代裁的机械边界测试与 spec 席内分派判据,⛔ 不另抄第二份)一律 `claude-fable-5`(维护者
392391
2026-08-12 裁定,原话:「同意,就按语义面收窄,立卡并通知 spec 席」)—— 契约错毒化一切下游,全仓最贵
393392
。两条唯一降档出口:**额度耗尽豁免**(维护者 2026-08-13 原话:「fable 如果用完了,可以用 opus」):仅
394393
当 fable 实测不可用(额度耗尽/限流;墙杀在中途,重派时同样可降)才落 `opus`,⛔ 不再往下,档位与理由记
395-
入认领评论「Container & model」行。明确不变:`spec-surface` 照旧 sonnet/opus;`spec-tooling` 默认
396-
opus,门禁语义设计时升 fable;下游适配卡默认 opus 拿不准升档照旧。**档位逐次派发显式传参,永不省略**
394+
入认领评论「Container & model」行。明确不变(合并后按席内分派面适用):spec 文本面卡照旧
395+
sonnet/opus;机器面默认 opus,门禁语义设计时升 fable;下游适配卡默认 opus 拿不准升档照旧。**档位逐次派发显式传参,永不省略**
397396
(解析顺序与 pin 语义以 os-dev 定义 frontmatter 注释为权威;被允许名单挡下时回退**继承的**模型,
398397
正是要防的静默继承),连同尺寸写进同一行;分诊 suggestion 行是输入不是决定,不采纳给理由。
399398

scripts/pm/ensure-pm-labels.sh

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
#
99
# The label set IS the PM state machine (.claude/skills/pm-dispatch/SKILL.md,
1010
# "State model"): every label here is consumed by a named query or gate.
11-
# ⛔ The retired lanes (domain:engine, domain:ui) are deliberately ABSENT —
11+
# ⛔ The retired lanes (domain:engine, domain:ui; domain:spec-surface and
12+
# domain:spec-tooling, retired 2026-08-16 — maintainer ruling 「A」 merged both
13+
# into the single domain:spec lane; the sub-lane criteria survive as the spec
14+
# seat's internal dispatch reference in SKILL.md) are deliberately ABSENT —
1215
# recreating a retired label puts an ownerless lane back into GitHub's
1316
# autocomplete. Their leftover label OBJECTS may still exist in the repos;
1417
# deleting those objects is a separate, deliberate PM action.
@@ -43,7 +46,7 @@ gh label create repo:cloud -R objectstack-ai/objectstack -c c5def5 -d "Seam c
4346

4447
# Domain lanes — the roster lives in SKILL.md's domain table; keep both in sync
4548
# BY PR whenever a lane is added or retired.
46-
for D in engine-core metadata drivers services identity devx spec spec-surface cli spec-tooling skills; do
49+
for D in engine-core metadata drivers services identity devx spec cli skills; do
4750
gh label create "domain:$D" -R objectstack-ai/objectstack -c bfd4f2 -d "Domain lane — seat card indexed by label:pm:seat" 2>/dev/null || true
4851
done
4952

0 commit comments

Comments
 (0)