Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
11 KiB
[INFERENCE] Focus now on a small, persistent multiplayer descent, supported by end-to-end Unreal performance work. VoxelForge has substantial terrain technology. The larger uncertainty is whether it delivers a reliable, interesting shared expedition. Another sequence of tunnel optimizations will not resolve that.
Read-only review of assembler/world at 044cd6d; no files changed and no builds, tests, or project execution. [CODE] identifies repository evidence; design-document references establish intent, not implementation. [MEASURED] means reported results, not independently reproduced measurements.
1. Where the project actually is
[CODE] Core is real and integrated, but generator implementation remains mixed. Unreal compiles the canonical standalone sources through validated wrappers. Core dispatches to surface, floating-island and native graph evaluators, with a legacy-generator fallback when appropriate. That is useful coverage, but does not mean every family has a complete native implementation. See VoxelForgeCore.Build.cs:15 and ShapeWorldInternal.h:600.
[MEASURED] Passage correctness and speed have improved substantially. L109 simplified tunnels and removed support-restoration machinery, reducing floating-island and tunnel-network near-generation times by approximately 31–38%. L125 reports 21,425/21,425 open route samples, a maximum sampled floor offset of 7.884 mm, and matching cross-compiler/worker hashes. These are meaningful engineering achievements. L109, L125.
[MEASURED] The one-second player experience is not achieved. L125’s standalone near-ready medians were approximately 0.78–1.03 seconds. L127’s Unreal startup took 2.22–2.51 seconds; at 30 m/s, median near coverage fell from 43.36% to 40.22% after the smooth-tunnel merge. Both versions recovered after stopping. L130 found no measurable timing improvement and skipped Unreal movement. These are different workloads; subtracting their times would not isolate a particular overhead. L125, L127, L130.
[CODE] Multiplayer foundations exist; the multiplayer lifecycle remains unfinished here. There are season hashes, local terrain-edit entry points, and streaming-anchor infrastructure. The architecture explicitly leaves join replication, authoritative edit messages, late-join snapshots and networked season changes open. The edit entry point directly dispatches to local modification paths. VoxelWorld.h:574, VoxelWorld.cpp:15771, ARCHITECTURE.md:2408.
[CODE] The composer is more than a proposal, but less than the full content vision. It rolls candidates, measures them and rejects failures. The intended system additionally combines tagged geometry, materials, decorations, creatures and audio; theme coherence remains an open design item. VoxelSeasonManifest.cpp:2523, COMPOSER-NOTES.md:1512.
[INFERENCE] This repository demonstrates a capable terrain platform, not yet a validated game loop. I cannot establish what gameplay exists outside the plugin. The GDD itself identifies “Is the descent fun?” as its first unresolved question. GDD.md:441.
2. Ranked priorities
All sizes below are [INFERENCE]: rough focused engineering estimates, excluding substantial art production.
1 — Deliver one multiplayer expedition that survives reconnecting. Size: 3–6 weeks.
[INFERENCE] Use two contrasting strates and their connecting tunnel. Two players descend, find one destination, uncover or collect something, return, and retain their changes after restart. Include a third player joining after terrain has changed. Avoid expanding immediately into the city economy or community backend.
[INFERENCE] The necessary foundation is a server-approved world identity, ordered authoritative edits, a saved snapshot plus subsequent edits, and collision around separated players. Give edits stable identifiers so retransmission cannot apply them twice. Reuse the existing local edit and anchor systems.
[INFERENCE] Done: host/client edits agree; a late joiner reconstructs the same terrain; restart preserves it; incompatible world versions fail clearly; remote players have ground when away from the host.
[INFERENCE] Success: a complete shared expedition without terrain disagreement, lost progress or collision failures—and players can explain what made them want to descend again. This tests the project’s central assumptions much earlier than a complete RPG would.
2 — Close the Unreal arrival and movement gap. Size: 1–3 weeks initially.
[MEASURED] L122 found idle generation capacity while admission was blocked; L123 measured approximately 19 ms from region request to game-thread observation despite sub-millisecond median compilation. Simple lookahead and admission relaxations failed their combined coverage/frame-time gates. L121’s modest extra far-apply lane did improve far coverage. L121, L122, L123.
[INFERENCE] First establish one current-build, rendered Unreal baseline on intended hardware. Measure arrival through visible terrain and usable collision, then walking, 30 m/s travel, turns, teleporting and edits. Record near coverage, far gaps, frame-time spikes and memory separately. NullRHI measurements, which omit rendering, cannot certify VR comfort.
[INFERENCE] Investigate region completion, admission and publication before another broad density rewrite. A game-thread continuation is a candidate experiment, not a proven solution; keep world mutation on its owning thread.
[INFERENCE] Done: approximately one-second LOD0–2 readiness on the agreed hardware, safe collision, steadily filling far terrain, and an explicit movement-coverage target without worsening frame spikes. Success: repeated rendered runs meet those limits, including with remote-player collision work. Do not redefine “ready” as only the nearest handful of tiles.
3 — Turn generator breadth into playable variety. Size: 2–4 weeks for the first content slice.
[INFERENCE] Establish a compact capability matrix for each family: Core dispatch, entrances/exits, interior connectivity, edits, materials/content, far terrain and performance. Include dreamcore/liminal explicitly; motif generation alone does not establish a convincing anomalous place.
[MEASURED] L58 illustrates the distinction: its lattice route passed reachability checks, but the review described a corkscrew tunnel rather than the intended open vertical shaft. Technical validity and identity are separate acceptance criteria. L58.
[INFERENCE] Extend the existing offline composer with a small tagged library: a grounded cave, an island environment and one liminal identity, each with coherent materials, sound and a destination. Preserve owner review before publishing a season.
[INFERENCE] Done: several seeds produce recognizably different, coherent places with findable progression and usable encounter spaces. Success: players navigate them without developer guidance and distinguish their identities without reading labels. Expand families after this works.
4 — Consolidate the evidence and remove obsolete complexity incrementally. Size: 2–4 days, then ongoing.
[INFERENCE] Maintain one short current-state page: shipped behavior, open defects, active baseline, hardware and next acceptance test. Keep historical reports as history. Remove rejected experimental paths when they no longer serve a specific comparison; extract stable responsibilities when touching oversized files.
[INFERENCE] Done: a contributor can identify the current evaluator, runtime path, multiplayer gaps and performance limits without reconstructing 130 rounds. Success: new work no longer repeats rejected experiments or treats old measurements as current.
3. Stop or deprioritise
- [INFERENCE] Pause open-ended tunnel micro-optimization. L125/L126 missed the older speed bar; L130’s reach correction produced no measurable speedup. Keep correctness fixes, but require a current cost account and a bounded experiment before further optimization. MEASURED: L126, L130.
- [INFERENCE] Do not implement Astra recommendations mechanically. Astra1’s support-heavy model predates L109’s simplification. Astra2/3 offer hypotheses, not measured wins for today’s code. Re-profile before adopting them.
- [INFERENCE] Defer GPU generation, a mesher replacement, elaborate discovery systems and large-scale backend work. None currently resolves the missing shared expedition.
- [INFERENCE] Stop requiring old-version byte identity for deliberate generation changes. Preserve peer agreement within a version and explicit versioned saves; permit reviewed geometry improvements.
4. Debts that will bite later
[INFERENCE] Determinism needs a deployment contract. Linux Clang/GCC and worker-count agreement is strong evidence, not proof across every intended machine. Include Windows/compiler/CPU combinations actually supported. World identity must cover evaluator, content, layout, scale and edit state—not merely seed. MEASURED: L130.
[CODE] Scale and fallback complexity remain active integration risks. Core is opt-in, and runtime queries bridge different coordinate conventions. VoxelWorld.h:300, VoxelWorld.cpp:15612. [INFERENCE] Test edits, content placement and collision across those boundaries before broadening authoring.
[INFERENCE] A passing route audit does not prove a whole strate is enjoyable, connected or suitable for six-player combat. Retain geometric checks, but add actual traversal, destination discovery and encounter-space evaluation. Those are now more valuable than another polished tunnel benchmark.