Route changed existing tests away from the programmer at place-code #1003

Closed
opened 2026-10-12 14:53:29 +00:00 by jared · 7 comments
Owner

Problem

The takedown design cards and the takedown-implement map contradict each other.
plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:47 and reviser.md:36 tell the designer to list an existing test that changes only so it still passes in code_files, not failing_tests.
The map node place-code in plugins/os-sdlc/maps/takedown-implement.yaml dispatches the programmer with "Make each code_files path equal to its design content ... Never edit tests."
The programmer may never edit tests, so every design that changes an existing test escalates at place-code.

Observed

Implementation 41 (#997), escalation 18: the programmer placed the 3 production files and refused tests/command/fingerprint_test.rb and tests/evidence_bin_test.rb.
The orchestrator hand-fixed the files and rerouted.
Related miss, implementation 39 (#999), escalation 17: the designer did not list the existing pinned test pipeline_test.rb at all, so suite-check failed and the programmer escalated.

Reproduce

n/a: verified by reading the cards and the map on 2026-10-12; the two runs above show the failure.

Approach

Ruled 2026-10-14 (Option A, confirmed by Jared); recorded in ADR-0290, which amends ADR-0283 decision 2.
A script places the design. No model writes design content at place-tests or place-code.
os-sdlc-place-design MODE DISPATCH_ID is a Boot.run one-liner like os-sdlc-gate. It loads the dispatch, takes the ticket of its implementation, fetches the ticket body, and reads the ## Design path the same way DesignBase does. It runs in the worktree (process cwd).

  • tests: writes each failing_tests entry byte for byte. If a path already exists, it exits non-zero, names the path, and writes no file (same rule as the current place-tests brief).
  • code: writes every code_files entry byte for byte as a whole file, also over an existing file (test and production files), and deletes each deleted_files path. If a deleted_files path does not exist, it exits non-zero, names the path, and changes no file.
    It does not repeat the stale-base check (ADR-0284). It fails loudly on a missing ## Design section or a missing design file.
    The agent design-placer (model haiku, tools Bash only) runs os-sdlc-place-design, then os-sdlc-gate DISPATCH_ID. It cannot edit files, so it cannot refuse or change content. On a non-zero os-sdlc-place-design exit it gives the verdict escalate.
    The designer cards stay as they are: a changed existing test still goes in code_files. Pinned tests that the design does not list are #1004, not this ticket.

Required work:

  1. Add the bin plugins/os-sdlc/bin/os-sdlc-place-design as a Boot.run one-liner — check: present Boot.run("place-design" in plugins/os-sdlc/bin/os-sdlc-place-design
  2. Register the place-design command in the Boot command table (key without the prefix, as "gate" for os-sdlc-gate) — check: present "place-design" in plugins/os-sdlc/lib/os_sdlc/controller/boot/commands.rb
  3. Add the agent plugins/os-sdlc/agents/design-placer.md with model: haiku and tools: Bash — check: present tools: Bash in plugins/os-sdlc/agents/design-placer.md
  4. In plugins/os-sdlc/maps/takedown-implement.yaml, set agent: design-placer on place-tests and place-code, with instructions to run os-sdlc-place-design tests|code DISPATCH_ID and then os-sdlc-gate DISPATCH_ID; keep the gates and edges — check: present agent: design-placer in plugins/os-sdlc/maps/takedown-implement.yaml
  5. Rewrite plugins/os-sdlc/maps/briefs/place-tests.md for the script: run os-sdlc-place-design tests DISPATCH_ID, escalate on a non-zero exit, then run the gate; write and edit no file — check: present os-sdlc-place-design tests in plugins/os-sdlc/maps/briefs/place-tests.md
  6. Rewrite plugins/os-sdlc/maps/briefs/place-code.md the same way for os-sdlc-place-design code — check: present os-sdlc-place-design code in plugins/os-sdlc/maps/briefs/place-code.md
  7. In plugins/os-sdlc/skills/ticket-takedown/SKILL.md section 4, state that the takedown-implement map places the design by script (os-sdlc-place-design, ADR-0290) and that no model writes design content — check: present os-sdlc-place-design in plugins/os-sdlc/skills/ticket-takedown/SKILL.md
  8. In plugins/os-sdlc/skills/implement/SKILL.md, add design-placer to the list of gated producer agents — check: present design-placer in plugins/os-sdlc/skills/implement/SKILL.md

Orchestrator work: run bin/refresh-plugins after the merge; the live check of the new agent type is in Phase 2 of docs/takedown/integration-plan.md (needs a session restart).

Rejected: Runner command: node with no agent — NodeGuardChecks, TransitWalk and Gate::Run need an agent and a dispatch row (ADR-0290, parked).

Acceptance criteria

  1. Given an implementation at place-tests whose ticket body names a design with two failing_tests entries, when os-sdlc-place-design tests DISPATCH_ID runs in the worktree, then each entry path holds its content byte for byte and no other file changes.
  2. Given a failing_tests entry whose path already exists, when os-sdlc-place-design tests DISPATCH_ID runs, then it exits non-zero, names that path, and writes no file.
  3. Given a design whose code_files contain a changed existing test file and a production file, and whose deleted_files name an existing file, when os-sdlc-place-design code DISPATCH_ID runs, then each code_files path equals its content byte for byte and the deleted path no longer exists.
  4. Given a deleted_files path that does not exist, when os-sdlc-place-design code DISPATCH_ID runs, then it exits non-zero, names that path, and changes no file.
  5. Given a ticket body with no ## Design section, when os-sdlc-place-design runs, then it exits non-zero with a message that names the missing section and changes no file.
  6. Given the takedown-implement map, when it loads and validates, then place-tests and place-code name the agent design-placer and keep their gates (diff-test expect red plus test-lint; diff-test plus lint).

Owner sketch

# bin/os-sdlc-place-design
exit OsSdlc::Boot.run("place-design", OsSdlc::ProcessIO.from_process, ARGV)

class OsSdlc::Command::DesignPlacement   # name and placement for the seam-designer to settle
  def initialize(io); end
  def place(root, mode, dispatch_id) # mode: "tests" | "code"
end

The design path comes from the ## Design section, the same rule as DesignBase. Share that rule; do not copy the regex.

Origin

  • Trigger: takedown implementation 41 (#997), escalation 18
  • Improvised this session: orchestrator hand-fixed the test files and rerouted
  • Chain: escalation at place-code <- programmer may not edit tests <- designer cards route changed existing tests into code_files (DESIGN: blind-designer.md:47, reviser.md:36, takedown-implement.yaml place-code)
  • Root candidate: none
  • Where: plugins/os-sdlc/maps/takedown-implement.yaml (place-code); plugins/os-sdlc/eval/ticket-takedown/harness/cards/
  • Session: df535dc7-379a-4f68-9c40-2f8430b79acb
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-prism-architect/df535dc7-379a-4f68-9c40-2f8430b79acb.jsonl

VERDICT: CREATE
REASON: This is a real defect in the design. The designer cards send changed existing tests into code_files, and place-code forbids the programmer from editing tests. It caused escalation 18 in #997. The Origin chain ends in DESIGN, not IMPROVISATION, so this ticket is the root. The hand-fix only worked around the defect.

## Problem The takedown design cards and the takedown-implement map contradict each other. `plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:47` and `reviser.md:36` tell the designer to list an existing test that changes only so it still passes in `code_files`, not `failing_tests`. The map node `place-code` in `plugins/os-sdlc/maps/takedown-implement.yaml` dispatches the `programmer` with "Make each code_files path equal to its design content ... Never edit tests." The programmer may never edit tests, so every design that changes an existing test escalates at `place-code`. ## Observed Implementation 41 (#997), escalation 18: the programmer placed the 3 production files and refused `tests/command/fingerprint_test.rb` and `tests/evidence_bin_test.rb`. The orchestrator hand-fixed the files and rerouted. Related miss, implementation 39 (#999), escalation 17: the designer did not list the existing pinned test `pipeline_test.rb` at all, so suite-check failed and the programmer escalated. ## Reproduce n/a: verified by reading the cards and the map on 2026-10-12; the two runs above show the failure. ## Approach Ruled 2026-10-14 (Option A, confirmed by Jared); recorded in ADR-0290, which amends ADR-0283 decision 2. A script places the design. No model writes design content at `place-tests` or `place-code`. `os-sdlc-place-design MODE DISPATCH_ID` is a `Boot.run` one-liner like `os-sdlc-gate`. It loads the dispatch, takes the ticket of its implementation, fetches the ticket body, and reads the `## Design` path the same way `DesignBase` does. It runs in the worktree (process cwd). - `tests`: writes each `failing_tests` entry byte for byte. If a path already exists, it exits non-zero, names the path, and writes no file (same rule as the current place-tests brief). - `code`: writes every `code_files` entry byte for byte as a whole file, also over an existing file (test and production files), and deletes each `deleted_files` path. If a `deleted_files` path does not exist, it exits non-zero, names the path, and changes no file. It does not repeat the stale-base check (ADR-0284). It fails loudly on a missing `## Design` section or a missing design file. The agent `design-placer` (model haiku, tools Bash only) runs `os-sdlc-place-design`, then `os-sdlc-gate DISPATCH_ID`. It cannot edit files, so it cannot refuse or change content. On a non-zero `os-sdlc-place-design` exit it gives the verdict `escalate`. The designer cards stay as they are: a changed existing test still goes in `code_files`. Pinned tests that the design does not list are #1004, not this ticket. Required work: 1. Add the bin `plugins/os-sdlc/bin/os-sdlc-place-design` as a `Boot.run` one-liner — check: present `Boot.run("place-design"` in `plugins/os-sdlc/bin/os-sdlc-place-design` 2. Register the `place-design` command in the Boot command table (key without the prefix, as `"gate"` for `os-sdlc-gate`) — check: present `"place-design"` in `plugins/os-sdlc/lib/os_sdlc/controller/boot/commands.rb` 3. Add the agent `plugins/os-sdlc/agents/design-placer.md` with `model: haiku` and `tools: Bash` — check: present `tools: Bash` in `plugins/os-sdlc/agents/design-placer.md` 4. In `plugins/os-sdlc/maps/takedown-implement.yaml`, set `agent: design-placer` on `place-tests` and `place-code`, with instructions to run `os-sdlc-place-design tests|code DISPATCH_ID` and then `os-sdlc-gate DISPATCH_ID`; keep the gates and edges — check: present `agent: design-placer` in `plugins/os-sdlc/maps/takedown-implement.yaml` 5. Rewrite `plugins/os-sdlc/maps/briefs/place-tests.md` for the script: run `os-sdlc-place-design tests DISPATCH_ID`, escalate on a non-zero exit, then run the gate; write and edit no file — check: present `os-sdlc-place-design tests` in `plugins/os-sdlc/maps/briefs/place-tests.md` 6. Rewrite `plugins/os-sdlc/maps/briefs/place-code.md` the same way for `os-sdlc-place-design code` — check: present `os-sdlc-place-design code` in `plugins/os-sdlc/maps/briefs/place-code.md` 7. In `plugins/os-sdlc/skills/ticket-takedown/SKILL.md` section 4, state that the `takedown-implement` map places the design by script (`os-sdlc-place-design`, ADR-0290) and that no model writes design content — check: present `os-sdlc-place-design` in `plugins/os-sdlc/skills/ticket-takedown/SKILL.md` 8. In `plugins/os-sdlc/skills/implement/SKILL.md`, add `design-placer` to the list of gated producer agents — check: present `design-placer` in `plugins/os-sdlc/skills/implement/SKILL.md` Orchestrator work: run `bin/refresh-plugins` after the merge; the live check of the new agent type is in Phase 2 of `docs/takedown/integration-plan.md` (needs a session restart). Rejected: Runner `command:` node with no agent — NodeGuardChecks, TransitWalk and Gate::Run need an agent and a dispatch row (ADR-0290, parked). ## Acceptance criteria 1. Given an implementation at `place-tests` whose ticket body names a design with two `failing_tests` entries, when `os-sdlc-place-design tests DISPATCH_ID` runs in the worktree, then each entry path holds its `content` byte for byte and no other file changes. 2. Given a `failing_tests` entry whose path already exists, when `os-sdlc-place-design tests DISPATCH_ID` runs, then it exits non-zero, names that path, and writes no file. 3. Given a design whose `code_files` contain a changed existing test file and a production file, and whose `deleted_files` name an existing file, when `os-sdlc-place-design code DISPATCH_ID` runs, then each `code_files` path equals its `content` byte for byte and the deleted path no longer exists. 4. Given a `deleted_files` path that does not exist, when `os-sdlc-place-design code DISPATCH_ID` runs, then it exits non-zero, names that path, and changes no file. 5. Given a ticket body with no `## Design` section, when `os-sdlc-place-design` runs, then it exits non-zero with a message that names the missing section and changes no file. 6. Given the `takedown-implement` map, when it loads and validates, then `place-tests` and `place-code` name the agent `design-placer` and keep their gates (`diff-test` expect red plus `test-lint`; `diff-test` plus `lint`). ## Owner sketch ```ruby # bin/os-sdlc-place-design exit OsSdlc::Boot.run("place-design", OsSdlc::ProcessIO.from_process, ARGV) class OsSdlc::Command::DesignPlacement # name and placement for the seam-designer to settle def initialize(io); end def place(root, mode, dispatch_id) # mode: "tests" | "code" end ``` The design path comes from the `## Design` section, the same rule as `DesignBase`. Share that rule; do not copy the regex. ## Origin - Trigger: takedown implementation 41 (#997), escalation 18 - Improvised this session: orchestrator hand-fixed the test files and rerouted - Chain: escalation at place-code <- programmer may not edit tests <- designer cards route changed existing tests into code_files (DESIGN: blind-designer.md:47, reviser.md:36, takedown-implement.yaml place-code) - Root candidate: none - Where: plugins/os-sdlc/maps/takedown-implement.yaml (place-code); plugins/os-sdlc/eval/ticket-takedown/harness/cards/ - Session: df535dc7-379a-4f68-9c40-2f8430b79acb - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os--claude-worktrees-prism-architect/df535dc7-379a-4f68-9c40-2f8430b79acb.jsonl VERDICT: CREATE REASON: This is a real defect in the design. The designer cards send changed existing tests into code_files, and place-code forbids the programmer from editing tests. It caused escalation 18 in #997. The Origin chain ends in DESIGN, not IMPROVISATION, so this ticket is the root. The hand-fix only worked around the defect.
Author
Owner

Takedown relevance: needs a ruling

Harm: A takedown design that changes an existing test only so it still passes puts that test in code_files, and the place-code programmer refuses it under "Never edit tests", so the implementation escalates and the orchestrator has to hand-fix the files.
Protects: The takedown-implement map's contract that a design's complete code is placed mechanically, with tests placed by the test-writer and production code by the programmer, so that implementations run without manual intervention (ADR-0283 decision 2).
Harm path: /os-sdlc:ticket-takedown runs /os-sdlc:implement <ticket> takedown-implement, which loads plugins/os-sdlc/maps/takedown-implement.yaml; its place-code node (programmer, brief place-code.md) receives every code_files entry, and the designer cards (blind-designer.md:45-47, reviser.md:34-36) still tell the designer to put changed existing tests into code_files. (live: true)

Evidence:

  • plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:47: Designer card still says to put an existing test changed only to still pass into code_files, not failing_tests.
  • plugins/os-sdlc/eval/ticket-takedown/harness/cards/reviser.md:36: Reviser card repeats the same routing of changed-but-passing existing tests into code_files.
  • plugins/os-sdlc/maps/takedown-implement.yaml:27-32: place-code is agent programmer and instructs 'Make each code_files path equal to its design content ... Never edit tests.'
  • plugins/os-sdlc/maps/briefs/place-code.md:7-9: place-code brief writes every code_files entry and then says 'Never edit tests.' with no test-path exclusion.
  • plugins/os-sdlc/agents/programmer.md:63: Programmer agent definition states 'Never edit tests.'
  • plugins/os-sdlc/skills/ticket-takedown/SKILL.md:62: The ticket-takedown skill runs /os-sdlc:implement with takedown-implement, so the map is reachable from the live skill.
  • plugins/os-sdlc/skills/implement/SKILL.md:55: The implement skill accepts takedown-implement as a MAP value, so the map loads from the command.
  • .takedown/history.txt (6bbfc63e..b4c38e7c, 2026-10-12 entries): No commit after the 2026-10-09 map and card commits (f2196435, e94a252a) touches takedown-implement.yaml, place-code.md, or the designer cards; the defect is not fixed.

Conflicting ADRs:

  • ADR-0283: ADR-0283 decision 2 fixes place-tests as transcribing failing_tests only and place-code as the programmer writing code_files; the ticket's direction (test-writer writes test entries from code_files, programmer gets only production entries) changes that node contract.

The ticket is waiting for Jared's ruling on the ADRs above.

Takedown relevance: needs a ruling Harm: A takedown design that changes an existing test only so it still passes puts that test in `code_files`, and the `place-code` programmer refuses it under "Never edit tests", so the implementation escalates and the orchestrator has to hand-fix the files. Protects: The takedown-implement map's contract that a design's complete code is placed mechanically, with tests placed by the test-writer and production code by the programmer, so that implementations run without manual intervention (ADR-0283 decision 2). Harm path: `/os-sdlc:ticket-takedown` runs `/os-sdlc:implement <ticket> takedown-implement`, which loads `plugins/os-sdlc/maps/takedown-implement.yaml`; its `place-code` node (programmer, brief `place-code.md`) receives every `code_files` entry, and the designer cards (`blind-designer.md:45-47`, `reviser.md:34-36`) still tell the designer to put changed existing tests into `code_files`. (live: true) Evidence: - plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:47: Designer card still says to put an existing test changed only to still pass into code_files, not failing_tests. - plugins/os-sdlc/eval/ticket-takedown/harness/cards/reviser.md:36: Reviser card repeats the same routing of changed-but-passing existing tests into code_files. - plugins/os-sdlc/maps/takedown-implement.yaml:27-32: place-code is agent programmer and instructs 'Make each code_files path equal to its design content ... Never edit tests.' - plugins/os-sdlc/maps/briefs/place-code.md:7-9: place-code brief writes every code_files entry and then says 'Never edit tests.' with no test-path exclusion. - plugins/os-sdlc/agents/programmer.md:63: Programmer agent definition states 'Never edit tests.' - plugins/os-sdlc/skills/ticket-takedown/SKILL.md:62: The ticket-takedown skill runs /os-sdlc:implement with takedown-implement, so the map is reachable from the live skill. - plugins/os-sdlc/skills/implement/SKILL.md:55: The implement skill accepts takedown-implement as a MAP value, so the map loads from the command. - .takedown/history.txt (6bbfc63e..b4c38e7c, 2026-10-12 entries): No commit after the 2026-10-09 map and card commits (f2196435, e94a252a) touches takedown-implement.yaml, place-code.md, or the designer cards; the defect is not fixed. Conflicting ADRs: - ADR-0283: ADR-0283 decision 2 fixes place-tests as transcribing failing_tests only and place-code as the programmer writing code_files; the ticket's direction (test-writer writes test entries from code_files, programmer gets only production entries) changes that node contract. The ticket is waiting for Jared's ruling on the ADRs above.
Author
Owner

Takedown relevance: needs a ruling

Harm: The designer cards tell the designer to put an existing test that changes only to still pass into code_files, and the place-code node then dispatches the programmer, which may never edit tests, so the design escalates at place-code and a person must hand-fix it.
Protects: The takedown-implement map's rule that the programmer writes production code only, with tests placed by the test-writer, so the red-then-green proof stays intact and implementations run without manual repair.
Harm path: The takedown pipeline runs the blind-designer and reviser cards, which emit code_files that may include existing test files, and then the takedown-implement map's place-code node dispatches the programmer against those entries. (live: true)

Evidence:

  • plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:45: The card still says code_files includes every existing test file changed only so that it still passes.
  • plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:47: The card still says such a test goes in code_files, not failing_tests.
  • plugins/os-sdlc/eval/ticket-takedown/harness/cards/reviser.md:34: The reviser card has the same rule, so the revision loop also routes changed existing tests into code_files.
  • plugins/os-sdlc/maps/takedown-implement.yaml:27-33: The place-code node dispatches the programmer with 'Make each code_files path equal to its design content ... Never edit tests.'
  • plugins/os-sdlc/maps/briefs/place-code.md:9: The place-code brief says 'Never edit tests' and gives the programmer each code_files entry to write, so a test path in code_files conflicts with the brief.
  • plugins/os-sdlc/eval/ticket-takedown/README.md:46: The README lists the blind-designer card as the design-1 step of the pipeline, so the designer cards are still used.
  • d18a84d5: The newest commit in history.txt is docs-only and touches none of the cards or the map, so no later commit removed or fixed this path.

Conflicting ADRs:

  • ADR-0283: ADR-0283 decision 2 fixes the split: place-tests transcribes failing_tests and place-code's programmer writes code_files; the ticket's direction of having place-tests write code_files entries under test directories reverses that split.

The ticket is waiting for Jared's ruling on the ADRs above.

Takedown relevance: needs a ruling Harm: The designer cards tell the designer to put an existing test that changes only to still pass into `code_files`, and the `place-code` node then dispatches the programmer, which may never edit tests, so the design escalates at place-code and a person must hand-fix it. Protects: The takedown-implement map's rule that the programmer writes production code only, with tests placed by the test-writer, so the red-then-green proof stays intact and implementations run without manual repair. Harm path: The takedown pipeline runs the `blind-designer` and `reviser` cards, which emit `code_files` that may include existing test files, and then the `takedown-implement` map's `place-code` node dispatches the `programmer` against those entries. (live: true) Evidence: - plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:45: The card still says code_files includes every existing test file changed only so that it still passes. - plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:47: The card still says such a test goes in code_files, not failing_tests. - plugins/os-sdlc/eval/ticket-takedown/harness/cards/reviser.md:34: The reviser card has the same rule, so the revision loop also routes changed existing tests into code_files. - plugins/os-sdlc/maps/takedown-implement.yaml:27-33: The place-code node dispatches the programmer with 'Make each code_files path equal to its design content ... Never edit tests.' - plugins/os-sdlc/maps/briefs/place-code.md:9: The place-code brief says 'Never edit tests' and gives the programmer each code_files entry to write, so a test path in code_files conflicts with the brief. - plugins/os-sdlc/eval/ticket-takedown/README.md:46: The README lists the blind-designer card as the design-1 step of the pipeline, so the designer cards are still used. - d18a84d5: The newest commit in history.txt is docs-only and touches none of the cards or the map, so no later commit removed or fixed this path. Conflicting ADRs: - ADR-0283: ADR-0283 decision 2 fixes the split: place-tests transcribes failing_tests and place-code's programmer writes code_files; the ticket's direction of having place-tests write code_files entries under test directories reverses that split. The ticket is waiting for Jared's ruling on the ADRs above.
Author
Owner

Takedown run 1003-20261014-120014 stopped at relevance: needs ruling 0283. The run started before ADR-0290 (commit 1e8624fd) was in HEAD, and the Approach section still described the old direction. Jared ruled Option A on 2026-10-14; ADR-0290 records it and amends ADR-0283 decision 2. I rewrote the Approach section to match and removed the waiting label. A new takedown run follows.

Takedown run 1003-20261014-120014 stopped at relevance: needs ruling 0283. The run started before ADR-0290 (commit 1e8624fd) was in HEAD, and the Approach section still described the old direction. Jared ruled Option A on 2026-10-14; ADR-0290 records it and amends ADR-0283 decision 2. I rewrote the Approach section to match and removed the waiting label. A new takedown run follows.
Author
Owner

Takedown relevance: needs a ruling

Harm: A takedown design that changes an existing test is routed into code_files, so the programmer at place-code must either edit that test (forbidden) or refuse, and the run escalates, as in implementation 41 (#997), escalation 18.
Protects: The takedown pipeline's guarantee that an accepted design lands in the working tree as written, without a stalled run or an orchestrator hand-fix, while the programmer's rule against editing tests holds.
Harm path: The place-code node in plugins/os-sdlc/maps/takedown-implement.yaml dispatches the programmer agent with "Make each code_files path equal to its design content ... Never edit tests", and the designer cards still send changed existing tests into code_files. (live: true)

Evidence:

  • plugins/os-sdlc/maps/takedown-implement.yaml:27-33: place-code still uses agent programmer with the instruction 'Never edit tests'; no design-placer node exists in the map.
  • plugins/os-sdlc/agents/programmer.md:63: programmer agent still states 'Never edit tests.'
  • plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:45: designer card still directs changed existing test files into code_files, so place-code receives test edits.
  • plugins/os-sdlc/eval/ticket-takedown/harness/cards/reviser.md:34: reviser card carries the same instruction to put changed existing tests in code_files.
  • docs/adr/0290-at-place-tests-and-place-code-a-script-places-the-takedown-design-no-model-writes-design-content-amends-adr-0283.md:19: Accepted ADR-0290 specifies the design-placer fix, but the code does not yet implement it.
  • 1e8624fd: Latest commit (2026-10-14) is an ADR-0290 docs commit; history shows no later commit that adds place-design or design-placer or changes place-code.

Conflicting ADRs:

  • ADR-0283: The ticket replaces the decision-2 agents at place-tests and place-code (test-writer and programmer) with a script-backed design-placer, which reverses 0283 decision 2. Accepted ADR-0290 already amends that decision and is Accepted, so the conflict is recorded there and the ticket follows it.

The ticket is waiting for Jared's ruling on the ADRs above.

Takedown relevance: needs a ruling Harm: A takedown design that changes an existing test is routed into code_files, so the programmer at place-code must either edit that test (forbidden) or refuse, and the run escalates, as in implementation 41 (#997), escalation 18. Protects: The takedown pipeline's guarantee that an accepted design lands in the working tree as written, without a stalled run or an orchestrator hand-fix, while the programmer's rule against editing tests holds. Harm path: The place-code node in plugins/os-sdlc/maps/takedown-implement.yaml dispatches the programmer agent with "Make each code_files path equal to its design content ... Never edit tests", and the designer cards still send changed existing tests into code_files. (live: true) Evidence: - plugins/os-sdlc/maps/takedown-implement.yaml:27-33: place-code still uses agent programmer with the instruction 'Never edit tests'; no design-placer node exists in the map. - plugins/os-sdlc/agents/programmer.md:63: programmer agent still states 'Never edit tests.' - plugins/os-sdlc/eval/ticket-takedown/harness/cards/blind-designer.md:45: designer card still directs changed existing test files into code_files, so place-code receives test edits. - plugins/os-sdlc/eval/ticket-takedown/harness/cards/reviser.md:34: reviser card carries the same instruction to put changed existing tests in code_files. - docs/adr/0290-at-place-tests-and-place-code-a-script-places-the-takedown-design-no-model-writes-design-content-amends-adr-0283.md:19: Accepted ADR-0290 specifies the design-placer fix, but the code does not yet implement it. - 1e8624fd: Latest commit (2026-10-14) is an ADR-0290 docs commit; history shows no later commit that adds place-design or design-placer or changes place-code. Conflicting ADRs: - ADR-0283: The ticket replaces the decision-2 agents at place-tests and place-code (test-writer and programmer) with a script-backed design-placer, which reverses 0283 decision 2. Accepted ADR-0290 already amends that decision and is Accepted, so the conflict is recorded there and the ticket follows it. The ticket is waiting for Jared's ruling on the ADRs above.
Author
Owner

Skeptic DROP (depth-1) for a follow-up: the takedown relevance step returns needs_ruling even when its own reason says Accepted ADR-0290 resolves the ADR-0283 conflict. Evidence: docs/takedown/1003-20261014-120213/02-relevance.reply.json. Because of this, #1003 is implemented with poodr-ticket-implementation, not with a takedown design.

Skeptic DROP (depth-1) for a follow-up: the takedown relevance step returns needs_ruling even when its own reason says Accepted ADR-0290 resolves the ADR-0283 conflict. Evidence: docs/takedown/1003-20261014-120213/02-relevance.reply.json. Because of this, #1003 is implemented with poodr-ticket-implementation, not with a takedown design.
Author
Owner

Work started: /os-sdlc:implement 1003 on map poodr-ticket-implementation, branch prism-architect (persistent worktree). Fallback per docs/takedown/integration-plan.md: takedown stopped at relevance twice.

Work started: /os-sdlc:implement 1003 on map poodr-ticket-implementation, branch prism-architect (persistent worktree). Fallback per docs/takedown/integration-plan.md: takedown stopped at relevance twice.
Author
Owner

Resolution

Done: Script placement built per ADR-0290: bin os-sdlc-place-design (tests|code DISPATCH_ID) writes failing_tests / code_files byte for byte and deletes deleted_files; agent design-placer (haiku, Bash only); takedown-implement.yaml place-tests and place-code use it with unchanged gates; briefs, ticket-takedown SKILL.md section 4 and implement SKILL.md updated.

Evidence: Commit ba1d7923 on branch prism-architect (implementation 42, poodr-ticket-implementation, 15 dispatches, 14 min). 8 new tests in tests/controller/place_design_{tests,code}_mode_test.rb and tests/adapter/map/catalog_takedown_placement_test.rb; required-work gate exit 0; full suite gate exit 0. Two orchestrator reroutes: escalation 20 (fixture Array#^ hand-fixed to Set#^), escalation 21 (wrong behavior-verifier verdict on AC5). Live check of the new agent type is Phase 2 of docs/takedown/integration-plan.md (needs a session restart).

Follow-ups: Relevance step returns needs_ruling when an Accepted amending ADR resolves the conflict: skeptic DROP (depth-1), recorded on this ticket and in the plan for Jared. Live check of design-placer: Phase 2 of the plan, not a new ticket. Lens A15 report: under opus challenge; outcome recorded in the plan.

## Resolution **Done:** Script placement built per ADR-0290: bin os-sdlc-place-design (tests|code DISPATCH_ID) writes failing_tests / code_files byte for byte and deletes deleted_files; agent design-placer (haiku, Bash only); takedown-implement.yaml place-tests and place-code use it with unchanged gates; briefs, ticket-takedown SKILL.md section 4 and implement SKILL.md updated. **Evidence:** Commit ba1d7923 on branch prism-architect (implementation 42, poodr-ticket-implementation, 15 dispatches, 14 min). 8 new tests in tests/controller/place_design_{tests,code}_mode_test.rb and tests/adapter/map/catalog_takedown_placement_test.rb; required-work gate exit 0; full suite gate exit 0. Two orchestrator reroutes: escalation 20 (fixture Array#^ hand-fixed to Set#^), escalation 21 (wrong behavior-verifier verdict on AC5). Live check of the new agent type is Phase 2 of docs/takedown/integration-plan.md (needs a session restart). **Follow-ups:** Relevance step returns needs_ruling when an Accepted amending ADR resolves the conflict: skeptic DROP (depth-1), recorded on this ticket and in the plan for Jared. Live check of design-placer: Phase 2 of the plan, not a new ticket. Lens A15 report: under opus challenge; outcome recorded in the plan.
jared closed this issue 2026-10-14 16:22:56 +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#1003
No description provided.