Repository navigation
Commit 08ea7e3
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
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
36 | 40 | | |
37 | 41 | | |
38 | 42 | | |
39 | 43 | | |
40 | 44 | | |
41 | | - | |
42 | 45 | | |
43 | 46 | | |
44 | 47 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1240 | 1240 | | |
1241 | 1241 | | |
1242 | 1242 | | |
1243 | | - | |
| 1243 | + | |
| 1244 | + | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
1244 | 1255 | | |
1245 | 1256 | | |
1246 | 1257 | | |
| |||
0 commit comments