Accept extra empty critique labels in the takedown critique step #1426
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#1426
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 ticket-takedown run fails at the critique step when the critic returns more design labels than the run expects. The critic invented label B. The prompt showed only Design A. The check treats any label mismatch as a failed step.
Observed
Run
docs/takedown/1416-20261027-125313stopped at step 07 aftergrade-design-1: cause_remainswith this error.The check that raises it is
plugins/os-sdlc/eval/ticket-takedown/lib/takedown/command/critique_step.rb:26. It comparesCritique#labels(plugins/os-sdlc/eval/ticket-takedown/lib/takedown/model/critique.rb:23) withrun.labels.keys.sortby strict equality (critique_step.rb:21).labels.jsonof the run holds only{"1": {"A": "design-1"}}.The prompt did not invite label B.
07-critique-1.prompt.mdhas one## Design Aheading (line 206), one## Failing test check for Design Aheading (line 604), and no other design label. The critic invented B.07-critique-1.reply.jsonlists{"label": "B", "objections": []}and itsreasonsays "There is no Design B."The previous run of the same ticket,
docs/takedown/1416-20261027-123627, passed this step with labels['A']. The failure is intermittent.Reproduce
n/a: the critic reply is nondeterministic. Evidence is in
docs/takedown/1416-20261027-125313/07-critique-1.reply.json.Approach
Either constrain the critic to the expected labels, or ignore labels that are not expected. An empty extra design (no objections) carries no information.
Required work:
CritiqueStep#checkaccept a critique that holds extra labels with no objections — check: absentcritique covers labelsinplugins/os-sdlc/eval/ticket-takedown/lib/takedown/command/critique_step.rbAcceptance criteria
Owner sketch
Origin
docs/takedown/1416-20261027-125313, step 07critique-1CritiqueStep#check(critique_step.rb:21,26) <- critic added unprompted Design B (reply.json) - DESIGNWork started in worktree ticket-1426 (branch ticket-1426).
Resolution
Done: Critique.new(data, expected:) drops extra designs that carry no objections; CritiqueStep, Flow and RunPrompts pass the expected labels. A missing expected label or an extra label with objections still fails.
Evidence: main merge of commit
4b75e564(ind6190950history). test/command/critique_step_test.rb: 4 tests. Takedown suite 624 runs, 0 failures; rubocop clean. Built by hand in a worktree, test first, not via /os-sdlc:implement.Follow-ups: #1433 critic card label B wording (skeptic VERDICT: CREATE, no root candidate); setup_step.rb:5 ParameterListSignalsMissingObject offense predates this change: dropped, owned by the lint-cops track.