Skip to content

Commit 64fa424

Browse files
docs(pm-dispatch): write down the domain:* label vocabulary and the seat roster (#5469) (#6886)
The domain table answered "which domain owns this package" but nothing answered "which domain labels exist and who is seated" — so two entries grew outside it for four days. Add the roster (10 lanes + seat cards, 2 retired labels), record the measured state of domain:spec-tooling, and make the one-time setup block create the domain:* labels it never created. The maintainer's 2026-08-06 ruling on domain:spec-tooling is recorded verbatim along with the three facts that overtook its premise: the seat card was opened 9 hours after the ruling, the maintainer-approved 2026-08-07 spec split writes the lane into this file as a live boundary partner, and triage was still applying the label on 2026-08-08. The three-path overlap with domain:devx stays explicitly unruled and now routes to a FLAG rather than a guess. Claude-Session: https://claude.ai/code/session_01F8q5J1MQyocgtNspb15fSn Co-authored-by: Claude <noreply@anthropic.com>
1 parent 0b7093e commit 64fa424

1 file changed

Lines changed: 89 additions & 0 deletions

File tree

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

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,23 @@ done
118118
# routing labels exist only on the main backlog repo:
119119
gh label create repo:objectui -R objectstack-ai/objectstack -c fbca04 -d "Lands in objectui (frontend)" || true
120120
gh label create repo:cloud -R objectstack-ai/objectstack -c c5def5 -d "Lands in cloud" || true
121+
# domain lanes — the roster under "Domain lanes"; ⛔ keep the two lists in sync:
122+
for D in engine-core metadata drivers services identity devx spec spec-surface cli spec-tooling; do
123+
gh label create "domain:$D" -R objectstack-ai/objectstack -c bfd4f2 -d "Domain lane — seat card indexed by label:pm:seat" || true
124+
done
121125
```
122126

127+
**退役的 `domain:*`(`domain:engine``domain:ui`)不在上面那行里,也不要加回去**
128+
—— 重建一个退役标签,就是把一条无主车道放回 GitHub 的自动补全。
129+
130+
⚠️ **为什么这一段以前不存在,以及为什么它不是可选的。** 本块此前**一个 `domain:*`
131+
都不创建**,只创建 `pm:*` / `finding` / `needs-user-decision` / `repo:*`;而同文的
132+
label discipline 又规定「未打标签的 issue 任何人都不得认领」,`domain:*` 是分诊座位
133+
**唯一生产的机器判据**。也就是说这套词表是**承重的,却没有任何一处可执行文本负责
134+
把它创建出来** —— 现存的域标签全部是历史上手工点出来的,词表与实际标签集之间没有
135+
任何机械对账,两边各自漂移(#5472 施工现场记录,归挂 #5469)。#5469 发现的两个
136+
未入表条目就是这个缺口的产物,不是谁一时疏忽。
137+
123138
(Use the GitHub MCP tools instead of `gh` when the CLI is unavailable — the
124139
protocol is identical.)
125140

@@ -769,6 +784,80 @@ updated **by PR** — the taxonomy evolves deliberately, never per-claim.
769784
routing 用 `repo:*` 表达(rule 4 的座位协议),不另打 `domain:*` —— 域车道是
770785
「同仓多 PM 并发」的切法,不是第二套仓库标签。
771786

787+
### 词表 —— 在流通的 `domain:*` 标签与它们的座位贴
788+
789+
上面那张表回答「**这个包归哪个域**」;本表回答「**有哪些域标签、谁在座**」。两个
790+
问题此前只有前者写了下来,后者靠各人记忆,结果是两个条目在表外自己长了四天
791+
(#5469:`domain:spec-tooling` 在用却不在表内、`domain:ui``repo:objectui` 重复)。
792+
**新增或退役一个 `domain:*`,必须同批改本表** —— 一个在流通、却不在本表的标签,
793+
就是一条**分诊在往里打、而没有任何座位的过滤器会返回它**的无主车道;反过来,一个
794+
本表有、实际已无人在座的标签,是两个座位都以为归自己的撞车面。
795+
796+
| `domain:*` | 座位贴 | 上面的包家族表 |
797+
|:--|:--|:--|
798+
| `domain:engine-core` | #6019 | ✅ 有行 |
799+
| `domain:metadata` | #6367 | ✅ 有行 |
800+
| `domain:drivers` | #6020 | ✅ 有行 |
801+
| `domain:services` | #6021 | ✅ 有行 |
802+
| `domain:identity` | #6022 | ✅ 有行 |
803+
| `domain:devx` | #6023 | ✅ 有行 |
804+
| `domain:spec` | #6017 | ✅ 有行 |
805+
| `domain:spec-surface` | #6298 | ✅ 有行 |
806+
| `domain:cli` | #6024 | ✅ 有行 |
807+
| `domain:spec-tooling` | #6018 | ⚠️ **故意无行** —— 见下一段 |
808+
809+
**已退役(⛔ 分诊不再打;见到就是误标,按 rule 4 的误标路径上报):**
810+
811+
| 退役标签 | 处置 | 2026-08-09 实测 |
812+
|:--|:--|:--|
813+
| `domain:engine` | 已按 #5472 拆为 `engine-core` / `drivers` | 0 单;⚠️ 标签对象仍在 |
814+
| `domain:ui` | 维护者 2026-08-06 裁决退役 ⇒ 改用 `repo:objectui`,**不设别名** | 0 单(open + closed);⚠️ 标签对象仍在 |
815+
816+
整仓座位是 `repo:*` 而非 `domain:*`:`repo:objectui` #6025`repo:cloud` #6026
817+
`domain:ui` 之所以值得在退役表里单独点名,是因为它正是上一段那条规则被绕过的
818+
**实例**:规则说 objectui 用 `repo:*` 表达,而标签集里当时已经长出了一个
819+
`domain:ui`
820+
821+
⚠️ **两条退役标签的存量都已清零,但两个标签对象都还在仓库标签集里**(2026-08-09
822+
实测),也就是说在 GitHub 的标签自动补全里仍然选得中。两条的退役指令都写明了删除
823+
(#5472 的迁移纪律原文「清零后删除旧标签」;`domain:ui` 的 2026-08-06 裁决「即日
824+
退役」),而两次都停在了「不再打」这一步 —— **清零 ≠ 退役,删除标签对象是单独的
825+
一步**。本表这两行是它们今天唯一的防线;**删除是 PM 的动作**(dev 侧无删除标签的
826+
工具),⛔ 删掉之前不要把它们当成不存在。
827+
828+
### `domain:spec-tooling` —— 在册车道,包家族表故意不给它行(#5469 未闭)
829+
830+
维护者 2026-08-06 裁决(#5469,原文引用、未翻译):
831+
832+
> `domain:spec-tooling` 判为 **#5163 存续期的临时 program 车道**,不进 SKILL 包家族
833+
> 域表;其存量单由分诊按现行域表重标,重标完成后该标签退役
834+
835+
⚠️ **该裁决所依据的前提(「临时、待退役」)在其后三天被反向的事实推翻,所以本节
836+
记录的是现状,不是那条裁决的执行结果**(2026-08-09 实测):
837+
838+
- 裁决当天 15:03Z(裁决后约 9 小时)**新立了座位贴 #6018**,该席至今在任、经历
839+
一次移交、一个任期内落了 9 个 PR;
840+
- **2026-08-07 维护者批准的 `spec` 拆分**(座位贴 #6298)在本文里写进了
841+
`spec-surface``spec-tooling` 的分界判据 —— 即维护者本人在裁决次日签发的
842+
文本,把它当作活车道在用;
843+
- 标签仍在被分诊打:当前 **10 单 open**(#6833 / #6797 / #6751 / #6635 / #6350 /
844+
#6232 / #6221 / #5828 / #5757 / #5163,其中 #6797#6350`pm:dispatched`),
845+
67 单 closed,最近一次新打在 2026-08-08。
846+
847+
⇒ 该标签是**在册车道,分诊照常打**。包家族表不给它行的原因**不是**「它不存在」,
848+
而是它与 `domain:devx` 的三处文件面重叠**至今未裁**;在未裁之前给它一行,会当场
849+
违反本节 anchoring rule 的那一句(每个包恰好属于一个 domain)。
850+
851+
- **无争议、可直接路由的两处**:`packages/spec/scripts/**``packages/spec/docs/**`
852+
`domain:spec-tooling`。devx 从未声明这两处,依据是 #6018 座位贴的 Scope 段与
853+
上面 2026-08-07 的 surface / tooling 分界(tooling 改「围着契约转的机器」)。
854+
- ⚠️ **未裁的三处**:`packages/lint``content/docs/**``scripts/` —— 座位贴 #6018
855+
#6023 **同时声明**这三处。这不是纸面问题,2026-08-09 实测两侧都在落地:
856+
`domain:spec-tooling`#6778 整单落在 `packages/lint/src/`(PR #6831),而同期
857+
`domain:devx`#5957 / #5330 / #6381 也落在 `packages/lint`
858+
-**落在这三处的卡,分诊 FLAG 回 #5469,⛔ 不自行二选一。** 备选方案 A / B 写在
859+
#5469 正文里,裁定权在维护者与两条车道的 PM,⛔ 不由分诊或 dev 代拍。
860+
772861
**`engine` 一分为二(#5472,与 #5095 同批)。**`domain:engine` 同时覆盖
773862
objectql + metadata\* + platform-objects + core + formula + 全部 `driver-*`,
774863
在双射之下**一个 PM 吃不下**(它是全仓最大的一块,且 driver 族的落地节律与

0 commit comments

Comments
 (0)