21-C C6-b/C7: module-owned template defs for Dungeon Realms and Untangle (author script loader + suites) - #225
Merged
Merged
Conversation
…ne-root groups on the card, the dungeon-realms suite
- scripts/author-templates.cjs: a MODULE_DEFS LOADER region (football, dungeon-realms) - each slug is read
from the sibling modules checkout as modules/<id>/<id>.def.json (moduleDef), emitted by that module's own
build so the def and the module cannot drift; `--only <slug>` authors one. Additive `thumb.sceneGroups`:
a def names scene-root module groups to clone into the card render - a dungeon's world is scene-root
content (golden rule 5), so the card showed a lone arch. Absent = the picture it always was. Kept
apart from the HUD helper region 29-football edits.
- tests/e2e/game-dungeon-realms.test.cjs (64 checks; two peers + a late joiner; the real
games/dungeon-realms/scene.tpscene from the feed / DUNGEON_REALMS_TPSCENE / a sibling scenes checkout;
dungeon.zip + dungeon-realms.zip from DUNGEON_KIT_ZIP / DUNGEON_REALMS_ZIP / MODULES_REPO / a sibling
modules checkout / the CDN; skip-never-fail): the two-module requirement list; the 6 arch objects, night
env, click + grounded play block, the HUD document; the Kit regenerates seed 1337 FROM THE NODE after
applySession's /clear all (a 777 dungeon before the load is replaced); B over the handshake with the same
Kit checksum; Start -> the `drevent start` stamp in the TRIGGER LOG -> Set Game State playing on both ->
the HUD screen; HUD Text reads the Realms Value nodes, HUD lists the Realms HUD Rows; a gem -> B's HUD,
the replicated gem event counts ONCE (Counter -> HUD Text); P pause / Resume; unseal -> portal -> floor 2
on both; victory across five floors -> `drevent victory` -> the shell is over; the late joiner reads it
all. B's objects are asserted by UUID: a mesh name with a space arrives underscored on the peer
("Entrance_plinth"; a light keeps its space) and the graph binds by uuid anyway.
Counterfactual: dungeon-realms' game.js no longer pulses the start event -> 3.7 "the On start stamp landed
in the TRIGGER LOG" red (+3.8-3.10, 3.14, 5.2 downstream); restored, module.js byte-identical.
Gates: npm run build OK; svelte-check identical to base (341 errors / 47 warnings, same list); vitest
143/143; held game-stars-room 36/36 and game-towers 20/20 at base. Authored scene staged in
cloud-lane-29-staging/games/dungeon-realms/ (9169 B + 3848 B thumb).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ngle suite - scripts/author-templates.cjs: `untangle` joins MODULE_DEFS (modules/untangle/untangle.def.json, emitted by `npm run build:untangle`); its board is scene-root content too (`thumb.sceneGroups: ['untangle-module']`). - tests/e2e/game-untangle.test.cjs (46 checks; two peers + a late joiner; the real games/untangle/scene.tpscene from the feed / UNTANGLE_TPSCENE / a sibling scenes checkout; untangle.zip from UNTANGLE_ZIP / MODULES_REPO / a sibling modules checkout / the CDN; skip-never-fail): THE ORDERING - applySession runs /clear all FIRST (the module counts one scene clear) and the graph's Untangle Board node applies LEVEL 2 on the next tick, from a level-5 board (not 1, not 5); the SAME file loaded again re-applies level 2 (the node re-armed by the clear); the pose is node data (editing boardY on A's node moves B's board and back); B builds the identical scramble; Start -> playing + the HUD screen; HUD Text reads the Untangle Value nodes (level, crossings) and follows a move; a solve -> the `utevent solved` stamp in the TRIGGER LOG on B, the Counter counts ONCE on both, autoAdvance to level 3 in lockstep; no sprite on desktop (the VR-only path); P pause / Resume; the late joiner has the room, the level, A's positions and the game shell. Counterfactual: untangle's onSceneClear no longer re-arms the node -> 1.12 "the same file loaded again ... the node re-applied LEVEL 2 (a board exists)" red (+2.1, 3.2, 4.3, 4.6, 4.7 downstream); restored, module.js byte-identical. Gates: the same build + svelte-check run as C6-b (scripts/ and tests/e2e are outside the app bundle and the checked sources): build OK, svelte-check identical to base. Authored scene staged in cloud-lane-29-staging/games/untangle/ (8946 B + 2802 B thumb). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What landed
scripts/author-templates.cjs: aMODULE_DEFSLOADER region (football,dungeon-realms,untangle) read fromthe sibling modules checkout as
modules/<id>/<id>.def.json, and an additivethumb.sceneGroups(scene-rootmodule groups cloned into the card render — a dungeon's world is scene-root content, so the card showed a lone arch).
Absent = byte-identical behaviour. Kept apart from the HUD helper region 29-football edits.
tests/e2e/game-dungeon-realms.test.cjs(64 checks, two peers + late joiner, real zips, skip-never-fail): thetwo-module case; the Kit regenerates seed 1337 FROM THE NODE after
/clear all(a 777 dungeon before the load isreplaced); trigger-log assertions on
drevent start/victory→ Set Game State; HUD Text/lists read the module'svalue/rows nodes; the replicated gem event counts once; grounded resolves from the contract; victory across 5 floors.
tests/e2e/game-untangle.test.cjs(44 checks): THE ORDERING (clear → level 1 → node applies level 2, from a level-5board), pose as node data (editing boardY on A moves B), trigger-log
utevent solved, Counter once, autoAdvance inlockstep, no sprite on desktop, the late joiner.
cloud-lane-29-staging/games/{dungeon-realms,untangle}/.Gates:
npm run buildOK; svelte-check identical to base (341 errors / 47 warnings, same list); vitest 143/143;held suites game-stars-room 36/36, game-towers 20/20 at base.
🤖 Generated with Claude Code