Filed by the triage seat, date -u measured 2026-09-09T00:28Z, on origin/main 2bdabe60. ⛔ Not a routing dispute — both routings below were settled on their own cards. This card is about the table that produced the same mis-read twice.
The measurement
.claude/skills/pm-dispatch/SKILL.md's domain lane table carries a genuine split for packages/lint, stated as a trailing clause on two different rows and nowhere else:
domain:devx row — packages/lint、packages/sdui-parser、content/docs/**、apps/docs、scripts/ … 「—— 与 domain:spec 相交的三面按**「是否围着 spec 契约转」**切分」
domain:spec row — 「…… 及围着 spec 契约转的工具链(门禁/生成器/lint 规则/报错散文/references 管线) —— 一般开发工具面留 devx(维护者 2026-08-09 裁决)」
⇒ A lint rule that revolves around the spec contract is domain:spec even though it lives in packages/lint, and the table names 「lint 规则」 verbatim.
Why it is worth a card: the same half-read, twice, in one day
Both seats read the domain:devx row's package list and stopped before the clause, and both drew a routing conclusion from it:
| where |
what was written |
what the table says |
#16611, comment 5583735879 (execution seat) |
「packages/lint ⇒ domain:devx by the lane table」, offered as grounds that the card was mis-graded |
the clause puts a spec-contract lint rule in domain:spec |
#16237, comment 5586943910 (execution seat) |
「packages/lint is domain:devx on the lane table, not domain:spec」, offered as grounds that extending the file surface was a cross-domain routing call |
same |
Neither was reckless: each quoted the table and named the row. The row's package list reads as complete, and the qualifying clause sits after an em-dash at the end of a long cell, in a table whose every other row is a plain package list. ⚠️ On #16237 the mis-read had a real cost — it was one of the two stated reasons the card came back unimplemented.
⭐ The anchoring rule directly above the table is what makes this sharp: 「每个包恰好属于一个域」. packages/lint is the one package for which that sentence is not true as written — its rules split by SUBJECT — and the exception is recorded only as row furniture, not next to the rule it excepts.
Admission class
Class (c): a trap that leads a reader to write something the system refuses. Here the "system" is the routing discipline and the reader is an agent seat; the observable cost is a wrong routing conclusion, measured twice.
⛔ Not asserting the split itself is wrong — the 2026-08-09 maintainer ruling it cites is not in question, and this card ⛔ does not propose changing any lane assignment.
Shape of the fix, if graded queueable
Make the exception visible where the reader already is, without restating it in a third place that can drift:
- state it once beside the anchoring rule (which currently says every package has exactly one domain, with no pointer to the one that does not), and
- leave the two row clauses as they are, or reduce them to a pointer at that one statement.
⚠️ ⛔ Do not add a third independent copy of the rule — the failure mode this repo already has with 「同一概念两份真理」. One statement, two pointers.
⚠️ Unmeasured, and ⛔ not to be assumed: whether the other row-level qualifying clauses (domain:devx ↔ domain:skills's SUBJECT split; the 「无固定归属」 row's examples/* rule) have produced the same mis-read. A sweep of routing comments for those two would say. Re-grade if a third instance appears.
Refs: #16611 · #16237 · .claude/skills/pm-dispatch/SKILL.md (domain lane table and its anchoring rule).
Filed by the triage seat,
date -umeasured 2026-09-09T00:28Z, onorigin/main2bdabe60. ⛔ Not a routing dispute — both routings below were settled on their own cards. This card is about the table that produced the same mis-read twice.The measurement
.claude/skills/pm-dispatch/SKILL.md's domain lane table carries a genuine split forpackages/lint, stated as a trailing clause on two different rows and nowhere else:domain:devxrow —packages/lint、packages/sdui-parser、content/docs/**、apps/docs、scripts/… 「—— 与domain:spec相交的三面按**「是否围着 spec 契约转」**切分」domain:specrow — 「…… 及围着 spec 契约转的工具链(门禁/生成器/lint 规则/报错散文/references 管线) —— 一般开发工具面留devx(维护者 2026-08-09 裁决)」⇒ A lint rule that revolves around the spec contract is
domain:speceven though it lives inpackages/lint, and the table names 「lint 规则」 verbatim.Why it is worth a card: the same half-read, twice, in one day
Both seats read the
domain:devxrow's package list and stopped before the clause, and both drew a routing conclusion from it:5583735879(execution seat)packages/lint⇒domain:devxby the lane table」, offered as grounds that the card was mis-gradeddomain:spec5586943910(execution seat)packages/lintisdomain:devxon the lane table, notdomain:spec」, offered as grounds that extending the file surface was a cross-domain routing callNeither was reckless: each quoted the table and named the row. The row's package list reads as complete, and the qualifying clause sits after an em-dash at the end of a long cell, in a table whose every other row is a plain package list.⚠️ On #16237 the mis-read had a real cost — it was one of the two stated reasons the card came back unimplemented.
⭐ The anchoring rule directly above the table is what makes this sharp: 「每个包恰好属于一个域」.
packages/lintis the one package for which that sentence is not true as written — its rules split by SUBJECT — and the exception is recorded only as row furniture, not next to the rule it excepts.Admission class
Class (c): a trap that leads a reader to write something the system refuses. Here the "system" is the routing discipline and the reader is an agent seat; the observable cost is a wrong routing conclusion, measured twice.
⛔ Not asserting the split itself is wrong — the 2026-08-09 maintainer ruling it cites is not in question, and this card ⛔ does not propose changing any lane assignment.
Shape of the fix, if graded queueable
Make the exception visible where the reader already is, without restating it in a third place that can drift:
domain:devx↔domain:skills's SUBJECT split; the 「无固定归属」 row'sexamples/*rule) have produced the same mis-read. A sweep of routing comments for those two would say. Re-grade if a third instance appears.Refs: #16611 · #16237 ·
.claude/skills/pm-dispatch/SKILL.md(domain lane table and its anchoring rule).