Stop takedown verifying defects already fixed on main #998
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#998
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?
Problem
A takedown can verify a defect that is already fixed on main.
Two cards fail together: the research step accepts a reproduction that stubs the behavior in question, and the relevance judge misreads a fix as the defect.
Design
/home/jared/dev/cc-os/.claude/worktrees/prism-architect/docs/takedown/998-20261016-094801/final-design.json
Approach
Make Takedown::Research#verify! and Takedown::Relevance#verify! refuse on required structured reply fields (reproduction.stubs with a questioned flag; fix_checks with current_code_is_fix) instead of trusting reply shape, with real red tests this time.
Required work:
plugins/os-sdlc/eval/ticket-takedown/lib/takedown/model/research.rbplugins/os-sdlc/eval/ticket-takedown/harness/schemas/research.jsonplugins/os-sdlc/eval/ticket-takedown/harness/schemas/relevance.jsonplugins/os-sdlc/eval/ticket-takedown/harness/cards/researcher.mdplugins/os-sdlc/eval/ticket-takedown/harness/cards/relevance-judge.mdplugins/os-sdlc/eval/ticket-takedown/test/run_support.rbplugins/os-sdlc/eval/ticket-takedown/test/model/research_test.rbplugins/os-sdlc/eval/ticket-takedown/test/model/harness_files_test.rbplugins/os-sdlc/eval/ticket-takedown/lib/takedown/model/relevance.rbplugins/os-sdlc/eval/ticket-takedown/test/model/research_stub_test.rbplugins/os-sdlc/eval/ticket-takedown/test/model/relevance_fix_check_test.rbAcceptance criteria
Owner sketch
reproduction.stubs(schema research.json, card researcher.md)stubsTakedown::Research#verify!(checkunstubbed?)fix_checks(schema relevance.json, card relevance-judge.md)harm_path_livetrue when a fix check says the current code is the fix; fail loudly whenfix_checksis missingTakedown::Relevance#verify!plugins/os-sdlc/eval/ticket-takedown/test/model/research_stub_test.rbplugins/os-sdlc/eval/ticket-takedown/test/model/relevance_fix_check_test.rbTakedown relevance: needs a ruling
Harm: A takedown research-only run can report
verified: truefor a defect that a live command shows is already fixed on main, so a person spends effort on a ticket that no longer needs work.Protects: The takedown gate's purpose of stopping obsolete tickets before research and design money is spent, and of keeping its verdicts trustworthy for Jared's close and ruling decisions.
Harm path:
bin/takedown-run <ticket> --research-onlyruns setup and then the research step, which callsResearch#verify!and accepts any reproduction withran: trueand a non-blank command and output, so a stub that encodes the ticket's claim passes. (live: true)Evidence:
--research-onlyflag is parsed and sets research_only in the run request.Research.new(run.replies.fetch(name)).verify!on the researcher reply.0053cf03, which shows the defect is fixed on main.0053cf03(2026-10-11) changed forgejo_backend.rb, which confirms the fix is on main at this checkout.Conflicting ADRs:
The ticket is waiting for Jared's ruling on the ADRs above.
ADR-0288 was removed in commit
c5240610(2026-10-15, "docs(adr): challenge every ADR with the reversal judge (ADR-0296)"). Under Jared's rule of 2026-10-16, the ruling question under ADR-0288 is void. Kept open: the defect is independent of the ADR. Research#verify! (plugins/os-sdlc/eval/ticket-takedown/lib/takedown/model/research.rb) has no check that rejects a reproduction whose key collaborator is a stub, and Relevance#verify! only checks that evidence exists. Work remains for acceptance criteria 1-3. The waiting label no longer has a reason; no tool here removes labels, so Jared or main should remove it.Work started 2026-10-16: live takedown run (session 7, branch prism-architect). The waiting label is stale (ADR-0288 removed in
c5240610).Takedown run 998-20261016-091741 failed at green-suite: polish rounds traded old lint offenses in command/relevance_step.rb (present at HEAD) for new ones until the stall rule fired. Cleared that debt in
ab429cf5. A repo-wide lint-sweep ticket was proposed and dropped by ticket-skeptic: no recorded requirement; fix lint in the files a trial ticket touches instead. Rerun follows.Implementation started: /os-sdlc:implement 998 takedown-implement on branch prism-architect (design docs/takedown/998-20261016-094801; grade removes_defect false, reported not gated per the 2026-10-16 ruling).
Resolution
Done: Research#verify! requires reproduction.stubs and refuses a reproduction that stubs the questioned behavior; Relevance#verify! requires fix_checks and refuses a live verdict when a check says the current code is the fix; schemas and cards updated. Built from takedown run 998-20261016-094801 (2 rounds, $1.23) by implementation 49, then hand-finished: the behavior-verifier found that a not-live reply without fix_checks passed, fixed test-first. Implementation 49 abandoned (its reason text says 'in 3c'; read 'in
642a5b11').Evidence: Commit
642a5b11. Takedown eval 607 runs, 0 failures; os-sdlc 1571 runs, 0 failures; rubocop clean on touched files. New red-then-green test test_a_not_live_reply_without_fix_checks_fails_loudly.Follow-ups: none; the remaining agent-reported-flag gap is the review question above
Needs review: Grade for the final design: removes_defect false, cause_remains true. The stubs[].questioned and fix_checks[].current_code_is_fix flags are agent-reported; a mislabelled stub or misread fix still passes. Original criterion 1 (a live command shows the defect is already fixed, so verified must not be true) has no live re-run check: the scratch sandbox has no network. Decide whether that remaining gap needs its own ticket.