Takedown: an adr_causes entry that complies with its ADR must not stop the run for a ruling #1007
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#1007
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
The ticket-takedown skill stops the run for a ruling on every
adr_causesentry, even when the design complies with that ADR. The user rules "comply" and nothing changes. A ruling must be needed only when the design would violate or amend a heuristic or an ADR. ADR-0292 already removed this stop for a resolved relevance conflict (#1006). Theadr_causesstop has the same shape.A second defect is in the same field. Entries are not normalized or de-duplicated, and a designer cannot read ADRs (ADR-0280 to ADR-0282).
Observed
Run
docs/takedown/1005-20261014-151342/final-design.json:adr_causesnames ADR-0290 only because the design enforces it. Thewhysays: "Forbids model edits of placed design content, so ... the fix must move lint to design time".adr_conflictsis null.adr_causeslists ADR-0290 twice: asdocs/adr/0290and asADR-0290.Where the stop comes from:
plugins/os-sdlc/skills/ticket-takedown/SKILL.md:48: "WHENadr_causesis not empty THEN show each ADR with its reason, and say that the user rules on each one (comply, amend, or supersede) before implementation."plugins/os-sdlc/eval/ticket-takedown/harness/cards/critic.md:28and:67: the critic names any ADR that causes the defect. The card does not say whether the design complies or amends.plugins/os-sdlc/eval/ticket-takedown/harness/schemas/critique.json:131: theadr_causesschema has no stance field and no id pattern.plugins/os-sdlc/eval/ticket-takedown/lib/takedown/model/run_state.rb:77-78:adr_causesflat-maps all critiques and calls.uniqon whole entries. Two entries with differentadrstrings or differentwhytext both survive.Reproduce
n/a: the defect shows in a finished run. Read
docs/takedown/1005-20261014-151342/final-design.jsonand itsadr_causeslist.Approach
Required work:
adr_causesentry in the critique schema: the design complies with the ADR, or the design would amend it — check: presentadr_causesinplugins/os-sdlc/eval/ticket-takedown/harness/schemas/critique.jsonadrid to one form and de-duplicate by that id inRunState#adr_causes— check: presentadr_causesinplugins/os-sdlc/eval/ticket-takedown/lib/takedown/model/run_state.rbSKILL.mdsection 3 so that a complying cause is recorded and shown in the ticket body, and only an amending cause stops for a ruling — check: presentadr_causesinplugins/os-sdlc/skills/ticket-takedown/SKILL.mdadr_causesinplugins/os-sdlc/eval/ticket-takedown/harness/cards/critic.mdOrchestrator work: run
/os-adr:findfirst. If the change reverses an Accepted ADR (ADR-0280 to ADR-0282 or ADR-0292), record a superseding ADR through the owner.Acceptance criteria
docs/adr/0290and asADR-0290, when the run settles, thenfinal-design.jsonlists ADR-0290 once.adr_causesentry whose stance is comply, when the skill presents the design, then the entry appears in the ticket body and the run continues to implementation without a ruling.adr_causesentry whose stance is amend, when the skill presents the design, then the run stops for the user's ruling.Owner sketch
Takedown::Model::RunState#adr_causesowns the merge: it normalizes ids, de-duplicates, and keeps the strongest stance for each ADR.Origin
docs/takedown/1005-20261014-151342stopped for anadr_causesruling on ADR-0290.SKILL.md:48rules on everyadr_causesentry ← the critique schema has no stance field (critique.json:131).plugins/os-sdlc/skills/ticket-takedown/SKILL.md