11 — Phased Roadmap
From MVP to full vision. Each phase ships a working product that improves on the previous one. The MVP is intentionally narrow but end-to-end: a single user can author a hex map, save it as a
.gas-world, export to PDF + Godot. Every subsequent phase layers on a new capability without breaking what shipped before.
0. Where we actually are (refreshed 2026-09-18, post-#260)
This "phased" roadmap is the design — the actual execution has jumped around it. The canonical status of every shipped spec is in
docs/superpowers/STATUS.md. Summary:
Phase 1 MVP ✅ SHIPPED 2026-08-19 (tag
phase-1-closeout-complete): Godot export (M1.10),.gas-worldexport (M1.7), Adventure Craft round-trip viapackages/export..gas-worldimport UI landed 2026-08-20 (ae9cf97).Phase 2 (3D) ⚠️ PARTIAL — 3D world view, mesh assets, seasonal/night effects, weather particles shipped; first-person walk ✅ (PRs #182 + #183, 2026-09-12; spec
docs/superpowers/specs/2026-09-12-first-person-player.md); perf-budget pass still ❌.Phase 3 (Simulation) ⚠️ PARTIAL — runtime, NPCs, quests, dialogue, FoW overlay, Explorer / GM / Replay shells, GM tools 4/4, replay log + scene playback shipped; first-person Player mode ✅ (PRs #182 + #183); M3.5 pick-up / open ✅ (
feat/m3-5-pickup-open); NPC-schedule replay ✅ (PR #185, 2026-09-12 — closes the deferral from PR #66's Replay scene playback).Phase 4 (Print + Cinematic + AC) ⚠️ PARTIAL — print slices 1–2 + atlas, Cinematic Director M7.6 → M7.11 (timeline, camera paths, WebM / MP4 / GIF, HTML viewer), AC round-trip shipped; five print modes ✅ (PR #175 —
PrintModeenum + per-modecompileForPrint+print_artifactsstore + picker on/print-shops; closes audit P1-8); AC multiplayer bridge ❌.Phase 5 (Yjs) ⚠️ PARTIAL — realm co-editing, presence, server-filtered FoW, branching fork / list / diff / accept (accept stays a REPLACE, PRs #69–#71, mounted in the editor PR #96); ADR-0005 filed (PR #180) — full CRDT merge explicitly deferred; per-field selective accept ✅ (PR #181 —
POST /worlds/:branchId/accept-fields { keys: string[] }): lore DB, campaign manager, comments ❌.Phase 6 (Marketplace + engine exports) ✅ SHIPPED end-to-end — Pack Studio full CRUD + zip export/import (PRs #44–#65), engine exports 6/6 (Godot / AC / Bevy / Foundry / Unity / Unreal, 2026-08-22),
apps/apinow durable on managed Postgres (PR #160) — no longer destroyed on every deploy. Stripe payouts + asset ingest + mobile ❌.Phase 7 (AI + cinematic polish) ⚠️ PARTIAL — M7.3 → M7.11 (as tagged) shipped incl. LLM shot-list generation; AC multiplayer (full) + authoritative MMO server ❌.
Phase 8 (Print shops + mobile + i18n) ⚠️ PARTIAL — i18n framework (English only, PR #72), print-shop API + DB-persisted orders + QR +
/print-shopspage + haversine distance + browser geolocation (PRs #73–#77, #111, #112, #175 — print-mode picker). Real print-shop directory 🚧 IN PROGRESS (PR #187 spec + PR #189 PR A persistence + PR #191 PR B admin POST + PR #194 PR C ownerPATCH—print_shopstable migration 0030; admin create gated on theplatform_adminrole (user_roles, migration 0032, PR #196); owner edit viaowner_user_id(migration 0031); PRs D claim tokens (migration 0033) / E search/filter per spec). Mobile companion + translations + print-profile marketplace ❌.Cross-cutting (2026-09-13/14, PRs #193–#205): CI green again; production migration-journal fix (deploy had skipped 0027–0030); authorization audit critical/high findings fixed; ADR-0008 proposed (one world-document write path).
Cross-cutting (2026-09-15 → 2026-09-18, PRs #240–#260 + 3aa51acc + ffec562b): ADR-0008 Accepted — D1 (#244, #249,
world-store/mutate.tsis the one write path), D2 (#252, #256,world_poi_statemigration 0042 +world_runtime_statemigration 0043), D3 (#246,readWorldFor), D4 (#250, atlas-tables-canonical decision), D5 (#253, auto-accept viaproposal_policiesmigration 0044); every authz audit low closed (#240 observers fire triggers; #242 branch access; #247 API key catalogue + expiry; #251 LLMbase_urlSSRF with DNS-rebinding pinning; #255 realm tickets replace JWT in URL); agent proposal review fully shipped (D1–D5, #235–#239 + #245 + #253/254); print-shop directory spec fully shipped end-to-end + audit gate (3aa51acc); hero cinematic drop site (ffec562b); ADR-0009 Accepted — trigger-only writers forworld_runtime_state, wall-time ticking deferred to M7.8. Seedocs/audits/2026-09-18-status-report.mdfor the full snapshot.Current schema:
WORLD_SCHEMA_VERSION = '0.44.0'(0.44.0: adventure sites —POI_CURATED_CATEGORIESgains 'lair' (the dwelling of something that owns a place and defends it — a dragon's lair, a goblin warren) andMeshKeygains lair / temple / camp / pyramid / ruin (named 3D slots for the site landmarks; no GLB exists for them yet, so they render as the placeholder colour). Additive enum widening per the 0.21.0 / 0.39.0 / 0.43.0 precedent, 2026-10-27; 0.43.0:preset/generation.presetgain 'caverns' — the Hollow Hills template (a warm limestone country of wooded hills and exposed rock, with cave mouths opened at the foot of its cliffs by the cave feature pass). Additive enum widening per the 0.21.0 / 0.39.0 precedent, 2026-10-26; 0.42.0:preset/generation.presetgain 'volcanic' — the Cinder Reach template (a hot, dry, ridged massif whose top relief band is bare rock instead of snow, with a volcano — cone, crater and fissure — raised on it by the volcanic feature pass). Additive enum widening per the 0.21.0 / 0.39.0 precedent, 2026-10-26; 0.41.0: dungeon dressing:dungeon.props[].kindgains candle, banner, bookshelf, campfire, cobweb, bloodstain, sarcophagus and rubble (enum widening, 0.21.0/0.39.0 precedent); the generator dresses rooms on its own random stream and light props flicker in the Tabletop style. Additive, 2026-10-16; 0.40.0: dungeon features: optionaldungeon— doors on cell edges (facing + closed/open/locked/secret), up/down stairs and props (chest, barrel, crate, table, altar, pillar, bones, brazier) of a grid dungeon, written by the stone-dungeon create path and by Generate/Regenerate; the 2D Tabletop style draws them (and derives doors/props for older dungeon worlds). Additive, 2026-10-16; 0.39.0:preset/generation.presetgain 'archipelago' — the Shattered Isles template (tropical biome + newislanddial: a radial rim mask that sinks the map edge so land concentrates as islands). Additive enum widening per the 0.21.0 precedent, 2026-10-07; 0.38.0: generation provenance: optionalworld.generation— the recipe that produced the starting terrain, recorded by the create path and by Generate/Regenerate. PROVENANCE ONLY — terrain cells stay canonical and nothing regenerates from it silently;world.presetstill written alongside. Additive, 2026-10-06; 0.35.0: renown & affiliation ranks (gas-lore-schema 0.9): renown ladders on dynasties/faiths + world_renown_state live standing. Additive, 2026-10-04; 0.34.0: lore timeline & eras (gas-lore-schema 0.8): Lore.eras / Lore.events — year + dayOfYear + whenText — and optional clock.year. Additive, 2026-10-04; 0.33.0: lore cultures & languages (gas-lore-schema 0.7): Lore.cultures — kind, colour, homelands, embedded languages, society, customs — and optional NPC cultureId. Additive, 2026-10-04; 0.32.0: calendar, festivals & strongholds: optionalcalendar(named months + weekdays) and, via gas-lore-schema 0.6, Lore.festivals / Lore.strongholds. Additive, 2026-09-21; 0.31.0: lore creatures & ecologies (gas-lore-schema 0.5): Lore.creatures, 2026-09-21; 0.30.0: lore dynasties & heraldry (gas-lore-schema 0.4): Lore.dynasties with arms (blazon), succession, seat, members and claims. Additive, 2026-09-21; 0.29.0: environmental hazards: optionalhazards(dangerous grid areas, 2026-09-21; 0.28.0: taint & sanctity: optionalsanctity(−5 accursed … +5 holy) on districts and POIs; drives the 3D atmosphere mood. Additive, 2026-09-21; 0.27.0: lore artifacts & rumours (gas-lore-schema 0.3): Lore.artifacts / Lore.rumours with host refs to POIs, districts and NPCs. Additive, 2026-09-21; 0.26.0: districts & holdings: optionaldistricts(named grid areas with kind, law level, dominant faith, and holdings, 2026-09-21; 0.25.0: 0.25.0, 2026-09-21; 0.24.0: 0.24.0, 2026-09-21; 0.23.0: ClimateZone gains mood? (W9 2b: atmosphere while the camera is inside the zone). Additive optional field, 2026-09-21; 0.22.0:lighting.moodworld default atmosphere, 2026-09-21; 0.21.0:presetgains 'arid-desert' | 'wetland'; 0.20.0 was the preset round-trip,47ddff55): preset round-trip + bump schema to 0.20.0`).Every milestone below is now annotated ✅ (shipped — tag or PR) / ⚠️ (partial) / ❌ (not started), verified 2026-09-12 against tags + code. The prose in each section still describes the intended shape; use STATUS.md and the newest audit (2026-09-06 status report) for what actually exists.
Numbering caveat: the
m7-N-completegit tags follow the execution decomposition (M7.6 foundation, M7.7 effects, M7.8/M7.9 camera paths, M7.10 Director panel, M7.11 recording + export), not the M7.x list in §9.3. Annotations in §9.3 map the roadmap items to whichever tag delivered them.
1. Vision
WorldForge Studio is the universal authoring environment for the GAS world
format — the place where designers, artists, writers, and game masters create the
living worlds consumed by adventure-craft, game-asset-platform, and
bevy-game-editor. The same world is editable as a 2D hex map, walkable in 3D,
filmable with a Cinematic Director, exportable to every major game engine, and
publishable as a marketplace pack.
The end state:
WorldForge Studio
│
├── Edit (2D / 3D)
├── Simulate (Editor / Explorer / Cinematic / GM / Player / Replay)
├── Publish (Print / Export / Pack)
└── Integrate (Adventure Craft · game-asset-platform · bevy-game-editor)
2. Guiding principles
- The data model is the moat. Every projection reads from the same
World.json. Subsystems that store their own copy of the data are bugs. - The MVP is end-to-end. A user can author → save → export on day one.
- Each phase is shippable. A user can adopt any phase without taking on the next.
- GAS is the contract. The marketplace, the integration points, the asset format — all GAS-native.
- Determinism is mandatory. Same inputs → same outputs, always.
3. MVP — Phase 1
Goal: A working 2D map editor for hex and square grids with one bundled jungle pack, GAS-native save format, basic terrain tools, and a single export target.
3.1 Scope
In scope:
- Turborepo monorepo with
apps/web,apps/site, and the 9 shared packages. - Canonical
World.json(Zod-validated) at schema version0.1.0. - Hex and square grids.
- One bundled tile pack: Jungle Adventure Pack (terrain + objects + decorations in SVG).
- Tools: select, brush, fill, erase, line, scatter (basic).
- Theme switcher (one built-in theme + the Jungle pack).
- Local persistence via IndexedDB.
- File export:
.gas-world(JSON). - PNG export (single page, 300 DPI default).
- PDF export (single page, vector, embedded fonts).
- One export target: Godot (
world.tscn+ TileMap). - GAS interop stubs: every world carries GAS metadata.
Out of scope (deferred to later phases):
- 3D engine.
- Simulation runtime.
- Cinematic Director.
- Multiplayer collaboration.
- Marketplace.
- Adventure Craft / Foundry VTT / Bevy / Unity / Unreal exports.
3.2 Success criteria
- A user can create a hex map, brush terrain, drop objects, switch themes, save, reload, export a PNG and a Godot scene.
- The exported
.gas-worldfile round-trips throughgame-asset-platform(the GAS adapter in the host project) without loss. - The exported Godot scene opens in Godot 4.4+ and renders the same tiles.
3.3 Milestones
- ✅ M1.1 — Monorepo skeleton. Turborepo + pnpm workspaces; all 9 packages
building;
apps/webandapps/siterunning; CI green. - ✅ M1.2 — Canonical data model. Zod schema for
World.json; round-trip tests with fixture worlds; migration helper scaffold. - ✅ M1.3 — Canvas + grid math. Hex + square rendering; pan / zoom; selection; coordinate display.
- ✅ (e2e
m1-4-paint-undo-redo.spec.ts) M1.4 — Tools. Brush, fill, erase, line, scatter (basic); undo / redo; autosave; IndexedDB persistence. - ✅ (
spec-4-themes-borders-and-print-complete) M1.5 — Jungle Adventure Pack. Bundled SVG tile pack; biome map; edge auto-tiling. - ✅ (
spec-4-themes-borders-and-print-complete) M1.6 — Theme switcher. Built-in theme + Jungle theme; palette + lighting update live. - ✅ (
phase-1-closeout-complete; import UIae9cf97) M1.7 — File export..gas-worldJSON download; load on import. - ✅ (
spec-4-print-complete,packages/print/src/png.ts) M1.8 — PNG export. Single-page raster export at configurable DPI. - ✅ (
spec-4-print-complete/ slice 2) M1.9 — PDF export. Single-page vector PDF with embedded fonts. - ✅ (
phase-1-closeout-complete, Godot 4.6.1 headless-validated) M1.10 — Godot export.world.tscn+ TileMap; opens in Godot 4.4+. - ✅ (
site-polish-completedocs mirror +USAGE.md) M1.11 — Documentation. README, USAGE, GAS schema reference; landing site updates. - ⚠️ (beta-ready per 2026-08-30 audit; no external release yet) M1.12 — MVP release. Internal dogfood; ship to early users.
3.4 Duration
~ 6 weeks of focused work. M1.1 is in progress; the rest follow in 2-3 day chunks.
4. Phase 2 — 3D engine
Goal: The same world renders as a 3D scene in the browser. Height, water, forests, mountains, weather, day/night. Three.js + React Three Fiber.
4.1 Scope
- Three.js + R3F integration.
- Height mesh from
World.json#terrain[].elevation. - Animated water (ocean + rivers).
- 3D mesh resolution via asset pipeline (GLB per object).
- Weather engine (rain, snow, storm, fog, sandstorm, ash).
- Day/night cycle (configurable).
- Chunked LOD.
- Free-fly camera + first-person walk (basic).
- Cinematic playback (basic, no editor yet — read camera paths from world).
4.2 Success criteria
- A 64×48 hex world renders at 60 fps on a 2020 mid-range laptop.
- Switching from 2D to 3D and back is instant.
- The 3D scene looks "right" — same terrain, same objects, same theme.
4.3 Milestones
- ✅ M2.1 — R3F canvas + scene graph (
spec-3d-world-view-complete) - ✅ M2.2 — Height mesh + biome splatting (
spec-3d-world-view-complete) - ⚠️ M2.3 — Water shader (ocean + rivers) — water tiles project, no animated shader
- ⚠️ M2.4 — GLB pipeline + LOD — GLB swap-in ✅ (
spec-3d-mesh-assets-complete, mesh pools W3b); chunked LOD ❌ - ⚠️ M2.5 — Procedural features (forests, rocks, ruins) — 2D scatter / procgen ✅ (
spec-6-complete); 3D-specific placement ❌ - ✅ M2.6 — Weather engine (particles, PR #18 in
m7-11-follow-ups-complete) - ✅ M2.7 — Day/night cycle (
spec-climate-w1-complete+spec-3d-seasonal-night-effects-complete) - ❌ M2.8 — Free-fly camera + first-person walk (camera-path playback only)
- ❌ M2.9 — Performance budget pass (60 fps target on 2020 mid-range laptop).
Apply WebGPU for the scene graph + shader work, falling back to WebGL2
on browsers without
navigator.gpu. Hot simulation / terrain-gen paths that exceed ~3 ms/frame are lifted into WASM (Rust) modules — never the cold path itself. The MVP (Phase 1) stays on SVG + native JS; the cost isn't justified until scenes have real geometry + particle effects.
5. Phase 3 — Simulation runtime
Goal: NPCs have schedules, quests progress, weather reacts, fog of war exists. Five modes (Editor / Explorer / Cinematic / GM / Player) all run on the same runtime.
5.1 Scope
- Simulation runtime (event-sourced, deterministic).
- World clock + day/night + seasons.
- NPC schedules + memory + goals (rule-based).
- Quest runtime.
- Weather engine (Phase 2 weather, now driven by runtime state).
- Fog of war.
- GM mode with notes + encounter triggers.
- First-person interaction (talk, pick up, open).
- Replay log (event stream).
- Five mode shell.
5.2 Success criteria
- A user can author a world with 50 NPCs + 10 quests, run it for 30 simulated days, and observe NPCs moving on schedule, quests completing, and weather changing.
- Replaying the session produces a byte-identical event log.
- GM mode reveals fog of war; Player mode hides it.
5.3 Milestones
- ✅ M3.1 — Simulation runtime + clock (
spec-12-complete,real-trigger-handlers-and-dialogue-complete) - ✅ M3.2 — NPC schedules + memory + goals (
m7-3-completeadds LLM memory) - ✅ M3.3 — Quest runtime (
spec-2-complete,m7-4-complete) - ✅ M3.4 — Fog of war (
spec-11-phase-4-complete; GM overlay 2026-08-22; per-region GM masking deferred) - ⚠️ M3.5 — First-person interaction — Talk button + dialogue (
poi-part-6-complete); pick-up / open ✅ (feat/m3-5-pickup-open— inventory + POI adjacency); true first-person Player mode (WASD/arrow walk + pointer-lock overlay) ✅ (spec/first-person-playerPR #179 + impl PRs #182 + #183, 2026-09-12) - ✅ M3.6 — GM mode tools (mode shells PR #26 + 4/4 tools 2026-08-22)
- ✅ M3.7 — Replay log + playback (log writer 2026-08-22; scene playback PR #66; NPC-schedule replay ✅ (PR #185, 2026-09-12 —
startNpcScheduleObserveremits on transitions,replayNpcOverrideslice,<ReplayHud>drives override from cursor scan,<SimulationView>honours override; closes the only outstanding Phase 3 code item))
6. Phase 4 — Print + cinematic + adventure craft
Goal: Print atlas engine (A4/A3, GM/Player/Battle/Poster/Atlas), Cinematic Director with timeline editor, native Adventure Craft integration.
6.1 Scope
- Print layout engine + vector PDF.
- PNG + WebP raster export.
- All five print modes.
- Print profiles + multi-map atlases.
- Cinematic Director: timeline UI, camera tracks, weather / lighting / NPC tracks.
- Bezier + spline interpolation.
- Export to MP4 / WebM / GIF.
- Interactive viewer (
.htmlbundle). - Adventure Craft round-trip (
.gas-world↔ adventure-craft runtime). - Adventure Craft multiplayer bridge (read-only at first).
6.2 Success criteria
- A 64×48 hex world prints cleanly as an A3 atlas (8 pages, vector, embedded fonts).
- A user authors a 30-second camera path with weather cues and exports an MP4.
- A world opened in Adventure Craft runs without modification.
6.3 Milestones
- ✅ M4.1 — Print layout engine + PDF (
spec-4-print-complete) - ✅ M4.2 — Five print modes + profiles (
spec-4-print-slice-2-complete+ PR #175, 2026-09-11 —PrintModeenum +compileForPrintper-mode +print_artifactsstore + picker on/print-shops; all five modes GM / Player / Battle / Poster / Atlas wired) - ✅ M4.3 — Multi-map atlases (
spec-6-complete,spec-13-complete) - ✅ M4.4 — Cinematic Director: timeline + tracks (
m7-9-completemulti-lane timeline,m7-10Director panel) - ✅ M4.5 — Camera path interpolation (Bezier / spline) (
m7-8-complete,m7-9-complete) - ✅ M4.6 — Cinematic export (MP4 / WebM / GIF) (
m7-11-completeT1/T2) - ✅ M4.7 — Interactive viewer bundle (
m7-11-completeT6 + offline T6b) - ✅ M4.8 — Adventure Craft import / export (
phase-1-closeout-complete) - ❌ M4.9 — Adventure Craft multiplayer bridge (read-only)
7. Phase 5 — Multiplayer, lore, collaboration
Goal: Multiple designers can edit the same world live. Yjs CRDT collaboration, versioning with branches, lore database, campaign manager.
7.1 Scope
- Yjs Y.Doc as the live representation of
World.json. - IndexedDB persistence + WebSocket sync.
- Awareness (live cursors + selections).
- Roles (Owner / Designer / Artist / Writer / GM / Player).
- Versioning + history view + diff.
- Branching + merge.
- Lore database (markdown entries + crosslinks).
- Campaign manager (multiple worlds + parties).
- Comments + activity feed.
- Adventure Craft bridge becomes bidirectional.
7.2 Success criteria
- Two designers in different cities edit the same world live, see each other's cursors, and never lose a write.
- A user can branch a world, fork off an experimental feature, and merge it back without manual conflict resolution (Yjs handles most cases; structured UI for the rest).
7.3 Milestones
- ✅ M5.1 — Yjs Y.Doc + IndexedDB (
spec-11-foundations-complete) - ✅ M5.2 — Yjs WebSocket sync (
spec-11-phase-3-complete) - ✅ M5.3 — Awareness (cursors, selections) (
spec-14-live-presence-layer-complete) - ⚠️ M5.4 — Roles + permissions (
world_membershipsgm / player / observer; no roles UI) - ⚠️ M5.5 — Versioning + snapshots (optimistic version concurrency
worlds-rest-api-complete; realm crash-recovery snapshot; no user-facing history) - ⚠️ M5.6 — Time machine UI + diff (branch diff only, PR #71)
- ⚠️ M5.7 — Branching + merge (fork / list / accept-as-REPLACE PRs #69–#71, #96; ADR-0005 filed (PR #180, 2026-09-12) — full CRDT merge explicitly deferred; per-field selective accept ✅ (PR #181, 2026-09-12 —
POST /worlds/:branchId/accept-fields { keys: string[] }); CRDT merge ❌) - ⚠️ M5.8 — Lore database (wiki + notes
packages/wiki,/worlds/[id]/wiki; no structured lore entities) - ❌ M5.9 — Campaign manager
- ❌ M5.10 — Comments + activity feed
- ❌ M5.11 — Adventure Craft bidirectional bridge
8. Phase 6 — Marketplace + all engine exports
Goal: GAS-native marketplace; pack publishing + buying; exports to Godot, Unity, Unreal, Foundry VTT, Bevy, mobile companion.
8.1 Scope
- Pack Studio (constrained editor for pack authoring).
- Pack schema + validator.
- Marketplace backend (search, listings, ratings).
- Stripe Connect for payouts.
- Free / paid / bundle pricing.
- Asset pipeline ingest: Tiled, DungeonDraft, Wonderdraft, Unity.
- Engine exports: Unity, Unreal, Foundry VTT, Bevy.
- Mobile companion app (React Native).
- Print-shop marketplace (Phase 8+, but scaffolding starts here).
8.2 Success criteria
- A creator authors a jungle pack in Pack Studio, publishes it, and earns revenue.
- A user buys a pack, installs it, and applies it to a world in one click.
- A world exports cleanly to Godot, Unity, Unreal, Foundry VTT, and Bevy, and opens in each target.
8.3 Milestones
- ✅ M6.1 — Pack Studio mode (PRs #44–#65, 2026-08-23; tag
pack-studio-completestill pending) - ✅ M6.2 — Pack schema + validator (
packages/marketplace/src/schemas.ts, Spec 5 marketplace) - ✅ M6.3 — Marketplace backend (Spec 5 marketplace backend;
/packsdiscovery + search/filter) - ❌ M6.4 — Stripe Connect + payouts
- ❌ M6.5 — Asset ingest (Tiled, DungeonDraft, Wonderdraft, Unity)
- ✅ M6.6 — Unity export (PR #41, 2026-08-22, portable JSON)
- ✅ M6.7 — Unreal export (PR #41, 2026-08-22, portable JSON)
- ✅ M6.8 — Foundry VTT export (PR #40, 2026-08-22, native scene + portable JSON)
- ✅ M6.9 — Bevy export (via bevy-game-editor) (PR #39, 2026-08-22, portable JSON)
- ❌ M6.10 — Mobile companion (basic)
9. Phase 7 — AI + cinematic polish
Goal: AI-assisted cinematography, AI NPC dialogue, complete Adventure Craft multiplayer.
9.1 Scope
- AI camera path generation from high-level prompts.
- AI storyboard generation.
- AI NPC dialogue (backed by an LLM, deterministic runtime on top).
- AI goal / quest generation.
- AI biome generation ("Create a haunted jungle island" → terrain + NPCs + quests).
- Cinematic Director polish: focus pull, motion blur, post-processing presets.
- Adventure Craft multiplayer full integration.
- MMO mode: authoritative server.
9.2 Success criteria
- A user types "Show my Viking kingdom" and the editor generates a fly-through with the right music, weather, and NPC blocking.
- An AI NPC remembers a player's actions across sessions.
- Multiplayer worlds scale to 50 simultaneous players.
9.3 Milestones
- ✅ M7.1 — AI camera path generation (M7.11 T4/T4b LLM shot list,
m7-11-complete+ follow-ups) - ✅ M7.2 — AI storyboard generation (same M7.11 T4 shot-list route)
- ✅ M7.3 — AI NPC dialogue + memory (
m7-3-complete) - ✅ M7.4 — AI goal / quest generation (
m7-4-complete) - ✅ M7.5 — AI biome generation ("create an island") (
m7-5-complete) - ✅ M7.6 — Cinematic post-processing (DOF, motion blur, colour grading) (
m7-6-complete+m7-7-complete) - ❌ M7.7 — Adventure Craft multiplayer (full)
- ❌ M7.8 — Authoritative server (MMO mode) — not the
m7-8-completetag (that is camera paths)
10. Phase 8 — Print shops + mobile polish
Goal: Print-shop marketplace integration with QR pickup codes; mobile companion becomes first-class; internationalisation.
10.1 Scope
- Print-shop marketplace backend + API.
- Geolocation-based shop search.
- Order upload + QR pickup code.
- Email + push notifications.
- Mobile companion: full read/write (player actions, character sheet).
- i18n (English, Danish, German, Japanese; community translations beyond).
- Print profiles marketplace.
10.2 Success criteria
- A user finds a print shop within 10 km, uploads the PDF, picks up the print with a QR code.
- The mobile companion syncs with the desktop session live.
- The editor + site are fully translated into 4 languages.
10.3 Milestones
- ✅ M8.1 — Print-shop API (PR #73 stub → PR #76 DB persistence)
- ⚠️ M8.2 — Geolocation + shop search (haversine radius PR #111 + browser geolocation PR #112; directory now DB-backed (PR #189, 2026-09-12 —
print_shopstable migration 0030 + drizzle schema + read-side swap; PR #191 admin POST +print_shop:createaudit row, 2026-09-12; PR #194 ownerPATCH, 2026-09-13; admin is theplatform_adminrole since PR #196; PRs D claim-token flow / E search/filter remain)) - ⚠️ M8.3 — Order upload + QR codes (
POST /print-orders+GET /print-orders/:id/qr+ recent-orders UI PR #77; no notifications) - ❌ M8.4 — Mobile companion v2 (live sync)
- ✅ M8.5 — i18n framework (PR #72,
getT()PR #78) - ⚠️ M8.6 — English / Danish / German / Japanese translations (English only)
- ❌ M8.7 — Print profiles marketplace
11. Integration checkpoints
The end goal is to integrate cleanly with the three partner projects:
| Integration | Phase | Direction |
|---|---|---|
| game-asset-platform | M1.2 (stubs), M5.5 (full versioning), M6.3 (marketplace) | bidirectional |
| adventure-craft | M4.8 (one-way import), M4.9 (read-only bridge), M5.11 (bidirectional), M7.7 (multiplayer full) | bidirectional |
| bevy-game-editor | M6.9 (Bevy export), Phase 9+ (deep integration) | bidirectional |
The contract for each integration is the canonical World.json. No partner project
ever imports WorldForge-internal types.
12. Risk register
| Risk | Mitigation |
|---|---|
| 3D performance on large worlds | Chunking + LOD + instancing from day one. Cap default world size. |
| Determinism violations | RNG seeded by world id + tick. No Math.random(). CI runs determinism tests on every PR. |
| Marketplace licence drift | Every asset carries licence metadata; validator enforces aggregate licence compatibility. |
| Multiplayer conflict confusion | Yjs handles 99% of cases; structured UI for the rest. Education in the docs. |
| Adventure Craft drift | Round-trip tests on every release; .gas-world is the contract. |
| Scope creep | Phase boundaries are hard. New ideas go in a backlog, not in a phase. |
13. Metrics per phase
Each phase ships with a dashboard of metrics:
- Phase 1 (MVP): worlds authored per week, exports per week, retention D7.
- Phase 2 (3D): avg FPS, time-to-first-3D-view.
- Phase 3 (Simulation): NPC count per world, avg simulation tick time.
- Phase 4 (Print + Cinematic): PDFs printed, MP4s exported, avg cinematic length.
- Phase 5 (Collaboration): worlds with ≥ 2 collaborators, merges per week.
- Phase 6 (Marketplace): packs published, packs sold, GMV.
- Phase 7 (AI): AI acceptance rate (suggestions accepted / total), NPC memory size.
- Phase 8 (Print shops + Mobile): print orders fulfilled, mobile DAU.
14. What we explicitly do not build
- Native desktop app — the web app is the product. A PWA install is enough.
- Voice / video chat —
adventure-craftowns this. - Server-side authoritative simulation (until Phase 7) — the simulation runs client-side until MMO mode demands otherwise.
- Custom font / drawing tools — designers use their own vector tools (Illustrator, Figma, Inkscape) and import via SVG.
- Voice acting / sound design — we ship the schema; creators ship the audio.
15. Summary
Phase 1 MVP hex + square 2D editor + Jungle pack + GAS save + Godot export
Phase 2 3D engine Three.js + R3F + weather + day/night
Phase 3 Simulation NPC schedules + quests + fog of war + five modes
Phase 4 Print + cinema PDF atlas + Cinematic Director + Adventure Craft
Phase 5 Collaboration Yjs + versioning + lore + campaigns
Phase 6 Marketplace Pack Studio + GAS marketplace + all engine exports
Phase 7 AI + multiplayer AI cinematography + AI NPCs + Adventure Craft multiplayer
Phase 8 Polish Print shops + mobile + i18n
Each phase is independently shippable. The MVP ships without a 3D engine, and that is fine — the export to Godot already gives the user a 3D experience in another tool. The 3D engine is the added value, not the foundation.