gate_verdicts fact replaces gate_results for contract-auditor in both poodr maps and reviewer in coding.yaml #686

Closed
opened 2026-09-24 17:11:24 +00:00 by jared · 4 comments
Owner

Problem

Rescoped 2026-09-24: the reviewer node exists only in coding.yaml, which no implementation has used. The same argument applies on the default map to contract-auditor, whose charter reads "the latest green gate results" and enters only after suite-check passes. Map edges route on gate results stored by the Runner, so brief facts do not affect routing.

coding.yaml:25 gives the reviewer node enrich: [ticket_brief, gate_results]. The gate_results fact carries each gate step's full output text (brief_facts.rb gate_results, output passed through sized). The reviewer charter says at agents/reviewer.md:13: "The deterministic gates already prove mechanical code quality: style, lint, structure. Do not re-check it." None of the six judgment checks reference gate text. Measured over the project pipeline DB (2026-09-17 to 2026-09-24): gate_results median 3,812 chars per dispatch, max 240,397. The hook cap is 10,000 UTF-16 units (ADR-0206), so this fact alone pushes reviewer briefs into the fallback path.

Reproduce

n/a: design audit finding, not a runtime defect.

Approach

Add a gate_verdicts fact resolver in brief_facts.rb that returns { step => verdict } from latest_step_summaries with no output field. Use it in place of gate_results for contract-auditor (poodr-implementation.yaml:163, poodr-ticket-implementation.yaml:174) and reviewer (coding.yaml:25). Update the Input lines of reviewer.md and contract-auditor.md to name gate verdicts. Template: the red_tests trim in #670.
Required work:

  1. Red test: BriefFacts#fact("gate_verdicts") returns a hash of step name to verdict string with no output text.
  2. Resolver and FACT_RESOLVERS entry in plugins/os-sdlc/lib/os_sdlc/pipeline/brief_facts.rb.
  3. Three map edits.
  4. Two charter Input line edits.

Acceptance criteria

  1. BriefFacts#fact("gate_verdicts") returns a hash of step name to verdict string and no output text.
  2. The contract-auditor enrich list in poodr-implementation.yaml and poodr-ticket-implementation.yaml includes gate_verdicts and not gate_results.
  3. The reviewer enrich list in coding.yaml includes gate_verdicts and not gate_results.
  4. The Input sections of plugins/os-sdlc/agents/reviewer.md and plugins/os-sdlc/agents/contract-auditor.md name gate verdicts and do not name gate results or gate output.

Owner sketch

Resolver: plugins/os-sdlc/lib/os_sdlc/pipeline/brief_facts.rb (FACT_RESOLVERS, private method next to gate_results). Maps: the three files above. Charters: reviewer.md line 9, contract-auditor.md line 9. Tests: the existing BriefFacts test file and the map tests that assert those enrich lists.

Evidence

Audit row from #676: map coding.yaml | node reviewer | fact gate_results | TRIM | reviewer.md:13 "Do not re-check it."

Origin

  • Trigger: #676 enrich-fact audit, run in session 9434289b
  • Improvised this session: none
  • Chain: oversized or duplicated brief facts <- enrich lists chosen per node without a per-role byte audit <- DESIGN (map enrich model)
  • Root candidate: this ticket
  • Where: the map/charter/composer paths named in the draft
  • Parent: #676
  • Session: 9434289b-c48f-4a8a-8add-0d82068e2c3f
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9434289b-c48f-4a8a-8add-0d82068e2c3f.jsonl

Skeptic verdict: CREATE (os-backlog:ticket-skeptic, session 9434289b, citations verified).

## Problem Rescoped 2026-09-24: the reviewer node exists only in coding.yaml, which no implementation has used. The same argument applies on the default map to contract-auditor, whose charter reads "the latest green gate results" and enters only after suite-check passes. Map edges route on gate results stored by the Runner, so brief facts do not affect routing. coding.yaml:25 gives the reviewer node `enrich: [ticket_brief, gate_results]`. The gate_results fact carries each gate step's full output text (brief_facts.rb `gate_results`, output passed through `sized`). The reviewer charter says at agents/reviewer.md:13: "The deterministic gates already prove mechanical code quality: style, lint, structure. Do not re-check it." None of the six judgment checks reference gate text. Measured over the project pipeline DB (2026-09-17 to 2026-09-24): gate_results median 3,812 chars per dispatch, max 240,397. The hook cap is 10,000 UTF-16 units (ADR-0206), so this fact alone pushes reviewer briefs into the fallback path. ## Reproduce n/a: design audit finding, not a runtime defect. ## Approach Add a gate_verdicts fact resolver in brief_facts.rb that returns { step => verdict } from latest_step_summaries with no output field. Use it in place of gate_results for contract-auditor (poodr-implementation.yaml:163, poodr-ticket-implementation.yaml:174) and reviewer (coding.yaml:25). Update the Input lines of reviewer.md and contract-auditor.md to name gate verdicts. Template: the red_tests trim in #670. Required work: 1. Red test: BriefFacts#fact("gate_verdicts") returns a hash of step name to verdict string with no output text. 2. Resolver and FACT_RESOLVERS entry in plugins/os-sdlc/lib/os_sdlc/pipeline/brief_facts.rb. 3. Three map edits. 4. Two charter Input line edits. ## Acceptance criteria 1. BriefFacts#fact("gate_verdicts") returns a hash of step name to verdict string and no output text. 2. The contract-auditor enrich list in poodr-implementation.yaml and poodr-ticket-implementation.yaml includes gate_verdicts and not gate_results. 3. The reviewer enrich list in coding.yaml includes gate_verdicts and not gate_results. 4. The Input sections of plugins/os-sdlc/agents/reviewer.md and plugins/os-sdlc/agents/contract-auditor.md name gate verdicts and do not name gate results or gate output. ## Owner sketch Resolver: plugins/os-sdlc/lib/os_sdlc/pipeline/brief_facts.rb (FACT_RESOLVERS, private method next to gate_results). Maps: the three files above. Charters: reviewer.md line 9, contract-auditor.md line 9. Tests: the existing BriefFacts test file and the map tests that assert those enrich lists. ## Evidence Audit row from #676: map coding.yaml | node reviewer | fact gate_results | TRIM | reviewer.md:13 "Do not re-check it." ## Origin - Trigger: #676 enrich-fact audit, run in session 9434289b - Improvised this session: none - Chain: oversized or duplicated brief facts <- enrich lists chosen per node without a per-role byte audit <- DESIGN (map enrich model) - Root candidate: this ticket - Where: the map/charter/composer paths named in the draft - Parent: #676 - Session: 9434289b-c48f-4a8a-8add-0d82068e2c3f - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/9434289b-c48f-4a8a-8add-0d82068e2c3f.jsonl Skeptic verdict: CREATE (os-backlog:ticket-skeptic, session 9434289b, citations verified).
Author
Owner

Second-opinion review (Codex, session 9434289b): RISK MEDIUM. reviewer.md:9 declares gate output as an input. Ship the charter Input edit in the same change as the map edit. Also: the reviewer role has zero dispatches in .sdlc/pipeline.db, so coding.yaml has no runtime evidence either way.

Second-opinion review (Codex, session 9434289b): RISK MEDIUM. reviewer.md:9 declares gate output as an input. Ship the charter Input edit in the same change as the map edit. Also: the reviewer role has zero dispatches in .sdlc/pipeline.db, so coding.yaml has no runtime evidence either way.
Author
Owner

Map-usage check (session 9434289b): the reviewer node exists only in coding.yaml, which no implementation has used (25 of 25 ran poodr-ticket-implementation.yaml). On the default map the same argument applies to contract-auditor, whose charter reads 'the latest green gate results' and enters only after suite-check pass. Proposed rescope: add a gate_verdicts fact and use it for both reviewer (coding.yaml) and contract-auditor (poodr-ticket-implementation.yaml:174, poodr-implementation.yaml:163). Routing is unaffected: map edges route on gate results stored by the Runner, not on brief facts.

Map-usage check (session 9434289b): the reviewer node exists only in coding.yaml, which no implementation has used (25 of 25 ran poodr-ticket-implementation.yaml). On the default map the same argument applies to contract-auditor, whose charter reads 'the latest green gate results' and enters only after suite-check pass. Proposed rescope: add a gate_verdicts fact and use it for both reviewer (coding.yaml) and contract-auditor (poodr-ticket-implementation.yaml:174, poodr-implementation.yaml:163). Routing is unaffected: map edges route on gate results stored by the Runner, not on brief facts.
jared changed title from reviewer receives full gate output it is told not to re-check; trim gate_results to gate verdicts to gate_verdicts fact replaces gate_results for contract-auditor in both poodr maps and reviewer in coding.yaml 2026-09-24 18:56:13 +00:00
Author
Owner

Work started on branch ticket-686 via /os-sdlc:implement, session 9434289b.

Work started on branch ticket-686 via /os-sdlc:implement, session 9434289b.
Author
Owner

Resolution

Done: gate_verdicts fact added to BriefFacts ({ step => verdict }, no output). contract-auditor in both poodr maps and reviewer in coding.yaml enrich gate_verdicts instead of gate_results. reviewer.md and contract-auditor.md Input lines name gate verdicts. Three new test files.

Evidence: os-sdlc implementation 28: 13 dispatches, 2 retries, escalated bound_exhausted:suite-check/fail. Cause: pre-existing test cli_subagent_start_test.rb:132 and support/subagent_start_cli.rb:80 asserted the old gate_results shape; programmer cannot edit tests (#665 routing gap). Hand-fixed per escalation procedure step 4; full suite 1411 runs 0 failures 0 errors; rubocop clean on 6 files; branch ticket-686.

Follow-ups: none new. The routing gap that forced the hand-fix is already #665.

## Resolution **Done:** gate_verdicts fact added to BriefFacts ({ step => verdict }, no output). contract-auditor in both poodr maps and reviewer in coding.yaml enrich gate_verdicts instead of gate_results. reviewer.md and contract-auditor.md Input lines name gate verdicts. Three new test files. **Evidence:** os-sdlc implementation 28: 13 dispatches, 2 retries, escalated bound_exhausted:suite-check/fail. Cause: pre-existing test cli_subagent_start_test.rb:132 and support/subagent_start_cli.rb:80 asserted the old gate_results shape; programmer cannot edit tests (#665 routing gap). Hand-fixed per escalation procedure step 4; full suite 1411 runs 0 failures 0 errors; rubocop clean on 6 files; branch ticket-686. **Follow-ups:** none new. The routing gap that forced the hand-fix is already #665.
jared closed this issue 2026-09-24 19:27:55 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#686
No description provided.