arena: multiuser via ArenaManager — Q3-style pmove + delta snaps
Adds server-authoritative multiplayer to arena.mjs using the existing
WS + geckos.io UDP transports (no new infra).
- shared/pmove.mjs (under system/public/.../lib): pure movement
function, dep-free, runs identically in browser and Node.
- session-server/arena-manager.mjs: 60Hz tick, 30Hz snaps,
per-client snap ring (32), delta encoding, lag-comp pos history.
- session-server/arena-probe.mjs + npm run arena:probe: text-only
spectator CLI. Reports rtt, snap rate, jitter, peer list.
- session.mjs: routes arena:hello/bye/cmd/ping (WS) and arena:cmd (UDP).
- arena.mjs client: per-cmd seq with firstSeq batching, pending-cmd
queue, reconcileLocal replay-and-soft-correct, interp buffer for
remote players (~100ms, freeze-on-starve), per-handle colored
stick-figure bodies, net HUD lines.
Smoke: replay parity within 1.5cm (under 5cm dead zone); delta
steady-state 131B vs 307B full (~58% saving).
See plans/arena-multiplayer.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>