# v2 overnight goals (set 2026-09-27) Sequential, ambitious, each with a check an agent can run. Work top to bottom; a goal is done only when its check passes on `world-format-v2` and is pushed. Spec: `agents/world-format-v2.md` (index; area docs in `agents/v2/`); contract: `agents/v2-formats.md`; roadmap and briefs: `agents/v2-roadmap.md`, `agents/v2-*.md`. ## Standing rules - **At most 3 agents at once.** Prefer one builder at a time on the critical path, with a reviewer or researcher alongside. - Each builder gets its own worktree `/home/gabriel/newcastle-wt-` and branch cut from `origin/world-format-v2`; the orchestrator merges into `world-format-v2` after running the tests itself. Never merge or push `main`; never touch `/home/gabriel/newcastle` (it serves the live v1 site) or `v1.0` / `v1-maintenance`. - Only the orchestrator edits `v2/CLAUDE.md`, the root `CLAUDE.md` and the index sections of the spec, to avoid merge conflicts. - Browser runs go through `flock /root/.claude/jobs/a6c2e4b1/tmp/browser.lock` (or a successor lock path), one at a time. If `free -m` "available" is under 1 GB, wait; the owner allows `systemctl stop terraria` if memory is needed (restart it after). - Node 22 `--test` takes files, not directories. - Decisions already made are in the spec's decisions register, the roadmap's delegated decisions, and the contract's resolved tables: don't reopen them without the owner. ## Goals 1. **Land what's in flight.** Merge `v2-missions` (reconciled with formats v1.2), `v2-weather-snow`, `v2-recorder`, `v2-bench`, `v2-chunks` into `world-format-v2`. Add `v2/test.sh` running every v2 suite by file path. **Check:** `bash v2/test.sh` exits 0. 2. **Kernel K2 and speed.** Hash entities in ascending id order (layout-independent, a format bump), add a per-entry hash cache for cold components, update every golden hash and the docs. **Check:** `v2/test.sh` green; a street run of 2,700 ticks is at least 2x faster than today's ~1 s. 3. **A headless Heaton slice.** One scenario wiring the kernel, `ncl` content, the Heaton navmesh, clock, weather, the systems, one mission and dialogue barks: 10 game-minutes of Heaton at dusk in the rain, a burning car, a delivery mission. Record and replay. **Check:** `node v2/sim/scenarios/heaton.mjs --replay` reproduces every tick hash. 4. **NPCs v0.** Peds on the navmesh with `where(seed, t)` schedules for dormant agents, near agents with ORCA avoidance, the witness to `OnReported` to police chain, rain and fire reactions through fields, barks through the dialogue engine. **Check:** the Heaton slice asserts that a witnessed crime produces a report and a police response, and that peds shelter when it rains. 5. **Vehicles v0 (brief l).** Own tyre model and drivetrain on the kernel; re-measure today's v1 handling (0-60, top speed, turning circle, handbrake yaw, slide recovery) and match the `core:handling/v1-arcade` preset within 5%; Metro as a rail vehicle drawing power. **Check:** a handling regression test and a Metro power-cut test in `v2/test.sh`. 6. **First pixels (briefs e and g).** A v2 page on three.js WebGPURenderer (WebGL2 backend headless) drawing Heaton from `v2-chunks` bundles and the snapshot, with the sensor camera basics; bench JSON for it. **Check:** a headless screenshot from the v1 spawn with no WGSL or console errors, plus a page the owner can open on the M3. 7. **Forge MVP stage 1 (brief h).** Edit mode toggle, spawn, move, remove, wire, inspect as sentences, per-author undo, writing overlay files that pass the validator; the AI assistant as ops-only with preview. **Check:** a scripted headless session builds a bench trigger that plays a bark, the overlay validates, and undo restores the previous hash. 8. **Referee v0 (brief k).** Node referee running the kernel; ownership leases with epochs; two headless clients each driving a car, handing a prop between them, and a peer disconnect; relay path, P2P optional; under-18 accounts forced relay-only. **Check:** a two-client test with no double ownership and state converging within the interpolation delay. 9. **Audio v0 (brief j), the testable half.** Acoustic zones generated from the registry and heightfield, radio position from the world clock, impact sounds chosen from material pairs, the voice pipeline's batch script (trim, loudness, Opus, Rhubarb) run on a test WAV. **Check:** tests for zones, radio sync across two clients, and the batch script output. 10. **Characters milestone (brief i).** MPFB2 base body imported to glTF with VRM bone names, one outfit on the hide-mask system, the per-character bake to one mesh, ragdoll colliders fitted from the baked body. **Check:** a headless bake test (triangle and bone counts, colliders within bounds) and a turntable screenshot. 11. **Rust core groundwork (brief m).** Export conformance fixtures from the JS kernel (seed, inputs, per-tick hashes for the Heaton slice) and a plan for the Rust/WASM port with hecs and Rapier. **Check:** fixtures committed; a no-op Rust crate compiles if a toolchain is installed (install only with the owner's OK). 12. **Condense the spec.** Split `agents/world-format-v2.md` into an index plus per-area docs, keeping every decision and the gold-dust list; fix any stale lines found on the way. **Check:** no decision lost (a reviewer agent diffs old vs new for decisions and numbers). ## For the owner (can't be done by agents) Run the bench and renderer pages on the M3; the ARM determinism check (`tools/determinism/serve.mjs`, `/?build=det`, expect `a3e6aacdec0f0161`); the splat pilot (`agents/v2-f-splat-pilot.md`); round-trip times from Newcastle ISPs; legal reads (CMU mocap in a free SDK, minors' contracts, Open-Meteo and Esri terms, publishing ODbL data, Online Safety Act assessments); pick and edit the AI-drafted Geordie barks; the navmesh road-crossing cost. ## Progress - Goal 1 done (`4998605`): in-flight work merged, `bash v2/test.sh` green. - Goal 2 done (`eeca687`): kernel format 2 (layout-independent cached hash), street run 2.25x faster in prod (dev 1.8x, keeping line-precise dev errors by choice). - Goal 3 done: Heaton slice, 36,000 ticks in ~6 s, replay identical (final `2f4ab786ffce2ecf`). Gaps it found, to fold into later goals: fire/heat tuning at real scale (no radiative loss; cars run away past 1,000°C), real UK rain can't douse a fire (drying beats 1.4 mm/h wetting), `systems/weather.mjs` is a toy (the slice's `weather_field` feeds real weather: promote it), Metro hard-wired to the sandbox street, no plain `Ignite` input, dialogue pack and lawns not in the lockfile, recordings lack keyframes, stand-in systems for spawning, routes, trigger volumes and barks. - Goal 4 done (`36c11b0`): NPCs v0 (dormant field, promotion out of view, ORCA, witnesses to 999 to police, rain and heat reactions), asserted in the Heaton slice. - Systems realism merged: fire/heat in real units, rain vs fire, real weather as default, Metro on any placed line with a power-cut test (covers goal 5's Metro half). Still open from goal 3: dialogue pack and lawns in the lockfile, recording keyframes, stand-in systems. - Goal 5 done: road vehicles v0 on kernel Rapier (`v2/sim/physics/`), all five handling metrics within 5% of re-measured v1; Metro half via systems realism. - Goal 6 done: first v2 pixels, real WebGPU headless with no errors, 115 draw calls from the spawn (v1: 340-3,500); owner to open it on the M3. Converter follow-up: write the material strip as an array texture (512 x 9216 exceeds WebGPU's 8192 default). - Goal 8 done: referee v0 (`v2/net/`), all checks green over a lossy link. - Goal 9 done: audio v0 testable parts (zones, clock-synced radio, impacts and voice budget, voice batch with real Rhubarb visemes), 270 tests green. - Goal 11 done: conformance fixtures (2.2 MiB) and a concrete Rust port plan (custom sparse sets not hecs, dmath ported line for line, crate layout, fixture-gated order). No Rust toolchain installed (needs the owner's OK). Open: formats section 14 orders systems by `after` then id, the kernel by declared order; decide in JS (changes hashes). - Goal 7 done: forge MVP stage 1 (formats v1.3: weld entry, `core:logic/trigger` and `core:logic/speaker`); a scripted session builds a bench and a trigger zone that play Geordie barks, validates, fires through the kernel, undo/redo restore hashes; browser smoke clean. Content-lock changes require `node v2/conformance/generate.mjs --only heaton`. - Goal 10 done: characters milestone. Placeholders: skin-tight clothes (no drape), bald, no face morphs, 27k triangles at LOD0 (spec proposes 15k), no PD motors yet. Owner decision logged in the formats: the look record hashes wire-rounded values. - Goal 12 done: spec split into a 233-line index plus 12 area docs under `agents/v2/`; a 370-row checklist and an independent review (pass with fixes, all applied) confirm no decision was lost. **All 12 overnight goals complete (2026-09-27).**