feat: module 05 assemble

Cards become JSON data in course/cards (one file per card, validated
against card.schema.json and the catalog); the M5 references load them
via registerCards and interpret effects, replacing content closures.
Adds assemble(base, donor, half), the assemble/buffHand effects with an
injected chooser, Fleshshape as the data-only Expansion Drop, and stages
course/cards in verify-references and start-module.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas Winther
2026-10-29 03:17:21 +01:00
co-authored by Claude Opus 5.5
parent 55fe5a71d7
commit e04dc1a11f
73 changed files with 6010 additions and 9 deletions
+7
View File
@@ -14,6 +14,13 @@ test("start_module_copies_tests", () => {
assert.match(r.out, /newGame, summon, play/);
});
test("start_module_copies_course_cards", () => {
const ws = copyFixture("ws-start");
const r = run("start-module.mjs", ["01", ws], env);
assert.equal(r.code, 0, r.out);
assert.ok(existsSync(join(ws, "cards/test-fixture.json")));
});
test("start_module_uses_track", () => {
const ws = copyFixture("ws-start-ts");
assert.equal(run("start-module.mjs", ["01", ws], env).code, 0);