WorldForge Studio

Ground truth lives in the repo. This page is a build-time mirror of docs/11-phased-roadmap.md. For per-tag milestone completion, see STATUS.md.

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-world export (M1.7), Adventure Craft round-trip via packages/export. .gas-world import 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 — PrintMode enum + per-mode compileForPrint + print_artifacts store + 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/api now 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-shops page + 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 owner PATCH — print_shops table migration 0030; admin create gated on the platform_admin role (user_roles, migration 0032, PR #196); owner edit via owner_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.ts is the one write path), D2 (#252, #256, world_poi_state migration 0042 + world_runtime_state migration 0043), D3 (#246, readWorldFor), D4 (#250, atlas-tables-canonical decision), D5 (#253, auto-accept via proposal_policies migration 0044); every authz audit low closed (#240 observers fire triggers; #242 branch access; #247 API key catalogue + expiry; #251 LLM base_url SSRF 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 for world_runtime_state, wall-time ticking deferred to M7.8. See docs/audits/2026-09-18-status-report.md for the full snapshot.

Current schema: WORLD_SCHEMA_VERSION = '0.44.0' (0.44.0: adventure sites — POI_CURATED_CATEGORIES gains 'lair' (the dwelling of something that owns a place and defends it — a dragon's lair, a goblin warren) and MeshKey gains 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.preset gain '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.preset gain '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[].kind gains 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: optional dungeon — 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.preset gain 'archipelago' — the Shattered Isles template (tropical biome + new island dial: 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: optional world.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.preset still 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: optional calendar (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: optional hazards (dangerous grid areas, 2026-09-21; 0.28.0: taint & sanctity: optional sanctity (−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: optional districts (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.mood world default atmosphere, 2026-09-21; 0.21.0: preset gains '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-complete git 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

  1. 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.
  2. The MVP is end-to-end. A user can author → save → export on day one.
  3. Each phase is shippable. A user can adopt any phase without taking on the next.
  4. GAS is the contract. The marketplace, the integration points, the asset format — all GAS-native.
  5. 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 version 0.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-world file round-trips through game-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/web and apps/site running; 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 UI ae9cf97) M1.7 — File export. .gas-world JSON 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-complete docs 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-complete adds 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-player PR #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 — startNpcScheduleObserver emits on transitions, replayNpcOverride slice, <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 (.html bundle).
  • 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 — PrintMode enum + compileForPrint per-mode + print_artifacts store + 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-complete multi-lane timeline, m7-10 Director panel)
  • ✅ M4.5 — Camera path interpolation (Bezier / spline) (m7-8-complete, m7-9-complete)
  • ✅ M4.6 — Cinematic export (MP4 / WebM / GIF) (m7-11-complete T1/T2)
  • ✅ M4.7 — Interactive viewer bundle (m7-11-complete T6 + 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_memberships gm / 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-complete still pending)
  • ✅ M6.2 — Pack schema + validator (packages/marketplace/src/schemas.ts, Spec 5 marketplace)
  • ✅ M6.3 — Marketplace backend (Spec 5 marketplace backend; /packs discovery + 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-complete tag (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_shops table migration 0030 + drizzle schema + read-side swap; PR #191 admin POST + print_shop:create audit row, 2026-09-12; PR #194 owner PATCH, 2026-09-13; admin is the platform_admin role 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:

IntegrationPhaseDirection
game-asset-platformM1.2 (stubs), M5.5 (full versioning), M6.3 (marketplace)bidirectional
adventure-craftM4.8 (one-way import), M4.9 (read-only bridge), M5.11 (bidirectional), M7.7 (multiplayer full)bidirectional
bevy-game-editorM6.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

RiskMitigation
3D performance on large worldsChunking + LOD + instancing from day one. Cap default world size.
Determinism violationsRNG seeded by world id + tick. No Math.random(). CI runs determinism tests on every PR.
Marketplace licence driftEvery asset carries licence metadata; validator enforces aggregate licence compatibility.
Multiplayer conflict confusionYjs handles 99% of cases; structured UI for the rest. Education in the docs.
Adventure Craft driftRound-trip tests on every release; .gas-world is the contract.
Scope creepPhase 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-craft owns 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.