os-sdlc: behavior-verifier judges from ticket_brief and code_changes only; Bash-only; complains loudly on missing evidence #555
Labels
No labels
P0
P1
P2
P3
bug
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
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#555
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
The behavior-verifier charter (
plugins/os-sdlc/agents/behavior-verifier.md:10) lists five inputs.The map node (
plugins/os-sdlc/maps/poodr-implementation.yaml:114) enriches only[ticket_brief, gate_results].BriefFacts::FACT_RESOLVERS(lib/os_sdlc/runner/brief_facts.rb:17-22) has no production-diff fact.test_changesexists inBriefFactsbut is not enriched for this node.In session d9e1984d, the verifier used Read/Grep/Glob to fetch the diff itself.
In one run, an orchestrator prompt nudged the verifier to run the full suite.
The user decided on 2026-09-11 that the verifier's sole responsibility is: does the production diff deliver the behavior the ticket asks for.
Test relevance belongs to test-reviewer.
Design belongs to contract-auditor.
Gate status belongs to the map.
Evidence is ticket_brief and code_changes only.
Programmer handoff is attached structurally by BriefComposer but is not evidence.
The charter may consult the handoff only after reaching a
failverdict, and only to check critically whether the programmer justified a deviation.Tools are
[Bash]only, used for the subagent-stop settlement pipe.If evidence is missing, the verifier must settle
errornaming the missing fact, and must never gather it itself.This ticket subsumes #554 (red-gate rule removal): the red-gate rule and the "gates are not green" error clause are removed as part of this reshape.
This ticket also carries #554's task: a map test confirming behavior-verifier is reached only via
passedges of gated nodes.code_changesdiffs working tree against HEAD, the same basetest_changesuses, because the runner records no commits (commit step ADR-0171 is off;commit_recordis in-memory only).Ticket 2 covers a persisted start commit for this diff base.
Tasks
PathDiff(paths, root:) fromTestDiff#git_diff;TestDiffdelegates to it.code_changesresolver toBriefFacts(DiffedRubyFiles filtered toproject.code_path/prefix, truncated).enrich: [ticket_brief, code_changes].tools: [Bash], drop theTEST:prefix, keepBEHAVIOR:/CORRECTION:, add the loud-complaint-on-missing-evidence rule.Acceptance criteria
tools: [Bash]only.TEST:prefix and no red-gate or "gates are not green" error clause.passedges of gated nodes.Origin
Resolution
Done: behavior-verifier reshaped: evidence is ticket_brief + code_changes only, tools [Bash], MISSING: complaint on absent evidence, red-gate rule and TEST: prefix removed; PathDiff extracted, CodeDiff owns the production diff, code_changes named fact; map enrich updated; ADR-0173 amends ADR-0162
Evidence: main
dcbbf93on 2026-09-11; suite 1174 runs 0 failures; rubocop clean; bin/refresh-plugins run; History row added in docs/implementation-status/os-sdlc.mdFollow-ups: #556 persisted start commit (diff base survives an enabled commit step); live verification of the reshaped charter on the next pipeline run, no ticket, will surface as a MISSING: complaint if the brief is wrong
Follow-up from the #553 run (session 5fdd0aa3, implementation 3, dispatch 18): the test-reviewer charter still settles verdict error on a contradictory gate read (genuine NameError red that looked stale against the tree), and the map routes that error to implementation_failed with no repair route. Same root as this ticket's behavior-verifier fix. Ticket-skeptic verdict: DROP as a separate ticket; fold into #555's scope or its follow-up. Correct verdict in that case was pass (red for the intended reason).