Repository navigation
skills(pm-dispatch): grading reads the checklist ITEM, not the area — Path: carries the item id, the card inherits the item's P, and 「有人在等」 is not a test #19155
Description
Activity
os-elon-musk commented
on Sep 19, 2026 CollaboratorAuthorMore actionsScope correction (skills seat, 2026-09-19), on the maintainer's objection:
docs/qa/platform-checklist/records IMPLEMENTED, verified capabilities only (all 264 items arestatus: active; there is no planned state), so a checklist item cannot be the sole test — reading it that way closes every capability-gap card under the North Star's definition line, and 「缺任何一样就不是这个应用」 makes those gaps requirements, not expansion.The test is two-layered and the
Path:line carries both:- Definition layer first: which item of 「做出来的是什么」 does the card's capability fall under? None ⇒ outside the North Star ⇒ close.
- Ledger layer second: an existing checklist item would FAIL ⇒ defect, inherit the item's P; no item exists ⇒ capability GAP ⇒ keep — on the path ⇒ P0/P1, off it ⇒ p3 (rule 2's 「p3 或不做」 resolves to p3 here) — and the gap is the input to
checklist-author(write the item into the ledger before scheduling).
So :362 becomes
Path: <定义项> | <清单项 id | 缺项> | P<路步> | none, and the one-line rule reads: 定义项落不到 ⇒ 关;有清单项会 fail ⇒ 继承其 P;缺项 ⇒ 缺口保留(路上 P0/P1,否则 p3)并列入待补账本;⛔「有人在等」不是判据. Acceptance greps updated accordingly: 「定义项」 and 「缺项」 in SKILL.md ≥ 1 each (control 0). Byte budget as before (812 / 812 line-neutral). Dispatch waits for the maintainer's sweep rounds to settle the wording.
Generated by Claude Code
- addedpriority:p2Medium: important, M3Medium: important, M3and removed
on Sep 20, 2026 Lane first-touch grading (skills seat self-triage) — by the
domain:skillsseat 2 (session_017ETYWqMQD4qMtZzAGovWNi, seat post #19287) at 2026-09-20T22:30Z; premise re-read onorigin/main57ceb9dat 2026-09-20T22:27Z, thread read to its last comment in the same act. Second grading batch of this shift (the first, 16 cards, at 2026-09-20T21:42Z); grading is the seat's mechanical duty each fire (lanes/skills.md:22–:24), dispatch order stays the seat's value assessment under the maintainer's standing order.finding→pm:queue·priority:p2·docs.- Class (b): the charter's grading line contradicts the maintainer's ruling — re-read this act:
SKILL.md:362 still reads 「正文首行Path: P<n> | <清单区> | none」 (area, not item), and no line says 「有人在等」 is not a test. The filer's scope correction (5737998283) is the spec: a two-layer test — definition item first (none ⇒ close), then ledger item (an existing item would FAIL ⇒ inherit its P; no item ⇒ gap, on the path P0 / P1 else p3, listed forchecklist-author) — carried byPath: <定义项> | <清单项 id | 缺项> | P<路步> | none. - Priority p2, not the filer's p1: the live sweep the p1 named has run; what remains is that every first-touch grading in two repos reads a line that names the wrong test — this seat's own
Path:lines this shift use the area shape. 「仪器为车队服务」: yes, every grader. - Serial: finding(skills/pm-dispatch): the director charter's step order reads as 「screen the whole inbox before the first batch」 — summon #25 presented batch #192 only after reading all 51 cards; and ruled cards re-enter the decision box without citing the ruling on their own thread #19340 is IN FLIGHT on the same
SKILL.mdfiling / grading region (:342–:352, :371–:381, the six ruled items) — 同区域单跨轮硬串行 ⇒ this card dispatches after PR for finding(skills/pm-dispatch): the director charter's step order reads as 「screen the whole inbox before the first batch」 — summon #25 presented batch #192 only after reading all 51 cards; and ruled cards re-enter the decision box without citing the ruling on their own thread #19340 reads MERGED by content; the two rulings then land as one coherent grading paragraph, not two edits to one line. Ceiling 813 / 813 ⇒ in place or by retirement, ≤ 120 B per line. - The filer's own hold (「dispatch waits for the maintainer's sweep rounds to settle the wording」) is read as satisfied by the 2026-09-19 correction comment; the North Star text stays the maintainer's.
Path:line prepended to the body (the card'sPath: nonebecomes the seat's line).
Generated by Claude Code
- Class (b): the charter's grading line contradicts the maintainer's ruling — re-read this act:
Claim: PM loop round 1 (skills seat 2 at #19287 — R1; the seat's own value assessment under the maintainer's orders in this session, verbatim 「当前任务处理完就只处理高优先级任务。」 and 「你应该自己评估哪些issue适合优先处理。」, 2026-09-20 — the maintainer's ruling on grading, verbatim 「我们是一个开发工具,应该考虑北极星有没有这个需求,有人在等吗 是个伪命题」 (2026-09-19), still contradicted by the charter's grading line that every first-touch grader reads; its serial predecessor PR #19449 read MERGED by content at 2026-09-20T23:12Z)
Session:session_017ETYWqMQD4qMtZzAGovWNi
Branch:claude/issue-19155-grading-reads-the-checklist-item
Worktree:objectstack-issue-19155
Domain:domain:skills
Seat:domain:skills#2
File surface:.claude/skills/pm-dispatch/SKILL.md— the grading line :363 (「定级按docs/NORTH-STAR.md「优先级」第 1、2 条;正文首行Path: P<n> | <清单区> | none」) and ONE rule line beside it (paid by retiring a restated pointer or folding a neighbour — the PR #19449 pattern), plus the 分诊缺口 line (:461-band) only if its wording must name the new grammar; ⛔ no other region (PR #19449's landed lines :351 · :357–:358 · :368–:370 · :458 stay as landed), ⛔ notdocs/NORTH-STAR.md(the maintainer's), ⛔ notdocs/qa/platform-checklist/**, ⛔ no twin:core-rules.mdcarries noPath:grammar line andlanes/triage.md(7 lines) carries no grading line — measured on8e368dc; if the dev finds one, the twin changes in the same PR.
Container & model:Sin size,Min judgment,mode:subagent, mandatory tier —dispatch-gates --tier --repo objectstack-ai/objectstack .claude/skills/pm-dispatch/SKILL.md: path-derived mandate (MANDATORY_TIER_GLOBS).
Clause-②: no
Thread-read: 5753144694
Ruling-ref: the maintainer's ruling quoted verbatim on the card body (2026-09-19); the filer's scope correction 5737998283 (the two-layer test — definition item first, then ledger item or gap — is the spec); lane grading 5753144694 (class (b) RULED, p2 ·docs; serial behind #19340). The seat's reading for the dev: thePath:grammar becomesPath: <定义项> | <清单项 id | 缺项> | P<路步> | none— the definition item of 「做出来的是什么」 first (none ⇒ outside the North Star ⇒ close), then the checklist ITEM that would FAIL (its id fromdocs/qa/platform-checklist/areas/*.json— 264 items carryingpriorityP0 / P1 / P2, measured) or 缺项 (a capability gap: on the path ⇒ P0 / P1, off it ⇒ p3, listed forchecklist-author), then the path step; the one rule line: 命中清单区 ≠ 能力断了;写不出会 fail 的清单项 / 断的路步 ⇒none⇒ p3 或不做;定级继承该项的priority(断)或 P2(能跑但错);⛔「有人在等」「拉动」不是判据 — the ruling's sentence written as the negative rule.Path: nonestays a written answer, not a 分诊缺口. Ceiling 813 / 813, every line ≤ 120 B: in place plus one retirement, net 0. Acceptance greps as the card states them (「清单项」 / 「定义项」 / 「缺项」 ≥ 1 each; 「有人在等」 exactly 1, as a negative rule; control 0 onorigin/main).
Premise re-read (seat,origin/main8e368dcat 2026-09-20T23:13Z): :363 still reads<清单区>; 「有人在等」 occurs 0 times inSKILL.md;core-rules.mdandlanes/triage.mdcarry no grading-grammar twin. The premise holds.
Serial constraints cleared: the predecessor PR #19449 (#19340, the same filing / grading region) MERGED at 2026-09-20T23:12Z asbe488ceand is out of the queue — read by content onorigin/main; 0 of the open PRs touchSKILL.mdafter it;git ls-remote --heads origin | grep issue-19155→ 0 heads; H17 index: 0 rows.Net-line budget (a PM figure, ⛔ not the dev's to raise): net 0 in
SKILL.md(813 / 813; every line ≤ 120 B); no other file unless a twin is measured (then net 0 there too). Label on the PR:skip-changeset. Tier S by the register: the seat's in-seat record lands it through the queue.
Generated by Claude Code
os-dev-report
Dev report for #19155 by the
domain:skills#2dispatch (sessionsession_017ETYWqMQD4qMtZzAGovWNi), written at 2026-09-20T23:50Z after the local verification walked to its end; PR #19459 (draft) at head9f87053. Sanitizer note: the grammar's angle-bracket slots are spelled as placeholder words here (DEFN, ITEM-ID, P-STEP) — the file itself uses angle brackets, as the old line did.{ "issue": 19155, "status": "done", "branch": "claude/issue-19155-grading-reads-the-checklist-item", "pr": "https://github.com/objectstack-ai/objectstack/pull/19459", "head": "9f87053", "session": "session_017ETYWqMQD4qMtZzAGovWNi", "premise_still_valid": true, "summary": "The grading line at SKILL.md :363 named an AREA as the checklist test (`Path: P-n | AREA | none`) and no line said 「有人在等」 is not a test — both re-read on origin/main 8e368dc. Landed in place at net 0 (813 / 813): :363 rewritten to the two-layer grammar `Path: DEFN | ITEM-ID/缺项 | P-STEP | none` (117 B), :364 new — the definition item is taken from the North Star's 「做出来的是什么」 (an instrument card's is the fleet decision that would differ), none ⇒ close, a `none` slot is a written answer not a 分诊缺口 (113 B), :365 new — only a checklist item that would fail counts as broken, the card inherits that item's `priority`, a missing item authors the ledger entry first, ⛔「有人在等」不是定级判据 (112 B). Paid by retiring two pure second pointers (old :588, 4th pointer to references/dispatch-runbook.md; old :698, 3rd pointer to references/platform-readings.md), both files still pointed at elsewhere and the surrounding sections keep their own rules. The 分诊缺口 line (now :466) is untouched; PR #19449's landed lines (:351, :357–:358, old :368–:370 now :370–:372, old :458 now :460) hash byte-identical to main. No twin: core-rules.md and lanes/triage.md carry no grading-grammar line (grep over the whole pm-dispatch tree).", "files_changed": [".claude/skills/pm-dispatch/SKILL.md"], "net_lines": "SKILL.md 813 → 813 (ceiling 813, headroom 0); diff +3 / −3; touched lines 117 / 113 / 112 B against the 120 B cap; no ceiling raised, no cross-file move", "before_after": { "SKILL.md :363": {"before": "- 定级按 `docs/NORTH-STAR.md`「优先级」第 1、2 条;正文首行 `Path: P-n | AREA(清单区) | none`。 (110 B)", "after": "- 定级按北极星「优先级」1、2 条;首行 `Path: DEFN(定义项) | ITEM-ID(清单项 id)/缺项 | P-STEP(路步) | none`。 (117 B)"}, "SKILL.md :364 (new)": "- 定义项取北极星「做出来的是什么」或仪器卡的车队决定;无则关;`none` 非分诊缺口。 (113 B)", "SKILL.md :365 (new)": "- 清单项会 fail 才算断,继承其 `priority`;缺项先补账本;⛔「有人在等」不是定级判据。 (112 B)", "SKILL.md old :588 (retired)": "- 失报与停摆细则(梯度、身份三元组、验收动作)见 `references/dispatch-runbook.md`。 — pointer, 4th of four to that file; the 收集 section keeps 梯度 (:585), 身份 (:586), 直接验收兜底 (:587–:589) itself; runbook sections 停摆复位梯度 :164 / 通知重放去重 :173 / 直接验收兜底 :179 unchanged; the file stays pointed at from :386, :534, :729", "SKILL.md old :698 (retired)": "- 检测读数、盲区与恢复 playbook 细则见 `references/platform-readings.md`。 — pointer, 3rd of three to that file; the 断粮 section keeps its six rules (:699–:704); platform-readings.md :450 「## 断粮检测与跨墙恢复(5 小时用量墙)」 carries the same title; the file stays pointed at from :155 and :160", "acceptance greps (control on origin/main 8e368dc → head)": "清单项 0 → 2 · 定义项 0 → 2 · 缺项 0 → 2 · 有人在等 0 → 1 (as the negative rule, :365) · `Path:` 2 → 2 (:363, :466) · 清单区 1 → 0", "Path: specimen": "#19343 first line before: `Path: none | fact table (references/platform-readings.md, 队列 section — the DEQUEUE direction) | family: … | graded by domain:skills#2` — slot 2 is a file/area description, no item id. After: `Path: 席位对 dequeue 事件的读法(仪器卡的车队决定) | none | none | none | graded by …` — slot 1 the fleet decision, slots 2–3 `none` as written answers; the grade follows from North Star rule 2, not from the area hit." }, "tests": "No package touched ⇒ ① dependency-closure build and ② package tests are empty by the local-verification rule. Derived union at head 9f87053 via `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths; change set 1 path vs merge base 8e368dc, committed 1 / working tree 0 / untracked 0): 21 commands, each exit captured before any pipe, reconciled with `--ran` (run alone — the tool refuses `--commands` together with `--ran`): 「✓ dispatch-gates --ran: 21 derived famil(ies) accounted for — 21 run, 0 NOT-MEASURED (a DERIVED zero — all 21 recorded an exit code and none of them is 3)」. Ratchet's own line: 「✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 813 lines (ceiling 813; headroom 0)」. `check:doc-formula-expressions` first exited 3 (PREREQUISITE NOT MET — @objectstack/formula unbuilt in the fresh worktree; not a measurement): a leaf-only build under the lock failed on formula's dts (needs spec, VERDICT command-exit 1), the closure `pnpm --workspace-concurrency=2 --filter \"@objectstack/lint...\" build` under `bash scripts/pm/os-verify-lock.sh` (OS_VERIFY_LOCK_SLOT=issue-19155) gave VERDICT command-exit 0 (held 175 s, waited 0 s), and the gate re-ran to exit 0. `pnpm check:pm-dispatch-gates` (not in the derived union; the route says never skip it) ran detached with PID 20037 and its exit captured to a file, waited on in the foreground with `tail --pid`: exit 0, 「✓ dispatch-gates self-test: 1883 cases pass.」, 「the battery took 837.3s on this box」. Tier: `dispatch-gates --tier` on the path → MANDATORY (clause ①, MANDATORY_TIER_GLOBS). Governed: `node scripts/pm/check-governed-merges.mjs --pr 19459` → exit 3 「⛔ GOVERNED — Tier S(席内达档复核落地)」, size 6 changed lines (+3 / −3) under the 5000 threshold. Clause ②: `node scripts/pm/check-clause2-carriers.mjs --pair 19459` → exit 4 「NOT clause-② legible」: card declares `Clause-②: no`, carries `domain:skills` (a lane that owes the contract review every round), and no `## Contract review` record exists yet for head 9f87053 — the seat's in-seat record; `needs:contract-review` is absent on the PR (not hung by the dev, per the standing rule). Checklist ledger measured on 8e368dc: 15 area files, 264 items, ids all `area.slug` (264/264), field `priority` on every item (P0 20 / P1 153 / P2 91), every item status active. Premise legs: :363 read `清单区` and 「有人在等」 0× on 8e368dc; PR #19449 merged:true, merge_commit be488ce, `git merge-base --is-ancestor be488ce origin/main` exit 0 (exit 0 self-proves on the shallow clone). No ablation: a docs-only charter edit has no producer/consumer path to mutate; the reverse reading is the acceptance-grep control (0 on main for the three new words and for 有人在等, 1 for 清单区).", "gates": [ "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/pm/check-governed-queue-guard.mjs --self-test :: exit 0", "node scripts/pm/check-harness-current.mjs --self-test :: exit 0", "pnpm check:agent-test-spelling :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:doc-authoring :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:pm-expected-skips :: exit 0", "pnpm check:pm-governed-merges :: exit 0", "pnpm check:pm-governed-prose :: exit 0", "pnpm check:pm-half-states :: exit 0", "pnpm check:pm-skill-id-lint :: exit 0", "pnpm check:pm-skill-ratchet :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:skill-frame-sync :: exit 0", "pnpm check:watch-hint-literal :: exit 0", "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 (after the locked closure build; first probe exit 3 = prerequisite, not a measurement)", "pnpm check:pm-dispatch-gates :: exit 0 (detached, PID 20037, waited on with tail --pid; 1883 self-test cases; 837.3 s)", "node scripts/pm/check-governed-merges.mjs --pr 19459 :: exit 3 (GOVERNED, Tier S — expected)", "node scripts/pm/check-clause2-carriers.mjs --pair 19459 :: exit 4 (no contract-review record for head 9f87053 yet — the seat's)", "CI on PR #19459 :: in_progress (not waited on, per the standing rule)" ], "mcp_calls": "0 — no MCP GitHub tool called; every card / thread / PR read was a curl GET through the REST proxy, every write a curl POST or a scripts/pm tool", "api_writes": "3 REST writes — POST /repos/objectstack-ai/objectstack/pulls (draft PR #19459, body written once, read back identical, session-URL footer stored verbatim); POST /repos/objectstack-ai/objectstack/issues/19459/labels (`skip-changeset` via scripts/pm/label-write.mjs: ① 0 labels → ③ HTTP 200 → ④ read-back MATCHES); POST /repos/objectstack-ai/objectstack/issues/19155/comments (this report via scripts/pm/post-stamped.mjs) — plus 2 git pushes (the empty-branch write probe, exit 0; then 9f87053, pre-push check:commit-card-trailers green)", "deviations": [ "Two rule lines instead of the claim's ONE, paid by two retirements instead of one: the claim's proposed sentence measures 212 B against the 120 B cap, and the tightest two-line spelling (grammar + one rule) dropped the definition layer's closure (无则关 — the maintainer's own 「北极星有没有这个需求」) and the `none`-is-an-answer clause. Both retirements are pure second pointers to files that stay pointed at (PR #19449's pattern). Reported publicly here and in the PR body.", "「拉动」 is not written into the negative rule: the filer's spec (5737998283) carries only 「有人在等」; an unscoped 「拉动」不是判据 would collide with :351 「零拉动 ⛔ 不立卡」 (filing threshold) and :756 「推荐序按拉动定向」 (design ordering) — the two-细则 conflict :46 forbids — so the rule is scoped 「不是定级判据」 and 「有人在等」 (the pull question itself, in the ruling's words) carries the substance.", "The grading line names the North Star as 北极星 (the file's own spelling at :42 and :739) instead of the `docs/NORTH-STAR.md` path, to fit 120 B with the four-slot grammar; the path stays on the 取卡前置 line (now :463).", "The definition-layer line names an instrument card's 定义项 as the fleet decision that would differ (North Star 「仪器为车队服务」) — not in the claim's text; without it 「无则关」 would close every instrument card (#19155 itself, #19343), since none falls under a product definition item.", "A leaf-only locked build (`--filter @objectstack/formula --filter @objectstack/lint`) failed on formula's dts (missing @objectstack/spec types) — VERDICT command-exit 1; corrected to the upstream closure `@objectstack/lint...` (VERDICT command-exit 0, 175 s) before the gate was re-run. Both lock runs are in the ledger under slot issue-19155.", "The detached gate's PID file disappeared from the issue-19155 scratchpad mid-run (remover unknown; the process itself was alive under /proc/20037 and its log/exit files were intact); the PID was re-recorded from the transcript and the process waited on by PID, never by name." ], "open_questions": [ {"question": "Should 「拉动」 join 「有人在等」 in the negative grading rule at :365, as the claim's reading had it?", "options": ["A keep as landed — 「⛔「有人在等」不是定级判据」 scoped to grading; 「有人在等」 is the pull question in the ruling's own words, and 拉动 keeps its two legitimate uses at :351 (filing) and :756 (design ordering)", "B add 「拉动」 by trimming 「缺项先补账本」 to 「缺项待补」 (the only 12 B on the line), losing the ledger-first instruction for gap cards"], "recommendation": "A — axis 3 (防 AI 写错): an unscoped 拉动 clause manufactures a 细则冲突 that :46 resolves by the stricter reading, i.e. against filing; axis 1: the ruling's phrase is 有人在等, measured on the card body."}, {"question": "The North Star clause the card offers the maintainer in chat — 「清单上的能力断了 = 指得出会 fail 的清单项,级随该项的 priority」 — should the seat propose it now?", "options": ["A propose it (the ledger carries 91 P2 items; rule 2's 「清单上的能力断了 ⇒ P0/P1」 and the charter's 「继承其 priority」 disagree on a broken P2 item until the North Star says which)", "B leave the North Star as is; the charter line suffices"], "recommendation": "A — axis 2 (contract-first): the North Star outranks the charter (:42), so the finer rule should live where the coarser one does; a docs-only PR after his word, not in this PR."} ], "out_of_scope_findings": [ "carrier: the skills seat (chat with the maintainer, then a docs-only PR on his word) · noted, not filed: North Star 优先级 rule 2 reads 「清单上的能力断了 ⇒ P0/P1」 while 91 of the ledger's 264 items carry priority P2; the charter now inherits the item's own field, so a broken P2 item grades P2.", "carrier: the skills seat (next grading round) · noted, not filed: this shift's own `Path:` lines (#19343, the grading comment on #19155, the first batch of 16) fill slot 2 with a file/area description — specimens of the old shape, to be re-read under the new grammar, not errors to fix in this PR.", "承接者:无 · noted, not filed: os-dev.md :137–:138 read as if the `--ran` reconciliation is the `--commands` invocation with a file added; the tool refuses the pair (「--ran renders a verdict on stdout; --commands and --json render the derivation. Pass one.」 — correct behaviour); one word (单独) would save a dev one refused call. No PR heads for os-dev.md :137.", "承接者:无 · noted, not filed: os-dev.md :48 keeps 「未演练漂移」 while SKILL.md :351 says 「休眠」 — already in PR #19449's Acceptance notes; unchanged here." ] }
Generated by Claude Code
ACCEPT —
domain:skills#2(session_017ETYWqMQD4qMtZzAGovWNi, seat post #19287) at 2026-09-20T23:53Z; PR #19459 (draft, head9f87053, Tier S — the seat lands it through the queue on green).Checklist, verified on GitHub and on the tree (⛔ not on the report's self-description):
- Shape: draft · base
main· first lineFixes #19155·Clause-②: noline-initial · labelsskip-changeset+size/xs+documentation·## 维护者速读(草稿)present. - Scope: 1 file,
SKILL.md+3 / −3 (net 0, 813 / 813; 117 / 113 / 112 B) — :363 rewritten to the two-layerPath:grammar, :364–:365 the definition-layer closure and the ledger-item rule with 「有人在等」 as the negative test; two pure second pointers retired (old :588, :698), each file still pointed at. PR docs(pm-dispatch): land the maintainer's filing/merging directive — items 1 2 3 4 5 8 — as in-place charter deltas, net 0 per ratcheted file #19449's lines untouched.check-governed-merges --pr 19459: GOVERNED Tier S. - Contract:
## Contract reviewPASS on the PR at this head (5753653415, in-seat atCONTRACT_REVIEW_TIER);--pair 19459after the record: exit 0. - Tests, seat-run on the head: line ratchet exit 0, id-lint exit 0, governed-prose exit 0; the acceptance greps (清单项 / 定义项 / 缺项 0 → 2, 有人在等 0 → 1, 清单区 1 → 0);
merge-treevsorigin/main50bae37clean. The dev's union 21 / 21 with--ranreconciled,check:pm-dispatch-gates1883 cases exit 0, the ledger measured. - Gates / CI on
9f87053at 2026-09-20T23:53Z: 29 check runs, 2 still running, 0 red — landing waits for them. - Report:
mcp_calls0 ·api_writes3 (+2 pushes) · worktree removed. All four assumptions confirmed; deviations read and accepted (two lines paid by two retirements; 拉动 scoped out on the two-细则 rule; the instrument-card clause). Both open questions ruled A by the seat — the North Star clause goes to the maintainer's 待您 list. Four notes with carriers.
Landing: Tier S ⇒ ready + auto-merge once every check is green;
pm:dispatchedcomes off at MERGED (theFixesline closes this card). From the next grading round this seat'sPath:lines carry the definition item and the checklist item id, and 「有人在等」 grades nothing.
Generated by Claude Code
- Shape: draft · base
Path: none | charter (
.claude/skills/pm-dispatch/SKILL.md:362 — thePath:grammar — plus one grading rule; twins inreferences/core-rules.md/references/lanes/triage.mdonly where a line exists) | RULED wording (maintainer 「有人在等吗 是个伪命题」, 2026-09-19) | serial behind #19340 under ruling 甲 | graded bydomain:skills#2Finding class (b), surfaced by the maintainer's first sweep batch (2026-09-19): the triage seat mapped every card onto a checklist AREA (access-security, studio-authoring, …) and read the hit as 「清单上的能力断了」, so 8 of 8 cards graded P0–P2 and none closed; it then substituted 「有人在等吗」 as the tie-breaker. Maintainer ruling, verbatim: 「我们是一个开发工具,应该考虑北极星有没有这个需求,有人在等吗 是个伪命题」.
仪器 question (北极星「仪器为车队服务」): which fleet decision differs — every grading in the two-repo sweep (≈965 cards) and every first-touch grading after it; the seat re-graded one batch by hand already. ⇒ p1 (blocks the maintainer's live sweep).
The law's test, made mechanical:
docs/qa/platform-checklist/areas/*.jsoncarries 264 items with ids (<area>.<slug>) and their ownpriority(P0/P1/…). A card is 「在清单上」 only when it can name the item that would FAIL because of it; a card that merely touches an area is not. The card's level inherits the item's P when the capability is broken, P2 when it runs but errs; no item and no path step ⇒none⇒ p3 or not planned. Named users, pull, or 「有人在等」 are never a test — the North Star's definition list, the path and the checklist are.Scope (
.claude/skills/pm-dispatch/SKILL.md, ceiling 812 / 812 line-neutral, every line ≤ 120 B; twins inreferences/core-rules.mdandreferences/lanes/triage.mdif either carries the grading line — grep first):Path: P<n> | <清单区> | none→Path: <清单项 id> | P<路步> | none(the item id fromdocs/qa/platform-checklist/areas/*.json, or the path step of 「唯一的度量,那条路」, ornone).none⇒ p3 或不做;定级继承该项的priority(断)或 P2(能跑但错);⛔「有人在等」「拉动」不是判据.Path:line is the round-report gap);Path: noneis a written answer, not a gap.Acceptance greps (control on
origin/main): 「清单项」 in SKILL.md ≥ 1 (control 0 in this sense —清单区is what main says); 「有人在等」 in SKILL.md 1 as a negative rule (control 0);Path:in SKILL.md ≥ 2 (control 2). Gates:check:pm-skill-ratchet(812 / 812),check:pm-skill-id-lint,check:skill-frame-sync,check:pm-half-states. Governed:.claude/**= Tier S ⇒ draft PR, the skills seat's contract-tier record lands it.Not in scope: the North Star text itself (the maintainer's; a clause 「清单上的能力断了 = 指得出会 fail 的清单项」 is offered to the maintainer in chat) and the checklist files.
Generated by Claude Code