Pipeline cannot converge when a red suite-check needs a test-side edit #544

Open
opened 2026-09-09 11:57:29 +00:00 by jared · 0 comments
Owner

Context

During #535 implementation (os-sdlc test-path resolution), the suite-check gate went red because a pre-existing test encoded the old contract the ticket was replacing. The os-sdlc map has no route for "the failing test itself must change", so the repair loop routed to programmer-repair, which cannot edit test files.

Observed

The test OsSdlc::Runner::GateCommandsTest#test_lint_present_and_test_lint_nil_for_a_production_only_diff failed because it asserted the old return-a-missing-path behavior. The map routed suite-check/fail → programmer-repair, which lacks test-editing authority. Three repair rounds burned the bound; the run ended bound_exhausted:suite-check/fail. The fix took one test-fixture edit by hand.

Reproduce

n/a: This is a map-routing design gap, not reproducible without a full pipeline run whose suite failure stems from a test file outside the ticket's authored scope.

Expected

When suite-check/fail occurs in a test file the ticket did not author, the pipeline should route the failure to a test-repair node (or test-writer), with the failing test named; or the escalate verdict should report "test-side conflict" so a human decides in one turn instead of three.

Illustration

# Candidate 1: escalate verdict signals test-side conflict
class SuiteCheckGate
  def verdict
    return "escalate:test-side-conflict" if failure_in_unowned_test?
  end
end

# Candidate 2: map routes suite-check/fail → test-writer when failure is in test file
# map.routes.suite-check.fail routes to test-writer_repair, passes failing_test: name

Origin

  • Trigger: /os-sdlc:implement #535; suite-check red on round 3 of repair loop
  • Improvised this session: fixture edit by hand to match new contract
  • Chain: test-route-gap ← suite-check-map-design ← DESIGN (ADR-0160, map-contents-as-configuration)
  • Root candidate: this ticket
  • Where: plugins/os-sdlc/lib/os_sdlc/dispatch/maps.yaml
  • Session: 1a3b7fd0-0319-465b-8414-0ab70560de3d (origin), d233a2f7-977a-419d-99ea-011b6e1e66f8 (this session)
  • Transcript: https://claude.ai/code/session_01QqjuRkVBpZyEdtkWywpU2Q

Skeptic verdict: VERDICT: CREATE — Origin chain resolves to a root candidate (this ticket, ADR-0160 map-contents design) with observed pipeline failure (bound_exhausted on #535) and a hand improvisation only as the workaround, not the cause — genuine map-routing gap, not speculative.

## Context During #535 implementation (os-sdlc test-path resolution), the suite-check gate went red because a pre-existing test encoded the old contract the ticket was replacing. The os-sdlc map has no route for "the failing test itself must change", so the repair loop routed to programmer-repair, which cannot edit test files. ## Observed The test `OsSdlc::Runner::GateCommandsTest#test_lint_present_and_test_lint_nil_for_a_production_only_diff` failed because it asserted the old return-a-missing-path behavior. The map routed suite-check/fail → programmer-repair, which lacks test-editing authority. Three repair rounds burned the bound; the run ended `bound_exhausted:suite-check/fail`. The fix took one test-fixture edit by hand. ## Reproduce n/a: This is a map-routing design gap, not reproducible without a full pipeline run whose suite failure stems from a test file outside the ticket's authored scope. ## Expected When suite-check/fail occurs in a test file the ticket did not author, the pipeline should route the failure to a test-repair node (or test-writer), with the failing test named; or the escalate verdict should report "test-side conflict" so a human decides in one turn instead of three. ## Illustration ```ruby # Candidate 1: escalate verdict signals test-side conflict class SuiteCheckGate def verdict return "escalate:test-side-conflict" if failure_in_unowned_test? end end # Candidate 2: map routes suite-check/fail → test-writer when failure is in test file # map.routes.suite-check.fail routes to test-writer_repair, passes failing_test: name ``` ## Origin - Trigger: /os-sdlc:implement #535; suite-check red on round 3 of repair loop - Improvised this session: fixture edit by hand to match new contract - Chain: test-route-gap ← suite-check-map-design ← DESIGN (ADR-0160, map-contents-as-configuration) - Root candidate: this ticket - Where: plugins/os-sdlc/lib/os_sdlc/dispatch/maps.yaml - Session: 1a3b7fd0-0319-465b-8414-0ab70560de3d (origin), d233a2f7-977a-419d-99ea-011b6e1e66f8 (this session) - Transcript: https://claude.ai/code/session_01QqjuRkVBpZyEdtkWywpU2Q --- **Skeptic verdict:** VERDICT: CREATE — Origin chain resolves to a root candidate (this ticket, ADR-0160 map-contents design) with observed pipeline failure (bound_exhausted on #535) and a hand improvisation only as the workaround, not the cause — genuine map-routing gap, not speculative.
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#544
No description provided.