Skip to content

docs(pm-dispatch): enter the maintainer's 插队 and 契约面卡 tiers into the 取卡全序 (SKILL.md + core-rules twin) - #19506

Merged
os-steve merged 1 commit into
mainfrom
claude/issue-19127-contract-surface-take-order
Sep 21, 2026
Merged

os-steve merged 1 commit into
mainfrom
claude/issue-19127-contract-surface-take-order

Conversation

@os-steve

Copy link
Copy Markdown
Collaborator

Fixes #19127
Clause-②: no

What lands

The maintainer's ruling on the card, verbatim (裁决引文照抄不译):

契约面卡 = 修完之后,同一份输入的接受/拒绝结果会变
一句话测试:拿一份作者写的元数据,改动前后喂进去,接受还是拒绝的结果变了吗? 变 ⇒ 契约面。一个字节都不变 ⇒ 辅助面。
命中任一即契约面
应该优先处理 契约面卡 卡

and the maintainer's direct order that put this card at the head of the seat's queue, verbatim: 「19127 插队」 (recorded with the 出处三件 on the seat's claim of record, comment 5755214464).

Two tiers enter the 取卡全序 above the priority ladder, in SKILL.md and its references/core-rules.md twin as ONE order in the same words:

  1. 维护者直派插队卡 — a card the maintainer directly ordered to jump. Recognised by the existing 维护者直派通道 rule (SKILL.md :226–:227: 「当面指挥的 PM 会话直接路由,只对明示指挥的卡成立」 / 「直派的审计评论逐字引用授权指令」) and recorded on the card with the 出处三件 of :149 (谁的指令、原话、在哪说).
  2. 契约面卡 — the tier the ruling names, with the maintainer's word. Its test is NOT restated: the line points at the test's home references/lanes/spec.md :17–:18 (「契约面 = 「改动前后同一份输入的接受/拒绝结果变了」;判定逐字节不变 ⇒ 辅助面。」 plus the five hit-any forms), which this PR reads and does not touch.
  3. 标签序 — the existing ladder, now on its own line, content unchanged.

A level of the 全序 sits above 卡龄 by construction (the ladder's final tiebreak) — the 「优先处理」 = tier-not-tiebreak reading.

Before / after

Byte counts are content bytes (trailing newline excluded); the cap is the ratchet's MAX_LINE_BYTES = 120. The dispatch's 120 / 119 figures counted the newline.

SKILL.md :464 at base 4045781 (119 B):

  • 取卡全序:priority:p0 > pm:blocking > target: 板上项 > p1 > p2 > p3 > 无级;同级先 Bug 再卡龄。

becomes :464 (119 B) + :465 (116 B):

  • 取卡全序:维护者直派插队卡(出处三件)> 契约面卡(判据见 references/lanes/spec.md)> 标签序。
  • 标签序:priority:p0 > pm:blocking > target: 板上项 > p1 > p2 > p3 > 无级;同级先 Bug 再卡龄。

references/core-rules.md :108 at base (118 B):

  • 取卡全序:插队卡、有下游依赖者的卡、板上项、p1、p2、p3、无级;同级缺陷卡先再卡龄。

becomes :108 (119 B) + :109 (116 B), byte-identical to the SKILL.md pair.

The retired duplicate and its surviving home

The added line in each file is paid by one retirement (net 0: SKILL.md 813 → 813, core-rules.md 151 → 151):

  • SKILL.md :578 (61 B), retired: 「45 分钟是发探针的门槛,⛔ 不是判死的门槛。」 Every clause survives in the same 收集 section: :574 「派发后 ~45 分钟无远程产出即到门槛」 (the ~45-minute reading IS the probe threshold), :579 「判死只有三类依据:探针回包表明已死;宿主明确回报 stopped;超过本车道基线且连续静默」 (the death bases — none is a minute count) and :580 「⛔ 非本文任何常数」 (the baseline is no constant in this file). Proof on origin/main 4045781: git grep -n '45 分钟' origin/main -- .claude/skills/pm-dispatch/ hits SKILL.md :573 / :574 / :578 and core-rules :118 only; git grep -n '判死' origin/main -- .claude/skills/pm-dispatch/SKILL.md hits :493 / :494 / :569 / :578 / :579 / :581 / :583; git grep -n '非本文任何常数' hits :580 only.
  • references/core-rules.md :118 (111 B), retired as that line's twin under 「一条规则在本文与核心条款一处改动,另一处同 PR 同改」: 「45 分钟是发探针的门槛而非判死门槛,判死只认探针回包、宿主信号或超实测基线。」 Its SKILL.md home (:574 / :579 / :580) is unchanged. Inside core-rules this demotes a collection-cadence detail out of the core subset to make room for the take order, a core rule of the execution seat — a judgment, stated for the reviewer rather than dressed as a dedupe.

Pre-existing twin divergence — measured

At base the two lines did NOT encode different orders; they encoded the same ladder in different vocabulary. core-rules :36 「插队标签可超 batch 立即派发」 is the twin of SKILL.md :120 (priority:p0 | 插队:…), so :108's 插队卡 was priority:p0; 有下游依赖者的卡 is pm:blocking by SKILL.md :114 (「有 open 下游依赖者」); 板上项 is target: 板上项; 缺陷卡 is Bug. PM mechanism assumption 2 ("a DIFFERENT order … has no p0 / pm:blocking") is therefore refuted on the order and confirmed on the words. What let the words drift: no gate compares the twins' content — grep -rl core-rules scripts/ hits only check-skill-line-ratchet.mjs (a line count) and dispatch-gates.mjs (a tier lookup); pnpm check:pm-skill-id-lint and pnpm check:pm-governed-prose exit 0 on the unchanged tree and say nothing about it. This PR lands the two lines byte-identical so the next twin edit is mechanical.

Two decisions, on the four axes(四维分析)

(a) 修法辅助、题材是契约的卡(卡上的例子 #19085:表单漏列两个已声明键,schema 照收,同一份元数据的判定不变)— 不入契约面卡一级。判据只有一条:字节测试;这句已在 references/lanes/spec.md :17 「判定逐字节不变 ⇒ 辅助面」,本 PR 用指针接上,不复述(复述正是棘轮要防的重复)。

(b) 插队卡的识别 — 维护者当面点名本卡的指令,走既有 :226–:227 直派通道,并按 :149 出处三件记在卡上;本席认领 5755214464 即活样本。

  • 实际业务需求:维护者的原话 「19127 插队」 真实发生过,并已按三件记录。
  • 项目长远合理性:不造新标签;直派通道本就是维护者直接指挥的既有规则,取卡序只是点名它。
  • 防 AI 写错:共享身份下标签可由任何席伪造(:96、:139 「一个标签存在当且仅当有具名读者」);出处三件 + 逐字引用可审计,席位无法自封插队。
  • 创业阶段不扩散:零新面。

One point for the seat's speed-read: the dispatch ruling places 契约面卡 above the whole ladder, priority:p0 included. Since :120 dispatches p0 immediately (可超 batch、破轮次), the relative order is load-bearing only when a p0 waits for a slot; if the maintainer prefers p0 and pm:blocking above 契约面卡, it is a one-token move on :464 and :108.

Verification (head de581d0)

  • pnpm check:pm-skill-ratchet :: exit 0 — SKILL.md is 813 lines (ceiling 813; headroom 0), widest table row is 342 bytes (pin 342); core-rules.md is 151 lines (ceiling 151; headroom 0), widest table row is 0 bytes (pin 0). Identical readings on the unchanged tree. The gate prints no per-line "longest line" reading (its 120 B cap passes silently); the longest changed line is 119 B by direct measurement.
  • pnpm check:pm-skill-id-lint :: exit 0 (27 files clean) and pnpm check:pm-governed-prose :: exit 0 (2 surfaces name all 6 governed surfaces) — both also exit 0 on the unchanged tree.
  • pnpm check:nul-bytes :: exit 0.
  • Derived union: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; change set = 2 paths vs merge base 4045781) → 21 commands, every exit captured before any pipe; --ran reconciliation: 21 derived, 21 run, 0 NOT-MEASURED, 0 UNRUN. One of them, pnpm --filter @objectstack/lint run check:doc-formula-expressions, first exited 3 — its declared PREREQUISITE NOT MET shape (formula / lint unbuilt; "Nothing was measured"), not a red; after turbo run build --filter=@objectstack/formula --filter=@objectstack/lint under the verify lock (VERDICT command-exit 0, held 13 s) it exits 0 (22 record-scoped examples judged clean).
  • No package touched ⇒ no dependency-closure build and no package test owed; no ablation applies (charter prose, no runtime).
  • node scripts/pm/check-governed-merges.mjs --pr N (expected exit 3 GOVERNED, Tier S) is recorded in the os-dev-report comment on the card, since the number does not exist before this body is written and the body is written once.

维护者速读(草稿)

改了什么:PM 派发章程的「取卡全序」那一行,前面多了两级:你当面点名插队的卡最先,其次是契约面卡(判是不是契约面的一句话测试不重抄,指向它原来的家 references/lanes/spec.md),然后才是原来的标签阶梯(p0、blocking、板上项、p1 到 p3)。核心条款里的孪生行同改成一模一样的两行。为了不涨行数,删掉了一条别处已经说过的重复句(45 分钟探针门槛那句),两个文件各净 0 行。

为什么改:你 9 月 18 日说 「应该优先处理 契约面卡」,这条规则当时只活在一张席位帖里;新开的席位读章程读不到它,而且两个席位同时按它重排队列,同一分钟撞上了同一张卡。写进章程,席位各自按自己的节奏重排,不再撞。

风险与代价(含回滚):纯章程文本,不碰代码、不碰标签、不碰任何卡的定级。唯一要你看一眼的措辞:契约面卡按派发裁决排在 p0 之上,但 p0 本来就是立即派发不排队,所以只在 p0 等槽位时才有差别。回滚 = revert 这一个 commit。

席位意见:(留空,席位定稿时填)

你要做的:一个动作——若契约面卡应排在 p0 与 blocking 之下而不是之上,回一个字「下」;否则不用动,席位按契约复审 PASS 落地。

Acceptance notes (observations, no card filed)

  • SKILL.md :462 says pm:blocking 「在其车道排最前」 while the ladder (now :465) ranks priority:p0 above it — a pre-existing wording tension, unchanged here. carrier: none (承接者:无).
  • SKILL.md :120 describes priority:p0 with the word 插队; the new top tier is 维护者直派插队卡. The ladder line names priority:p0 as its own rung, so the two are structurally distinct; the shared word is noted, not changed. carrier: none.
  • No gate compares the SKILL.md / core-rules twins' content (the ratchet only counts core-rules lines). A 可机械化项 for the skills seat's own channel (换班报告 三类 → 门禁/脚本卡), not a dev finding. carrier: the domain:skills seat.

Generated by Claude Code

…face tiers into the take order

The 取卡全序 line in SKILL.md and its core-rules twin now carry two tiers above the label ladder: a card the maintainer directly ordered to jump (recorded on the card with the three provenance items) first, then a contract-surface card (criterion: references/lanes/spec.md), then the existing priority ladder, now on its own 标签序 line. Both files land the same two lines, paying the added line by retiring the 45-minute probe-threshold restatement (SKILL.md) and its twin (core-rules); its surviving home is the collection section's probe-threshold, death-basis and baseline lines. Net 0 lines in both files, every changed line under the 120-byte cap.

Claude-Session: https://claude.ai/code/session_017ETYWqMQD4qMtZzAGovWNi
Co-authored-by: Claude <noreply@anthropic.com>
@os-steve os-steve added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 21, 2026 — with Claude
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: de581d0a1da2b796b1f3336eba6071eb08047e4a

① Derived judgments

  • Published accept set / public surface: none moves — two charter files, +4 / −4, net 0 at 813 / 813 and 151 / 151; the four landed lines are 119 / 116 B (SKILL.md :464–:465) and byte-identical twins in core-rules :108–:109, all under the 120 B cap; no package, no export.
  • The fix, read line by line against the maintainer's ruling quoted on the card (「应该优先处理 契约面卡 卡」) and his order in this seat's session (「19127 插队」): :464 「取卡全序:维护者直派插队卡(出处三件)> 契约面卡(判据见 references/lanes/spec.md)> 标签序。」 puts the two ruled tiers above the whole ladder, names the test's home instead of restating it (lanes/spec.md :17–:18 read and untouched), and :465 「标签序:…」 carries the old ladder verbatim. 维护者直派插队卡 composes the charter's existing 直派 term (:226–:227) with the maintainer's word 插队, so recognition needs no new clause and the 插队 wording at :120 (priority:p0) is not shadowed; (出处三件) pins the :149 record form — this seat's own claim 5755214464 is the live specimen. The added line is paid by retiring :578 「45 分钟是发探针的门槛,⛔ 不是判死的门槛。」, provably derivable from :574 (the ~45 min probe threshold) + :579 (判死只有三类依据) + :580 (⛔ 非本文任何常数) — grep proof quoted in the PR body; core-rules :118, the twin of the retired line, retired with it (a twin of a retired rule would be the stale copy).
  • Mechanism assumption 2 refuted publicly by the dev and accepted: core-rules :108's old order was a vocabulary variant of the same ladder (插队卡 ≡ priority:p0, 有下游依赖者的卡 ≡ pm:blocking), not a different order; and no gate compares the twins' content — recorded below as a seat item.
  • Evidence, seat-run on this head in a detached worktree: git merge-tree --write-tree origin/main HEAD clean, and clean against PR fix(pm): the claim HANDOVER protocol — one comment, four items, provenance instead of a liveness test; the reader accepts it and C9 keeps one red #19502's head 7a66ffe (the seat's other in-flight SKILL.md edit at :492–:497 — the two land in either order); check-skill-line-ratchet.mjs exit 0 (813 / 813 · 151 / 151); check-skill-id-lint.mjs exit 0; check-governed-prose.mjs exit 0; check-governed-merges.mjs --pr 19506 exit 3 GOVERNED, Tier S. The dev's union: 21 / 21 derived commands exit 0 at de581d0, reconciled with --ran.

② Semver level

None — nothing published; skip-changeset on the PR is the correct declaration. Judged correct.

③ Boundary flags

  • open_questions[0] — 契约面卡 above priority:p0: A, as landed — the ruling as dispatched, and :120 dispatches p0 at once (可超 batch、破轮次), so the relative order is observable only when a p0 waits for a slot; B (one token, below p0 and pm:blocking) is the maintainer's to say — flagged to him in the seat's session, ⛔ not the decision box.
  • The pre-existing tension the dev noted (:462 「pm:blocking 在其车道排最前」 vs the ladder ranking p0 above it) is unchanged by this PR — a rider on the seat's next SKILL.md touch.
  • Seat item recorded: no gate compares the SKILL.md / core-rules twins' content (the ratchet counts core-rules lines only) — a 可机械化项 for the 换班报告 channel, ⛔ not a card under 🔗 Broken links detected in documentation #202 B.

Implemented-by: claude/issue-19127-contract-surface-take-order
Reviewed-by: session_017ETYWqMQD4qMtZzAGovWNi

VERDICT: PASS


Generated by Claude Code

@os-steve
os-steve marked this pull request as ready for review September 21, 2026 04:32
@os-steve
os-steve enabled auto-merge September 21, 2026 04:32
@os-steve
os-steve added this pull request to the merge queue Sep 21, 2026
Merged via the queue into main with commit ea64bbc Sep 21, 2026
32 checks passed
@os-steve
os-steve deleted the claude/issue-19127-contract-surface-take-order branch September 21, 2026 05:10
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Sep 28, 2026
…路」 section as an ordered list of feature points, cross-layer features as parent + per-layer sub-issues, domain:* retreats to file ownership (objectstack-ai#19483) (objectstack-ai#19488)

Fixes objectstack-ai#19483

Clause-②: no

The feature axis lands in the three steps the card names: `area:*` as
the planning axis, the North Star's road section as an ordered list of
feature points, and `domain:*` retreating to file ownership.

## The maintainer's words this implements (verbatim, chat 2026-09-21)


「关于任务的车道,我觉得现在是有问题的,应该是按照功能点划分车道我更容易判断优先级和安排,而且一个功能点应该覆盖从协议开始到运行时到前端。不应该按照我们的文件夹划分。」
/ 「或者是否建议再加一组label?」 / 「有了功能轴之后我应该怎么安排任务?」 / 「包括我们应该划分哪些功能轴」 /
「把北极星的「路」那一节改成可读的功能点顺序 立」.

## Tier and landing

Tier H (`docs/NORTH-STAR.md` and `.claude/**` in one diff, one path hit
makes the whole PR Tier H). The maintainer merges this by hand. Draft,
no ready flip, no auto-merge, no labels.

✅ **The eleven-value axis list is ruled.** The maintainer confirmed it
on the card with ONE amendment, verbatim (chat, 2026-09-21): 「19483
api-integration 简化成 api 其他同意。」 — recorded as the card's ruling comment
5754985448. Round 2 of this PR carries the rename: the value is
`area:api` in all four places it is spelled (the label row, the `axis`
in api-backend.json and integration-system.json, and the three roadmap
lines), its customer capability unchanged. The other three open
questions were ruled A in the same comment: platform-core stays
file-level `devpath`, the label objects stay in objectstack + objectui,
and the four readers keep riding in the glossary row with no ceiling
raise.

## Step 1 — `area:*`

- `scripts/pm/ensure-pm-labels.sh` gains eleven rows, in **two** repos
(objectstack + objectui), not the five-repo loop: a feature point spans
协议 → 运行时 → 前端, which is those two. cloud is parked (北极星「现在不做」), objectos
is the docs/site repo, hotcrm is the exemplar app whose platform gaps
are filed upstream. The reasoning is written into the file beside the
rows; widening the loop is a vocabulary decision, not a maintenance
edit. `check:pm-label-desc-cap` reads 38 descriptions (was 27), longest
100 characters.
- SKILL.md 〈状态模型〉 gains the `area:*` glossary row with the card's text.
- The four named readers ride **in that row** rather than on their own
line under 「一个标签存在当且仅当有具名读者」. That is the one deviation from the card's
letter, and it is a ratchet consequence, measured below — the same fold
the objectstack-ai#19457 ratchet comment records for `tooling`. The row is exempt from
the 120-byte line rule and the readers are still named and greppable:
`git grep -n 'area:' -- .claude/skills/pm-dispatch/SKILL.md` returns the
row with all four.
- All fifteen `docs/qa/platform-checklist/areas/*.json` carry a
top-level `axis`, item ids untouched. **No schema extension was
needed**: the gate has no unknown-top-level-key rule, and `pnpm
check:platform-checklist` is green on the added key (15 areas, 264
items, exit 0).
- One mapping cannot be expressed with a top-level field: the card sends
platform-core's **docs-portal items**
(`platform-core.docs-audience-gate`, `platform-core.docs-portal-render`,
both P1) to `studio` while the rest of that area is `devpath`. The file
carries `devpath`; a per-item axis is out of this card's scope. Flagged
for the maintainer under Open questions on the card.

## The roadmap section, rewritten in round 3

The maintainer read the first version and said, verbatim (chat,
2026-09-21): 「19488 路上的功能点写的很奇怪,真的是平台总体的功能清单吗?怎么感觉是几个issue」. He was
right: it was one card plus the checklist's currently-failing P0 items —
a to-do list, not the platform's feature map. Round 3 replaces that one
section; everything else in this PR is as reviewed.

What it is now: six blocks, one per step of the road the North Star
already measures, and inside each block one line per feature point at
capability level — a customer-visible capability that runs from the
protocol through the runtime to the frontend. The end-user capabilities
(records, access, workflow, reports, identity, files, i18n) sit at the
step where the road first needs them, which is where the app is first
run and seen. The 路步 column is gone because the block position is the
step, the docs-authoring feature keeps its 「清单项待写」 slot at step ①, and
the page's own rules hold: no counts, no pass/fail status, no new
headings, and the ledger is not copied here.

**The completeness claim is mechanical, not editorial.** The feature
points are derived by grouping every item in
`docs/qa/platform-checklist/areas/*.json` so that each item belongs to
exactly one line. The two totals: **264 items on disk, 264 mapped** —
zero unmapped, zero double-mapped, zero ids the ledger does not have —
across **76 feature points** in a **95-line** section. The per-item
listing is on the card, in the round-3 `os-dev-report`.

**Round 4** (one commit, `docs/NORTH-STAR.md` only, +4/−2): the round-3
at-tier review (5755471665, PASS) named one line as misdescribing its
items and one placement as debatable; both fixed — the CEL formula pair
(`formula-stdlib-matrix`, `formula-gates`) now has its own feature-point
line and the REST construction line no longer claims it;
`lifecycle-retention-sweep` (ADR-0057 retention) moved off the
packaged-object line onto its own. Totals unchanged: 264 items, 264
mapped, 0 unmapped, 0 double-mapped; 78 feature points.

**Round 5** (merge commit, no rebase): `origin/main` moved (objectstack-ai#19506
entered the maintainer's 插队 / 契约面卡 tiers into the 取卡全序; objectstack-ai#19502 the
handover protocol) and conflicted with this PR's 取卡全序 edit in SKILL.md
and core-rules.md. Both sides are the maintainer's rulings, so the merge
composes them: 「取卡全序:维护者直派插队卡(出处三件)> 契约面卡(判据见 references/lanes/spec.md)>
标签序」 and 「标签序:priority:p0 > pm:blocking > 功能点位次 > target: 板上项 > p1 > p2
> p3 > 无级」, identical in both files; the tie-break 「同级先 Bug 再卡龄」 stays
on SKILL.md's following line (the composed line would exceed the
120-byte cap) and core-rules.md's summary defers to it. Everything else
takes main's side. Ratchet: SKILL.md 815/819 (main's own count; this PR
net zero), core-rules 151/151.

## Step 3 — `domain:*` retreats to file ownership

- 〈域车道〉 now says in one line that `domain:*` decides file ownership
(anchoring, hot-file serial, single-claim paths) and is **not** a queue
or a priority unit.
- 〈候选与批次〉: the candidate order reads 「功能点位次」 — the parent's position in
「路上的功能点」 — ahead of the board and the priority ladder, and at most one
feature point per axis is in flight unless the file surfaces are
disjoint.
- 〈分诊座位职责〉: a cross-layer feature point (two or more of spec / 运行时 / 前端)
is filed as ONE parent carrying `area:*` + `pm:epic` + the checklist
item's priority, plus per-layer sub-issues ordered by `Blocked-by:`.
〈Epic 子树车道〉 now names cross-layer feature points in its delegation line,
which is what makes the existing epic mechanism the default for that
case, and 多仓协调 规则 2 is aligned from 每仓一子单 to 逐层子单.
- `references/core-rules.md` mirrors all four rules in place.
- `references/lanes/*.md`: **zero edits, as a measured reading, not a
skipped step.** No lane charter describes a per-domain queue as the
order of work. Instrument reachability is shown by the control word:
「车道」 hits 31 times across those ten files, while the order vocabulary
(队列/全序/取卡/候选顺序/排序/优先序/按域/逐域) produces exactly two hits, both about the
**merge** queue (`lanes/cli.md` line 17, `lanes/ui.md` line 26). Since
the card's instruction there is "delete or re-point, never add", the
correct edit count is zero.

## The ratchet — paid in place, no ceiling raised

`check:pm-skill-ratchet` is green with both files exactly at their
ceilings: SKILL.md **813/813**, core-rules.md **151/151**, widest
SKILL.md table row **342/342**.

Three lines were added and three retired. Each retirement was checked
for a surviving home rather than assumed:

| retired from SKILL.md | where the content still lives |
|---|---|
| 「唯一例外 `packages/lint` 等与 spec 相交的 devx 面…」 (域车道) | the 域车道 table's own
`domain:devx` row, plus `references/lanes/spec.md` 范围 (「同含围着 spec
契约转的工具链…」 / 「一般开发工具面留 devx」) |
| 「座位在编以 `label:pm:seat` 索引为准,每车道…每席恰一张。」 (域车道) | 全体座位的不变量 (「一 PM
恰管一车道,一车道由一组座位管,一席一贴」) and 座位贴协议's first line; the label object's own
description carries the fleet-board half |
| 「sweep 与首触定级只对多车道仓,单车道仓机械三务自理。」 (分诊座位职责) | 多仓协调 carries both halves —
「多车道仓…中央分诊是 `domain:*`/type/定级的唯一生产者」 and 「机械三务 = 自扫 sweep、自打 `type`、自做
`finding` 首触定级」 |

Two clauses moved rather than died: 「同级先 `Bug` 再卡龄」 moved from the order
line to the line below it, and 「优先非豁免」 was dropped there because the
状态模型 `priority:p0` row states it (「⛔ 不豁免同文件串行、深度等待与认领协议」).

**The exact count the card asks for.** One ruled line could not be paid:
the reader list as its own bullet under 「一个标签存在当且仅当有具名读者」 needs
**SKILL.md 814 against a ceiling of 813 — one line**. Everything payable
was paid (three retirements), the length rule blocks folding it into
that bullet (the bullet is 117 bytes and the shortest self-contained
reader line is 114), and every other ceilinged file in the map stands at
headroom 0, so no reference file can absorb it. ⛔ No ceiling was raised.
The readers therefore ride in the byte-exempt glossary row; if the
maintainer wants them as a separate rule line, the raise is 813 → 814.

## Verification

- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derives **37 families** on this diff; all 37
were run on the final head `c55c02e` with exit codes captured before any
pipe, all exit 0, and `--ran` reconciles **37 derived / 37 run / 0
NOT-MEASURED / 0 UNRUN** with no stale-tree warning.
- Named in the dispatch and green: `check:pm-skill-ratchet`,
`check:pm-label-desc-cap`, `check:pm-widening-tells`,
`check:pm-skill-id-lint`, `check:doc-authoring`,
`check:platform-checklist`, `check:self-test-wired`, `check:nul-bytes`,
`check:pm-governed-prose`, `check:pm-governed-merges`,
`check:skill-frame-sync`.
- `pnpm --filter @objectstack/lint run check:doc-formula-expressions`
first exited **3 — PREREQUISITE NOT MET** (its two packages were
unbuilt). That is not a finding; after `turbo run build
--filter=@objectstack/formula --filter=@objectstack/lint` it exits 0,
and the merged-head run above is the one recorded.
- Beyond the derivation, the roster gates whose roster sits under a
directory this diff touches were read rather than assumed:
`check:pm-settings-deny-roster`, `check-published-list-mirrors.mjs`,
`check-skills-token-ratchet.mjs` — all exit 0.
- Repo-wide `pnpm lint` is not derived for these paths and is CI's run,
not this PR's claim.
- **Collision probe against the in-flight charter PR objectstack-ai#19462** (branch
`claude/issue-19457-charter-product-only-queue`): `git merge-tree
--write-tree` against its tip exits 0 with a tree and no conflict. That
PR's SKILL.md lines were deliberately left untouched — its `tooling` row
goes after `finding` while the `area:*` row goes after `priority:p0`,
four rows away; its grading edits sit two lines above the cross-layer
insert; its candidate-line edit is the 候选 line while this one rewrites
取卡全序. None of this repo's paths here is merge-driver managed.
- `Check Changeset`: this diff publishes nothing — `.claude/**`,
`docs/**` and `scripts/pm/**` are outside every package's `files[]`. It
needs the **`skip-changeset`** label, which the seat applies (this
dispatch writes no labels).

## Acceptance notes

- Noted, not filed: `docs/qa/platform-checklist/areas/*.json` has no
schema and no unknown-top-level-key rule, so `axis` is accepted by
presence alone and a typo (`area:studo`) would pass every gate. A value
check belongs with whichever card next touches the checklist gate; the
carrier is named, so it is a note rather than a card.
- Noted, not filed, 承接者:无 — `scripts/pm/ensure-pm-labels.sh` is
create-if-missing by default, so the eleven new label objects only reach
the two repos when someone with label-write credentials runs the script
(a PM landing step, exactly as the file says for objectos and hotcrm).

## 维护者速读(草稿)

**改了什么** — 加了一组新标签 `area:*`(十一个功能轴),给测试清单的十五个 area 文件各加了一个 `axis`
字段,在北极星的「那条路」下面加了一张「路上的功能点」表(第一条是文档编写那个功能,后面是清单上现在还开着的全部 P0 项,按路步排),并把
PM 章程里「按车道排队」的地方改成「按这张表排队」:`domain:*` 从此只管哪个席位能动哪些文件。

**为什么改** —
您的原话:按功能点划分更容易判断优先级和安排,一个功能点应该从协议一直覆盖到前端,不应该按文件夹划分。以前排队顺序是按文件夹(车道)来的,所以一个功能的三层会被拆到三个队列里各自排;现在顺序只有一份,就是北极星上的那张表,改表即改优先级,不用逐张卡改档位。

**风险与代价(含回滚)** — 一、十一个轴您已在卡上定了,只改了一个名(API 那一轴由长名简化为
`area:api`),本轮已在四处改齐:标签行、两个清单文件的 `axis`、路上的功能点三行。二、新标签只在 objectstack 与
objectui 两个仓建,理由写在脚本里;要不要也给
hotcrm,您随时可加。三、章程的行数棘轮是零余量,所以这次是「加三行、退三行」换来的,退掉的三行内容都在别处有家(PR
正文里逐条列了);还有一行实在付不出,已按卡上要求报了准确数字(要 814,天花板 813),没有抬天花板 ——
您也已裁定保持现状。四、回滚就是 revert 这个 PR,新标签对象留在 GitHub 上不影响任何东西。

**席位意见** — (留空,复核席填)

**你要做的** — 手动合并这个 PR(Tier H);轴名已定,无需再确认。

---
_Generated by [Claude Code](https://claude.ai/code)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
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/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants