implement skill names no map for a behavior-preserving refactor; ticket-implementation map escalates on unexpected_pass #663

Open
opened 2026-09-24 01:54:56 +00:00 by jared · 4 comments
Owner

Problem

On 2026-09-23 ticket #659, a pure refactor of byte-identical code, was opened on maps/poodr-ticket-implementation.yaml. change-auditor and seam-designer passed. test-writer added two ancestry tests. test-reviewer rejected them as hierarchy-coupled extras and wrote "no legitimately red test exists". The second test-writer removed them and the diff-test gate escalated with reason unexpected_pass:test-writer/diff-test after 5 dispatches and 414 s. maps/poodr-implementation.yaml has the same test-writer -> test-reviewer red round. The orchestrator recovered by hand: it closed the implementation and reopened on maps/coding.yaml (programmer -> reviewer), which completed in 2 dispatches. #660 and #661 were run on coding.yaml from the start and each completed. The implement skill names poodr-implementation.yaml for "docs, config, an ADR-only change, or a spike" and never names coding.yaml or the refactor case.

Reproduce

Open any ticket whose acceptance criteria name no new observable behavior on poodr-ticket-implementation.yaml. Observe the escalation after the second test-writer round.

Approach

Required work:

  1. Add a selection rule to plugins/os-sdlc/skills/implement/SKILL.md: when no acceptance criterion names new observable behavior, open on maps/coding.yaml and report the substitution as a deviation.
  2. Decide whether poodr-ticket-implementation.yaml should instead carry an edge from a test-reviewer "no red test exists" verdict to programmer; record the choice in the ticket before implementing.

Acceptance criteria

  1. Given a behavior-preserving refactor ticket, when an orchestrator follows the implement skill, then it opens on coding.yaml without an escalation.
  2. Given the skill text, when read, then it names coding.yaml and the rule for choosing it.

Origin

Session: 24f1de09-c081-4958-902b-0512a5d86e04
Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/24f1de09-c081-4958-902b-0512a5d86e04.jsonl
Where: plugins/os-sdlc/skills/implement/SKILL.md, plugins/os-sdlc/maps/poodr-ticket-implementation.yaml
Parent: #659 (escalation payload, implementation 1)
VERDICT: CREATE — complete in-policy run hit a real gap in map selection guidance/escalation edge, with recorded provenance; root cause is missing map documentation/edge, not agent improvisation.

## Problem On 2026-09-23 ticket #659, a pure refactor of byte-identical code, was opened on maps/poodr-ticket-implementation.yaml. change-auditor and seam-designer passed. test-writer added two ancestry tests. test-reviewer rejected them as hierarchy-coupled extras and wrote "no legitimately red test exists". The second test-writer removed them and the diff-test gate escalated with reason `unexpected_pass:test-writer/diff-test` after 5 dispatches and 414 s. maps/poodr-implementation.yaml has the same test-writer -> test-reviewer red round. The orchestrator recovered by hand: it closed the implementation and reopened on maps/coding.yaml (programmer -> reviewer), which completed in 2 dispatches. #660 and #661 were run on coding.yaml from the start and each completed. The implement skill names poodr-implementation.yaml for "docs, config, an ADR-only change, or a spike" and never names coding.yaml or the refactor case. ## Reproduce Open any ticket whose acceptance criteria name no new observable behavior on poodr-ticket-implementation.yaml. Observe the escalation after the second test-writer round. ## Approach Required work: 1. Add a selection rule to plugins/os-sdlc/skills/implement/SKILL.md: when no acceptance criterion names new observable behavior, open on maps/coding.yaml and report the substitution as a deviation. 2. Decide whether poodr-ticket-implementation.yaml should instead carry an edge from a test-reviewer "no red test exists" verdict to programmer; record the choice in the ticket before implementing. ## Acceptance criteria 1. Given a behavior-preserving refactor ticket, when an orchestrator follows the implement skill, then it opens on coding.yaml without an escalation. 2. Given the skill text, when read, then it names coding.yaml and the rule for choosing it. ## Origin Session: 24f1de09-c081-4958-902b-0512a5d86e04 Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/24f1de09-c081-4958-902b-0512a5d86e04.jsonl Where: plugins/os-sdlc/skills/implement/SKILL.md, plugins/os-sdlc/maps/poodr-ticket-implementation.yaml Parent: #659 (escalation payload, implementation 1) VERDICT: CREATE — complete in-policy run hit a real gap in map selection guidance/escalation edge, with recorded provenance; root cause is missing map documentation/edge, not agent improvisation.
Author
Owner

#663 must wire change-auditor into coding.yaml's reviewer node when it makes that map selectable. #652 closed as folded into this: coding.yaml is unreachable from the implement skill today (plugins/os-sdlc/skills/implement/SKILL.md line 52 hardcodes poodr-ticket-implementation.yaml; coding.yaml appears in no skill or lib map-selection path), so adding a change-auditor node to coding.yaml alone changes nothing until #663 makes coding.yaml selectable.

#663 must wire change-auditor into coding.yaml's reviewer node when it makes that map selectable. #652 closed as folded into this: coding.yaml is unreachable from the implement skill today (plugins/os-sdlc/skills/implement/SKILL.md line 52 hardcodes poodr-ticket-implementation.yaml; coding.yaml appears in no skill or lib map-selection path), so adding a change-auditor node to coding.yaml alone changes nothing until #663 makes coding.yaml selectable.
Author
Owner

Resolution

Done: Occurrence: #952 "No approved map fits a behavior-preserving refactor" (same mechanism as #859: the red-first map cannot handle already-green work).

Evidence: #952 adds #948 impl 30: four test-writer/test-reviewer rounds on correct green preservation pins ended bound_exhausted:test-reviewer/fail; poodr-guard-implementation has no programmer node. Its AC: map-router selects a map whose test nodes accept green pins.

Follow-ups: none

## Resolution **Done:** Occurrence: #952 "No approved map fits a behavior-preserving refactor" (same mechanism as #859: the red-first map cannot handle already-green work). **Evidence:** #952 adds #948 impl 30: four test-writer/test-reviewer rounds on correct green preservation pins ended bound_exhausted:test-reviewer/fail; poodr-guard-implementation has no programmer node. Its AC: map-router selects a map whose test nodes accept green pins. **Follow-ups:** none
Author
Owner

2026-10-18: bb617f0b adds the routing rule to plugins/os-sdlc/skills/implement/SKILL.md line 59. Rename, move, and split refactors get category/structure. Other refactors and docs, config, ADR-only, and spike tickets open on poodr-ticket-implementation and reroute when they escalate. Still open: maps/coding.yaml does not exist. A decision is still needed on an edge in poodr-ticket-implementation from a 'no red test exists' verdict to programmer.

2026-10-18: bb617f0b adds the routing rule to plugins/os-sdlc/skills/implement/SKILL.md line 59. Rename, move, and split refactors get category/structure. Other refactors and docs, config, ADR-only, and spike tickets open on poodr-ticket-implementation and reroute when they escalate. Still open: maps/coding.yaml does not exist. A decision is still needed on an edge in poodr-ticket-implementation from a 'no red test exists' verdict to programmer.
Author
Owner

Occurrence: Exit the red round early when an acceptance criterion adds no behavior
Seen: plugins/os-sdlc/agents/test-writer.md, plugins/os-sdlc/lib/os_sdlc/dispatch/brief/facts.rb:84
Run: session b0da7c4b-f4b3-4f3b-96cd-0b77e82451d4, implementation 115 (ticket #1239), dispatches 939-956
Adds: a new trigger. An acceptance criterion that describes unchanged behavior (a regression guard: 'a failing test still fails the gate') is green before any change. Four test-writer/test-reviewer rounds on the same objection 101 ended bound_exhausted:test-reviewer/fail after about 8 agent minutes. Writer replied each round: 'AC 3 cannot be red without an invented requirement.'

Occurrence: Exit the red round early when an acceptance criterion adds no behavior Seen: plugins/os-sdlc/agents/test-writer.md, plugins/os-sdlc/lib/os_sdlc/dispatch/brief/facts.rb:84 Run: session b0da7c4b-f4b3-4f3b-96cd-0b77e82451d4, implementation 115 (ticket #1239), dispatches 939-956 Adds: a new trigger. An acceptance criterion that describes unchanged behavior (a regression guard: 'a failing test still fails the gate') is green before any change. Four test-writer/test-reviewer rounds on the same objection 101 ended bound_exhausted:test-reviewer/fail after about 8 agent minutes. Writer replied each round: 'AC 3 cannot be red without an invented requirement.'
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#663
No description provided.