task: id: GM-00 size: S title: GM arena roadmap (gm-room.json): GM-01 in M2 right after the Combat Lab, GM-02 in M4, GM-04 (the owner's local role CLI) in M6, GM-03 at the end of M9; the M2/M4/M6/M9 gates name their GM arena part and the wiki Roadmap shows a milestone's tasks next to its groups test: pnpm data:test (gm-arena-roadmap.test.mjs: placement, proposed notes, GM rules, every gm-room.json area and command placed); node tools/ctx.mjs task GM-01 prints the card; the built wiki roadmap page lists GM-02 and GM-03 evidence: logs/evidence/GM-00/ (GM-01…GM-04 cards as .txt) needs: [] proposed: true note: Proposed: owner decision 2026-10-08 (GM arena run). GM-04 is its own M6 task because role access starts with the M6 accounts, three milestones before GM-03; GM-03 closes M9 instead of opening a new milestone (no new id, order or gate to keep in step). milestone: id: M0 name: Kickoff & toolchain dependsOn: [] goal: Every tool works on this machine, the monorepo builds, logging works, and the first ADRs are written. gate: ["Blender, Rust, Unity (batchmode build + EditMode/PlayMode tests), Playwright all verified by logged tests","Token ledger shows M0 cost","ADRs approved by owner","Rust and .NET verified by logged smoke tests (tools/setup/toolchain-smoke.sh)","One-simulation spike result recorded in ADR-029"] art: [] rules: node tools/task-log.mjs start|test|note|finish · card: docs/process/TASK_TEMPLATE.md task: id: GM-01 size: L title: GM arena core in the Combat Lab scene (gm-room.json): static_targets (/gm dummy with DPS meter and hit log), spawn_ring for the monsters that exist by then (/gm spawn), reset_station for what exists (/gm level, /gm reset cooldowns, /gm clear monsters), debug toggles (/gm god, /gm mana, /gm nocd, /gm hitboxes, /gm telegraphs, /gm ai freeze|resume), network lab (/gm lag) and Time/Weather buttons on the M0-12 controller (/gm time, /gm cycle, /gm weather) test: one automated test per GM-01 command (server state after it, audit record written, refused without the dev GM flag); no toggle changes the global time scale or hides a telegraph; Time/Weather commands leave the server outcome identical (ADR-030) evidence: arena panel screenshot + 10 s clip (spawn, dummy DPS meter, /gm lag with jitter and loss, dusk + sandstorm) + audit log excerpt (.txt) needs: ["unity","rust"] proposed: true note: Proposed: owner decision 2026-10-08 (GM arena run). GM rules: every GM action is audited (who, what, where); GM-made items carry the gm flag and can never be traded, sold, listed or mailed; until M6 test builds use a dev-only local GM flag (never in release builds); from M6 access is by the gm or qa role, agents never grant roles, and the owner gives his own account the gm role with the local CLI (GM-04). GM tools never add a global time-scale and never hide telegraphs. milestone: id: M2 name: Combat Lab: one perfect skill dependsOn: ["M1"] goal: Warblade · Horizon Cleave is AAA-complete end to end: input → server phases → animation → VFX → SFX → hit reaction on a dummy and a monster → damage numbers → camera. gate: ["G0/G1: mannequin contract and C1–C18 movement/control tests pass before skill expansion (docs/process/GAME_DEV_GUIDE.md)","Skill passes the one-skill production gate (docs/production/SKILL_GATE.md)","Owner sign-off on feel","G2: multi-angle agent animation/VFX self-review complete; no failed or missing required view/transition accepted","Skill gate row 14: every core detail of the AAA detail catalog that applies is shown by its proof (ADR-028)","Skill factory proven with a second skill before M4 starts (ADR-029)","GM arena core (GM-01): every GM-01 /gm command passes its automated test and is audited; no GM toggle adds a global time-scale or hides a telegraph"] art: ["ART-VFX-040"] guide: time-weather readGuide: node tools/ctx.mjs guide time-weather # 815 B ≈ 204 tokens of the guide's 35,100 B rules: node tools/task-log.mjs start|test|note|finish · card: docs/process/TASK_TEMPLATE.md task: id: GM-02 size: L title: GM arena for the vertical slice: preset_builds for the vertical-slice builds in builds.json (warblade, windarcher, pyromancer; /gm preset per presetRule: level 40, gear, gems, planBuild Atlas, Codex, hotbar), item_forge for slice items (/gm item, /gm affix, /gm socket, /gm refine), one-click Dewgrass/Orchard monster packs in spawn_ring, teleport inside the slice (/gm tp) and the Atlas, Codex and facet resets (/gm reset atlas|codex|facets) test: each slice preset's Atlas allocation equals planBuild from the wiki Atlas planner (golden test); forged and preset items match the forge preview (affix tier and value in range) and carry the gm flag, and every trade, sell, list or mail path that exists by then refuses them; every slice pack and teleport target resolves; one automated test per GM-02 command evidence: per-build preset screenshot (gear, Atlas, hotbar) + forge preview vs in-game popup pair + audit log excerpt (.txt) needs: ["unity","rust"] proposed: true note: Proposed: owner decision 2026-10-08 (GM arena run). GM rules: every GM action is audited (who, what, where); GM-made items carry the gm flag and can never be traded, sold, listed or mailed; until M6 test builds use a dev-only local GM flag (never in release builds); from M6 access is by the gm or qa role, agents never grant roles, and the owner gives his own account the gm role with the local CLI (GM-04). GM tools never add a global time-scale and never hide telegraphs. milestone: id: M4 name: Vertical slice (3 builds) dependsOn: ["M3"] goal: Warblade, Windarcher and Spellslinger fully playable with 6 skills each, 6 movement gems, Atlas + Codex, Dewgrass/Orchard monsters with reaction sets, HUD v1 desktop + mobile. gate: ["Playtest: 30 min session at 30 fps on all physical Low references; 60 fps on the secondary High desktop; both cameras and rapid dash traversal profiled","Owner review of each build's 10 s showcase","G3 battle slice: chain + all movement gems + grunt/elite/representative placeholder boss + camp; all input devices, both cameras and tier/authority invariants pass","GM arena slice (GM-02): /gm preset gives each vertical-slice build its presetRule character with the planBuild Atlas; gm-flagged items are refused by every trade, sell, list and mail path"] art: ["ART-HUD-001","ART-HUD-002","ART-HUD-004","ART-KEY-warblade","ART-KEY-windarcher","ART-KEY-pyromancer"] rules: node tools/task-log.mjs start|test|note|finish · card: docs/process/TASK_TEMPLATE.md task: id: GM-04 size: M title: GM role access: a local CLI the owner runs to give his own account the gm role (and qa to testers he picks), audited; /gm commands switch from the dev-only local GM flag to the gm/qa role check; agents build and test it on a throwaway local database and never grant a role test: on a throwaway local database: grant and revoke write audit rows; /gm commands are refused without gm or qa and allowed with it; release builds contain no dev GM flag (build check) evidence: CLI test log + audit rows excerpt (.txt) needs: ["rust"] proposed: true note: Proposed: owner decision 2026-10-08 (GM arena run). Role access starts with the M6 accounts, so the CLI lands here, before GM-03 (M9). The owner runs it on his own account; agents never grant roles. milestone: id: M6 name: Online core at 1,000 per channel dependsOn: ["M1","M4"] goal: Accounts, characters, persistence, channels (1,000 cap), parties, chat, reconnect; real clients + bots together. gate: ["Soak 60 min, zero item duplication in fuzz tests","Downstream ≤ 32 KB/s in crowded town","Red team: every cheat attempt banned, nothing duplicated; false positives: zero bans for 1,000 legitimate bots","GM role access (GM-04): /gm is refused without the gm or qa role, the dev-only GM flag is absent from release builds, and only the owner grants roles"] art: [] rules: node tools/task-log.mjs start|test|note|finish · card: docs/process/TASK_TEMPLATE.md task: id: GM-03 size: L title: GM arena complete: boss_pit (/gm boss for the Bellbound Regent and Kharuun with start phase, enrage-timer toggle, fight reset and telegraph timing overlay), all 18 preset_builds (presetRule; Atlas by planBuild, the Atlas page's planner), item_forge over every base, affix, tier, socket, refinement +0…+15 and the fractured flag, /gm give stacks up to 999, /gm tp to every waypoint, area, boss spawn and quest step, and every gm-room.json command with its own automated test test: a coverage check fails when any gm-room.json command has no automated test; 18/18 preset Atlas allocations equal planBuild; the forge round-trips every base and every affix tier's value bounds; every teleport target resolves; each boss start phase and the enrage toggle reach the expected server state with telegraphs visible on Low; trade, sell, listing and mail refuse gm items evidence: command coverage report JSON + boss pit clip per start phase on Low + 18-build preset contact sheet + audit log excerpt (.txt) needs: ["unity","rust"] proposed: true note: Proposed: owner decision 2026-10-08 (GM arena run). Area features with no gm-room.json command yet (boss enrage timer and fight reset, dummy armour/resistance presets, show server positions, refill life and mana, remove buffs) get a proposed command there first, so each has its test. GM rules: every GM action is audited (who, what, where); GM-made items carry the gm flag and can never be traded, sold, listed or mailed; until M6 test builds use a dev-only local GM flag (never in release builds); from M6 access is by the gm or qa role, agents never grant roles, and the owner gives his own account the gm role with the local CLI (GM-04). GM tools never add a global time-scale and never hide telegraphs. milestone: id: M9 name: Content beta dependsOn: ["M8"] goal: 6 hybrid builds, chapters 4–5, Bellbound Regent, Kharuun, Lantern Convoy event. gate: ["Full L1→40 run in ~40 effective hours (bots + humans)","Boss fights readable on Low","GM arena complete (GM-03): every gm-room.json command has a passing automated test; both bosses start at any phase in the boss pit with telegraphs readable on Low"] art: ["ART-KEY-*","atlas-icons"] rules: node tools/task-log.mjs start|test|note|finish · card: docs/process/TASK_TEMPLATE.md