Skip to content

Commit 4d1d9d9

Browse files
authored
skills(pm-dispatch): enforce the North Star in the rules layer — 优先序, 取卡前置, Path: line, three faces, domain:cloud, governed register (#19142)
1 parent 362dcc3 commit 4d1d9d9

9 files changed

Lines changed: 70 additions & 182 deletions

File tree

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

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

4040
## 优先级
4141

42-
- 优先序:维护者裁决 > `AGENTS.md` > 红线 > 核心条款 > 细则 > 座位判断。
42+
- 优先序:维护者裁决 > 北极星 > `AGENTS.md` > 红线 > 核心条款 > 细则 > 座位判断。
4343
- 核心条款住 `references/core-rules.md`,是本文的子集;细则是本文其余各节与其它 references。
4444
- 一条规则在本文与核心条款一处改动,另一处同 PR 同改。
4545
- 红线与各节的禁止行都在四轴权衡之外,⛔ 不因更合理的理由被推翻。
@@ -251,6 +251,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
251251
| `domain:skills` | governed 面全量(含本文件;统一定义见「governed 面统一定义」行);非门禁的 `scripts/pm/**`(PM 循环工具);governed 面的治理执行文件:`.github/CODEOWNERS` + SUBJECT 是 governed 面本身的门禁/审计(现为 `scripts/pm/check-governed-merges.mjs`) |
252252
| `domain:spec` | `packages/spec` 整包:schema 形状、`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误 guidance 与 alias 表;`packages/spec/scripts/**`、`packages/spec/docs/**` 及按锚定规则的例外归本域的工具链(域边界枚举与席内分派见 `references/lanes/spec.md`) |
253253
| `domain:cli` | `packages/cli`、`runtime`、`verify`、`packages/qa`、`types`、`packages/rest`、`packages/mcp`、`packages/observability`、`packages/client*`、`cloud-connection`、`create-objectstack`、`packages/adapters/*`、`plugin-hono-server`、`plugin-dev` |
254+
| `domain:cloud` | 云服务旅程,停放(加 `status:parked`,sweep 免扫)待 cloud PM 迁移,本仓不派 |
254255
| (无固定归属,按落点分诊) | `packages/apps/*`、`packages/console`(dist 由脚本生成 ⛔ 不手改;UI 缺陷走 `repo:objectui`)、`examples/*`(归它演练的子系统)、`docs/audits/**` |
255256

256257
- 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。
@@ -354,14 +355,13 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
354355
- 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。
355356
- 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。
356357
- 决策箱勤务:落卡入箱时校验/补全四棱块与速读;存量卡低频子轮回填,语言按不变量。
357-
- 原生 issue 类型 Bug/Feature/Task 是分诊的固定产出。
358-
- 分诊席是 `type` 字段的唯一权威生产者;立单者可预填,分诊校正。
359-
- 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面 ⇒ `Feature`,其余 ⇒ `Task`。
358+
- `type`(Bug/Feature/Task)是分诊固定产出,分诊席唯一权威生产;立单者可预填,分诊校正。
359+
- 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面越出已声明 ⇒ `Feature`,其余 ⇒ `Task`。
360360
- `Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现)。
361361
- ⛔ 不回填存量 backlog 的 type;新卡即时打、存量卡下次碰到补。
362-
- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题。
362+
- 定级按 `docs/NORTH-STAR.md`「优先级」第 1、2 条;正文首行 `Path: P<n> | <清单区> | none`。
363+
- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;父单是协调节点,永不派发。
363364
- 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。
364-
- 父单是协调节点,永不派发。
365365
- 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。
366366
- 查重/shadow 检查先按文件/机制查本仓与姊妹仓 open 卡(含 `pm:dispatched`),再跟引用与关键词。
367367
- 同文件同缺陷 = 同一发现,不分车道:证据搬到先卡,后卡关 `duplicate_of`,⛔ 不并排派发。
@@ -449,16 +449,16 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
449449
- 并行纪律四条(常规,非豁免):① 认领申报文件面到区域级,拿不准就串行。
450450
- ② 开 PR 前合一次 main;③ 兄弟卡落地后再合一次;④ 冲突交合并队列仲裁,⛔ 不手动排序。
451451
- 文件面不相交只保证文本可合并;跨文件语义耦合由队列 CI 逮住,⛔ 不读作不可能冲突。
452-
- 阻塞解除后给延后单重新定价:派发前一单时带必答项。
453-
- 必答项:你的改动让 #X 变简单、变难、变得不必要还是无影响。
452+
- 阻塞解除后延后单重定价:前一单派发词必答 #X 变简单、变难、不必要或无影响。
454453
- 派发后一单前用该回答重读它的选项与成本,⛔ 不沿用立单时那份。
455454
- 在飞卡衍生三分:不修它验收过不过;in-scope ⇒ 父卡 sub-issue,认领席自有、优先级继承。
456455
- 该 sub-issue 带父卡域与优先级直接派发,唯一绕过分诊;sweep 事后扫,重复关 `duplicate`。
457456
- 阻塞项无主 ⇒ 被挡席认领做掉,不限大小;在该卡走完整认领、尊重其热文件串行队。
458457
- 阻塞项在飞 ⇒ 等:`pm:blocking` 在其车道排最前、等待者写该卡;p0/p1 优先级沿链传递。
458+
- 取卡前置 = `docs/NORTH-STAR.md`「优先级」第 3 条:产品仓开放 P0/P1 每次取卡现读。
459459
- 取卡全序:`priority:p0` > `pm:blocking` > `target:` 板上项 > p1 > p2 > p3 > 无级;同级先 `Bug` 再卡龄。
460460
- `pm:blocking` 级内先按解锁扇出(从 `Blocked-by:` 反向索引现算,⛔ 扇出数不落标签)。
461-
- 全序每级取既有信号现读/现算,零逐卡维护;优先是排序不是豁免;无级卡轮报记分诊缺口。
461+
- 全序每级取既有信号现读/现算,零逐卡维护;优先非豁免;无级/缺 `Path:` 轮报记分诊缺口。
462462
- 解锁那一刻 PM 自己的判断最不可信:裁决收窄或关掉了那张卡是假设不是前提。
463463
- 该假设以机制假设身份进派发令,被证伪就在同一张卡公开更正。
464464

@@ -602,7 +602,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
602602
- 判决 ESCALATE:见 升级与决策 节。
603603
- **ACCEPT 之后的路径分叉**:翻 ready / 挂 auto-merge / 入队前先取一次 PR 的路径面。
604604
- 路径面用 `get_files` 取,⛔ 不看报告自述;动手之前先分,不是事后对照。
605-
- governed 面统一定义:`docs/adr/**` + `.claude/**`(全量,含 agents/hooks/settings)+ `skills/**`。
605+
- governed 面统一定义:`docs/adr/**` + `.claude/**`(全量)+ `skills/**` + `docs/NORTH-STAR.md`。
606606
- governed 面同含 `AGENTS.md` + `CLAUDE.md`;`GOVERNED_REPOS` 各仓同治理待遇,执行席恒随落地仓车道。
607607
- 路径面命中规则层 ⇒ ACCEPT 换终局四件套,混合 diff ⛔ 不按比例判;要拆让 dev 单独开 PR。
608608
- ① 复核结论照常写在 issue 上;技能面 hunk 须由契约复审档的席复核,档外席先交 skills 席。

‎.claude/skills/pm-dispatch/references/core-rules.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
- 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱;无出处说明书脱节不进。
8787
- 立卡限三类:可复现缺陷、契约违背、元数据陷阱;截断卡先发修复指令再跳过,不可派发。
8888
- 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。
89-
- 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩大接受面是功能、其余是任务。
89+
- 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩出已声明是功能、其余是任务。
9090
- 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。
9191
- 路由是分诊的技术判断 ⛔ 永不升级哪个仓的问题;父单是协调节点、永不派发。
9292
- 发版板判据二元:不修它当前候选版能不能发 ⛔ 不做渐变,拆票时标签随工作走。

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66

77
- 两个技能根:`.claude/skills/**`(含 pm-dispatch 本体)与 `skills/**`(发布目录,恒英文)。
88
- PM 循环工具与指令架构文件的归属见 SKILL.md 域车道表 `domain:skills` 行,⛔ 不另抄。
9-
- 受管面的治理执行文件:`.github/CODEOWNERS` 治理路由半边。
10-
- 同含 SUBJECT 是受管面本身的门禁与审计脚本。
9+
- 受管面治理执行文件:`.github/CODEOWNERS` 路由半边 + SUBJECT 是受管面本身的门禁/审计脚本。
1110
- 全量判据在 SKILL.md 域车道表;受管面定义与两层分档见 SKILL.md 〈复核〉,⛔ 不另抄。
1211
- QA 管理循环执行归本席;qa-run 记录是协议载体不是工作。
1312
- 契约复核归派发席席内、决裁勤务归项目总监席(`director.md`);本席保留 skill 与治理文本。
@@ -22,6 +21,7 @@
2221
- 棘轮逐行付账,⛔ re-wrap 筹行;砍点逐条核幸存,被砍内容若在别处无家,砍掉就是丢规则。
2322
- 首触定级每轮;决策形状 ⇒ 决策箱带四棱块,⛔ 永不自裁。
2423
- 唯一例外:本车道 finding 自分诊,全仓轮跳过。
24+
- 自分诊问北极星「仪器为车队服务」的那一问:答不出 ⇒ 即刻 p3 或不做,⛔ 不入队。
2525
- 内部指令面中文,机器判据恒英文;认领前重读全线程;标签写 read-modify-write 加回读。
2626
- QA 波次由维护者手动触发,⛔ 不自启。
2727

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

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

55
## 范围
66

7-
- `packages/spec` 整包唯一契约,语义、文本、机器三面同席。
7+
- `packages/spec` 整包唯一契约,契约、辅助、机器三面同席。
88
- 含 schema 形状、`contracts/**`、退役行为半边、strictness 台账。
9-
- 含 describe 与 JSDoc、墓碑散文、错误 guidance 与 alias 表。
9+
- 含 describe/JSDoc、墓碑散文、错误 guidance、alias 表;其重生成的 references 产物归源 PR。
1010
- 含 `packages/spec/scripts/**`、`packages/spec/docs/**`。
1111
- 同含围着 spec 契约转的工具链:门禁、生成器、lint 规则、报错散文、references 管线。
1212
- 一般开发工具面留 devx;`packages/spec` 恒归本席,不论谁需要它。
1313
- objectui 的契约面同辖:`packages/types`、schema 与 `$schema` 语料、spec pin 耦合与契约决策卡。
1414

1515
## 席内分派参考
1616

17-
- 语义与文本按合法元数据集合变没变分:改动前过校验的输入改动后同判 ⇒ 文本面。
18-
- 文本面的 changeset 恒 patch,默认 sweep-first;否则语义面。
19-
- 放宽接受集或扩大公开面的卡,不论多小,即条款②;收窄仍是语义面,不触条款②。
17+
- 契约面 = 「改动前后同一份输入的接受/拒绝结果变了」;判定逐字节不变 ⇒ 辅助面。
18+
- 契约面五形任一命中:收紧、放宽、公开导出面增删、declared ≠ enforced、退役。
19+
- 辅助面的 changeset 恒 patch,默认 sweep-first;第二刀问「它误导了 AI 吗」。
20+
- 误导 ⇒ P2 保留;不误导 ⇒ 关 not planned,或搭下一个触碰它的 PR 的 Acceptance notes。
21+
- 放宽接受集或扩大公开面的卡,不论多小,即条款②;收窄仍是契约面,不触条款②。
2022
- 收窄不触发条款②,但按 `yes` 申报恒不是错误;⛔ 个案裁决不改本行。
21-
- 机器面改围契约的机器,与文本面不交,⛔ 不碰 `packages/spec/src/**/*.zod.ts` 与 strictness 台账。
22-
- 产物随源走:describe 与 JSDoc 改动重生成的 references 产物归触发它的源 PR。
23+
- 机器面改围契约的仪器,与辅助面不交,⛔ 不碰 `packages/spec/src/**/*.zod.ts` 与 strictness 台账。
24+
- 机器面卡只按北极星「仪器为车队服务」的那一问评级。
2325
- 改元数据格式或接受面的照旧归 `domain:spec`;`/meta` 路由本体在 `packages/rest` 归 `domain:cli`。
24-
- 拿不准 FLAG 回分诊,⛔ 不自设第二套判据。
25-
- 档位随面走的现行表在 SKILL.md 模型分档,单源,⛔ 不另抄。
26+
- 拿不准 FLAG 回分诊,⛔ 不自设判据;档位随面走,表在 SKILL.md 模型分档,⛔ 不另抄。
2627

2728
## 常设承诺
2829

2930
- findings 首触定级归分诊席,本席只供证据。
3031
- 门禁强制的跨车道 ledger 追加整类预批(`error-code-ledger.zod.ts`),三条全中即免本席签字。
31-
- ①:码的存在已在归属卡裁过。
32-
- ②:纯增量 —— 不动 schema 形状、既有条目与 ledger 机制,只落追加方自己的包分节。
33-
- ③:兜底不变 —— 条款②路径肢照命中,入队前仍过契约复核。
32+
- ①:码的存在已在归属卡裁过;②:兜底不变,条款②路径肢照命中,入队前仍过契约复核。
33+
- ③:纯增量 —— 不动 schema 形状、既有条目与 ledger 机制,只落追加方自己的包分节。
3434
- 出类(新 ledger 字段、重构、别道条目、准入或拒收语义)⇒ 本席卡,不论谁需要它。
3535
- 分支信息测试(原文不译):Does this defect give a consumer a branch it could act on differently?
3636
No ⇒ widen the existing member's comment/message; yes ⇒ new code under the pre-approved class.

‎AGENTS.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Primary AI instruction file for this repo — and the human contributors' source
44
Read natively by Claude Code, GitHub Copilot (coding agent + CLI), and other agents — no
55
separate `.github/copilot-instructions.md` mirror needed. When any other instruction file
66
in this repo (including `.claude/skills/**`) conflicts with this one, **AGENTS.md wins**.
7+
`docs/NORTH-STAR.md` (先做什么: goals, priority) outranks it; `content/docs/concepts/north-star.mdx` = architecture.
78

89
> **v5.0 breaking rename: `project` → `environment`** everywhere (CLI `-e`, `/api/v1/environments/:id`, header `X-Environment-Id`, `OS_ENVIRONMENT_ID`, DB column `environment_id` [control-plane tables; on the metadata tables since deprecated in favour of `organization_id`, ADR-0006 v4]). No aliases. See ADR-0006. "Project" now only means the npm/monorepo sense.
910
@@ -19,7 +20,6 @@ script's own header is the authority on detail.
1920
## Communication
2021

2122
语言规则分两件事:**和维护者说话用什么语言**,与**留在 GitHub 上的产物用什么语言**。
22-
一条规则一个通道,互不重叠。
2323

2424
- **在 Claude Code 中与维护者对话一律使用中文**(对话回复、轮次报告等聊天通道里的内容)。
2525
- **GitHub 产物一律使用英文**:issue 与 PR 的标题、正文、评论。
@@ -255,8 +255,8 @@ localStorage / auth gotchas.
255255
14. **⛔ A governed surface is confirmed and merged by the maintainer, by hand — or confirmed by an authorized
256256
approval and then landed by the owning seat; before that approval no AI seat merges, queues, or arms auto-merge on a
257257
PR whose diff touches one.** The governed surfaces are `docs/adr/**`, `.claude/**` (agents, hooks and settings —
258-
not only skills), `skills/**`, `AGENTS.md` and `CLAUDE.md` — the file you are reading is one — and a mixed diff
259-
is governed whole on a single path hit. The register is the `GOVERNED_SURFACES` table in
258+
not only skills), `skills/**`, `AGENTS.md`, `CLAUDE.md` and `docs/NORTH-STAR.md` — the file you are reading is
259+
one — and a mixed diff is governed whole on a single path hit. The register is the `GOVERNED_SURFACES` table in
260260
`scripts/pm/check-governed-merges.mjs`; adding a surface is an edit *there*, never here, and `pnpm
261261
check:pm-governed-prose` reds per-PR when this paragraph names fewer surfaces than the register — or more. When it
262262
reds, name the surface here.

0 commit comments

Comments
 (0)