os-sdlc map: own the edit of existing tests a ticket deliberately invalidates #610
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
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
rule-proposal
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#610
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
Ticket #606 changes behavior that existing tests assert. The poodr-ticket-implementation map lets test-writer add tests and lets programmer edit only production code. No node may retire or rewrite an existing test. The programmer's gate cannot go green when the ticket invalidates an existing test.
Observed
Implementation 1 of #606 (2026-09-17, worktree ticket-606) ended
implementation_failedwith reasonverdict:errorat the programmer node, dispatch 9.The programmer's handoff disclosed the red as a test-mapping gap only. The full suite told a different story.
Unmodified main in the same session:
1331 runs, 3039 assertions, 0 failures, 0 errors, 0 skips.Failing existing tests that assert the old behavior the ticket retires:
The
verdict:errorroute went straight toimplementation_failed. The suite-check repair route never ran.Reproduce
Then drive the map to the programmer node. Any ticket whose
## Casescontradict an existing test reproduces the shape.Expected
When a ticket's cases invalidate an existing test, one node owns the edit to that test, and the programmer's gate can reach green. Two candidate shapes; the ticket decides which:
(a) The agent-ready ticket template gains a
## Retired testssection. test-writer owns those edits in the red round.implementation-openrefuses a ticket whose cases contradict a listed test that is not in the section.(b) The map gains an edge from programmer
verdict:errorback to test-writer, with the failing existing tests as the brief.Separately: a programmer handoff that names a mapping gap while the suite is red must be classified as a red gate, not an error. The error route pre-empted the suite-check repair route here.
Origin
/os-sdlc:implement #606, implementation 1, dispatch 9 (programmer), 2026-09-17implementation_failed, #606 labelled waiting, worktree ticket-606 kept with the increment uncommittedDESIGN(maps/poodr-ticket-implementation.yaml; test-writer and programmer agent charters)Skeptic verdict
VERDICT: CREATE — complete in-policy pipeline run hit a reproducible design gap; Origin chain ends in DESIGN; root candidate is this ticket.
Decision (2026-09-17)
Option A chosen by the user: a
## Retired testssection owned by test-writer in the red round, plus the unmapped-file gate fallback.Owner sketch
Cases
## Retired testslistspath#methodentries that exist under the project root, whenimplementation-openruns, then it opens.## Retired testslists an entry whose file or method does not exist, whenimplementation-openruns, then it refuses withticket body missing: Retired tests (not found: <entry>).## Retired testssection, whenimplementation-openruns, then it opens andretired_testsis empty.retired_testscarries every listed entry.Structural follow-through
## Retired testsas optional,path#methodone per line.Work started via /os-sdlc:implement on branch ticket-610 (worktree from main
418804d9, session 67967f79). First live run of the #606 daemon lifecycle at implementation-open.Resolution
Done: Optional ## Retired tests ticket section (path#test_method per line) parsed by Pipeline::TicketShape; implementation-open on the ticket map refuses a run when a listed file or method does not exist (Pipeline::RetiredTest); retired_tests is a BriefFacts enrichment on the test-writer and test-reviewer nodes with matching charter lines; capture template documents the section; GateCommands#diff_test_command widens to the target suite for an unmapped code file instead of raising. ADR-0202 (amends 0160 in prose). Ride-along: Daemon::Client expands root before the socket (#606 regression).
Evidence: Commit
7462a0d2on branch ticket-610, merged to main by worktree finish. Suite: 1345 runs, 3052 assertions, 0 failures, 0 errors, twice in a row. rubocop on the 11 touched Ruby files: no offenses. Map loads through Map::Loader; 31 map tests green. Pipeline impl 2 escalated bound_exhausted:programmer-repair/fail because gate_commands_test#test_production_diff_with_no_test_file_raises asserted the retired raise; rewritten by hand to assert the suite fallback.Follow-ups: Capture os-backlog TemplateValidator support for ## Retired tests (ADR-0095 validator does not know the section; small, agent-ready); per-user runtime dir for the daemon socket still unticketed; 34 pre-existing rubocop offenses in untouched os-sdlc files unticketed by prior decision.
## Retired testsand## Approach#612jared referenced this issue2026-09-18 13:42:53 +00:00
jared referenced this issue2026-09-18 13:43:01 +00:00