Recording only, no severity asserted — routing and ranking are triage's. Found while implementing #15083 on branch claude/issue-15083-value-bearing-argv (PR #15114); adjacent to that card's diff but a different seam, so deliberately not repaired there.
Measured
runReconciliation in scripts/pm/dispatch-gates.mjs classifies a command a dev RECORDED that is not in the derived runnable set. It has three outcomes, and two of them are "explained, not a mistake":
if(ciOnlyCommands.has(entry.command)){explainedCiOnly.push(entry.command);continue;}if(pendingCommands.has(entry.command)){explainedPending.push(entry.command);continue;}extra.push(entry.command);Those two buckets exist because a CI-measured family and a pending-changeset family are both derived and both deliberately absent from --commands, so a dev naming one is not naming something unknown. PR #15114 adds a third family class with exactly that property — an invocation whose argv takes a value from the workflow, kept out of --commands because that list promises runnable — and it has no explained bucket. A recorded command matching one lands in extra.
Why it is small, and why it is not nothing
Small: extra is diagnostic only. recon.ok reads unrun.length === 0, so nothing here can turn a verdict red or green, and the realistic dev never records a command they cannot run.
Not nothing: this file's own stated rule is that an omission is disclosed where the omission happens, and this seam is the one place the third omission is not named. The near-miss diagnostic beside it (trimmed !== entry.command) exists precisely so a recorded command that ALMOST matches a derived one is explained rather than dumped in extra — the same courtesy this class is owed. The likeliest real trigger is a dev who records the BARE spelling of one of these scripts out of habit; today they get extra with no reason attached, where a labelled bucket would tell them the invocation is one CI never makes.
Shape of the repair, not a design
Symmetric with the two buckets already there: a notRunnableCommands set (notRunnableCommandSet already exists and is exported, added by PR #15114) passed alongside ciOnlyCommands, an explainedNotRunnable array, and one rendered line beside the Classified by this tool, no explanation owed line. It is a handful of lines and it re-decides nothing about how families are keyed.
Boundary
⛔ Not a claim on PR #15114 and not a defect that PR introduced — that PR added the third class and left this seam symmetric-minus-one, which is the state being recorded. Everything above was read at e98bfc87.
Generated by Claude Code
Recording only, no severity asserted — routing and ranking are triage's. Found while implementing #15083 on branch
claude/issue-15083-value-bearing-argv(PR #15114); adjacent to that card's diff but a different seam, so deliberately not repaired there.Measured
runReconciliationinscripts/pm/dispatch-gates.mjsclassifies a command a dev RECORDED that is not in the derived runnable set. It has three outcomes, and two of them are "explained, not a mistake":Those two buckets exist because a CI-measured family and a pending-changeset family are both derived and both deliberately absent from
--commands, so a dev naming one is not naming something unknown. PR #15114 adds a third family class with exactly that property — an invocation whose argv takes a value from the workflow, kept out of--commandsbecause that list promises runnable — and it has no explained bucket. A recorded command matching one lands inextra.Why it is small, and why it is not nothing
Small:
extrais diagnostic only.recon.okreadsunrun.length === 0, so nothing here can turn a verdict red or green, and the realistic dev never records a command they cannot run.Not nothing: this file's own stated rule is that an omission is disclosed where the omission happens, and this seam is the one place the third omission is not named. The near-miss diagnostic beside it (
trimmed !== entry.command) exists precisely so a recorded command that ALMOST matches a derived one is explained rather than dumped inextra— the same courtesy this class is owed. The likeliest real trigger is a dev who records the BARE spelling of one of these scripts out of habit; today they getextrawith no reason attached, where a labelled bucket would tell them the invocation is one CI never makes.Shape of the repair, not a design
Symmetric with the two buckets already there: a
notRunnableCommandsset (notRunnableCommandSetalready exists and is exported, added by PR #15114) passed alongsideciOnlyCommands, anexplainedNotRunnablearray, and one rendered line beside theClassified by this tool, no explanation owedline. It is a handful of lines and it re-decides nothing about how families are keyed.Boundary
⛔ Not a claim on PR #15114 and not a defect that PR introduced — that PR added the third class and left this seam symmetric-minus-one, which is the state being recorded. Everything above was read at
e98bfc87.Generated by Claude Code