Tracking issue for the dynamic-workflow migration. Plan merged in #2162: docs/plans/dynamic-workflow-migration.md.
What was decided
47 candidate skills were evaluated by a 16-agent dynamic workflow (fan-out triage → per-group harness design → three adversarial lenses → synthesis). 18 were nominated; 21 refutations were raised; 6 were demoted by majority refutation.
Of 47, five ship a harness. The separating criterion:
The fan-out width must already be enumerable by something other than the model.
Every mover reads its N from a deterministic source that already exists. Every rejection either invented its N, or duplicated a bound a shell script already enforces — .claude/rules/offload-to-deterministic-substrate.md run backwards.
Two of the blog post's six shapes — tournament and loop-until-done — have no fit in this repo. That is recorded as a finding, not a gap to close later.
Sequencing
Groundwork gates everything. Nothing ships a .js before #2163.
#2163 (convention) ──┬──> #2164 (guard)
├──> #2165 (fork conflict) ──> #2170 (test-analyze)
├──> #2167 (verify-before-filing) <── #2166 (file-wave.sh)
├──> #2168 (configure-all)
├──> #2171 (blueprint-story-audit)
└──> #2172 (Tier B) ──> #2169 (evaluate-plugin-batch)
#2173 (Tier C) — independent, no .js, landable any time
Groundwork
Tier A — ship the harness
Tier B — batch-only templates
Tier C — schema/prose only, no .js
What is deliberately not here
35 of 47 skills stay as they are, and the plan's §"Rejected, and why" is as load-bearing as its recommendations. Before proposing a harness for anything not listed above, read that section — six designs were killed there, including:
code-review — 1 agent today → up to 69, on the flagship many-times-daily skill. context: fork already isolates the file set, and its "self-preference" check re-reads file:line against current source, which loop-integrity.md classifies as already-independent.
workflow-checkpoint-refactor — its ceiling would live in JS locals that silently reset on every --continue, defeating the exact runaway the ceiling exists to prevent.
evaluate-improve — the proposed tournament reproduces sorted[0]; grade_deterministic.py already resolved the ranking.
blueprint-autopilot — the design calls recordManifest() as plain JS, but the workflow API has no filesystem, and blueprint-autorun.sh already performs that write.
Also out of scope by decision: no new skill in workflow-orchestration-plugin for the authoring convention. It is about a page, and belongs in the paths:-scoped rule rather than costing listing tokens in every session.
Commit scoping
Each shipped .js is feat(<plugin>): … (minor bump on the published plugin). The rule, the CLAUDE.md row, and the guard script are chore / ci. Per .claude/rules/docs-currency.md, each template lands in the same commit as its SKILL.md framing section — a .js with no framing is exactly the "script to run verbatim" the source blog post warns against.
Tracking issue for the dynamic-workflow migration. Plan merged in #2162:
docs/plans/dynamic-workflow-migration.md.What was decided
47 candidate skills were evaluated by a 16-agent dynamic workflow (fan-out triage → per-group harness design → three adversarial lenses → synthesis). 18 were nominated; 21 refutations were raised; 6 were demoted by majority refutation.
Of 47, five ship a harness. The separating criterion:
Every mover reads its N from a deterministic source that already exists. Every rejection either invented its N, or duplicated a bound a shell script already enforces —
.claude/rules/offload-to-deterministic-substrate.mdrun backwards.Two of the blog post's six shapes — tournament and loop-until-done — have no fit in this repo. That is recorded as a finding, not a gap to close later.
Sequencing
Groundwork gates everything. Nothing ships a
.jsbefore #2163.Groundwork
.claude/rules/workflow-vs-skill.md+ CLAUDE.md + plugin-structure layout convention (blocks all harnesses)scripts/check-workflow-templates.shguardcontext: forkpin vsskill-fork-context.md(blocker for feat(testing-plugin): ship test-analyze classify-and-act harness template #2170)scripts/file-wave.sh(blocker for feat(workflow-orchestration-plugin): ship verify-before-filing workflow harness template #2167)Tier A — ship the harness
workflow-verify-before-filing· composite · zero refutationsconfigure-all· fan-out-and-synthesize · zero refutationsevaluate-plugin-batch· fan-out-and-synthesize · must ship cappedtest-analyze· classify-and-act · zero refutationsblueprint-story-audit· fan-out-and-synthesizeTier B — batch-only templates
git-pr-feedback --all,evaluate-skill,git-issue --parallel,cold-read-gate(optional)Tier C — schema/prose only, no
.jsexecution-grounded-review,agents-analyze,workflow-wave-dispatch,parallel-agent-dispatchWhat is deliberately not here
35 of 47 skills stay as they are, and the plan's §"Rejected, and why" is as load-bearing as its recommendations. Before proposing a harness for anything not listed above, read that section — six designs were killed there, including:
code-review— 1 agent today → up to 69, on the flagship many-times-daily skill.context: forkalready isolates the file set, and its "self-preference" check re-readsfile:lineagainst current source, whichloop-integrity.mdclassifies as already-independent.workflow-checkpoint-refactor— its ceiling would live in JS locals that silently reset on every--continue, defeating the exact runaway the ceiling exists to prevent.evaluate-improve— the proposed tournament reproducessorted[0];grade_deterministic.pyalready resolved the ranking.blueprint-autopilot— the design callsrecordManifest()as plain JS, but the workflow API has no filesystem, andblueprint-autorun.shalready performs that write.Also out of scope by decision: no new skill in
workflow-orchestration-pluginfor the authoring convention. It is about a page, and belongs in thepaths:-scoped rule rather than costing listing tokens in every session.Commit scoping
Each shipped
.jsisfeat(<plugin>): …(minor bump on the published plugin). The rule, the CLAUDE.md row, and the guard script arechore/ci. Per.claude/rules/docs-currency.md, each template lands in the same commit as its SKILL.md framing section — a.jswith no framing is exactly the "script to run verbatim" the source blog post warns against.