Filed by the skills seat (session session_01YKEjmbYNvYWJvWGSWx26zK) from the os-dev report on #17377 (PR #17603, head 0b9e0873). ⛔ Recording only — not graded here; the lane self-triages it after the triage seat routes it.
What #17377 landed, and the price it recorded
classifyRestartWhen(value, isTracked) (PR #17603) sorts every Restart-when: value into six classes in a fixed order — manual → closed-ref → issue-ref → command → tracked-path → prose — and fireability is membership in the first three fireable ones (closed-ref, issue-ref, command). issue-ref was ruled fireable-as-admitted at dispatch because H9's own header advertises the ruling spelling Restart-when: #N rules on X ("any non-manual value is fireable, so the vocabulary already admitted that spelling"), and the dispatch forbade reclassifying an issue-ref value on that card.
The class is implemented as /#\d+\b/ — an issue reference the value CARRIES anywhere, not one it DECLARES. On the 2026-09-11 census of the 104 open pm:on-hold cards (bodies only) that order has a measured price:
| card |
what the value names |
why it reads clean |
| #8753 |
a tracked repo path |
an unrelated issue number mentioned mid-sentence |
| #8607 |
a tracked repo path |
same |
| #8589 |
a tracked repo path |
same |
| #6009 |
a tracked repo path |
same |
| #7401 |
a maintainer act with, in its own words, no closing event any scan can detect |
a context mention of an issue number |
⇒ four file triggers (misfiled Restart-touch: lines — exactly the class #17377 built a row for) and one self-declared manual wait are H9-clean today, on a mention. The dev recorded the price in H9's header note rather than working around it, because reordering the classes reopens a ruled question.
Three directions the dev measured — ⛔ not prescriptive
The dev's recommendation on the four axes was C (business need: the only option measured to fix all four without touching an advertised value; long-term: the file's own idiom; AI-authoring safety: an exit must be DECLARED, not alluded to; startup scope: one predicate narrowed, no new surface). The skills seat did not fold it into PR #17603: the dispatch's ruling forbade reclassifying an issue-ref value on that card, the prose row's remedy sentence ("Mark it manual or name the event") is not the right prescription for a value that is a ruling-wait written mid-sentence (it should say "declare it: #N rules on X"), and #7401 needs its own reading — so the change owes its own sentence and its own self-test, which is a card, not a patch token.
What this card is NOT
- ⛔ Not the reserved class. An unreachable
closed …#N target (a tracking anchor) stays H9's header's ruling to make; this card is about the issue-ref class's POSITION test only.
- ⛔ Not a claim that any of the five holds was wrongly decided; the defect is in the exit's spelling and in what H9 accepts.
Refs
#17377 (the parent — the classifier and its ruled order) · PR #17603 (the diff; the census table and the four-axis reasoning are in its body) · #7898 / #3739 (the parent's specimens) · #10102 (the #9591 lesson the row sentences keep) · scripts/pm/check-half-states.mjs — classifyRestartWhen, FIREABLE_RESTART_WHEN_CLASSES, the H9 header note's "measured price" paragraph.
Generated by Claude Code
Filed by the skills seat (session
session_01YKEjmbYNvYWJvWGSWx26zK) from the os-dev report on #17377 (PR #17603, head0b9e0873). ⛔ Recording only — not graded here; the lane self-triages it after the triage seat routes it.What #17377 landed, and the price it recorded
classifyRestartWhen(value, isTracked)(PR #17603) sorts everyRestart-when:value into six classes in a fixed order —manual→closed-ref→issue-ref→command→tracked-path→prose— and fireability is membership in the first three fireable ones (closed-ref,issue-ref,command).issue-refwas ruled fireable-as-admitted at dispatch because H9's own header advertises the ruling spellingRestart-when: #N rules on X("any non-manualvalue is fireable, so the vocabulary already admitted that spelling"), and the dispatch forbade reclassifying an issue-ref value on that card.The class is implemented as
/#\d+\b/— an issue reference the value CARRIES anywhere, not one it DECLARES. On the 2026-09-11 census of the 104 openpm:on-holdcards (bodies only) that order has a measured price:⇒ four file triggers (misfiled
Restart-touch:lines — exactly the class #17377 built a row for) and one self-declared manual wait are H9-clean today, on a mention. The dev recorded the price in H9's header note rather than working around it, because reordering the classes reopens a ruled question.Three directions the dev measured — ⛔ not prescriptive
issue-refbefore the unfireable classes, a reference anywhere). Zero churn; the five holds above keep reading clean; recorded in the header note.tracked-pathaboveissue-ref. The four gain a correct row, but a legitimate#N rules on Xexit that happens to name a file would start firing — contradicts the header's advertised spelling, needs a ruling.issue-refto the DECLARATION position (the value must START with the reference, as#N rules on Xdoes). On this census that reclassifies exactly the four (all mid-sentence mentions) and leaves Give a lowered hook body a declared constant surface — every shared constant is currently hand-copied into each handler and pinned by a bespoke drift test (8 rows in the reference app) #13718 and [P2] engine ADR: durable pause inside structured regions (unlock topology-level parallel approvals / waits / subflows) #3267, which start with theirs. It preserves the advertised spelling literally and costs no ruling on reachability. The file already has a declaration-position idiom forPart of #Nbeside the anywhere-form (partOfReand its declaration-position variant), so it is the repo's existing shape, not a new one.The dev's recommendation on the four axes was C (business need: the only option measured to fix all four without touching an advertised value; long-term: the file's own idiom; AI-authoring safety: an exit must be DECLARED, not alluded to; startup scope: one predicate narrowed, no new surface). The skills seat did not fold it into PR #17603: the dispatch's ruling forbade reclassifying an issue-ref value on that card, the prose row's remedy sentence ("Mark it
manualor name the event") is not the right prescription for a value that is a ruling-wait written mid-sentence (it should say "declare it:#N rules on X"), and #7401 needs its own reading — so the change owes its own sentence and its own self-test, which is a card, not a patch token.What this card is NOT
closed …#Ntarget (atrackinganchor) stays H9's header's ruling to make; this card is about theissue-refclass's POSITION test only.Refs
#17377 (the parent — the classifier and its ruled order) · PR #17603 (the diff; the census table and the four-axis reasoning are in its body) · #7898 / #3739 (the parent's specimens) · #10102 (the #9591 lesson the row sentences keep) ·
scripts/pm/check-half-states.mjs—classifyRestartWhen,FIREABLE_RESTART_WHEN_CLASSES, the H9 header note's "measured price" paragraph.Generated by Claude Code