Skip to content

skills(pm-dispatch): enforce the North Star in the rules layer — 优先序, 取卡前置, Path: line, three faces, domain:cloud, governed register - #19142

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-18489-north-star-enforcement
Sep 18, 2026
Merged

os-zhuang merged 3 commits into
mainfrom
claude/issue-18489-north-star-enforcement

Conversation

@os-elon-musk

Copy link
Copy Markdown
Collaborator

Fixes #18489

Clause-②: no

Rules-layer enforcement of the maintainer's North Star (docs/NORTH-STAR.md, landing through PR #19134 — open draft, Fixes its own card; this PR lands after it). The eight items of the seat's re-scope comment 5736794156 on the card, verbatim; ⛔ no ninth item, no ceiling raise, no new gate, no new half-state row. Every rule cites the North Star by path and section name (「优先级」第 N 条, 「仪器为车队服务」, 「现在不做」) and restates none of it.

Maintainer rulings, verbatim (chat 2026-09-18): 「skills 是驱动车队正确工作的核心,影响车队效率的卡都要派啊」 · 「云服务旅程混在 objectstack / objectui 里的 ⇒保留 domain:cloud 标签 等 cloud 项目经理迁移」 · 「其他同意」.

The North Star text this PR cites (from the card #19131 body / PR #19134, verbatim):

优先级:

  1. 安全与数据完整性永远最高,不等路。
  2. 路断了、或清单上的能力断了 ⇒ P0/P1;能跑但出错 ⇒ P2;不在路上、不在清单上 ⇒ p3 或不做。
  3. 产品仓还有开放的 P0/P1 时,任何车道不派 p2/p3 的工具卡、契约卫生卡;解锁产品 P0/P1 的仪器卡沿链继承其优先级。

仪器为车队服务:改 PM 协议、门禁、棘轮、技能的卡,以「它落地后车队的哪个决定或动作会不一样」评级——说得出(一次本来会派错的派发、一次落不了的落地、一次放过假货的复核、一个卡住的席位),就按上面的规则定级,与产品卡同场竞争;说不出,就不做。

现在不做:云服务的旅程(注册、控制面、托管)另有自己的清单;企业版内置 Agent 属 cloud 仓,不在本仓的路与清单里;计费未建。

维护者速读(草稿)

改了什么:把北极星写进 PM 协议的规则层。① 优先序里「维护者裁决」之后加「北极星」,排在 AGENTS.md 之前。② 取卡全序前面加一条前置:取卡前先按北极星「优先级」第 3 条现读产品仓有没有开放的 P0/P1。③ 分诊定级只按北极星「优先级」第 1、2 条,每张分诊过的卡正文首行写一行 Path:(在路上的哪一步 / 清单的哪一区 / none);缺这一行的卡在轮报里记作分诊缺口;type 判据加「已声明」限定(越出已声明接受集才是 Feature)。④ skills 车道的 finding 自分诊只问「它落地后车队的哪个决定或动作会不一样」,答不出立刻 p3 或不做,不排队。⑤ spec 车道的三面改成你的叫法:契约面(同一份输入的接受/拒绝结果变了)、辅助面(判定逐字节不变,再问「它误导了 AI 吗」)、机器面(按「仪器为车队服务」评级)。⑥ AGENTS.md 顶部一行指向北极星;受管面登记表加 docs/NORTH-STAR.md;docs/adr/PRIORITIZATION.md 改成一行指针。⑦ 域表与标签清单加 domain:cloud(停放,不派)。⑧ 核心条款的孪生行同改。五个受棘轮文件全部行数不变(812 / 151 / 33 / 43 / 1099),每行 ≤ 120 字节。

为什么改:北极星是法,协议只引用不复述——分诊、取卡、自分诊三处判据以前各自成文,现在都指向同一份文本;以后改优先级只改北极星一处。

风险与代价(含回滚):代价是删了几句冗余(明细在下方逐行表);风险是两处我做了判断而不是照抄:(a) PRIORITIZATION.md 保留了第二行「ADR 实现落地时同 PR 翻 Status」的规则,因为 ADR-0110 引用它且它没有别的家——你不要就删那一行;(b) 定级引「优先级」第 1、2 条而不只第 2 条,因为第 1 条(安全与数据完整性)也是定级规则,只引第 2 条会把不在路上的安全缺陷读成 p3。回滚:revert 本 PR 即可,不动任何生成物、不动棘轮上限。

席位意见:(席位填写)

你要做的:一个动作——批准或在 PR 上删你不要的那一行。

Line budget — before / after per file, per changed line (bytes), what paid for what

Every ratcheted file lands at its ceiling with headroom 0; every landed line ≤ 120 B (check:pm-skill-ratchet green on 022b06f6c). Payment is content folded (redundant words deleted), never re-wrap.

.claude/skills/pm-dispatch/SKILL.md — 812 → 812

line (after) change before B after B paid by
:42 优先序 gains 北极星 (item 1) 92 104 in place
:254 domain:cloud table row (item 7) — 104 fold :357+:358 → :358 (66+87 → 110): 原生 issue 类型… / 分诊席是 type 唯一权威… merged, every fact kept
:359 type 判据 gains 已声明 (item 3) 101 116 in place
:362 定级按「优先级」第 1、2 条 + Path: line (item 3) — 110 fold :362+:364 → :363 (70+39 → 105): 路由… + 父单是协调节点… — the merged form core-rules :91 already had
:452 重定价 + 必答项 merged 75+85 109 pays :458
:458 取卡前置 = 「优先级」第 3 条 (item 2) — 105 fold :452+:453
:461 无级/缺 Path: 轮报记分诊缺口 (item 3, mechanism assumption 2) 120 118 in place: 优先是排序不是豁免 → 优先非豁免
:605 governed 面统一定义 gains docs/NORTH-STAR.md (item 6 consequence, check:pm-governed-prose) 105 102 in place: 「含 agents/hooks/settings」 dropped — AGENTS.md PD #14 carries it verbatim

references/core-rules.md — 151 → 151: :89 117 → 117 (扩大接受面是功能 → 扩出已声明是功能), twin of SKILL.md :359.

references/lanes/skills.md — 33 → 33: :9+:10 (75+62) → :9 117 (CODEOWNERS 路由半边 + SUBJECT 门禁/审计脚本, both facts kept) pays :25 113 (item 4: the 「仪器为车队服务」 question; 答不出 ⇒ 即刻 p3 或不做, ⛔ 不入队).

references/lanes/spec.md — 43 → 43 (item 5): :7 语义/文本/机器 → 契约/辅助/机器 (76 → 76); :17–:24 the three faces in the maintainer's terms — 契约面 test (114) · 契约面五形 (105) · 辅助面 changeset/sweep-first + 第二刀「它误导了 AI 吗」 (94) · 误导 ⇒ P2 保留 / 不误导 ⇒ 关 not planned 或搭下一个触碰 PR 的 Acceptance notes (107) · :19 stays with 收窄 → 只触条款① (108) · :20 unchanged (93) · 机器面 与辅助面不交 (119) · 机器面按「仪器为车队服务」评级 (77). Three new lines paid by three folds: :9+:22 (74+97 → 111, 产物随源走 kept as 归源 PR); :24+:25 (58+78 → 108, 单源 kept as ⛔ 不另抄); :31+:33 (42+84 → 115, ① and the 兜底不变 condition on one line, 纯增量 renumbered ③ — the numbers are referenced nowhere else, grep-verified).

AGENTS.md — 1099 → 1099: :7 new pointer (120 B, one physical line): docs/NORTH-STAR.md (先做什么: goals, priority) outranks it; content/docs/concepts/north-star.mdx = architecture — Prime Directive #8 untouched per the seat's note; paid by deleting :22 「一条规则一个通道,互不重叠。」 (40 B, a preamble sentence restating the bullets under it, no rule). PD #14 :258–:259 re-flowed in place (119+92 → 116+117) to name docs/NORTH-STAR.md (the prose gate's containment half).

Positive greps with controls (worktree at 022b06f6c vs origin/main 14a762f)

grep after control on origin/main
NORTH-STAR in SKILL.md (≥ 2) 3 0
NORTH-STAR in AGENTS.md (≥ 1) 2 0
Path: in SKILL.md (≥ 1) 2 0
domain:cloud in SKILL.md 1 0
domain:cloud in ensure-pm-labels.sh 4 0
「误导」 in lanes/spec.md 2 0
control: domain:skills in SKILL.md 1 1
control: 「取卡全序」 in SKILL.md 1 1

Twins (SKILL.md ↔ core-rules.md, rule :44)

  • :359 type 判据 ↔ core-rules :89 — re-keyed identically (已声明 qualifier). ✅
  • :363 路由/父单 merged ↔ core-rules :91 — core-rules already carried the merged form; byte-identical intent, no edit. ✅
  • :358 type 固定产出/唯一生产 ↔ core-rules :89 first clause — unchanged. ✅
  • :42 优先序 ↔ core-rules :26 「与 AGENTS.md 冲突以之为准」 — NOT re-keyed: the clause stays true (AGENTS.md :7 now points above itself to the North Star) and :26 sits at 120 B; every 北极星 spelling measured 123–131 B. Reported, not hidden.
  • :459 取卡全序 ↔ core-rules :108 — SKILL.md :459 is unchanged (the precondition is :458, a new line), so :108 is untouched; a precondition digest measured 146–153 B on :108 and core-rules has no adjacent bullet pair that merges under 120 B (measured). Reported.
  • :452 重定价 (folded) — no core-rules twin; lanes/services.md :27 points at the clause by name and still resolves.
  • New lines (:254, :362, :458, :605, lanes) — core-rules is a subset (⛔ 不新增规则), no twin owed.

Deviations (declared, each deletable by the maintainer on the PR)

  1. docs/adr/PRIORITIZATION.md keeps ONE line beyond the pointer: the status-hygiene rule (a PR that lands an ADR's implementation flips its Status: line with evidence). ADR-0110 line 395 cites it as 「the PRIORITIZATION status-hygiene rule」 and it has no other home in the tree (grep-verified); deleting it would orphan a live rule. Delete that line on the PR if you want the pure pointer.
  2. The pointer is a code span, not a relative link: check-adr-links reds on ../NORTH-STAR.md until PR docs: add the North Star (the maintainer's text, verbatim) #19134 merges.
  3. 定级 cites 「优先级」第 1、2 条 (the re-scope says rule 2): rule 1 is the top band of the same grading law.
  4. Item 4 landed in lanes/skills.md :25, SKILL.md :381 unchanged — :381 is 119 B and the question needs +18 B minimum (measured 128–137 B in every spelling); the lane file is the seat's 岗位说明 and the acceptance greps do not read :381.
  5. :461 could not absorb the literal 「无级或缺 Path: 卡轮报记分诊缺口」 (135 B); 优先是排序不是豁免 → 优先非豁免 (118 B) keeps venue (轮报) and qualifier (分诊缺口).
  6. docs/NORTH-STAR.md is also named in SKILL.md :605 and AGENTS.md PD feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 — the register's containment gate (check:pm-governed-prose) demands both; not a ninth item, a mechanical consequence of item 6.
  7. scripts/pm/check-governed-merges.mjs self-test: rootExacts now filters exact rows WITHOUT a separator (docs/NORTH-STAR.md carries one, so it reaches dispatch-gates as written and declares no hint); count strings 5 → 6; one new case north-star-exact, three new near-misses (docs/north-star.md, docs/NORTH-STAR.md.bak, examples/docs/NORTH-STAR.md), one new assert that a separator-carrying exact row declares no hint. No floor lowered (331 assertions, was 331 at minimum).
  8. The objectui domain:cloud description differs from the objectstack one (…not dispatched from objectui…): check:pm-label-desc-cap's dry run requires one distinct description per parsed line. Both ≤ 100 chars (100 and 99).

Gates (all on 022b06f6c, exit codes captured redirect-then-$?)

Derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at 93330d643 and re-derived at 022b06f6c (list unchanged, 49 commands). Green: check:pm-skill-ratchet, check:pm-skill-id-lint, check:skill-frame-sync, check:pm-governed-prose (2 surfaces name all 6 registered surfaces), check:pm-governed-merges (331 assertions), check:pm-half-states (5043 cases), check:pm-label-desc-cap (25 descriptions), check:nul-bytes, check-adr-links (680 links resolve), check:doc-formula-expressions (after pnpm --filter '@objectstack/lint...' build under os-verify-lock.sh, held 175 s on a shared box), and every other derived command (adr anchors/symbol anchors, ci-filter parity, closing-keyword parity, comment-mask corpus, declaration mirrors, scripts symbol anchors, self-test wired/workflow commands, skills token ratchet, whole-set label write, bare-root worklist, queue-guard self-test, harness-current, adr-anchors, agent-test-spelling, bash32-floor, cli-command-ids, cross-package-test-inputs, doc-authoring, docs-audit-scope, driver-memory-census, entry-guard, parse-guard, expected-skips, prior-rulings, pnpm-filter-targets, ratchet-remedy-authority, refd-timer-probe, required-contexts, watch-hint-literal) — exit 0 each. check:pm-dispatch-gates detached (exceeds the foreground cap): verdict in the report comment. Ratchet re-run after the final commit on 022b06f6c: 812 / 151 / 33 / 43 / 1099, headroom 0 each.

Not run locally (CI owns them): pnpm lint, the package test/typecheck farm — this diff touches no package.

Acceptance notes (noted, not filed)

  • Two 「north star」 documents now coexist: docs/NORTH-STAR.md (先做什么) and content/docs/concepts/north-star.mdx (architecture, PD Convert to monorepo with scoped packages #8). Whether the .mdx is retitled is the maintainer's word, pending in chat (seat note). 承接者: the skills seat, next AGENTS.md touch.
  • A card parked with domain:cloud and no pm:* state is picked up by the sweep's 「域卡缺 pm 状态」 disjunct and H13 unless it also carries status:parked (SKILL.md :325 excludes that label). The row says 停放; the label pairing is the triage seat's at labelling time. 承接者: the triage seat.
  • scripts/pm/ensure-pm-labels.sh was NOT run against GitHub (the seat runs it); the objectstack domain:cloud object exists with whatever colour/description it was auto-created with until --reconcile.

Generated by Claude Code

The maintainer's North Star (docs/NORTH-STAR.md, landing via its own PR)
becomes the law the PM protocol cites: 优先序 gains 北极星 above AGENTS.md,
取卡全序 gains its precondition (「优先级」第 3 条), triage grades by
「优先级」第 1、2 条 and stamps a body-leading `Path:` line, the type
criterion gains the 「已声明」 qualifier, the skills lane self-triages by
「仪器为车队服务」, the spec lane's three faces take the maintainer's
terms (契约面 / 辅助面 / 机器面), the domain table and label roster gain
`domain:cloud` (parking, not a lane), AGENTS.md points at the North Star,
the governed register gains `docs/NORTH-STAR.md`, and PRIORITIZATION.md
becomes a pointer. Line-neutral at every ratchet ceiling.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF
…text

`docs/NORTH-STAR.md` lands through its own PR, so the PRIORITIZATION.md
pointer cites the path in a code span instead of a relative link that
check-adr-links cannot resolve before that file merges. The objectui
`domain:cloud` description differs from the objectstack one so the label
desc-cap dry run sees one distinct description per parsed line.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF
@os-elon-musk os-elon-musk added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 18, 2026 — with Claude
@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation labels Sep 18, 2026
…loud + status:parked

lanes/spec.md: a narrowing card is still 契约面 and does not trigger
条款②; the earlier 「只触条款①」 misread clause ① (scoped to the 协议语义面)
and would have sent every spec narrowing to the contract-review tier.
SKILL.md domain table: the domain:cloud row now says how a parked card
stays sweep-silent — add status:parked, the exemption the sweep's
disjunct ③ and H13 already read. ensure-pm-labels.sh: status:parked
joins the roster for both repos (absent in objectui), distinct
descriptions per repo, colour of the other sweep-exempt label.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF

Copy link
Copy Markdown
Collaborator Author

维护者速读(终稿)· skills 席 · 2026-09-18T23:12Z

这个 PR 做什么:把北极星写进 PM 协议的规则层,协议只引用、不复述。八项:① 优先序里「维护者裁决」之后加「北极星」,排在 AGENTS.md 之前;② 取卡前先按「优先级」第 3 条现读产品仓有没有开放的 P0/P1;③ 分诊定级只按「优先级」第 1、2 条,每张卡正文首行写 Path:(路上哪一步 / 清单哪一区 / none),缺这行的卡轮报记分诊缺口;type 判据加「已声明」;④ skills 车道自分诊只问「它落地后车队的哪个决定或动作会不一样」,答不出立刻 p3 或不做;⑤ spec 车道三面改成契约面 / 辅助面 / 机器面,带您给的一句话判据(含「它误导了 AI 吗」);⑥ AGENTS.md 顶部一行指向 docs/NORTH-STAR.md(旧的 .mdx 仍是架构,PD #8 不动),受管面登记表加 docs/NORTH-STAR.md,PRIORITIZATION.md 改成指针;⑦ 域表与标签清单加 domain:cloud(停放 = domain:cloud + status:parked,sweep 免扫);⑧ 核心条款孪生行同改。五个受棘轮文件行数不变,每行 ≤120 字节。

我复核时改了两处(dev 已修,记录 5737301010):spec 车道一行把「收窄」误接到条款①(那是协议面的条款,会让所有 spec 收窄卡按契约复审档施工),已恢复「不触条款②」;domain:cloud 行原先没说怎么让 sweep 不碰停放卡,现已写明加 status:parked,并把该标签加进两仓的标签清单(objectui 原先没有)。

两处 dev 做了判断、您可以否决:(a) PRIORITIZATION.md 保留了一行「ADR 实现落地时同 PR 翻 Status」的规则,因 ADR-0110 引用它——不要就在 PR 里删;(b) 定级引「优先级」第 1、2 条而非只第 2 条,因为第 1 条(安全与数据完整性)也是定级规则。

验收:ACCEPT 在 #18489;门禁全绿(棘轮 812 / 43 / 1099 不变、id-lint、governed-prose 6/6、标签描述 ≤100、clause2 --pair 一致);CI 14 成功 · 8 跳过 · 7 在跑、0 红(2026-09-18T23:11Z);Fixes #18489、Clause-②: no。

请您做的一件事:approve(os-zhuang 或 hotlong 任一)——之后落地由我做,不用您点合并。#19144(受管两档)排在它后面,等它合了再合一次 main。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 18, 2026 23:33
@os-zhuang
os-zhuang merged commit 4d1d9d9 into main Sep 18, 2026
36 of 37 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-18489-north-star-enforcement branch September 18, 2026 23:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills(pm-dispatch): ADR-0136 D2 becomes the triage protocol — Journey: line, journey bands, cross-lane product-first order, journeys feed the queue

3 participants