forked from c-fu/arah2
- web/ workspace: TS + Vite shell (maplibre-gl 6.15.0, vite 8.3.5, TS 5.9.3; no UI framework, no Telegram SDK script tag) - tsconfig mirrors bot/ strictness byte-for-byte except the three authorized keys (DOM lib, vite/client types, resolveJsonModule) - test/runner.mjs + harness.mjs copied verbatim from bot/test/ (body-identical past header) - root package.json: web workspace + web:* delegate scripts - web/src/main.ts entry module created (tsc include:['src'] needs ≥1 input; 03-02/03-03 mount here)