os-sdlc: seam-designer agent in front of test-writer #331
Labels
No labels
P0
P1
P2
P3
bug
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
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.
Dependencies
No dependencies set
Reference
jared/cc-os#331
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?
New team member: a seam-designer state that runs before test-writer, decides where the seam goes, and hands that decision (plus guiding details) to the test-writer via the ticket-1 handoff format. First concrete use of maps-as-data flexibility. Depends on #328 and #330.
Spec: seam-designer agent in front of test-writer
Problem Statement
When the os-sdlc pipeline implements a ticket, the test-writer must decide where the testing seam goes at the same moment it writes the failing tests. That conflates two different jobs: seam placement is a judgment-dense design decision, test writing is execution against a settled design. code-probe already ranks seam candidates in its evidence brief, but nothing in the pipeline turns "worth examining" candidates into a committed decision — so the test-writer either ignores them or re-litigates them implicitly, and bad seam choices surface late (at review or lint) where they are expensive to unwind.
Solution
Insert a new
seam-designerpipeline state betweencode-probeandtest-writer. It consumes code-probe's evidence brief (observable example, message path, ranked seam candidates, mechanical-vs-judgment classification), decides where the seam goes, and records that decision — the chosen seam, the rejected candidates with one-line reasons, and guiding details for the tests (what to inject/stub, what the observable assertion surface is). The Runner hands that decision to test-writer through the standard numbered-brief handoff, exactly as briefs flow between existing states. This is the first concrete use of maps-as-data flexibility: the pipeline change is a new YAML row plus an agent definition, no Runner code changes.Relevant Context
TransitionTable#validate!machinery.Seam candidates:— ranked, evidence-backed, explicitly "worth examining, never extract-a-class". seam-designer consumes this; it never re-runs the ast-grep probing.User Stories
Implementation Decisions
seam-designerin the default map:on_success: test-writer, failure route back to itself with a small finite retry cap,exhausted: escalation.code-probe.on_successchanges fromtest-writertoseam-designer.Testing Decisions
Acceptance Criteria
seam-designerrow between code-probe and test-writer;TransitionTable#validate!passes.Out of Scope
Further Notes
First concrete exercise of ADR-0112's maps-as-data flexibility — worth noting in the ADR whether the recipe (row + agent file, zero Ruby) held.
Spec: seam-designer agent in front of test-writer (v2, post-critique)
Problem Statement
When the os-sdlc pipeline implements a ticket, the test-writer must decide where the testing seam goes at the same moment it writes the failing tests. That conflates two different jobs: seam placement is a judgment-dense design decision, test writing is execution against a settled design. code-probe already ranks seam candidates in its evidence brief, but nothing in the pipeline turns "worth examining" candidates into a committed decision — so the test-writer either ignores them or re-litigates them implicitly, and bad seam choices surface late where they are expensive to unwind.
Solution
Insert a new
seam-designerstate betweencode-probeandtest-writer(as #331 mandates: a new team member, the first concrete use of maps-as-data). It consumes code-probe's evidence brief and writes a seam-decision artifact — a per-ticket file alongside the existing verdict-file precedent, machine-checkable by its first line — recording the chosen seam, rejected candidates with reasons, injection/stub guidance, and the assertion surface. The Runner's brief for the seam-designer→test-writer edge carries the decision content forward; the artifact is retained at a stable per-ticket path for downstream and audit reads.Relevant Context
TransitionTable#validate!.Seam candidates:with evidence and a mechanical-vs-judgment classification. seam-designer consumes this; it never re-runs probing.User Stories
Implementation Decisions
seam-designerbetweencode-probe(itson_successretargets) andtest-writer. Failure route: back to itself with retries: 1 (covers malformed-output flukes only; judgment failures are not retryable — same input yields same output),exhausted: escalation.SEAM: <one-line seam identifier>orNO-WORKABLE-SEAM. Body sections: chosen seam with evidence line, rejected candidates + one-line reasons, injection/stub guidance, assertion surface. Gate: a deterministic first-line check on the artifact (tested Ruby or shell, same family as verdict parsing) — it validates form, not correctness.NO-WORKABLE-SEAMfails the gate by design and routes toward escalation.Testing Decisions
Acceptance Criteria
seam-designerrow as specified;TransitionTable#validate!passes.NO-WORKABLE-SEAMartifacts; rejection retries once then escalates, all covered by tests.Out of Scope
Further Notes
First concrete exercise of ADR-0112's maps-as-data flexibility; the ADR should record whether the recipe (row + agent file + one scoped assembly change) held. Critique provenance: Codex review surfaced the gate-target and brief-assembly mechanics corrections; devils-advocate drove the first-line contract and retry semantics; simplifier trimmed process-weight stories.
Resolution
Done: Seam-designer stage shipped in front of test-writer via child tickets #351–#354, all closed 2026-08-14. All six acceptance criteria of the governing spec (comment 3281) are covered: seam-decision artifact contract + gate (#351), map row + agent definition (#352), brief assembly carrying the seam decision (#353), end-to-end run + ADR (#354).
Evidence: Commits
32ac8a0(#351),4317a4d(#352, plugins/os-sdlc/agents/seam-designer.md exists),86f5ecd(#353),65772db+d5d1627(#354, merged to main, 876 test runs green). ADR-0116 (docs/adr/0116-maps-as-data-stage-addition-recipe-verified-end-to-end-354.md) records the maps-as-data stage-addition recipe. Dependencies #328/#330 closed.Follow-ups: none