mosaic site
Deno 2 + Fresh 2. Owns game state, the append-only JSONL log, /, SSE, and
the spectator. Puzzle rules live only in ../ (Go).
deno install # once: node_modules for vite/preact
deno task engine # builds ../engine/bin/mosaic-engine
deno task dev # prints the agent prompt, serves 127.0.0.1:8000
deno task test # fold/replay equality, referee gating, geometry
deno task check # fmt, lint, types
deno task solve -- --seed a # scripted client plays a whole game via /mcp
Routes: / viewer (live; / replays from the log), /
streamable HTTP MCP (authless, localhost only), / SSE (live
follows the newest game), / JSONL.
Generation is cached under data/ by sha256(seed|X|n|m); game logs are
written to data/. The private solution is never in the log, so
a restarted server can replay but not continue a game.