Context
Refinement to validateLaneStateTerminal (#13575, merged via #13589's Stop-hook). During the #13495/#12633 continuation-set design, I asked whether "all-handed-off / async-blocked" should collapse into verified-no-lane or warrant a distinct continuation; @neo-opus-grace answered from ~20 lived terminals this session (post-merge → refinement feedback). Converged.
The Gap
verified-no-lane (Rule 4) requires a full-backlog-survey artifact (scope:'full-backlog'), so it means "no UNCLAIMED-claimable backlog lane," NOT literally zero-lane. An agent with OWNED in-flight lanes that are ALL blocked/gated — own PRs at the human merge gate, a lane handed off to a peer, a slice blocked on an unmerged dep — is in owned-but-blocked, categorically distinct from zero-lane, but the current 4-continuation set forces them to assert verified-no-lane, which mis-describes the state. As Grace put it: owned-but-blocked ≠ zero-lane, and an agent shouldn't have to assert a false "no-lane."
Empirical anchor: Grace's ~20 terminals this session, plus my own terminal state at filing — #13603 at @tobiu's merge gate (verifiable: APPROVED + CLEAN), #13498 handed to @neo-gpt (his lane-claim message exists in the graph), repair-AC2 blocked on #13603 merging (real dep). Three externally-verifiable blocks — owned-but-blocked, not verified-no-lane.
The Fix (converged @neo-opus-grace + @neo-opus-ada)
Add a 5th laneContinuation: owned-but-blocked. Loophole-proof via DUAL evidence (the anti-idle-dodge):
- (a) Named in-flight lane refs (
namedGates), EACH with a same-turn checkedAt AND an externally-verifiable blockReason — one of: a named peer's pending artifact (the A2A/graph message exists), a ticket's own documented sizing (the ticket body says so), or an ADR-grounded pacing rule (the ADR says so).
- (b) A full-backlog survey (
backlogSurvey{scope:'full-backlog'}) — proving no UNCLAIMED-claimable lane either.
The non-gameable line (Grace's): a third party can VERIFY each block (the message/ticket/ADR is real) — vs a bare unverifiable "holding" / "fresh head," which is the idle-dodge the operator escalated on (no_gated_no_holding).
Acceptance Criteria
Related
Related: #13575
Related: #13589
Related: #13495
Related: #12633
Origin Session ID: abe80be3-6235-4a9e-99bc-b14659ba806a
Context
Refinement to
validateLaneStateTerminal(#13575, merged via #13589's Stop-hook). During the #13495/#12633 continuation-set design, I asked whether "all-handed-off / async-blocked" should collapse intoverified-no-laneor warrant a distinct continuation; @neo-opus-grace answered from ~20 lived terminals this session (post-merge → refinement feedback). Converged.The Gap
verified-no-lane(Rule 4) requires a full-backlog-survey artifact (scope:'full-backlog'), so it means "no UNCLAIMED-claimable backlog lane," NOT literally zero-lane. An agent with OWNED in-flight lanes that are ALL blocked/gated — own PRs at the human merge gate, a lane handed off to a peer, a slice blocked on an unmerged dep — is in owned-but-blocked, categorically distinct from zero-lane, but the current 4-continuation set forces them to assertverified-no-lane, which mis-describes the state. As Grace put it: owned-but-blocked ≠ zero-lane, and an agent shouldn't have to assert a false "no-lane."Empirical anchor: Grace's ~20 terminals this session, plus my own terminal state at filing — #13603 at @tobiu's merge gate (verifiable: APPROVED + CLEAN), #13498 handed to @neo-gpt (his lane-claim message exists in the graph), repair-AC2 blocked on #13603 merging (real dep). Three externally-verifiable blocks — owned-but-blocked, not verified-no-lane.
The Fix (converged @neo-opus-grace + @neo-opus-ada)
Add a 5th
laneContinuation:owned-but-blocked. Loophole-proof via DUAL evidence (the anti-idle-dodge):namedGates), EACH with a same-turncheckedAtAND an externally-verifiableblockReason— one of: a named peer's pending artifact (the A2A/graph message exists), a ticket's own documented sizing (the ticket body says so), or an ADR-grounded pacing rule (the ADR says so).backlogSurvey{scope:'full-backlog'}) — proving no UNCLAIMED-claimable lane either.The non-gameable line (Grace's): a third party can VERIFY each block (the message/ticket/ADR is real) — vs a bare unverifiable "holding" / "fresh head," which is the idle-dodge the operator escalated on (no_gated_no_holding).
Acceptance Criteria
validateLaneStateTerminalacceptslaneContinuation:'owned-but-blocked'ONLY withnamedGates(eachcheckedAt+ ablockReasonin the allowed externally-verifiable set) ANDbacklogSurvey{scope:'full-backlog'}; rejects a bare "holding" with no verifiable block, and rejects missing the survey.parseLaneStatedescriptor + the #13589 Stop-hook emission convention updated for the 5th continuation.verified-no-lanedocumentation clarified to "no actionable-claimable lane" (not literally zero-lane), so the name stops inviting the wrong read.Related
Related: #13575 Related: #13589 Related: #13495 Related: #12633
Origin Session ID: abe80be3-6235-4a9e-99bc-b14659ba806a