Add the poodr-guard-implementation map for green guard tests #876
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
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
rule-proposal
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.
Blocks
Depends on
Reference
jared/cc-os#876
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?
Problem
A guard or characterization ticket adds a test for behavior that already exists and changes no production code. The ticket map
maps/poodr-ticket-implementation.yamlrequiresdiff-test expect: redon test-writer, so such a run always escalatesunexpected_passand is finished by hand (#859; cc-plugins #79, commit 84bac12; same shape #539, #593, #638). ADR-0258 decision 12 names the first non-default map:maps/poodr-guard-implementation.yaml. It does not exist.Reproduce
n/a: design change, nothing to reproduce.
Approach
Add
plugins/os-sdlc/maps/poodr-guard-implementation.yaml:change-auditor -> seam-designer -> test-writer (gates:
{ gate: diff-test, expect: green },test-lint) -> mutation-check (agentsuite-check, instructions "Runos-sdlc-gate DISPATCH_IDexactly once and stop", gates:[mutation]) -> test-reviewer -> suite-check (gates:[required-work, suite]) -> contract-auditor -> merge-ready. No programmer, refactorer, or behavior-verifier node.Headers and nodes required by ADR-0258/ADR-0259 (A3), in the form slice 1 defines:
fits:one sentence: the ticket adds or changes tests that guard behavior that already exists, with no production change.entries:[seam-designer, test-writer].ticket_shape: true(the guard ticket uses the ticket template).change-auditoredgereroute: map-routeris NOT added here; slice 3 adds it to every reroutable map.needs-orchestratorwaiting node withreroute: map-router, and themap-routernode (agent: map-router,enrich: [approved_maps],gates: [reroute]), copied from the ticket map's slice-1 shape.escalateto the waiting node.Edges with no programmer: test-writer
fail-> test-writer (bound 2); mutation-checkfail-> test-writer (bound 2, "the mutation survived: make the test guard the code"); test-reviewerfail-> test-writer (bound 2); suite-checkfail-> test-writer (bound 2); contract-auditorfail-> escalate (no production role exists in this map).Instructions: test-writer is told the behavior exists, the test must be green, and the handoff must carry
mutation: { path:, patch: }. test-reviewer is told the new test is green by design and the mutation-check result is its red proof.Edge-spend counters (ADR-0259 A6).
LoopLedger#spend!(command/loop_ledger.rb:10) keys spends by(from_node, verdict)per implementation, and the guard map reuses node names from the ticket map. Decision: this matters only when a ticket-map loop on the same(node, verdict)was spent before the reroute; the guard map then reaches its bound early and escalates to the waiting node. The failure direction is safe: no extra loop runs, and the run stops at the orchestrator. ADR-0258 decision 8 already counts dispatches across maps, so counting edge spends across maps is consistent. This ticket keeps the shared counters and adds no ledger code. If early exhaustion shows up in practice, capture a ticket to reset spends on reroute.Required work:
name: poodr-guard-implementationinplugins/os-sdlc/maps/poodr-guard-implementation.yamlexpect: greeninplugins/os-sdlc/maps/poodr-guard-implementation.yamlgates: [mutation]inplugins/os-sdlc/maps/poodr-guard-implementation.yamlagent: programmerinplugins/os-sdlc/maps/poodr-guard-implementation.yamlAcceptance criteria
poodr-guard-implementationis loaded throughMap::Catalog, then it loads and passesMap::Validator, including the entry-gates rule (every path fromseam-designerandtest-writertomerge-readypassesrequired-workandsuite).programmerorbehavior-verifier.pass(new test green), then the run advances to mutation-check.Owner sketch
Origin
Parent: #859
Blocked by: #868, #869, #870, #872, #873, #885, #875
Work started: os-sdlc pipeline on branch ticket-876 (worktree .claude/worktrees/ticket-876).
Resolution
Done: Added plugins/os-sdlc/maps/poodr-guard-implementation.yaml: change-auditor, seam-designer, test-writer (diff-test expect green, test-lint), mutation-check (gates: [mutation]), test-reviewer, suite-check (required-work, suite), contract-auditor, waiting and map-router nodes; no programmer or behavior-verifier.
Evidence: Pipeline implementation 9 completed with no rejections (8 dispatches, 5 min 18 s); commit
a10b547dmerged to main; tests/adapter/map/catalog_guard_map_test.rb loads and validates the map through Map::Catalog; bin/test 9 suites passed on main.Follow-ups: none