Skip to content

Commit ea64bbc

Browse files
os-steveclaude
andauthored
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

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
469469
- 阻塞项无主 ⇒ 被挡席认领做掉,不限大小;在该卡走完整认领、尊重其热文件串行队。
470470
- 阻塞项在飞 ⇒ 等:`pm:blocking` 在其车道排最前、等待者写该卡;p0/p1 优先级沿链传递。
471471
- 取卡前置 = `docs/NORTH-STAR.md`「优先级」第 3 条:产品仓开放 P0/P1 每次取卡现读。
472-
- 取卡全序:`priority:p0` > `pm:blocking` > `target:` 板上项 > p1 > p2 > p3 > 无级;同级先 `Bug` 再卡龄。
472+
- 取卡全序:维护者直派插队卡(出处三件)> 契约面卡(判据见 `references/lanes/spec.md`)> 标签序。
473+
- 标签序:`priority:p0` > `pm:blocking` > `target:` 板上项 > p1 > p2 > p3 > 无级;同级先 `Bug` 再卡龄。
473474
- `pm:blocking` 级内先按解锁扇出(从 `Blocked-by:` 反向索引现算,⛔ 扇出数不落标签)。
474475
- 全序每级取既有信号现读/现算,零逐卡维护;优先非豁免;无级/缺 `Path:` 轮报记分诊缺口。
475476
- 解锁那一刻 PM 自己的判断最不可信:裁决收窄或关掉了那张卡是假设不是前提。
@@ -579,7 +580,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
579580
- 已有远程分支/PR 不豁免探针。
580581
- ④ 活着 ⇒ 进度与阻塞点;回 no active task; resumed from transcript ⇒ 生前已死,询问即复活。
581582
- ⑤ 判据永远取正向证据:分支、PR、报告、探活回包。
582-
- 45 分钟是发探针的门槛,⛔ 不是判死的门槛。
583583
- 判死只有三类依据:探针回包表明已死;宿主明确回报 stopped;超过本车道基线且连续静默。
584584
- 基线 = 本车道实录派发 → 推分支/开 PR 的端到端耗时,三五单即可用,⛔ 非本文任何常数。
585585
- `mode:cloud` 的 ~2h 静默是本轮收集边界(记 `blocked` 移步下轮),也不是判死。

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@
105105
- 同批独立性按文件面不相交判,⛔ 不按包;同区域硬串行,冲突交合并队列仲裁 ⛔ 不手排。
106106
- 家族派发须过五门:同缺陷同修法、同包区域、成员皆已裁、逐成员可核、点名排除清单。
107107
- 两张以上排队卡共享热文件时,必须以五门为判据显式回答折叠还是串行。
108-
- 取卡全序:插队卡、有下游依赖者的卡、板上项、p1、p2、p3、无级;同级缺陷卡先再卡龄。
108+
- 取卡全序:维护者直派插队卡(出处三件)> 契约面卡(判据见 `references/lanes/spec.md`)> 标签序。
109+
- 标签序:`priority:p0` > `pm:blocking` > `target:` 板上项 > p1 > p2 > p3 > 无级;同级先 `Bug` 再卡龄。
109110
- 认领原子对:一次标签写入完成认领与状态对调,随后留 `Claim:` 开头的评论并重读全线程。
110111
- 更早的他会话认领即让行并交出已诊断的一切;认领人不可达即接管,⛔ 不判死活。
111112
- dev 自死不等于维护者中止,需显式信号;接管一条评论四件齐,只救已 push 的分支。
@@ -115,7 +116,6 @@
115116
- 标准非协商条款 ⛔ 不抄进派发词,清单、路径与行号在派发那一刻从树上取。
116117
- 危害断言必须有读数,测不了写成问题 ⛔ 不写成栅栏;技能包卡必带净增行数预算。
117118
- 收集先扫 GitHub 且报告缺席 ⛔ 永不读作成功;探活先确认 Routine 启用,在飞再重挂加速器。
118-
- 45 分钟是发探针的门槛而非判死门槛,判死只认探针回包、宿主信号或超实测基线。
119119
- 停摆永不自愈,按梯度复位、三次即判不可靠重派;报告丢失时按草稿 PR 直接验收。
120120
- 复核对 GitHub 核验 ⛔ 不对自述核验,逐项过清单并亲核形态、范围与整包价值密度。
121121
- CI 收敛读数只属于复核侧;判决三种:验收落卡、返工最多两轮、升级走决策通道。

0 commit comments

Comments
 (0)