Check the researcher's stated cause before any design runs #980
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#980
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
ADR-0285 made the researcher state
cause {mechanism, defect_class}(plugins/os-sdlc/eval/ticket-takedown/harness/cards/researcher.md, last bullet;harness/schemas/research.json).In live mode the grader grades every design against this cause (
lib/takedown/query/live_grade_inputs.rb:13-16).Designers also see the cause in the research reply (
lib/takedown/presenter/run_prompts.rb:57).The grader may not judge the cause (
harness/cards/grader.md:11).So one unchecked cause steers the designers and grades them, and nothing detects a shallow or wrong cause in live mode.
This is the root cause challenger: dig past the first instinct to a more systemic origin, so the fix is more resilient.
Neither guard may change
harness/cards/grader.mdor its schema, because that forces recalibration.Source: Codex review.
Related: the sibling ticket "Measure how often the researcher's cause is shallower than the ruled cause, and flag runs where the critic names a deeper cause" (its result decides whether part (b) is needed now). Parent work: #974.
Reproduce
n/a: design ticket, nothing to reproduce.
Approach
(a)
Research#verify!(lib/takedown/model/research.rb:11-20) rejects a blankmechanismordefect_class, and requires apath:lineinmechanism.(b) One independent, blind cause check runs before design. When it disagrees with the researcher, the run escalates or replaces
research.causebefore any design or grade.Part (a) is cheap. Part (b) may become an eval first.
Required work:
Research#verify!— check: presentmechanisminplugins/os-sdlc/eval/ticket-takedown/lib/takedown/model/research.rbAcceptance criteria
mechanismordefect_class, whenResearch#verify!runs, then it rejects the reply.mechanismwith nopath:line, whenResearch#verify!runs, then it rejects the reply.research.causebefore any design or grade.Origin
causewith no check (docs/adr, ADR-0285) ← DESIGN (ADR-0285)Commit
e4d0fcd2(ADR-0288) changesResearch#verify!but does not close any acceptance criterion of this ticket.What it adds to
verify!:still_relevantmust be true;relevance_evidenceneeds one entry with a ref and a finding;reproductionmust be either a run (rantrue,command,output_excerpt) or a not-runnable location (ranfalse,locationmatchingResearch::LOCATION=/\A\S+:\d+/,reason_not_run).Overlap with this ticket: the path:line rule exists now, but only for
reproduction.location, not forcause.mechanism. AC1 (blankmechanism/defect_class) and AC2 (path:line inmechanism) stay open; AC2 can reuseResearch::LOCATIONand add one entry toResearch::CHECKS. AC3 (blind cause check) is not touched.Decomposed 2026-10-12. Child: #1001 (Research#verify! shape check, AC 1-2). AC 3 (blind cause check) has no child: the skeptic dropped a placeholder ticket because it waits on the counts in #1000. Reopen it as a child only if those counts show shallow or wrong causes are common. Umbrella stays open.