Accept a reroute verdict from change-auditor and route it to map-router #878

Closed
opened 2026-10-01 15:26:44 +00:00 by jared · 2 comments
Owner

Problem

ADR-0258 decision 2 lets change-auditor request a reroute with the verdict reroute when a ticket does not fit the map it was opened on. #886 adds Verdict::REROUTE and the HandoffContent contract (verdict reroute requires situation and misfit). #885 adds the in-map map-router node (ADR-0259 A3). The change-auditor node in maps/poodr-ticket-implementation.yaml still has no reroute edge, so Router#route (pipeline/implementation/router.rb:15) raises UnroutableVerdict when change-auditor returns reroute.

Reproduce

n/a: design change, nothing to reproduce.

Approach

Add reroute: map-router to the change-auditor node edges in maps/poodr-ticket-implementation.yaml and maps/poodr-guard-implementation.yaml.

No new Ruby code is expected. CompletionIntake#agent_verdict_outcome (command/completion_intake.rb:94) parses the verdict through the #886 contract. Routing takes the reroute edge. Landing#advance_and_stamp! already stamps the change-auditor handoff with target_agent_type: "map-router" from the destination node's agent. Brief#handoff_json (presenter/brief.rb:31) sends the full handoff content to map-router because map-router does not enrich change-auditor. The reroute gate on the map-router node (#873) records the change-auditor dispatch as the requesting dispatch. If a test shows one of these steps refuses the verdict, fix that step in this ticket.

Required work:

  1. Route change-auditor reroutes to map-router in the ticket map — check: present reroute: map-router in plugins/os-sdlc/maps/poodr-ticket-implementation.yaml
  2. Route change-auditor reroutes to map-router in the guard map — check: present reroute: map-router in plugins/os-sdlc/maps/poodr-guard-implementation.yaml

Acceptance criteria

  1. Given a run at change-auditor on the ticket map, when change-auditor submits a handoff with verdict: reroute, a situation, and a misfit, then the run's position is map-router and the change-auditor handoff targets map-router.
  2. Given that rerouted run, when the map-router brief is composed, then its handoff content holds the situation, the misfit, and the work already done.
  3. Given the map-router reroute gate passes for that run, when the reroutes row is read, then its dispatch_id is the change-auditor dispatch.

Owner sketch

change-auditor:
  edges:
    reroute: map-router

Origin

  • Trigger: user ruling on the map reroute design, 2026-10-01 (ADR-0258 decision 2; ADR-0259 A3)
  • Improvised this session: none
  • Chain: a misfit ticket escalates late and is hand-finished ← change-auditor sees the misfit first but can only pass or fail ← DESIGN (docs/adr/0258)
  • Root candidate: #859
  • Where: plugins/os-sdlc/lib/os_sdlc/parser/handoff_content.rb
  • Improvised this session: none
  • Root candidate: #859
  • Session: 55a56279-83ee-47d5-a21e-ee67f9e28abd
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/55a56279-83ee-47d5-a21e-ee67f9e28abd.jsonl

Parent: #859
Blocked by: #886, #885, #873, #876

## Problem ADR-0258 decision 2 lets change-auditor request a reroute with the verdict `reroute` when a ticket does not fit the map it was opened on. #886 adds `Verdict::REROUTE` and the `HandoffContent` contract (verdict `reroute` requires `situation` and `misfit`). #885 adds the in-map `map-router` node (ADR-0259 A3). The change-auditor node in `maps/poodr-ticket-implementation.yaml` still has no `reroute` edge, so `Router#route` (pipeline/implementation/router.rb:15) raises `UnroutableVerdict` when change-auditor returns `reroute`. ## Reproduce n/a: design change, nothing to reproduce. ## Approach Add `reroute: map-router` to the change-auditor node edges in `maps/poodr-ticket-implementation.yaml` and `maps/poodr-guard-implementation.yaml`. No new Ruby code is expected. `CompletionIntake#agent_verdict_outcome` (command/completion_intake.rb:94) parses the verdict through the #886 contract. Routing takes the `reroute` edge. `Landing#advance_and_stamp!` already stamps the change-auditor handoff with `target_agent_type: "map-router"` from the destination node's agent. `Brief#handoff_json` (presenter/brief.rb:31) sends the full handoff content to map-router because map-router does not enrich `change-auditor`. The reroute gate on the map-router node (#873) records the change-auditor dispatch as the requesting dispatch. If a test shows one of these steps refuses the verdict, fix that step in this ticket. Required work: 1. Route change-auditor reroutes to map-router in the ticket map — check: present `reroute: map-router` in `plugins/os-sdlc/maps/poodr-ticket-implementation.yaml` 2. Route change-auditor reroutes to map-router in the guard map — check: present `reroute: map-router` in `plugins/os-sdlc/maps/poodr-guard-implementation.yaml` ## Acceptance criteria 1. Given a run at change-auditor on the ticket map, when change-auditor submits a handoff with `verdict: reroute`, a situation, and a misfit, then the run's position is `map-router` and the change-auditor handoff targets `map-router`. 2. Given that rerouted run, when the map-router brief is composed, then its handoff content holds the situation, the misfit, and the work already done. 3. Given the map-router reroute gate passes for that run, when the reroutes row is read, then its `dispatch_id` is the change-auditor dispatch. ## Owner sketch ```yaml change-auditor: edges: reroute: map-router ``` ## Origin - Trigger: user ruling on the map reroute design, 2026-10-01 (ADR-0258 decision 2; ADR-0259 A3) - Improvised this session: none - Chain: a misfit ticket escalates late and is hand-finished ← change-auditor sees the misfit first but can only pass or fail ← DESIGN (docs/adr/0258) - Root candidate: #859 - Where: plugins/os-sdlc/lib/os_sdlc/parser/handoff_content.rb - Improvised this session: none - Root candidate: #859 - Session: 55a56279-83ee-47d5-a21e-ee67f9e28abd - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/55a56279-83ee-47d5-a21e-ee67f9e28abd.jsonl Parent: #859 Blocked by: #886, #885, #873, #876
Author
Owner

Work started: os-sdlc pipeline on branch ticket-878 (worktree .claude/worktrees/ticket-878).

Work started: os-sdlc pipeline on branch ticket-878 (worktree .claude/worktrees/ticket-878).
Author
Owner

Resolution

Done: Added reroute: map-router to the change-auditor edges in poodr-ticket-implementation.yaml and poodr-guard-implementation.yaml; a change-auditor reroute verdict now moves the run to map-router, the map-router brief carries the situation, misfit and work done, and the reroutes row names the change-auditor dispatch.

Evidence: Implementation 12 completed (a99c06fb, 8 dispatches, 5 min 4 s) after implementation 11 hit a test-helper defect; test hand-fixed in 5125c6b5 (deviation). tests/controller/implementation/change_auditor_reroute_test.rb covers AC1-AC3. bin/test 9 suites passed on main; History row 3e5d131d.

Follow-ups: #894 (reopened run cannot see a committed hand-fixed test at diff-test; ticket-skeptic VERDICT: CREATE); #890 evidence comment added

## Resolution **Done:** Added reroute: map-router to the change-auditor edges in poodr-ticket-implementation.yaml and poodr-guard-implementation.yaml; a change-auditor reroute verdict now moves the run to map-router, the map-router brief carries the situation, misfit and work done, and the reroutes row names the change-auditor dispatch. **Evidence:** Implementation 12 completed (a99c06fb, 8 dispatches, 5 min 4 s) after implementation 11 hit a test-helper defect; test hand-fixed in 5125c6b5 (deviation). tests/controller/implementation/change_auditor_reroute_test.rb covers AC1-AC3. bin/test 9 suites passed on main; History row 3e5d131d. **Follow-ups:** #894 (reopened run cannot see a committed hand-fixed test at diff-test; ticket-skeptic VERDICT: CREATE); #890 evidence comment added
jared closed this issue 2026-10-01 21:15:37 +00:00
jared referenced this issue from a commit 2026-10-02 17:43:17 +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.

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