# v1.0 MVP — Archived Roadmap

**Status:** ✅ SHIPPED 2026-05-17
**Tag:** `v1.0`
**Range:** `21ee4e8` (2026-05-01) → `e6b6c47` (2026-05-17)
**Timeline:** 17 days
**Total phases:** 13 (11 complete, 2 superseded by 06.7)
**Total plans:** 142 (138 executed + 4 superseded plans)
**Hard milestone:** CLI-08 cleared at `1f6073e` (HUMAN-UAT round 2 PASS, operator dunsen)

## Core Value Delivered

Original BN Online players can open Chrome, log in with their migrated account, walk around, and chat with each other in real time — bug-free. Demonstrated end-to-end on Fly.io staging via two-player HUMAN-UAT.

## Phase Roster (full detail preserved here)

### Phase 1: Extraction ✅ 2026-05-02

**Goal**: Both source `.gmd` files reproducibly extracted into structured, diffable per-resource trees, committed to git, with the era-appropriate decompiler stack documented.
**Plans**: 7/7
**Requirements satisfied**: EXT-01..08

- [x] 01-01: Scaffold tools/extract-gmd + BinaryReader + header — `4348d38`
- [x] 01-02: Simple block readers — `bd03c3f`
- [x] 01-03: Sprite/background ZLIB readers + DnD subsystem — `622b09e`
- [x] 01-04: Timelines/objects/rooms readers + readProjectFile orchestrator — `f8fa0f3`
- [x] 01-05: Emit layer — `982dfe2`
- [x] 01-06: CLI extract+verify subcommands + decomp/TOOLS.md — `302e6b6`
- [x] 01-07: End-to-end real `.gmd` + reproducibility + 13 wire-format bugs fixed against LateralGM source

### Phase 2: Client Engine Documentation ✅ 2026-05-02

**Goal**: Document every client engine feature; lock Phaser-vs-PixiJS via ADR.
**Plans**: 7/7
**Requirements satisfied**: CDOC-01..04
**Key outcome**: ADR 0001 — Phaser 3.90.0 locked (Phaser 286 / Phaser 4 286 / Pixi 201 on 21-row matrix)

### Phase 3: Server Documentation & Schemas ✅ 2026-05-05

**Goal**: Reverse 39dll wire protocol, save formats, persistence-layer ADR, canonical-snapshot ADR, closed parity-feature checklist.
**Plans**: 12/12 (9 main + 3 gap-closure)
**Requirements satisfied**: SDOC-01..06
**Key outcomes**: ADR 0002 (SQLite + Litestream), ADR 0003 (canonical-snapshot), parity-checklist locked. Linux CI verify-phase-3 deferred per HUMAN-UAT.

### Phase 4: Server Rebuild (MVP) ✅ 2026-05-07

**Goal**: Node + TypeScript + Colyseus authoritative server for movement+chat slice.
**Plans**: 14/14
**Requirements satisfied**: SRV-01..14
**Key outcomes**: PROTOCOL_VERSION enforced, RoomRegistry hot-reload + Ed25519 manifests (SRV-13), Better-Auth + argon2id, legacy-account migration with transparent rehash, ADR 0004 hot-reload contract, lint-no-clipboard-rce (SRV-12 anti-port forcing function).

### Phase 5: Deploy ✅ 2026-05-08

**Goal**: Ship server to Fly.io with Litestream, CI/CD, health checks, restore runbook.
**Plans**: 14/14
**Requirements satisfied**: DEP-01..08
**Key outcomes**: Multi-stage Dockerfile, fly.staging.toml + fly.prod.toml, OpenObserve obs Fly app, ADR 0005 + ADR 0006, RESTORE.md drilled.

### Phase 6: Client Rebuild — MVP Gate ✅ 2026-05-17 (cleared via 06.7)

**Goal**: Vite + Phaser 3 client; CLI-08 MVP gate (two players move + chat over deployed server).
**Plans**: 8/9 main (06-09 SUPERSEDED by 06.7) + 06.1/06.2/06.5/06.6/06.7 sub-phase chain
**Requirements satisfied**: CLI-01..09 + AST-01

### Phase 06.1: gap-closure D-39..D-46 ✅ 2026-05-11

**Plans**: 6/7 (06.1-07 SUPERSEDED by 06.7). Visual-fidelity payload shipped (alpha-key + TSide1 + bkdraw + NAVI_MASK collision + camera follow + Shift-stand).

### Phase 06.2: gap-closure D-50..D-53 + reopens ✅ 2026-05-13

**Plans**: 11/11. D-40/D-41/D-45 fixes, D-50 ghost-player onLeave, D-51 dup-login eviction, D-52 reconciler diagnostics, D-53 spawn-delay.

### Phase 06.3: cycle-4 gap-closure ⚠ SUPERSEDED by 06.7

20 plans executed locally; verification (06.3-20) NOT APPROVED. Root cause of pursued bugs (D-52/D-57/D-58 reconciler chain) eliminated structurally by 06.7's client-trust model shift. See [`phases/06.3-.../06.3-SUPERSEDED.md`](../phases/06.3-cycle-4-gap-closure-d-40-d-45-d-51-d-53-d-54-d-55-d-56-d-57-/06.3-SUPERSEDED.md).

### Phase 06.4: cycle-5 gap-closure ⚠ SUPERSEDED by 06.7

0/16 plans executed. Entire phase made moot by 06.7's network-model overhaul. D-63 legacy-origin helper still landed in-repo as a permanent mitigation; full plan never executed. See [`phases/06.4-.../06.4-SUPERSEDED.md`](../phases/06.4-cycle-5-gap-closure-d-51b-d-55b-d-55c-d-57b-d-58b-d-60-d-61-/06.4-SUPERSEDED.md).

### Phase 06.5: Static client asset split ✅ 2026-05-16

**Plans**: 5/5. Client-only deploys via Fly /data volume releases (no Docker image push for client-only diffs). Atomic symlink swap; rollback drilled.
**Requirements satisfied**: REQ-DEP-01, REQ-DEP-04, REQ-CLI-08

### Phase 06.6: UAT accounts + integer scaling + chat clamp + RMB menu ✅ 2026-05-17

**Plans**: 5/5. UAT accounts seeded (dunsen_uat, rebbie_uat). Phaser.Scale.NONE + manual integer setZoom (ADR 0008). ChatHUD canvas-rect clamp. Right-click EscMenu.

### Phase 06.7: Client-trust network model + fall trigger ✅ 2026-05-17 (CLI-08 CLEARED)

**Plans**: 9/9. Player-movement trust model flipped to client-owns-position. Server retains chat/inventory/scores authority. Anti-cheat backstop via tick-by-tick illegal-position detection + fall reset (deferred to Phase 06.8 per scope cut). PROTOCOL_VERSION 3→4. CLAUDE.md Hard Rule 1 carve-out documented.
**Requirements satisfied**: REQ-SRV-03, REQ-SRV-14, REQ-CLI-04, REQ-CLI-08
**HUMAN-UAT round 2:** PASS at `1f6073e` (operator dunsen, 2026-05-17). **MVP gate cleared.**

## Key Decisions (with outcomes)

| Decision | Phase | Outcome |
|---|---|---|
| Server: Node 22 + TypeScript + Colyseus 0.17 | 3-4 | ✓ Validated — 30 Hz tick + 10s reconnect grace + token-bucket rate limit all stable on staging |
| Client: Phaser 3.90.0 (ADR 0001) | 2 | ✓ Validated — Phaser 4 caveat held; nothing surfaced that would have required Pixi fallback |
| Persistence: SQLite + Litestream + Tigris (ADR 0002) | 3 | ✓ Validated — RPO sub-second on staging; restore drilled |
| Canonical snapshot: hybrid (ADR 0003) | 3 | ✓ Validated |
| Hosting: Fly.io single machine + persistent volume | 5 | ✓ Validated — operator-local `flyctl deploy` after GH Actions storage exhausted 2026-05-17 |
| Movement trust: client-authoritative (06.7 carve-out from Hard Rule 1) | 06.7 | ✓ Validated — eliminated reconciler-drift bug class; HUMAN-UAT PASS |
| Phase 7 Full Parity relegated to backlog | post-06.7 | ✓ Right call — spans many milestones, not a single phase |

## Tech Debt Carried Forward

- **D-63 helper enforcement**: `phaserOriginForLegacyPlayerAttached` helper exists at `apps/client/src/render/legacy-origin.ts` and is referenced in CLAUDE.md but the HARD gate 5 audit script (`tooling/no-inline-origin.ts` per 06.4 plan 15) was never built — next milestone's first effect port should ship the audit script.
- **`pnpm trace:check` placeholder noise**: Phase 04 + 06.4 docs carry `REQ-SRV-XX` / `REQ-X` illustrative placeholders that trip the strict-mode trace checker. Accepted at milestone close as known noise; sweep in next milestone.
- **Phase 06.8 (anti-cheat illegal-position fall trigger)**: Deferred from 06.7. The server-side `isPositionLegal` check + grace-window fall-reset was originally bundled with the client-trust shift but cut to ship CLI-08 faster. Without it, a malicious client can teleport visually (mitigated only by 30 Hz position-update rate-limit + future fall-reset).
- **Persistent staging soak**: Multi-day uptime test not yet run; only single-session HUMAN-UAT cycles.
- **CI dead**: GitHub Actions storage quota exhausted 2026-05-17; deploy is operator-local. Restore CI in next milestone or accept as permanent.
- **Test 5 (Phase 5 HUMAN-UAT — legacy localList.txt one-shot import)**: ⬜ pending. SIGTERM half + SRV-08 kill -9 verification also still partial.
- **prod environment unprovisioned**: rebno-prod never created; only rebno-staging exists.
- **`docs/LEGACY_FEATURE_REFERENCE.md`**: untracked file from milestone window; triage separately.

## Coverage

- v1 requirements: **38 active satisfied / 11 relegated to Full Parity backlog**
  - EXT-01..08 ✓ (8)
  - CDOC-01..04 ✓ (4)
  - SDOC-01..06 ✓ (6)
  - SRV-01..14 ✓ (14, SRV-08 partial — kill -9 deferred)
  - DEP-01..08 ✓ (8)
  - CLI-01..09 ✓ (9)
  - AST-01 ✓ (1)
  - AST-02..04 → backlog
  - PAR-01..08 → backlog

## Cross-references

- Original ROADMAP.md (full phase details before archive): see git history at `e6b6c47:~1`
- Active phase artifacts: `.planning/milestones/v1.0-phases/`
- Full Parity backlog: `.planning/todos/pending/2026-05-17-phase-7-full-parity-backlog.md`

---
*Archived 2026-05-17 at milestone close.*
