takedown-run green-suite rejects a single-target .sdlc/project.yaml that setup-project generates #1236

Open
opened 2026-10-22 19:12:12 +00:00 by jared · 1 comment
Owner

Problem

os-sdlc project-config <name> (the setup-project skill, step 1) writes a flat single-target .sdlc/project.yaml (keys: name, tracker, path, test_path, test_command, lint_config, test_framework). The skill text says: "A file with no targets: key is the single-target case and needs no flag."

But eval/ticket-takedown/lib/takedown/adapter/project_suites.rb#targets reads only fetch("targets") and raises .sdlc/project.yaml lists no targets when the map is absent or empty. takedown-run --live therefore fails at the green-suite step, after the full design cost has been spent.

Observed on finance #26, 2026-10-22: run 26-20261022-1457xx failed with .sdlc/project.yaml lists no targets after $1.05 and 533 s. Workaround applied in finance: project.yaml rewritten in targets shape with one target named finance (commit on finance main, "sdlc: targets-shaped project.yaml").

Second defect: the default .gitignore rule .sdlc/ hides project.yaml from the exported base commit, giving no .sdlc/project.yaml in <cache>/repo. Two earlier runs failed this way ($3.32 total). Finance now ignores .sdlc/* and un-ignores !.sdlc/project.yaml.

Suggested fix

Either:

  • ProjectSuites falls back to a synthetic single target built from the top-level keys when targets is absent; or
  • project-config writes the targets shape, and the setup-project "needs no flag" sentence is corrected.

In both cases, the gitignore guidance should un-ignore .sdlc/project.yaml.

Origin

Session: 35714d85-85f4-4430-a825-ad86fa5f0ba7
Transcript: /home/jared/.claude/projects/-home-jared-projects-finance/35714d85-85f4-4430-a825-ad86fa5f0ba7.jsonl
Where: eval/ticket-takedown/lib/takedown/adapter/project_suites.rb, bin/os-sdlc project-config, skills/setup-project/SKILL.md

VERDICT: CREATE (cross-project Discoverer filing; the runner path eval/ticket-takedown is not in the cc-os checkout, so the claim rests on the finance session observation, not on a source read)


Discoverer: /home/jared/projects/finance, session 35714d85-85f4-4430-a825-ad86fa5f0ba7, 2026-10-22. takedown-run cannot run green-suite on a project.yaml that setup-project itself generates.

## Problem `os-sdlc project-config <name>` (the setup-project skill, step 1) writes a flat single-target `.sdlc/project.yaml` (keys: name, tracker, path, test_path, test_command, lint_config, test_framework). The skill text says: "A file with no targets: key is the single-target case and needs no flag." But `eval/ticket-takedown/lib/takedown/adapter/project_suites.rb#targets` reads only `fetch("targets")` and raises `.sdlc/project.yaml lists no targets` when the map is absent or empty. `takedown-run --live` therefore fails at the green-suite step, after the full design cost has been spent. Observed on finance #26, 2026-10-22: run 26-20261022-1457xx failed with `.sdlc/project.yaml lists no targets` after $1.05 and 533 s. Workaround applied in finance: project.yaml rewritten in targets shape with one target named `finance` (commit on finance main, "sdlc: targets-shaped project.yaml"). Second defect: the default `.gitignore` rule `.sdlc/` hides project.yaml from the exported base commit, giving `no .sdlc/project.yaml in <cache>/repo`. Two earlier runs failed this way ($3.32 total). Finance now ignores `.sdlc/*` and un-ignores `!.sdlc/project.yaml`. ## Suggested fix Either: - ProjectSuites falls back to a synthetic single target built from the top-level keys when `targets` is absent; or - `project-config` writes the targets shape, and the setup-project "needs no flag" sentence is corrected. In both cases, the gitignore guidance should un-ignore `.sdlc/project.yaml`. ## Origin Session: 35714d85-85f4-4430-a825-ad86fa5f0ba7 Transcript: /home/jared/.claude/projects/-home-jared-projects-finance/35714d85-85f4-4430-a825-ad86fa5f0ba7.jsonl Where: eval/ticket-takedown/lib/takedown/adapter/project_suites.rb, bin/os-sdlc project-config, skills/setup-project/SKILL.md VERDICT: CREATE (cross-project Discoverer filing; the runner path eval/ticket-takedown is not in the cc-os checkout, so the claim rests on the finance session observation, not on a source read) -------- **Discoverer:** /home/jared/projects/finance, session 35714d85-85f4-4430-a825-ad86fa5f0ba7, 2026-10-22. takedown-run cannot run green-suite on a project.yaml that setup-project itself generates.
Author
Owner

Additional occurrence from decision-model, 2026-11-12

Discoverer: decision-model, session 6098efae-bfd3-433e-9752-524dfeb59c5c, 2026-11-12. Same mechanism as this ticket, seen on a second project.

takedown-run --live 25 in /home/jared/dev/ruby-gems/decision-model on 2026-11-12 passed steps 01 to 09, then failed: FAILED green-suite: .sdlc/project.yaml lists no targets. No final-design.json was written, so the implementation phase could not start. Run directory: /home/jared/dev/ruby-gems/decision-model/docs/takedown/25-20261112-102423.

Cause: plugins/os-sdlc/eval/ticket-takedown/lib/takedown/adapter/project_suites.rb:25-26 reads only the targets: map: sections = YAML.safe_load_file(file).to_h.fetch("targets", nil).to_h then raise Failure, "#{PATH} lists no targets" if sections.empty?.

The setup-project skill (plugins/os-sdlc/skills/setup-project/SKILL.md) says: "A file with no targets: key is the single-target case and needs no flag". os-sdlc project-config <name> writes this flat shape. The decision-model file has top-level name, tracker, path: ".", test_path: test, test_command: bundle exec rake test, lint_config, test_framework.

Effect: each single-target project fails at the last takedown step after the design cost is spent ($0.36 and 186 seconds in this run).

Workaround used: decision-model's .sdlc/project.yaml was changed to a targets: map with one target.

Acceptance criteria for the fix:

  1. A takedown run in a repo whose .sdlc/project.yaml has no targets: key and a top-level test_command runs the green-suite step with that command.
  2. A .sdlc/project.yaml that the takedown cannot use fails before the first paid step.
## Additional occurrence from decision-model, 2026-11-12 Discoverer: decision-model, session 6098efae-bfd3-433e-9752-524dfeb59c5c, 2026-11-12. Same mechanism as this ticket, seen on a second project. `takedown-run --live 25` in /home/jared/dev/ruby-gems/decision-model on 2026-11-12 passed steps 01 to 09, then failed: `FAILED green-suite: .sdlc/project.yaml lists no targets`. No `final-design.json` was written, so the implementation phase could not start. Run directory: /home/jared/dev/ruby-gems/decision-model/docs/takedown/25-20261112-102423. Cause: `plugins/os-sdlc/eval/ticket-takedown/lib/takedown/adapter/project_suites.rb:25-26` reads only the `targets:` map: `sections = YAML.safe_load_file(file).to_h.fetch("targets", nil).to_h` then `raise Failure, "#{PATH} lists no targets" if sections.empty?`. The setup-project skill (`plugins/os-sdlc/skills/setup-project/SKILL.md`) says: "A file with no `targets:` key is the single-target case and needs no flag". `os-sdlc project-config <name>` writes this flat shape. The decision-model file has top-level `name`, `tracker`, `path: "."`, `test_path: test`, `test_command: bundle exec rake test`, `lint_config`, `test_framework`. Effect: each single-target project fails at the last takedown step after the design cost is spent ($0.36 and 186 seconds in this run). Workaround used: decision-model's `.sdlc/project.yaml` was changed to a `targets:` map with one target. Acceptance criteria for the fix: 1. A takedown run in a repo whose `.sdlc/project.yaml` has no `targets:` key and a top-level `test_command` runs the green-suite step with that command. 2. A `.sdlc/project.yaml` that the takedown cannot use fails before the first paid step.
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#1236
No description provided.