Repository navigation
Commit 681317c
docs(pm-dispatch): a triage direction landing in an adjudicated area quotes the governing line (#18256)
Fixes #17497
One rule line in 〈分诊座位职责〉 of `.claude/skills/pm-dispatch/SKILL.md`: a
triage grading whose direction lands inside an adjudicated area (an ADR,
a ruled card, a not-re-adjudicable rule) pastes the governing line — the
`Prior rulings read:` line that `check-prior-rulings.mjs` prints — or
names no target. Triage keeps writing directions (「写方向」 is charter
text); the line binds the direction's evidence, never removes the
direction.
Governed surface (`.claude/**`, rules layer): draft, no reviewer
requested, no ready flip — the skills seat hangs the four-piece and the
maintainer lands it. REGION claim :306–:415 only; PR #18242 holds
:172–:185 and PR #18250 holds :645–:646 on the same file and neither
range is touched here (the seat merges `origin/main` at landing).
## The added line (SKILL.md :339 on the head, 120 bytes)
```text
- 方向落在 ADR/已裁卡/不可重裁规则:贴 `check-prior-rulings.mjs` 的 `Prior rulings read:` 行,或不点。
```
Vocabulary is the corpus's own: 「已裁卡」 (SKILL.md 〈家族派发〉), 「不可重裁」
(〈派发词三分区〉), 「落点」 = the named fix target (〈分诊座位职责〉's `pm:queue`
definition). The tool is cited by file name and the paste line by its
literal prefix — no issue or PR number (`check:pm-skill-id-lint` green).
**Placement (P2, chosen by reading the section's order):** directly
under the line that mandates the direction — 「裁定写方向、给六态之一」 (:338 on the
head, :339 on `origin/main`). That is where 「写方向」 actually lives on this
tree: `references/lanes/triage.md` is 7 lines and its :7 is the
half-state rule, so the grading's citation of 「写方向」 at `triage.md :7` is
stale as a location while its substance holds. The English audit comment
line (`Triage: lands in …; rationale: …`, :364 on the head) was the
alternative; it names the artifact the direction is written into, but
the obligation reads best beside the mandate it qualifies, and 「方向」 is
anchored by the preceding line there.
**P1 confirmed by a live run** (`node scripts/pm/check-prior-rulings.mjs
--card 17497`, exit 0) — the tool printed exactly the shape the line
cites:
```text
Prior rulings read: triage,gradings,named,target,governing,itself,rejects,grading,quotes,line,adjudication,routes → 61 hits; ADR-0129 D4, ADR-0067 D3, ADR-0076 D11, ADR-0006 D2, ADR-0020 D2, ADR-0021 D1
```
`formatPasteLine` (`check-prior-rulings.mjs`) prints `Prior rulings
read: TERMS → N hits; ADR-xxxx Dn|none` and the whole-line form `Prior
rulings read: unresolved` when the search did not run;
`check-half-states.mjs` H62 reads the same key (`PRIOR_RULINGS_KEY`),
and `references/decision-analysis.md` already binds that line for
decision cards.
## Payment (P3, measured) — one adjacent pair inside the region
rewritten tighter
Before (`origin/main` :311 + :312, 89 B + 50 B):
```text
- fire 开局只按名加载互斥检查所需工具,`ToolSearch` 用 `select:` 形式。
- 判定本轮有活之后才加载其余工具。
```
After (head :311, 116 B):
```text
- fire 开局只按名加载互斥检查所需工具,`ToolSearch` 用 `select:`;判定本轮有活才加载其余。
```
Nothing operative is lost: every instruction token survives — `fire 开局`,
`只按名加载`, `互斥检查所需工具`, `ToolSearch`, `select:`, `判定本轮有活`, the ordering
`才加载其余` — and the three dropped words are filler (「形式」 names the code
span it follows; 「之后才」 → 「才」 keeps the only-after ordering; 「其余工具」 →
「其余」 in a line whose subject is tool loading). The PM's measured pairs
(:312+:314, :363+:364, :397+:398) all rewrite past 120 B; this is the
pair that fits. Not a re-wrap (no line-joining bought the budget), no
rule deleted, ceiling untouched.
## Reverse verification (on head `c96b507d`)
- `git diff origin/main -- .claude/skills/pm-dispatch/SKILL.md`: two
hunks, `@@ -308,8 +308,7 @@` (the fold) and `@@ -337,6 +336,7 @@` (the
insert) — both inside :306–:415; no other line moves.
- `wc -l` = 812 (ceiling 812, headroom 0 — the ratchet's own line:
`.claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom
0)`).
- `sed -n '734,755p' | md5sum` = `3327d02c56f8a0eca88569dad2270f32`
(frame block byte-identical).
- an `awk` length scan for lines longer than 120 bytes over :306–:415
prints nothing; touched lines measure 116 B (fold) and 120 B (new).
- Positive anchors: `grep -c 'Prior rulings read:'` = 1; the removed
:312 text = 0 hits; the fold text = 1 hit.
## Gates (derived, run in the foreground, exits captured before any
pipe, reconciled with `--ran`)
`node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` (no paths; change set derived off merge base
`cb648cb1`) → 16 commands; `--ran` verdict: `16 derived famil(ies)
accounted for — 16 run, 0 NOT-MEASURED (a DERIVED zero — all 16 recorded
an exit code and none of them is 3)`, exit 0.
| command | exit |
|---|---|
| `node scripts/check-closing-keyword-parity.mjs` | 0 |
| `node scripts/check-closing-keyword-parity.mjs --self-test` | 0 |
| `node scripts/check-comment-mask-corpus.mjs` | 0 |
| `node scripts/pm/check-governed-queue-guard.mjs --self-test` | 0 |
| `pnpm --filter @objectstack/lint run check:doc-formula-expressions` |
first run exit 3 `PREREQUISITE NOT MET` (unbuilt `@objectstack/formula`
/ `@objectstack/lint`) — built both under `os-verify-lock.sh` (`VERDICT
command-exit 0`), re-ran: 0 |
| `pnpm check:agent-test-spelling` | 0 |
| `pnpm check:doc-authoring` | 0 |
| `pnpm check:driver-memory-census` | 0 |
| `pnpm check:nul-bytes` | 0 |
| `pnpm check:pm-governed-merges` | 0 |
| `pnpm check:pm-governed-prose` | 0 (`2 instruction surface(s) name all
5 registered governed surfaces`) |
| `pnpm check:pm-skill-id-lint` | 0 (`27 file(s) clean`) |
| `pnpm check:pm-skill-ratchet` | 0 (812/812) |
| `pnpm check:refd-timer-probe` | 0 |
| `pnpm check:skill-frame-sync` | 0 (`the one declared copy of the
decision frame is internally coherent`) |
| `pnpm check:watch-hint-literal` | 0 |
Extra, outside the roster: `node scripts/check-skill-frame-freshness.mjs
--self-test` exit 0 and `--no-fetch` exit 0 (`the decision frame in this
tree is current with refs/remotes/origin/main`). The roster did not
derive `check:pm-dispatch-gates`, so no detached run was owed. Full
repo-level scans (`pnpm lint`) belong to CI.
`skip-changeset`: `.claude/**` is published by no package's `files[]`
(fast track) — nothing released moves.
## Acceptance notes
- noted, not filed: the grading's location citation for 「写方向」
(`lanes/triage.md :7`) is stale — that file's :7 is the half-state rule
and the charter text lives at SKILL.md :339 on `origin/main`; the
ruling's substance is unaffected. 承接者: the skills seat, at landing of
this PR.
- noted, not filed: the dispatch names a gate
`check:pm-skill-frame-sync`; the script's real name is
`check:skill-frame-sync` (`scripts/check-skill-frame-sync.mjs`), and it
ran green. 承接者: the dispatching PM seat, via this report.
- noted, not filed: the ratchet header's reading 「of the file's 601
adjacent bullet pairs ZERO merge under the 120-byte cap」 was a pure-join
measurement on an earlier tree; on this tree one pair folds at 116 B as
a tighter rewrite. Not a contradiction of that reading and not a defect.
承接者:无.
## 维护者速读(草稿)
**改了什么**:分诊座位职责里加一行:分诊的方向若落在 ADR、已裁卡或不可重裁规则内,须贴
`check-prior-rulings.mjs` 印出的 `Prior rulings read:` 行,否则不点落点。为了不突破 812
行上限,把开局工具加载的两行合成一行(116 字节),每条指令原样保留。
**为什么改**:两次分诊给出的落点恰是治理文本已经拒绝的拼写或形状(一次是字段 schema
拒收的扁平拼写,一次是标记为不可重裁的通则),都在执行席的围栏才被拦下,其中一次派发令已写出。分诊的推理没错,错在落点没有引治理行,所以看不见。决策卡那边已有同一行的约束,这次把它也绑到分诊评级上。
**风险与代价(含回滚)**:一行规则、一次同义压缩,不动上限、不删规则、不改工具。风险是新行 120 字节写得紧,读者需要认得
`check-prior-rulings.mjs` 这个工具(它已在仓内、有自检)。回滚 = revert 本 PR 一次提交。
**席位意见**:(留空,席位定稿成评论)
**你要做的**:确认这条规则的措辞与落位(放在「裁定写方向」那一行之下);同意即批准本 PR,由席位落地。
---
_Generated by [Claude
Code](https://claude.ai/code/session_01HZfg2AwVX191qCizp88gQr)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent 41ff021 commit 681317c
1 file changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
311 | | - | |
312 | | - | |
| 311 | + | |
313 | 312 | | |
314 | 313 | | |
315 | 314 | | |
| |||
337 | 336 | | |
338 | 337 | | |
339 | 338 | | |
| 339 | + | |
340 | 340 | | |
341 | 341 | | |
342 | 342 | | |
| |||
0 commit comments