tdmcp Roadmap-to-1.0 Campaign
Drives _workspace/campaign_roadmap_v1/ROADMAP_1.0_BACKLOG.md to completion,
gated by _workspace/campaign_roadmap_v1/ledger.json (idempotent, resumable,
merge-safe). This is orchestration only — it never writes product code
itself; it routes each ledger item to the existing specialist sub-harness and
records the outcome back into the ledger.
Why this exists (vs tdmcp-backlog-campaign)
tdmcp-backlog-campaign drives a tool-shaped backlog through one pipeline
(design→build→integrate→QA→release). The road to 1.0 is not uniform: it mixes
new tools (M4), a policy-bounded mixer slice (M5), a coverage CI gate (G2), a
bridge exec→REST sweep (G4), docs/governance (G1/G5/G6 prep), and live-validated
recipes (G3). Each needs a different specialist. This skill is the thin router
that sequences them and keeps one ledger of truth.
Confirmed campaign policy (2026-06-21)
- Release: commit + push, NO tag/bump. Everything lands in CHANGELOG
[Unreleased]. Cutting the version is a manual user step — never tag
autonomously ([[no-premature-release-tag]]).
- Blocked items (GPU/CUDA, live-TD, external service): build offline +
quarantine. Implement, pass the offline gates, set
live to the right
UNVERIFIED-pending-* marker, keep going. Quarantine never blocks the campaign.
- Checkpoint: after Wave 1 only, then autonomous to the end. On repeat
failure: retry once → quarantine-and-continue (note it in the wave report).
Routing table (ledger route → sub-harness)
route |
Sub-harness |
Agents |
docs |
tdmcp-docs-roadmap-update |
roadmap-docs-editor, docs-cookbook-sync, docs-roadmap-qa |
tools |
tdmcp-feature-lead |
tdmcp-tool-builder ×N + single-writer integration |
mixer |
tdmcp-pipeline |
mixer-scene-contract-architect, soundcraft-ui24r-adapter-architect, mixer-policy-safety-qa |
coverage |
tdmcp-test-coverage |
tdmcp-coverage-writer, tdmcp-coverage-qa |
bridge |
tdmcp-bridge-endpoint |
tdmcp-bridge-engineer (sequential — bridge slices share files) |
recipes |
tdmcp-pipeline |
td-architect, td-builder, td-qa (needs live TD) |
submission |
tdmcp-submission |
submission-architect, submission-qa |
| planning |
— |
tdmcp-backlog-planner (wave computation + ledger transitions) |
Workflow
Phase 0 — Context check (resume vs fresh)
- Read
ledger.json. If absent, the harness isn't initialized — (re)generate it
from ROADMAP_1.0_BACKLOG.md and docs/ROADMAP.md, then stop and report.
- Reconcile against the tree first — a prior session or a merged PR may have
already shipped a ledger item. For each
pending item, cheaply verify it's
genuinely undone (grep for the tool/file/gate) before assigning it. Flip
already-done items to shipped with an event: reconciled history row.
- Determine the next ready wave: lowest wave number with
pending,
non-blocked items whose depends_on are all shipped. Honor the
checkpoint_after_wave gate.
Phase 1 — Plan the wave (tdmcp-backlog-planner)
Spawn tdmcp-backlog-planner (opus) with the ledger + backlog. It returns: the
exact item set for this wave, their routes, dependency-safe ordering, and the
proposed ledger status transitions. Write its report to
_workspace/campaign_roadmap_v1/wave_<n>_planner_report.md.
Phase 2 — Execute the wave (route to sub-harnesses)
For each item, invoke its route sub-harness with a precise spec. Within a wave:
- Parallelize independent items across routes (docs ∥ coverage ∥ tools).
- Serialize same-file routes — all
bridge items run sequentially (they
share td-client/td/ files); within tools, builders are parallel but the
integrator is the single writer of shared registries.
- Blocked/needs-hardware items: build to the offline boundary, then mark
live quarantined per policy — do not wait on hardware.
Every sub-harness already runs its own gates; this skill does not re-implement
them. Record per-item QA (typecheck/build/biome/vitest/recipes/bridge) into the
ledger qa block, exactly like the project_rag campaign.
Phase 3 — Gate, commit, record
- Run the four PR gates + recipe + bridge tests at the wave boundary
(
npm run typecheck && npm run build && npm run lint && npm test,
npm run validate:recipes, npm run test:bridge).
- Commit + push the wave on its own branch (
feature/roadmap-<wave-theme>).
No tag, no version bump — CHANGELOG [Unreleased] only.
- Update the ledger: flip items
pending → shipped (or quarantined), stamp
qa, commit, and a history row. Write wave_<n>_report.md.
Phase 4 — Loop or checkpoint
- If the just-finished wave is the
checkpoint_after_wave → stop and report;
wait for the user before the next wave.
- Otherwise advance to the next ready wave (Phase 0 → 3) until no
pending
non-blocked item remains.
Phase 5 — Hand-back
When only quarantine items remain, report campaign complete (offline scope)
and enumerate what the user must do to actually tag 1.0: provide GPU/TOX
components or a reachable TD for the UNVERIFIED-pending-* live validations,
run the bench/hardware M5 spikes, submit to the Connectors Directory, and — only
on the user's word — cut the tagged 1.0 minor (closing G1).
Error handling
- A sub-harness that fails a gate: retry once with the failure fed back. On
second failure, mark the item
quarantined with the reason, leave the rest of
the wave intact, and note it in the wave report — never delete partial work.
- Conflicting tree state vs ledger: trust the tree, reconcile the ledger, note
the drift. Never silently overwrite shipped work.
- The ledger is the single source of truth and must stay valid JSON after every
transition; write it atomically (full rewrite), never partial.
Test scenarios
- Happy path: fresh ledger → Phase 0 picks Wave 1 → planner assigns 4 docs
items → docs sub-harness ships all four → gates green → commit no-tag →
checkpoint stop with a Wave-1 report.
- Resume after merge: a follow-up run finds
g2_coverage_ci_gate already
landed on main → reconcile to shipped (event: reconciled) → skip it → plan
the remainder of Wave 2.
- Blocked item: Wave 4
m4_drive_streamdiffusion builds offline, gates green,
but no GPU → ship with live: UNVERIFIED-pending-gpu, campaign continues.
- Repeat failure: a tool fails its gate twice → quarantined with reason, wave
proceeds with the rest, report flags the gap.
1---2name: tdmcp-roadmap-campaign3description: Drive the ENTIRE tdmcp roadmap-to-1.0 to completion as a resumable, wave-by-wave campaign — Milestone 4 (generative-AI bridge wave), Milestone 5 (mixer scene arming), and the v1.0 consolidation gates G1–G6 — routing each class of work to the right existing sub-harness. Use whenever the user wants to "implement everything / all the milestones / the whole roadmap / finish the road to 1.0", run the next milestone, close the consolidation gates, or build a long autonomous campaign across M4/M5/G1–G6. ALSO use for every follow-up: continue/resume the roadmap campaign, run the next wave, re-run a failed wave, fold in QA results, check campaign status, re-prioritize, or scope to one milestone/gate. This is the CAMPAIGN layer ABOVE tdmcp-pipeline / tdmcp-feature-lead / tdmcp-backlog-campaign — it sequences across MULTIPLE sub-harnesses (tools, mixer, coverage, docs, bridge, recipes, submission), which the generic backlog-campaign does not. For a SINGLE feature use tdmcp-pipeline; for one tool-shaped backlog file use 4---56# tdmcp Roadmap-to-1.0 Campaign78Drives `_workspace/campaign_roadmap_v1/ROADMAP_1.0_BACKLOG.md` to completion,9gated by `_workspace/campaign_roadmap_v1/ledger.json` (idempotent, resumable,10merge-safe). This is **orchestration only** — it never writes product code11itself; it routes each ledger item to the existing specialist sub-harness and12records the outcome back into the ledger.1314## Why this exists (vs tdmcp-backlog-campaign)1516`tdmcp-backlog-campaign` drives a *tool-shaped* backlog through one pipeline17(design→build→integrate→QA→release). The road to 1.0 is **not** uniform: it mixes18new tools (M4), a policy-bounded mixer slice (M5), a coverage CI gate (G2), a19bridge exec→REST sweep (G4), docs/governance (G1/G5/G6 prep), and live-validated20recipes (G3). Each needs a *different* specialist. This skill is the thin router21that sequences them and keeps one ledger of truth.2223## Confirmed campaign policy (2026-06-21)2425- **Release:** commit + push, **NO tag/bump**. Everything lands in CHANGELOG26 `[Unreleased]`. Cutting the version is a manual user step — never tag27 autonomously (`[[no-premature-release-tag]]`).28- **Blocked items** (GPU/CUDA, live-TD, external service): **build offline +29 quarantine**. Implement, pass the offline gates, set `live` to the right30 `UNVERIFIED-pending-*` marker, keep going. Quarantine never blocks the campaign.31- **Checkpoint:** after Wave 1 only, then autonomous to the end. On repeat32 failure: retry once → quarantine-and-continue (note it in the wave report).3334## Routing table (ledger `route` → sub-harness)3536| `route` | Sub-harness | Agents |37|---------|-------------|--------|38| `docs` | `tdmcp-docs-roadmap-update` | roadmap-docs-editor, docs-cookbook-sync, docs-roadmap-qa |39| `tools` | `tdmcp-feature-lead` | tdmcp-tool-builder ×N + single-writer integration |40| `mixer` | `tdmcp-pipeline` | mixer-scene-contract-architect, soundcraft-ui24r-adapter-architect, mixer-policy-safety-qa |41| `coverage` | `tdmcp-test-coverage` | tdmcp-coverage-writer, tdmcp-coverage-qa |42| `bridge` | `tdmcp-bridge-endpoint` | tdmcp-bridge-engineer (sequential — bridge slices share files) |43| `recipes` | `tdmcp-pipeline` | td-architect, td-builder, td-qa (needs live TD) |44| `submission` | `tdmcp-submission` | submission-architect, submission-qa |45| planning | — | tdmcp-backlog-planner (wave computation + ledger transitions) |4647## Workflow4849### Phase 0 — Context check (resume vs fresh)50511. Read `ledger.json`. If absent, the harness isn't initialized — (re)generate it52 from `ROADMAP_1.0_BACKLOG.md` and `docs/ROADMAP.md`, then stop and report.532. **Reconcile against the tree first** — a prior session or a merged PR may have54 already shipped a ledger item. For each `pending` item, cheaply verify it's55 genuinely undone (grep for the tool/file/gate) before assigning it. Flip56 already-done items to `shipped` with an `event: reconciled` history row.573. Determine the next ready wave: lowest wave number with `pending`,58 non-`blocked` items whose `depends_on` are all `shipped`. Honor the59 `checkpoint_after_wave` gate.6061### Phase 1 — Plan the wave (tdmcp-backlog-planner)6263Spawn `tdmcp-backlog-planner` (opus) with the ledger + backlog. It returns: the64exact item set for this wave, their routes, dependency-safe ordering, and the65proposed ledger status transitions. Write its report to66`_workspace/campaign_roadmap_v1/wave_<n>_planner_report.md`.6768### Phase 2 — Execute the wave (route to sub-harnesses)6970For each item, invoke its `route` sub-harness with a precise spec. Within a wave:71- **Parallelize independent items** across routes (docs ∥ coverage ∥ tools).72- **Serialize same-file routes** — all `bridge` items run sequentially (they73 share `td-client`/`td/` files); within `tools`, builders are parallel but the74 integrator is the single writer of shared registries.75- **Blocked/needs-hardware items:** build to the offline boundary, then mark76 `live` quarantined per policy — do not wait on hardware.7778Every sub-harness already runs its own gates; this skill does not re-implement79them. Record per-item QA (`typecheck/build/biome/vitest/recipes/bridge`) into the80ledger `qa` block, exactly like the project_rag campaign.8182### Phase 3 — Gate, commit, record83841. Run the four PR gates + recipe + bridge tests at the wave boundary85 (`npm run typecheck && npm run build && npm run lint && npm test`,86 `npm run validate:recipes`, `npm run test:bridge`).872. Commit + push the wave on its own branch (`feature/roadmap-<wave-theme>`).88 **No tag, no version bump** — CHANGELOG `[Unreleased]` only.893. Update the ledger: flip items `pending → shipped` (or `quarantined`), stamp90 `qa`, `commit`, and a `history` row. Write `wave_<n>_report.md`.9192### Phase 4 — Loop or checkpoint9394- If the just-finished wave is the `checkpoint_after_wave` → **stop and report**;95 wait for the user before the next wave.96- Otherwise advance to the next ready wave (Phase 0 → 3) until no `pending`97 non-blocked item remains.9899### Phase 5 — Hand-back100101When only quarantine items remain, report **campaign complete (offline scope)**102and enumerate what the user must do to actually tag 1.0: provide GPU/TOX103components or a reachable TD for the `UNVERIFIED-pending-*` live validations,104run the bench/hardware M5 spikes, submit to the Connectors Directory, and — only105on the user's word — cut the tagged 1.0 minor (closing G1).106107## Error handling108109- A sub-harness that fails a gate: retry once with the failure fed back. On110 second failure, mark the item `quarantined` with the reason, leave the rest of111 the wave intact, and note it in the wave report — never delete partial work.112- Conflicting tree state vs ledger: trust the tree, reconcile the ledger, note113 the drift. Never silently overwrite shipped work.114- The ledger is the single source of truth and must stay valid JSON after every115 transition; write it atomically (full rewrite), never partial.116117## Test scenarios118119- **Happy path:** fresh ledger → Phase 0 picks Wave 1 → planner assigns 4 docs120 items → docs sub-harness ships all four → gates green → commit no-tag →121 checkpoint stop with a Wave-1 report.122- **Resume after merge:** a follow-up run finds `g2_coverage_ci_gate` already123 landed on main → reconcile to `shipped` (event: reconciled) → skip it → plan124 the remainder of Wave 2.125- **Blocked item:** Wave 4 `m4_drive_streamdiffusion` builds offline, gates green,126 but no GPU → ship with `live: UNVERIFIED-pending-gpu`, campaign continues.127- **Repeat failure:** a tool fails its gate twice → quarantined with reason, wave128 proceeds with the rest, report flags the gap.