Tracking issue for the second half of the #2205 pilot. Do not start this until the exit criterion below is met — the pilot deliberately shipped both generators with scaffold.py as the default.
Exit criterion
The template has generated at least one real FoundryVTT module repo end to end — scaffolded, bun install, just check green, pushed, release-please wired, module loads in Foundry.
Byte-identical parity against scaffold.py across all three variants is already proven mechanically (test-template-parity.sh, 9/9). What is not proven is that anyone has lived with the cargo-generate flow for a real module: the install step, the --define ergonomics, the prompts when values are omitted, whether the Rhai pre-hook's kebab-case handling is pleasant in practice.
Blocked on
When the criterion is met
- Flip the default in
foundryvtt-module-scaffold/SKILL.md — template first, scaffold.py as the documented fallback.
- Delete
scaffold.py (1,279 lines) once no skill references it.
test-template-parity.sh loses its comparison half and becomes a template-only smoke test — generate each variant, assert the tree shape and that module.json parses. Keep it; the variants are still worth pinning.
- Update
foundryvtt-plugin/README.md and templates/README.md (both currently say "scaffold.py remains the default" in as many words).
cargo install cargo-generate --locked becomes a hard prerequisite of the skill rather than an alternative path — state it in the skill's requirements, not a footnote.
If the criterion is not met
Deleting the template is a perfectly good outcome. The pilot's value was answering the question; a negative answer is an answer. The cost of keeping both indefinitely is the parity test plus the cargo-generate dependency, and that is not free.
The most likely reason for a negative result is the toolchain cost: requiring a Rust toolchain (or a release-binary install) to scaffold a TypeScript repo is the one genuinely awkward part of the port, and it is the thing to weigh hardest.
Related
Tracking issue for the second half of the #2205 pilot. Do not start this until the exit criterion below is met — the pilot deliberately shipped both generators with
scaffold.pyas the default.Exit criterion
Byte-identical parity against
scaffold.pyacross all three variants is already proven mechanically (test-template-parity.sh, 9/9). What is not proven is that anyone has lived with the cargo-generate flow for a real module: the install step, the--defineergonomics, the prompts when values are omitted, whether the Rhai pre-hook's kebab-case handling is pleasant in practice.Blocked on
scaffold.pywhile the only thing proving equivalence is a local-only test would be backwards.When the criterion is met
foundryvtt-module-scaffold/SKILL.md— template first,scaffold.pyas the documented fallback.scaffold.py(1,279 lines) once no skill references it.test-template-parity.shloses its comparison half and becomes a template-only smoke test — generate each variant, assert the tree shape and thatmodule.jsonparses. Keep it; the variants are still worth pinning.foundryvtt-plugin/README.mdandtemplates/README.md(both currently say "scaffold.pyremains the default" in as many words).cargo install cargo-generate --lockedbecomes a hard prerequisite of the skill rather than an alternative path — state it in the skill's requirements, not a footnote.If the criterion is not met
Deleting the template is a perfectly good outcome. The pilot's value was answering the question; a negative answer is an answer. The cost of keeping both indefinitely is the parity test plus the cargo-generate dependency, and that is not free.
The most likely reason for a negative result is the toolchain cost: requiring a Rust toolchain (or a release-binary install) to scaffold a TypeScript repo is the one genuinely awkward part of the port, and it is the thing to weigh hardest.
Related
foundryvtt-plugin/templates/README.md— comparison, divergences, brace-collision fixes