os-sdlc: seam-designer agent in front of test-writer #331

Closed
opened 2026-08-09 13:07:25 +00:00 by jared · 3 comments
Owner

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.

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.
Author
Owner

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-designer pipeline state between code-probe and test-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

  • ADR-0112 made transition maps YAML data with load-time termination proofs (success-edge DAG, finite retry caps, escalation routing). Adding a state is a data edit validated by the existing TransitionTable#validate! machinery.
  • ADR-0113 fixed the handoff design: the Runner assembles each next-state brief itself (push model) into a numbered, never-overwritten per-ticket briefs directory; all briefs share the code-probe brief skeleton; briefs are retained as the audit trail.
  • code-probe (skill-dispatched state) already produces Seam candidates: — ranked, evidence-backed, explicitly "worth examining, never extract-a-class". seam-designer consumes this; it never re-runs the ast-grep probing.
  • Depends on #328 (map design — closed) and #330 (real states on the skeleton — closed); both landed, so the substrate exists.

User Stories

  1. As the pipeline operator, I want seam placement decided before tests are written, so that test-writer executes a settled design instead of making architecture calls mid-flight.
  2. As the pipeline operator, I want the seam decision recorded in a retained brief, so that I can audit why a seam was chosen after the ticket ships.
  3. As the test-writer agent, I want a brief naming the chosen seam and the assertion surface, so that I can write failing tests without re-deriving where to inject or stub.
  4. As the reviewer agent, I want the seam decision on record, so that REQUEST-CHANGES about seam placement can cite the decision rather than guess intent.
  5. As the pipeline operator, I want seam-designer to reject all candidates when none fits and route to escalation, so that a bad probe result parks for a human instead of producing tests against a wrong seam.
  6. As the map author, I want seam-designer added purely as a map row plus agent definition, so that maps-as-data proves out and future team members follow the same recipe.
  7. As the pipeline operator, I want existing map validation to prove the new row terminates (DAG, retry cap, escalation target), so that the loop-safety guarantees survive the insertion.
  8. As the programmer agent, I want the seam decision readable downstream (multi-reader, same as code-probe's brief), so that implementation matches the seam the tests assume.
  9. As the pipeline operator, I want seam-designer to prefer existing seams over proposing new ones, and the highest workable seam when a new one is needed, so that seam count stays minimal.
  10. As the pipeline operator, I want a deterministic gate on seam-designer's output (decision file exists and names exactly one chosen seam), so that the Runner never routes forward on an empty or ambiguous decision.

Implementation Decisions

  • New state row seam-designer in the default map: on_success: test-writer, failure route back to itself with a small finite retry cap, exhausted: escalation. code-probe.on_success changes from test-writer to seam-designer.
  • Ships as a proper agent definition (like test-writer/reviewer), not a skill-dispatch like code-probe — it is a judgment role, not a methodology. Read-only tools plus Write for its decision output; opus-tier model in the agent definition (judgment-dense, per routing discipline).
  • Input: the code-probe evidence brief, delivered via the Runner's standard push-assembled brief. Output: a seam-decision document following the shared brief skeleton, with sections for chosen seam (with evidence line), rejected candidates + reasons, injection/stub guidance, and assertion surface. The Runner's brief assembly for the seam-designer→test-writer edge carries this decision forward unchanged (multi-reader path also available to programmer, per ADR-0113 precedent).
  • Gate: a shell check that the decision output exists and is non-empty (same shape as code-probe's gate). Richer structural validation of the decision is out of scope for this ticket.
  • No Runner/Engine Ruby changes. If any turn out to be required, that is a spec violation to surface, not silently implement.
  • Seam-selection policy encoded in the agent prompt: prefer existing seams; highest possible placement; fewer seams beats more; "no workable candidate" is a legal verdict that fails the gate intentionally and consumes a retry toward escalation.

Testing Decisions

  • Test external behavior only: map loads and validates with the new row (termination proofs pass); code-probe routes to seam-designer; seam-designer's success edge routes to test-writer; gate failure routes/exhausts per the row.
  • Prior art: existing minitest coverage of TransitionTable validation, GateEvaluator/TransitionApplier routing, and BriefAssembler naming — extend those suites over the new map data; no new test infrastructure.
  • The agent prompt's judgment quality is not unit-tested; it is exercised by pipeline runs and reviewed at the existing review state.

Acceptance Criteria

  1. Default map contains the seam-designer row between code-probe and test-writer; TransitionTable#validate! passes.
  2. An agent definition for seam-designer exists with the decided tools/model and a prompt encoding the seam-selection policy and output sections above.
  3. Runner routes code-probe → seam-designer → test-writer end to end on a ticket, producing the numbered briefs for both edges.
  4. Gate fails (and retries/escalates per the row) when the decision output is missing or empty.
  5. Existing suite green; new routing/validation assertions added alongside the prior art named above.
  6. ADR recorded for the new state (first maps-as-data extension) via the project's ADR workflow.

Out of Scope

  • Structural/schema validation of the seam-decision document beyond the non-empty gate.
  • Changes to code-probe's probing, ranking heuristics, or brief template.
  • Parallel fan-in, second-opinion states, or other future map patterns noted in #328.
  • Retrofitting seam decisions onto other maps or non-default pipelines.
  • Any Runner/Engine Ruby changes.

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 ## 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-designer` pipeline state between `code-probe` and `test-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 - ADR-0112 made transition maps YAML data with load-time termination proofs (success-edge DAG, finite retry caps, escalation routing). Adding a state is a data edit validated by the existing `TransitionTable#validate!` machinery. - ADR-0113 fixed the handoff design: the Runner assembles each next-state brief itself (push model) into a numbered, never-overwritten per-ticket briefs directory; all briefs share the code-probe brief skeleton; briefs are retained as the audit trail. - code-probe (skill-dispatched state) already produces `Seam candidates:` — ranked, evidence-backed, explicitly "worth examining, never extract-a-class". seam-designer consumes this; it never re-runs the ast-grep probing. - Depends on #328 (map design — closed) and #330 (real states on the skeleton — closed); both landed, so the substrate exists. ## User Stories 1. As the pipeline operator, I want seam placement decided before tests are written, so that test-writer executes a settled design instead of making architecture calls mid-flight. 2. As the pipeline operator, I want the seam decision recorded in a retained brief, so that I can audit why a seam was chosen after the ticket ships. 3. As the test-writer agent, I want a brief naming the chosen seam and the assertion surface, so that I can write failing tests without re-deriving where to inject or stub. 4. As the reviewer agent, I want the seam decision on record, so that REQUEST-CHANGES about seam placement can cite the decision rather than guess intent. 5. As the pipeline operator, I want seam-designer to reject all candidates when none fits and route to escalation, so that a bad probe result parks for a human instead of producing tests against a wrong seam. 6. As the map author, I want seam-designer added purely as a map row plus agent definition, so that maps-as-data proves out and future team members follow the same recipe. 7. As the pipeline operator, I want existing map validation to prove the new row terminates (DAG, retry cap, escalation target), so that the loop-safety guarantees survive the insertion. 8. As the programmer agent, I want the seam decision readable downstream (multi-reader, same as code-probe's brief), so that implementation matches the seam the tests assume. 9. As the pipeline operator, I want seam-designer to prefer existing seams over proposing new ones, and the highest workable seam when a new one is needed, so that seam count stays minimal. 10. As the pipeline operator, I want a deterministic gate on seam-designer's output (decision file exists and names exactly one chosen seam), so that the Runner never routes forward on an empty or ambiguous decision. ## Implementation Decisions - New state row `seam-designer` in the default map: `on_success: test-writer`, failure route back to itself with a small finite retry cap, `exhausted: escalation`. `code-probe.on_success` changes from `test-writer` to `seam-designer`. - Ships as a proper agent definition (like test-writer/reviewer), not a skill-dispatch like code-probe — it is a judgment role, not a methodology. Read-only tools plus Write for its decision output; opus-tier model in the agent definition (judgment-dense, per routing discipline). - Input: the code-probe evidence brief, delivered via the Runner's standard push-assembled brief. Output: a seam-decision document following the shared brief skeleton, with sections for chosen seam (with evidence line), rejected candidates + reasons, injection/stub guidance, and assertion surface. The Runner's brief assembly for the seam-designer→test-writer edge carries this decision forward unchanged (multi-reader path also available to programmer, per ADR-0113 precedent). - Gate: a shell check that the decision output exists and is non-empty (same shape as code-probe's gate). Richer structural validation of the decision is out of scope for this ticket. - No Runner/Engine Ruby changes. If any turn out to be required, that is a spec violation to surface, not silently implement. - Seam-selection policy encoded in the agent prompt: prefer existing seams; highest possible placement; fewer seams beats more; "no workable candidate" is a legal verdict that fails the gate intentionally and consumes a retry toward escalation. ## Testing Decisions - Test external behavior only: map loads and validates with the new row (termination proofs pass); code-probe routes to seam-designer; seam-designer's success edge routes to test-writer; gate failure routes/exhausts per the row. - Prior art: existing minitest coverage of TransitionTable validation, GateEvaluator/TransitionApplier routing, and BriefAssembler naming — extend those suites over the new map data; no new test infrastructure. - The agent prompt's judgment quality is not unit-tested; it is exercised by pipeline runs and reviewed at the existing review state. ## Acceptance Criteria 1. Default map contains the `seam-designer` row between code-probe and test-writer; `TransitionTable#validate!` passes. 2. An agent definition for seam-designer exists with the decided tools/model and a prompt encoding the seam-selection policy and output sections above. 3. Runner routes code-probe → seam-designer → test-writer end to end on a ticket, producing the numbered briefs for both edges. 4. Gate fails (and retries/escalates per the row) when the decision output is missing or empty. 5. Existing suite green; new routing/validation assertions added alongside the prior art named above. 6. ADR recorded for the new state (first maps-as-data extension) via the project's ADR workflow. ## Out of Scope - Structural/schema validation of the seam-decision document beyond the non-empty gate. - Changes to code-probe's probing, ranking heuristics, or brief template. - Parallel fan-in, second-opinion states, or other future map patterns noted in #328. - Retrofitting seam decisions onto other maps or non-default pipelines. - Any Runner/Engine Ruby changes. ## 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.
Author
Owner

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-designer state between code-probe and test-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

  • ADR-0112: maps are YAML data with load-time termination proofs; adding a state is a data edit validated by existing TransitionTable#validate!.
  • ADR-0113: push-model handoffs — the Runner assembles each next brief; briefs are numbered, never overwritten, retained as audit trail. The reviewer verdict file (first-line exact token) is the precedent for a machine-checkable per-ticket decision artifact.
  • code-probe already produces ranked Seam candidates: with evidence and a mechanical-vs-judgment classification. seam-designer consumes this; it never re-runs probing.
  • Current Runner brief assembly is generic ("work the stage" + gate/review feedback); it does not ingest agent output into next briefs. Carrying the seam decision forward therefore requires a small, tested Runner change (see Implementation Decisions) — the earlier "zero Ruby changes" claim was wrong.
  • Depends on #328 and #330, both closed.

User Stories

  1. As the pipeline operator, I want seam placement decided before tests are written, so that test-writer executes a settled design instead of making architecture calls mid-flight.
  2. As the pipeline operator, I want the seam decision recorded in a retained, machine-checkable artifact, so that I can audit why a seam was chosen after the ticket ships.
  3. As the test-writer agent, I want my brief to include the chosen seam and assertion surface, so that I can write failing tests without re-deriving where to inject or stub.
  4. As the reviewer agent, I want the seam-decision artifact available at review, so that a bad-but-well-formed seam decision is caught by judgment review — the named backstop, since no deterministic gate can validate seam correctness.
  5. As the pipeline operator, I want "no workable seam" to be an explicit first-line verdict that routes to escalation, so that a bad probe result parks for a human instead of producing tests against a wrong seam.
  6. As the pipeline operator, I want the gate to verify the artifact's first line names exactly one seam (or the no-workable verdict), so that empty, ambiguous, or multi-seam outputs never route forward.
  7. As the map author, I want the state added as a map row plus agent definition with only the one scoped Runner change, so that maps-as-data extension stays cheap.
  8. As the pipeline operator, I want existing map validation to prove the new row terminates, so that loop-safety guarantees survive the insertion.

Implementation Decisions

  • New map row seam-designer between code-probe (its on_success retargets) and test-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.
  • Ships as an agent definition (like test-writer/reviewer), not a skill-dispatch: judgment role. Read-only tools plus Write for the artifact; opus-tier model.
  • Decision artifact contract (verdict-file precedent): first line is exactly SEAM: <one-line seam identifier> or NO-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-SEAM fails the gate by design and routes toward escalation.
  • One scoped Runner change: brief assembly for the seam-designer→test-writer edge includes the decision artifact's content; the reviewer edge's brief names the artifact path so review can cite it. No other Runner/Engine changes; anything more is a spec violation to surface.
  • Seam-selection policy lives in the agent prompt: prefer existing seams, highest workable placement, fewer seams over more. These are judgment guidance, deliberately not falsifiable by the gate; the review state is the enforcement point.
  • ADR recorded for the new state and the artifact contract (extends ADR-0112/0113), per standing repo convention.

Testing Decisions

  • Test external behavior only: map validates with the new row; routing code-probe → seam-designer → test-writer on success; gate passes/fails on artifact first-line form (one seam, no seam, missing, empty, multi-seam); retry-then-escalation on repeated gate failure; test-writer's brief contains the decision content.
  • Prior art: existing minitest suites for TransitionTable validation, GateEvaluator/TransitionApplier routing, Verdict first-line parsing, and BriefAssembler — extend those; no new test infrastructure.
  • Agent judgment quality is not unit-tested; it is exercised in pipeline runs and caught at review.

Acceptance Criteria

  1. Default map contains the seam-designer row as specified; TransitionTable#validate! passes.
  2. Agent definition exists with the decided tools/model and a prompt encoding the selection policy and artifact contract.
  3. End-to-end on a ticket: code-probe routes to seam-designer, the artifact is produced, and test-writer's brief includes its content.
  4. Gate accepts a well-formed single-seam artifact; rejects missing/empty/multi-seam/NO-WORKABLE-SEAM artifacts; rejection retries once then escalates, all covered by tests.
  5. Reviewer edge brief names the decision artifact path.
  6. Existing suite green; new assertions live alongside the prior-art suites named above.

Out of Scope

  • Validating seam correctness deterministically — explicitly a known gap; the review state is the backstop, not a gate.
  • Changes to code-probe's probing, ranking heuristics, or brief template. (Simplifier's fold-into-code-probe alternative rejected: #331 explicitly mandates a separate state as the first maps-as-data extension.)
  • Runner changes beyond the one scoped brief-assembly change.
  • Parallel fan-in, second-opinion states, other future map patterns from #328; retrofitting other maps.

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.

# 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-designer` state between `code-probe` and `test-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 - ADR-0112: maps are YAML data with load-time termination proofs; adding a state is a data edit validated by existing `TransitionTable#validate!`. - ADR-0113: push-model handoffs — the Runner assembles each next brief; briefs are numbered, never overwritten, retained as audit trail. The reviewer verdict file (first-line exact token) is the precedent for a machine-checkable per-ticket decision artifact. - code-probe already produces ranked `Seam candidates:` with evidence and a mechanical-vs-judgment classification. seam-designer consumes this; it never re-runs probing. - Current Runner brief assembly is generic ("work the stage" + gate/review feedback); it does **not** ingest agent output into next briefs. Carrying the seam decision forward therefore requires a small, tested Runner change (see Implementation Decisions) — the earlier "zero Ruby changes" claim was wrong. - Depends on #328 and #330, both closed. ## User Stories 1. As the pipeline operator, I want seam placement decided before tests are written, so that test-writer executes a settled design instead of making architecture calls mid-flight. 2. As the pipeline operator, I want the seam decision recorded in a retained, machine-checkable artifact, so that I can audit why a seam was chosen after the ticket ships. 3. As the test-writer agent, I want my brief to include the chosen seam and assertion surface, so that I can write failing tests without re-deriving where to inject or stub. 4. As the reviewer agent, I want the seam-decision artifact available at review, so that a bad-but-well-formed seam decision is caught by judgment review — the named backstop, since no deterministic gate can validate seam correctness. 5. As the pipeline operator, I want "no workable seam" to be an explicit first-line verdict that routes to escalation, so that a bad probe result parks for a human instead of producing tests against a wrong seam. 6. As the pipeline operator, I want the gate to verify the artifact's first line names exactly one seam (or the no-workable verdict), so that empty, ambiguous, or multi-seam outputs never route forward. 7. As the map author, I want the state added as a map row plus agent definition with only the one scoped Runner change, so that maps-as-data extension stays cheap. 8. As the pipeline operator, I want existing map validation to prove the new row terminates, so that loop-safety guarantees survive the insertion. ## Implementation Decisions - New map row `seam-designer` between `code-probe` (its `on_success` retargets) and `test-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`. - Ships as an agent definition (like test-writer/reviewer), not a skill-dispatch: judgment role. Read-only tools plus Write for the artifact; opus-tier model. - **Decision artifact contract** (verdict-file precedent): first line is exactly `SEAM: <one-line seam identifier>` or `NO-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-SEAM` fails the gate by design and routes toward escalation. - **One scoped Runner change**: brief assembly for the seam-designer→test-writer edge includes the decision artifact's content; the reviewer edge's brief names the artifact path so review can cite it. No other Runner/Engine changes; anything more is a spec violation to surface. - Seam-selection policy lives in the agent prompt: prefer existing seams, highest workable placement, fewer seams over more. These are judgment guidance, deliberately not falsifiable by the gate; the review state is the enforcement point. - ADR recorded for the new state and the artifact contract (extends ADR-0112/0113), per standing repo convention. ## Testing Decisions - Test external behavior only: map validates with the new row; routing code-probe → seam-designer → test-writer on success; gate passes/fails on artifact first-line form (one seam, no seam, missing, empty, multi-seam); retry-then-escalation on repeated gate failure; test-writer's brief contains the decision content. - Prior art: existing minitest suites for TransitionTable validation, GateEvaluator/TransitionApplier routing, Verdict first-line parsing, and BriefAssembler — extend those; no new test infrastructure. - Agent judgment quality is not unit-tested; it is exercised in pipeline runs and caught at review. ## Acceptance Criteria 1. Default map contains the `seam-designer` row as specified; `TransitionTable#validate!` passes. 2. Agent definition exists with the decided tools/model and a prompt encoding the selection policy and artifact contract. 3. End-to-end on a ticket: code-probe routes to seam-designer, the artifact is produced, and test-writer's brief includes its content. 4. Gate accepts a well-formed single-seam artifact; rejects missing/empty/multi-seam/`NO-WORKABLE-SEAM` artifacts; rejection retries once then escalates, all covered by tests. 5. Reviewer edge brief names the decision artifact path. 6. Existing suite green; new assertions live alongside the prior-art suites named above. ## Out of Scope - Validating seam *correctness* deterministically — explicitly a known gap; the review state is the backstop, not a gate. - Changes to code-probe's probing, ranking heuristics, or brief template. (Simplifier's fold-into-code-probe alternative rejected: #331 explicitly mandates a separate state as the first maps-as-data extension.) - Runner changes beyond the one scoped brief-assembly change. - Parallel fan-in, second-opinion states, other future map patterns from #328; retrofitting other maps. ## 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.
Author
Owner

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

## 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
jared closed this issue 2026-08-14 21:08: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.

Dependencies

No dependencies set

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