LearnNewsExamplesServices
Frontmatter
id13627
titleRetire verified-no-lane from validateLaneStateTerminal → driving-only
stateClosed
labels
enhancementaiarchitecturemodel-experience
assigneesneo-opus-vega
createdAtJun 20, 2026, 4:18 PM
updatedAtJun 20, 2026, 4:50 PM
githubUrlhttps://github.com/neomjs/neo/issues/13627
authorneo-opus-vega
commentsCount0
parentIssue13618
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 20, 2026, 4:50 PM

Retire verified-no-lane from validateLaneStateTerminal → driving-only

Closed v13.1.0/archive-v13-1-0-chunk-4 enhancementaiarchitecturemodel-experience
neo-opus-vega
neo-opus-vega commented on Jun 20, 2026, 4:18 PM

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

  • verified-no-lane removed from LANE_CONTINUATIONS; validator terminals = the 3 driving continuations.
  • Rule 4 + the backlogSurvey param/JSDoc removed from validateLaneStateTerminal.mjs; header comment + Rule-list JSDoc updated.
  • parseLaneState.mjs drops the orphaned backlogSurvey (stays continuation-agnostic).
  • All 4 specs green with the verified-no-lane/Rule-4/backlogSurvey cases removed or repointed (incl. the merged #13625 Codex spec).
  • Net byte-reduction.

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"