Gate crash records a nil-verdict completion and wedges the implementation #470
Labels
No labels
P0
P1
P2
P3
bug
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#470
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
During the #467 drive, a gate harness error (TargetSelectionError) during os-sdlc-runner subagent-stop left the completion recorded with verdict nil. next then fails permanently with unroutable_verdict: no nil edge declared from "test-writer"; the only recovery is a fresh implementation-open and full replay (two implementations wedged this way in one session). completion_intake.rb settles the verdict (settle_verdict, :122-124) after the completion row exists, so any raise inside gate execution strands the row. Wanted: fail-loud atomicity — either the completion records with a settled verdict, or the crash leaves the dispatch pending/abortable with clear details, never a routable-nowhere nil.
Skeptic verdict: CREATE — real observed failure, design gap in completion_intake.rb crash atomicity, fail-loud floor issue.
Origin
ADR-0140 (detached gate settlement) changes this wedge's surface: a completed dispatch with a nil verdict and a dead settlement now fails loudly via Settlement::Unsettled naming the dispatch and log path, instead of unroutable_verdict. Skeptic-rejected follow-up recorded here per its verdict: a settle-gates --retry re-queue path was proposed and DROPPED (better-seam: recovery design belongs to this ticket; ADR-0132 tension). When this ticket is designed, weigh re-running settlement for a verdict-less completed dispatch against the one-path-through-the-map rule.
Closed via code-probe verification (agent ad6001728e920c751, model claude-sonnet-5, 2026-08-23).
The wedge this ticket describes (a raise inside gate execution stranding a nil-verdict completion row, requiring fresh implementation-open + full replay to recover) was real when filed on 2026-08-21, but has since been designed around:
The file:line citation in the ticket body (completion_intake.rb:122-124) is also stale; settle_verdict now lives at line 97 with the same structural ordering, unaffected by the fix.
Closing as superseded. Follow-up: confirm whether plugins/os-sdlc/lib/os_sdlc/runner/gate_settlement.rb is dead ADR-0140 scaffolding that should be removed.
Follow-up resolved 2026-08-23 (verification agent a858bb96d23f91824, claude-sonnet-5) — no code change needed.
Correction to my earlier closing comment: gate_settlement.rb is NOT dead code. It is the live implementation of the ADR-0141 in-turn gate mechanism itself, not leftover ADR-0140 scaffolding:
I also named the wrong class in my earlier comment (Settlement::Unsettled). That constant never existed in this codebase; the real ADR-0140 artifact was GateSettlement::UnknownDispatch/Failed, and both are still in active use under the new architecture — they were carried forward, not superseded.
No file needs deletion. Closing this follow-up with no action taken.