Skip to content

Commit 08ea7e3

Browse files
pm-dispatch filing-gate: metadata-protocol changes and REST/data-door narrowings grade p1 in every lane; ceiling 58 → 61 by ruling (#23449)
Part of #23431 — this PR lands the protocol-first grading rule the maintainer ordered, under the ceiling raise the maintainer ruled. It leaves open the second half of the maintainer's scope amendment on the card (comment 6164667370): the consumer-follow-up principle (options A + C, 「同意 A + C」), which needs three lines more than the ruled ceiling funds (Acceptance notes). The card stays open for that half. Clause-②: no ## What changes - `.claude/skills/pm-dispatch/references/filing-gate.md`, section 〈定级判据(北极星「优先级」的执行说明)〉: four rule lines (N1–N4) open the section; old L41 is deleted as a restatement. 58 → 61 lines. Old L36 and L43 are untouched; N3's sentence 「维护者裁决,本节余条不压」 makes every other line of the section, those two included, subordinate to the rule. Nothing outside this section moves. - `scripts/pm/check-skill-line-ratchet.mjs`: the `CEILINGS` row for that file, 58 → 61, with the ruling recorded beside it. No other row and no logic changes. ## The rulings, verbatim - The order (filing gate ③, quoted on the card): 「spec 车道待办任务中,哪些是会导致元数据协议变更的,这一类应该提高优先级」 · 「我的意思是元数据的协议变更应该优先处理,避免每个版本应用都要做复杂的升级」 · 「协议变更还经常会影响 objectui 项目的开发,相关任务经常等 spec 发版本」 · 「所有元数据协议变更一律 p1,是否建议修改分诊skills」 · 「立卡,规则扩到所有车道,REST 收窄也算」 - The ceiling raise. The ratchet header requires the maintainer's ruling quoted in the raising PR: 「23431 同意。」 (maintainer, live chat, 2026-10-14), adopting letter B of the seat analysis (comment 6164664770). Ruling record: comment 6164802336 on the card. - The scope amendment (comment 6164667370, triage seat), item 1, applied here: 「原则不要写具体的版本号,比如后面我们要开发 v19的时候还得改原则」. N3 names the `target:` label of the major in development, not a version; N1–N4 carry no version number (`next.N` is the prerelease pattern, not a release). ## Before / after — `filing-gate.md` Deleted, old L41 (108 B): ```text - 点名一次被假红占住的席位动作(具名那张卡),与点名一次派错/落不了同等成立。 ``` It restates old L40, which stays (now L44): ```text - 「仪器为车队服务」的四种答案 ⛔ 不压成两条;假红的标准代价形态是席位顺从它。 ``` read with `docs/NORTH-STAR.md` 〈仪器为车队服务〉, whose fourth answer is 「一个卡住的席位」. The commit that introduced both lines (37ed9ae) maps them to one card item. It is the only restatement in the section: L39 and L44–L45 each carry their own item of that commit, and the rest are pointer targets (`triage-duties.md` L59 points here). Added at the head of the section, new L36–L39 (bytes against the 120-byte cap): ```text - 协议类:修复改 spec 接受/声明面(含 ADR-0087 转换窗)或 `/meta` 读存删门的收答,宽窄皆算。 - REST/数据门收窄亦算;措辞、文档、账本、CLI 旗、lint/verify 导出、门不变的服务行为不算。 - 此类任何车道皆 p1 + 在研大版 `target:`,可退役键的条件卡同档;维护者裁决,本节余条不压。 - 分诊轮的维护者清单点名等下个 `next.N` 的 objectui 卡数,堆积即请切版。 ``` (116 / 120 / 120 / 95 B.) Content map to the card's "What done looks like": the class (spec accept/declare face, ADR-0087 conversion windows included; the `/meta` read/save/delete door's accept and answer; widening or narrowing) is N1, with 「任何车道」 in N3; the REST/data-door narrowing and the exclusions are N2; the grade (p1 plus the major-in-development `target:` label; conditional cards alike) and the subordination are N3; the release side is N4. The card's parenthetical enumeration (schemas, stack and manifest definitions, hook and flow contracts) is folded into "what spec declares". Bare `p1` follows the section's own house style for `p3`. Measured floor: four lines. No three-line spelling fits the cap (122–148 B on at least one line). Unchanged, now subordinate to N3 (old L36 → L40, old L43 → L46): ```text - 清单项三态 ①:项会 fail ⇒ 断,继承其 `priority`;⛔「有人在等」不是定级判据。 - 可达面定上界:`security` 标签不抬级;仅最高权限可达且无现用者至多 p3,可记录不修。 ``` ## The ceiling row — `scripts/pm/check-skill-line-ratchet.mjs` ```diff @@ -1240,7 +1240,18 @@ export const CEILINGS = new Map([ // seat applies. A new pm-dispatch references file belongs in this map by the // header's own definition of the covered surface — the map is an // ENUMERATION, so a file that is merely absent is silently unratcheted. - ['.claude/skills/pm-dispatch/references/filing-gate.md', 58], + // Raised 58 → 61 by the protocol-first grading ruling — an ORDINARY raise + // (maintainer, 2026-10-14, live chat, verbatim and untranslated: 「23431 同意。」, + // adopting letter B of the seat analysis; ruling record 6164802336 on #23431). + // The maintainer's order puts every metadata-protocol change, and every + // REST/data-door narrowing, at p1 in every lane; written in the file's house + // style it needs four rule lines at its measured floor (116/120/120/95 bytes; + // no three-line spelling fits the 120-byte cap), and the grading section holds + // exactly one restatement to pay with (the line restating the four-answers + // rule beside it), so +4 −1 leaves +3. This file is not a CROSS_FILE_MOVES + // destination, so no `ruledRaises` record applies. Landed count, headroom 0, + // same convention. + ['.claude/skills/pm-dispatch/references/filing-gate.md', 61], // The app-vs-platform boundary — the deciding question (could this be written // from the metadata alone, with no knowledge of this company?), the publication // test (one consumer is a use, two is a contract) and the two anti-patterns. ``` `ruledRaises` reading: the header's `ruledRaises` records (header L136–L156) belong to a `CROSS_FILE_MOVES` destination. They subtract an ordinary raise from a move's arithmetic. `filing-gate.md` is no move destination, so the raise is recorded as a comment beside its row in the map's "Raised X → Y" convention. The precedent is the `SKILL.md` entry: "SKILL.md is not a CROSS_FILE_MOVES destination, so no `ruledRaises` record applies". No `ruledRaises` record is invented. ## Mirror reading `grep -rn '有人在等\|可达面定上界\|至多 p3' .claude scripts/pm` (on `04a314873c`): exit 0, two hits, both in `filing-gate.md` itself (old L36, L43). Outside markdown, `filing-gate` is named only by this ratchet's rows (the line ceiling and the table-row pin 0). They count lines and width and mirror no content. No mirror to keep in step. ## Merge reading PR #23417 (the first relay leg on this file's 〈立卡门〉) squash-landed on `main` as `a7a135dc26` after this branch was cut from `04a314873c`. Readings, both reads, nothing merged: - `git merge-tree --write-tree e44880f refs/pm/pr-23417` (head `e4adef2cfc`, re-fetched): exit 0, tree `c3404a40a4`. - `git merge-tree --write-tree e44880f origin/main` (`823da2f21c`, which carries #23417): exit 0, tree `86311dcb09`. The merged `filing-gate.md` is 61 lines and carries #23417's two hunks (one line inserted after old L21, old L30–L31 folded into one) beside this PR's, which start at old L36. Neither path has a `merge` attribute (`git check-attr`: unspecified), so the local reading equals GitHub's for them. This diff touches no line in 〈立卡门〉. ## Gates — exit codes captured before any pipe The families come from `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` for the two paths (36 commands). The list derived from `origin/main` `823da2f21c` is identical to the one from this branch (`diff` exit 0). They were run in a throwaway worktree at `823da2f21c` with this branch's two-file diff applied uncommitted; that tree's `filing-gate.md` is byte-identical to the merge tree above. - 35 exit 0 each: check-ci-filter-parity; check-closing-keyword-parity and `--self-test`; check-comment-mask-corpus; check-declaration-mirrors and `--self-test`; check-scripts-symbol-anchors and `--self-test`; check-self-test-wired and `--self-test`; check-self-test-workflow-commands and `--self-test`; check-whole-set-label-write and `--self-test`; bare-root-worklist `--self-test`; check-harness-current `--self-test`; lint `check:doc-formula-expressions` (prerequisite build under `os-verify-lock`, VERDICT command-exit 0); `check:agent-test-spelling`; `check:bash32-floor`; `check:cli-command-ids`; `check:cross-package-test-inputs`; `check:doc-authoring`; `check:driver-memory-census`; `check:entry-guard`; `check:gitlink-declared`; `check:nul-bytes`; `check:parse-guard`; `check:pm-governed-merges`; `check:pm-skill-id-lint`; `check:pm-skill-ratchet` (`filing-gate.md is 61 lines (ceiling 61; headroom 0)`; self-test 157 cases); `check:pnpm-filter-targets`; `check:ratchet-remedy-authority`; `check:refd-timer-probe`; `check:skill-frame-sync`; `check:watch-hint-literal`. - `check:pm-dispatch-gates` (the battery, run detached and read after it exited): exit 0, fast tier 1841 cases. Its slow tier is deferred by its own design. - `--ran` reconciliation: 36 derived, 36 run, 0 NOT-MEASURED, a derived zero (every exit recorded, none is 3). - On this PR's head tree `e44880facf` itself: `pnpm -s check:pm-skill-ratchet` exit 0 (61/61); `node scripts/pm/check-skill-line-ratchet.mjs --self-test` exit 0 (157 cases); `check:pm-skill-id-lint` exit 0; `check:pm-governed-prose` exit 0. Control-byte scan and model-identifier scan over the diff: no hits (grep exit 1). - Edited tool script's own tests: no `*.test.*` names `check-skill-line-ratchet`. Its readers by name also ran: `check:merged-result` 0, `check-published-list-mirrors` 0, `check-skills-token-ratchet` 0. No ablation: text and a data row. ## Acceptance notes - **The open half: the consumer-follow-up principle (amendment item 2, options A + C).** The amendment places it in this same rule. Measured drafts, three lines at their tightest (107 / 103 / 102 B): a consumer's follow-up card (objectui types mirror, renderers, Studio) is p1 only when its absence breaks users; "breaks users" means the designer systematically writes metadata the protocol refuses, or a declared block or key renders nothing; every follow-up is listed on the consumer's first-release card for the new major. That needs the ceiling at 64, three more than ruled, or another home. The seat decides. If the seat carries it on another card, change line 1 of this body to the closing form. - Other texts that can still cap this class, outside this card's surface; noted, not filed (carrier: `domain:skills` seat): - `triage-duties.md` L90–L92: the `target:` criterion is binary, with four blocking classes that a protocol widening does not meet. - `docs/NORTH-STAR.md` 〈阶段姿态〉 「兼容层、迁移窗口一类的工作默认 p3」: conflicts with ADR-0087 windows being in the class. - `triage-duties.md` L58/L60 「无则关」: closes at first touch a card with no North Star definition item. - `SKILL.md` L213: a dispatch cap on the top-privilege-only shape. - N3's 「本节余条不压」 reaches only this section. `SKILL.md` 〈优先级〉 (维护者裁决 above 细则) answers the rest only in principle. - `git merge origin/main` on this branch was refused by the session's permission classifier. It was not retried by another route, and it is not needed: the two merge readings above are clean, and CI runs on GitHub's merge ref. - CI check-runs are read by the seat at landing. This body was written before CI concluded. ## 维护者速读(草稿) **改了什么**:分诊定级手册(`filing-gate.md` 的「定级判据」一节)开头加了四行你定的规则:改元数据协议的卡(spec 接受或声明的东西、`/meta` 门的收与答,放宽收紧都算)和 REST/数据门收窄的卡,任何车道一律 p1,挂在研大版的 `target:` 标签;条件卡同档;措辞、文档、账本等不算;分诊轮的维护者清单报出等下个预发版的 objectui 卡数,堆多了就请你切版。删了一行重复的旧规则。手册行数上限按你的「23431 同意。」从 58 抬到 61。 **为什么改**:你要协议变更优先,免得每个版本应用都要复杂升级、objectui 总在等 spec 发版。之前规则只写在分诊座位贴里,新会话读不到;手册里还有两行会把这类卡压到低档,现在这条规则排在它们前面。按你的补充要求,规则里不写具体版本号。 **风险与代价(含回滚)**:只改给 agent 读的内部手册和一行行数上限,不碰产品代码与对外契约。代价是手册多 3 行,每次分诊定级都要读。回滚就是撤销这个 PR,上限回到 58。另有一半还没写进去:你同意的「消费方跟进卡何时算 p1、跟进卡都挂到新大版首发卡」还要 3 行,超出这次批的上限,需要你再给一个字,或者换个位置放。 **席位意见**: **你要做的**:看一眼新加的四行是否符合你的原意;决定「消费方跟进卡」那一半要再抬 3 行上限,还是另立卡放在别处。 --- _Generated by [Claude Code](https://claude.ai/code/session_013zGKMG1cRedVzWtqGGGZW9)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 0c52e43 commit 08ea7e3

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

‎.claude/skills/pm-dispatch/references/filing-gate.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,15 @@
3333

3434
## 定级判据(北极星「优先级」的执行说明)
3535

36+
- 协议类:修复改 spec 接受/声明面(含 ADR-0087 转换窗)或 `/meta` 读存删门的收答,宽窄皆算。
37+
- REST/数据门收窄亦算;措辞、文档、账本、CLI 旗、lint/verify 导出、门不变的服务行为不算。
38+
- 此类任何车道皆 p1 + 在研大版 `target:`,可退役键的条件卡同档;维护者裁决,本节余条不压。
39+
- 分诊轮的维护者清单点名等下个 `next.N` 的 objectui 卡数,堆积即请切版。
3640
- 清单项三态 ①:项会 fail ⇒ 断,继承其 `priority`;⛔「有人在等」不是定级判据。
3741
- ② 项的标题/场景断言该能力而 steps 到不了那条路径 ⇒ 补步骤并继承该项档 ⛔ 不降 p3。
3842
- ③ 无项断言该能力 ⇒ 缺项补账本、北极星第 2 条 p3;②最常见,`area:*` 继承后成规模。
3943
- 假绿另有条款:绿线被读作「已核对」而实际没核对 ⇒ 一次人眼捕获即一次实测代价。
4044
- 「仪器为车队服务」的四种答案 ⛔ 不压成两条;假红的标准代价形态是席位顺从它。
41-
- 点名一次被假红占住的席位动作(具名那张卡),与点名一次派错/落不了同等成立。
4245
- 沿链继承只给上界,界内哪格由失效形态定:墙齐平,税降一格;可重入队的 PR 是税。
4346
- 可达面定上界:`security` 标签不抬级;仅最高权限可达且无现用者至多 p3,可记录不修。
4447
- 北极星第 4 条只认出货面(`skills/**`、产品文档),⛔ 不含 `.claude/**` 内部协议。

‎scripts/pm/check-skill-line-ratchet.mjs‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1240,7 +1240,18 @@ export const CEILINGS = new Map([
12401240
// seat applies. A new pm-dispatch references file belongs in this map by the
12411241
// header's own definition of the covered surface — the map is an
12421242
// ENUMERATION, so a file that is merely absent is silently unratcheted.
1243-
['.claude/skills/pm-dispatch/references/filing-gate.md', 58],
1243+
// Raised 58 → 61 by the protocol-first grading ruling — an ORDINARY raise
1244+
// (maintainer, 2026-10-14, live chat, verbatim and untranslated: 「23431 同意。」,
1245+
// adopting letter B of the seat analysis; ruling record 6164802336 on #23431).
1246+
// The maintainer's order puts every metadata-protocol change, and every
1247+
// REST/data-door narrowing, at p1 in every lane; written in the file's house
1248+
// style it needs four rule lines at its measured floor (116/120/120/95 bytes;
1249+
// no three-line spelling fits the 120-byte cap), and the grading section holds
1250+
// exactly one restatement to pay with (the line restating the four-answers
1251+
// rule beside it), so +4 −1 leaves +3. This file is not a CROSS_FILE_MOVES
1252+
// destination, so no `ruledRaises` record applies. Landed count, headroom 0,
1253+
// same convention.
1254+
['.claude/skills/pm-dispatch/references/filing-gate.md', 61],
12441255
// The app-vs-platform boundary — the deciding question (could this be written
12451256
// from the metadata alone, with no knowledge of this company?), the publication
12461257
// test (one consumer is a use, two is a contract) and the two anti-patterns.

0 commit comments

Comments
 (0)