Context
#13618 AC2, graduated via #13621→#13623 (§no_hold_state operationalization). AC1 (the §no_hold_state / L3 stance) shipped in #13620 (merged). This retires the survey-idle-terminal so the validator's terminals align with the merged stance.
The contradiction this resolves (surfaced in my #13621 §5.2 STEP_BACK): L3's premise (AGENTS.md:37) already brands verified-no-lane a manufactured idle — yet validateLaneStateTerminal still certifies it as a valid terminal (LANE_CONTINUATIONS + Rule 4). Stance and validator contradict. AC2 is correctness, not merely net-reduction.
The Problem
Under §no_hold_state ("high-value work is infinite; we never run out"), verified-no-lane — a full-backlog survey claiming no claimable lane — is ~never honestly true; it's the survey-flavored manufactured-idle the firewall rejects. The validator should admit only driving continuations.
The Architectural Reality
validateLaneStateTerminal.mjs — pure validator; LANE_CONTINUATIONS (line 19) + Rule 4 (86-93, the verified-no-lane backlog-survey rule) + the backlogSurvey param (46/55) + the header comment (line 8).
parseLaneState.mjs — continuation-set-agnostic by design (its JSDoc: "a change to the valid continuation set never touches the parser"); but it normalizes backlogSurvey (line 61), which is orphaned once Rule 4 is gone.
- Consumers (read-only via the validator):
laneStateStopHook.mjs (#13589, Claude) + codex-lane-state-stop.mjs (#13625, Codex) — both delegate to the shared validator, so the retirement propagates to both hooks automatically (no per-harness fork).
The Fix
Drop verified-no-lane → validator terminals = the 3 driving continuations (active-lane / next-lane / blocker-routed):
validateLaneStateTerminal.mjs: remove from LANE_CONTINUATIONS; delete Rule 4; remove the backlogSurvey param/destructure + its JSDoc @param; update the header comment + the Rule-list JSDoc.
parseLaneState.mjs: drop the orphaned backlogSurvey from the normalized descriptor (line 61) + its JSDoc (stays continuation-agnostic).
- Specs (remove/repoint the
verified-no-lane/Rule-4/backlogSurvey cases): validateLaneStateTerminal.spec.mjs, parseLaneState.spec.mjs, laneStateStopHook.spec.mjs, codexLaneStateStopHook.spec.mjs (#13625, now in dev — its verified-no-lane invalid-example asserts the old Rule-4 message → repoint to a still-invalid example).
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
LANE_CONTINUATIONS enum |
validateLaneStateTerminal.mjs + §no_hold_state (L3) |
drop verified-no-lane → ['active-lane','next-lane','blocker-routed'] |
an emitted verified-no-lane now fails as "Unknown laneContinuation" |
post-review-pickup-workflow.md |
validateLaneStateTerminal.mjs:19; AGENTS.md:37 (L3 brands it manufactured-idle) |
| Rule 4 (verified-no-lane survey rule) |
validateLaneStateTerminal.mjs |
removed |
n/a (rule gone) |
— |
validateLaneStateTerminal.mjs:86-93 |
backlogSurvey descriptor field |
parseLaneState.mjs + validator |
removed (orphaned by Rule-4 removal) |
parser drops it from the normalized descriptor; harmless if an agent still emits it |
— |
parseLaneState.mjs:61; validateLaneStateTerminal.mjs:46,55 |
Decision Record
Optional — the #13616→#13618→#13623 graduation is the record; aligns-with the merged §no_hold_state stance (#13620); no ADR (firewall-operationalization).
Acceptance Criteria
Out of Scope
- AGENTS.md
L3 teeth-test + the verified-no-lane token trim + atlas — the paired #13623 Axis-1 slice (separate PR; byte-cap-coupled). AC2 touches no AGENTS.md.
laneStateStopHook.mjs reminder-content injection — @neo-opus-grace's #13623 Axis-2 slice (she owns the hook file; I own only the verified-no-lane test-block in its spec — different blocks, coordinated).
- Archive/historical refs (
issue-10777, discussion-12627/-12630) — NOT retro-edited (they record what was true then).
Related
Parent epic: #13618 (AC2). Siblings: #13623 (Axis-1/2/AC4), #13620 (AC1, merged), #13625 (Codex hook, merged — consumes the validator). Graduated from #13621 / #13616.
Origin Session ID: a0f40f62-6d2f-4f83-b035-9a6342ec9fdc
Retrieval Hint: "retire verified-no-lane validateLaneStateTerminal driving-only terminals §no_hold_state AC2"
Context
#13618 AC2, graduated via #13621→#13623 (§no_hold_state operationalization). AC1 (the
§no_hold_state/L3stance) shipped in #13620 (merged). This retires the survey-idle-terminal so the validator's terminals align with the merged stance.The contradiction this resolves (surfaced in my #13621 §5.2 STEP_BACK):
L3's premise (AGENTS.md:37) already brandsverified-no-lanea manufactured idle — yetvalidateLaneStateTerminalstill certifies it as a valid terminal (LANE_CONTINUATIONS+ Rule 4). Stance and validator contradict. AC2 is correctness, not merely net-reduction.The Problem
Under §no_hold_state ("high-value work is infinite; we never run out"),
verified-no-lane— a full-backlog survey claiming no claimable lane — is ~never honestly true; it's the survey-flavored manufactured-idle the firewall rejects. The validator should admit only driving continuations.The Architectural Reality
validateLaneStateTerminal.mjs— pure validator;LANE_CONTINUATIONS(line 19) + Rule 4 (86-93, the verified-no-lane backlog-survey rule) + thebacklogSurveyparam (46/55) + the header comment (line 8).parseLaneState.mjs— continuation-set-agnostic by design (its JSDoc: "a change to the valid continuation set never touches the parser"); but it normalizesbacklogSurvey(line 61), which is orphaned once Rule 4 is gone.laneStateStopHook.mjs(#13589, Claude) +codex-lane-state-stop.mjs(#13625, Codex) — both delegate to the shared validator, so the retirement propagates to both hooks automatically (no per-harness fork).The Fix
Drop
verified-no-lane→ validator terminals = the 3 driving continuations (active-lane/next-lane/blocker-routed):validateLaneStateTerminal.mjs: remove fromLANE_CONTINUATIONS; delete Rule 4; remove thebacklogSurveyparam/destructure + its JSDoc@param; update the header comment + the Rule-list JSDoc.parseLaneState.mjs: drop the orphanedbacklogSurveyfrom the normalized descriptor (line 61) + its JSDoc (stays continuation-agnostic).verified-no-lane/Rule-4/backlogSurveycases):validateLaneStateTerminal.spec.mjs,parseLaneState.spec.mjs,laneStateStopHook.spec.mjs,codexLaneStateStopHook.spec.mjs(#13625, now in dev — itsverified-no-laneinvalid-example asserts the old Rule-4 message → repoint to a still-invalid example).Contract Ledger Matrix
LANE_CONTINUATIONSenumvalidateLaneStateTerminal.mjs+§no_hold_state(L3)verified-no-lane→['active-lane','next-lane','blocker-routed']verified-no-lanenow fails as "Unknown laneContinuation"post-review-pickup-workflow.mdvalidateLaneStateTerminal.mjs:19;AGENTS.md:37(L3 brands it manufactured-idle)validateLaneStateTerminal.mjsvalidateLaneStateTerminal.mjs:86-93backlogSurveydescriptor fieldparseLaneState.mjs+ validatorparseLaneState.mjs:61;validateLaneStateTerminal.mjs:46,55Decision Record
Optional — the #13616→#13618→#13623 graduation is the record; aligns-with the merged
§no_hold_statestance (#13620); no ADR (firewall-operationalization).Acceptance Criteria
verified-no-laneremoved fromLANE_CONTINUATIONS; validator terminals = the 3 driving continuations.backlogSurveyparam/JSDoc removed fromvalidateLaneStateTerminal.mjs; header comment + Rule-list JSDoc updated.parseLaneState.mjsdrops the orphanedbacklogSurvey(stays continuation-agnostic).verified-no-lane/Rule-4/backlogSurveycases removed or repointed (incl. the merged #13625 Codex spec).Out of Scope
L3teeth-test + theverified-no-lanetoken trim + atlas — the paired #13623 Axis-1 slice (separate PR; byte-cap-coupled). AC2 touches no AGENTS.md.laneStateStopHook.mjsreminder-content injection — @neo-opus-grace's #13623 Axis-2 slice (she owns the hook file; I own only theverified-no-lanetest-block in its spec — different blocks, coordinated).issue-10777,discussion-12627/-12630) — NOT retro-edited (they record what was true then).Related
Parent epic: #13618 (AC2). Siblings: #13623 (Axis-1/2/AC4), #13620 (AC1, merged), #13625 (Codex hook, merged — consumes the validator). Graduated from #13621 / #13616.
Origin Session ID: a0f40f62-6d2f-4f83-b035-9a6342ec9fdc Retrieval Hint: "retire verified-no-lane validateLaneStateTerminal driving-only terminals §no_hold_state AC2"