Repository navigation
Commit ea64bbc
docs(pm-dispatch): enter the maintainer's 插队 and 契约面卡 tiers into the 取卡全序 (SKILL.md + core-rules twin) (#19506)
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 用指针接上,不复述(复述正是棘轮要防的重复)。
- 实际业务需求:立卡席实测过一次——按新序重筛 82 张候选,取卡真的变了(p1 #19086 辅助面被 p2 #16354
收紧卡超过)。有拉动,不是投机面。
- 项目长远合理性:判据单源在 spec 车道文件,取卡序只指过去;两处都写会分叉。
- 防 AI 写错:一级只认可测的字节判定,不认题材或关键词(同 :244 「⛔ 绝不从 issue 标题的词汇猜域」);题材判据会让 AI
席按关键词抬卡。
- 创业阶段不扩散:零新标签、零新机制,沿用 :466 「全序每级取既有信号现读/现算」。
**(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](https://claude.ai/code/session_017ETYWqMQD4qMtZzAGovWNi)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent d114d4c commit ea64bbc
2 files changed
Lines changed: 4 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
469 | 469 | | |
470 | 470 | | |
471 | 471 | | |
472 | | - | |
| 472 | + | |
| 473 | + | |
473 | 474 | | |
474 | 475 | | |
475 | 476 | | |
| |||
579 | 580 | | |
580 | 581 | | |
581 | 582 | | |
582 | | - | |
583 | 583 | | |
584 | 584 | | |
585 | 585 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
108 | | - | |
| 108 | + | |
| 109 | + | |
109 | 110 | | |
110 | 111 | | |
111 | 112 | | |
| |||
115 | 116 | | |
116 | 117 | | |
117 | 118 | | |
118 | | - | |
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| |||
0 commit comments