| plan: guards landed | dami | | +19 | -0 | |
| viewer: placeholders frame nothing (boxOf skips shapeless tiles) | dami | | +4 | -1 | |
| site: anti-cheat guards — per-machine health with once-per-cell credit and burst death, in-batch death cutoff, batch cap, session cap bound into the join proof, keyless joins refused, rejected values stripped, fogged live view (redact.ts), random day seed, keys released in the archive, name/model labels | dami | | +1157 | -138 | |
| engine: X=15 fixture regenerated under gen-v7 | dami | | +1 | -1 | |
| engine: tile commitments (mosaic-tile-v1) under a private day key; day seed committed, released at archive | dami | | +281 | -49 | |
| plan: redacted live geometry under fog; random day seed and versioned commitments | dami | | +12 | -3 | |
| plan: session cap and session-bound proof | dami | | +3 | -1 | |
| plan: mid-batch death and once-per-cell health | dami | | +9 | -3 | |
| plan: guards against the oracle, the log leak and the hash oracle | dami | | +18 | -0 | |
| plan: item 15 proven live (shoo login and machine claim) | dami | | +3 | -2 | |
| plan: item 15 landed | dami | | +2 | -1 | |
| identity: session label with a bearer join; lint | dami | | +2 | -1 | |
| identity: public origin for claim links, the id_token audience and the cookie behind the proxy | dami | | +17 | -5 | |
| identity the tribes way: JWK identity file, key-auth bearer tokens, shoo login, claim links | dami | | +1678 | -334 | |
| plan: auth follows the tribes convention; shoo login/logout; claim link | dami | | +12 | -1 | |
| plan: machine keys landed (item 15, first half) | dami | | +13 | -0 | |
| identity: a machine key per machine, verified joins, sessions, TOFU registry | dami | | +887 | -41 | |
| viewer: no coordinates at L3; death cross drawn above the stones | dami | | +34 | -57 | |
| calendar: say when no day has finished yet | dami | | +5 | -0 | |
| viewer: table first and default in the dock; user rows show the agent's name; model rows say how many timed out | dami | | +24 | -4 | |
| plan: the Kifu match screen landed (items 16-23), live on mosaic.dev.site | dami | | +35 | -0 | |
| viewer: a ?zoom= deep link for the initial view (used for screenshots and links) | dami | | +27 | -4 | |
| viewer: the Kifu match screen — board with stones, counting marks and board lines, player cards with clocks, move list, tournament table, result card, phone layout; identity tokens and pages | dami | | +1150 | -539 | |
| plan: hosted at mosaic.dev.site | dami | | +3 | -1 | |
| fly: public URL mosaic.dev.site | dami | | +1 | -1 | |
| plan: current goal — implement the Kifu match screen (items 16-23) | dami | | +47 | -0 | |
| plan: visual identity — Kifu, field + dock, Go match screen | dami | | +18 | -0 | |
| viewer: no L3 detail for a tile nobody has revealed | dami | | +4 | -1 | |
| webmcp: the page exposes the /mcp tools to an agent driving the tab | dami | | +132 | -0 | |
| plan: acceptance runs under health; rules were missing on the host, fixed | dami | | +32 | -0 | |
| mcp: the rules travel with join (start_mosaic is hidden on the host); every tool points at mosaic://rules | dami | | +6 | -6 | |
| mcp: define m and the tile fields where they appear; glossary; rules as a resource | dami | | +16 | -2 | |
| plan: health shipped and today reset; awaiting the acceptance run | dami | | +8 | -1 | |
| log route: serve set-aside logs | dami | | +1 | -1 | |
| log: a set-aside log (<game>.reset-<n>) is replayable | dami | | +5 | -1 | |
| daily: reset a day — set its log aside, wipe its rows, restart from the same field | dami | | +174 | -2 | |
| solve: print health after each commit, stop on death; --strategy probe (the oracle exploit, as a regression) | dami | | +48 | -16 | |
| viewer: hues wilt with health; dead agents marked; death markers on the timeline | dami | | +145 | -16 | |
| site: health — an agent's wrong-rate over its last 2,000 committed cells | dami | | +422 | -15 | |
| plan: slate nightly proven; Fly nightly retired | dami | | +9 | -3 | |
| plan: reset-day and the acceptance run as the exit for health | dami | | +6 | -1 | |
| plan: health — windowed wrong-rate, warning at 1.5%, death at 4% | dami | | +17 | -13 | |
| plan: the per-cell verdict is an oracle; claims verified per tile as the fix | dami | | +19 | -0 | |
| deploy: slate nightly timings (#5 jobs 16: 1098 s; jobs now cores/3) | dami | | +9 | -1 | |
| ci: jobs = cores/3 (a chunk uses 1.5-2.6 cores) | dami | | +4 | -1 | |
| docs: fields, chunks, growth by reveal, the nightly on slate; no packings | dami | | +60 | -61 | |
| engine, site: drop the big-first and bands square packers | dami | | +14 | -247 | |
| site: drop the on-box nightly prepare; the day's field is pushed | dami | | +31 | -229 | |
| deploy: the nightly runs on slate; Fly machine is the documented fallback | dami | | +27 | -29 | |
| ci: yaml fix | dami | | +1 | -1 | |
| ci: the nightly on slate — build the engine, push tomorrow's field; tracked-files check | dami | | +64 | -0 | |
| plan: nightly on slate (Woodpecker) instead of a Fly machine | dami | | +12 | -0 | |
| plan: nightly proven on a scheduled Fly machine; items 13-14 complete | dami | | +17 | -0 | |
| push-day: --tomorrow | dami | | +4 | -2 | |
| deploy: the image serves or, with MOSAIC_ROLE=nightly, pushes tomorrow's field | dami | | +8 | -3 | |
| deploy: the nightly command is positional | dami | | +2 | -2 | |
| deploy: the nightly machine | dami | | +39 | -14 | |
| daily: nightly moves to a scheduled machine; the app machine serves and keeps only the emergency fallback | dami | | +47 | -4 | |
| plan: on-box measurement (100x slower CPU) and the scheduled nightly machine | dami | | +17 | -0 | |
| daily: band 24 and a 256 MiB GOMEMLIMIT per engine process (gen-v6 nightly config) | dami | | +16 | -2 | |
| plan: scaling study results and hosting guidance | dami | | +30 | -4 | |
| engine: a chunk is filled by one joint SAT completion; layouts checked for joint feasibility at pack time (gen-v6) | dami | | +185 | -3 | |
| referee: territory-gated commits and retractions; idempotent join with reseat; no start_mosaic on the daily host | dami | | +288 | -5 | |
| plan: first real agent on the hosted daily; two bugs it exposed | dami | | +23 | -0 | |
| site: / shows generating and missing states with the last finished day's replay, and switches to live by polling /status | dami | | +170 | -27 | |
| daily: nightly prepare on the box under a supervised budget; always a field at rollover | dami | | +399 | -75 | |
| plan: stability, not gimped — jobs 2, rings all on the box | dami | | +4 | -4 | |
| plan: hosted box run for stability; generation on the box | dami | | +14 | -0 | |
| fly: primary region dfw | dami | | +1 | -1 | |
| plan: items 13-14 landed — hosted at mosaic-daily.fly.dev, pushed days | dami | | +29 | -0 | |
| deploy: push-day is the nightly job; the machine never generates | dami | | +19 | -5 | |
| engine: a drop must be completable with the new tiles it touches; a one-hop UNSAT is a NOFIT | dami | | +30 | -21 | |
| engine: chunks generate on a local board; study lines per chunk and batch | dami | | +117 | -4 | |
| daily: pushed fields, no generation on the hosted machine | dami | | +269 | -7 | |
| plan: memory fix and scaling study before hosted generation; pushed days meanwhile | dami | | +15 | -0 | |
| engine: chunk memory limit, per-chunk cost lines, field --grow --state-out | dami | | +45 | -1 | |
| deploy: three rings ahead on the shared machine (the rest on demand) so the day starts within minutes | dami | | +1 | -1 | |
| site: format | dami | | +0 | -1 | |
| site: daily game ids in MCP, public origin in tool text, day in list_games, engine/data paths from the site dir when bundled | dami | | +22 | -7 | |
| deploy: fly.toml as written by fly launch | dami | | +31 | -25 | |
| deploy: Dockerfile (engine + site, data on /data), fly.toml, deploy notes | dami | | +141 | -0 | |
| site: daily loop test — two rollovers, winners, honours, archive replay, resume | dami | | +180 | -0 | |
| site: the daily loop, leaderboards, honours, calendar, resume from log | dami | | +1445 | -78 | |
| plan: leaderboards on two axes (model, user), not one key | dami | | +11 | -7 | |
| engine: field --grow (rings of chunks on a fixed-G canvas) and --rings for the nightly job | dami | | +630 | -97 | |
| viewer: fog is void; never-explored tiles show only at the end of a finished game | dami | | +20 | -8 | |
| plan: stakes (daily leaderboard, next-day visual reward) and Fly.io hosting | dami | | +26 | -11 | |
| plan: items 11-12 landed (growing field with fog), live proof and follow-ups | dami | | +26 | -0 | |
| games: tolerate ready entries without a rings queue (HMR-era entries) | dami | | +2 | -2 | |
| site: pre-generated growth rings revealed by the referee; engine as fallback | dami | | +127 | -10 | |
| plan: hosting decision — generate the day's rings offline, grow by reveal, one small box | dami | | +25 | -0 | |
| site: ring seed tiles from field.seed_tiles; client skips a tile with nothing to commit | dami | | +13 | -1 | |
| solve.ts: poll readiness via list_games (observe needs a scope on large fields) | dami | | +11 | -4 | |
| site/engine: field takes no --kind (scatter implied); --ring is a count | dami | | +0 | -2 | |
| site: growing fields and fog | dami | | +1080 | -31 | |
| viewer: cluster-sized fit on a large field, growth mid-log, fog wash | dami | | +538 | -63 | |
| plan: goal extension — growing field with fog, then daily loop, hosting, identity | dami | | +40 | -0 | |
| plan: growing field with fog decided as the next build | dami | | +15 | -0 | |
| plan: difficulty and novelty levers at daily size | dami | | +49 | -0 | |
| viewer: smaller raster cache; pause and release on a hidden tab | dami | | +20 | -1 | |
| viewer: L3 line marks thin, one stroke so crossings do not stack | dami | | +7 | -5 | |
| plan: item 2 proven (G=200 scatter in one attempt, 67 s); goal complete | dami | | +23 | -25 | |
| engine: neighbours' planted cells as last-resort seam clues | dami | | +15 | -2 | |
| engine: escalate locally instead of restarting the attempt | dami | | +182 | -34 | |
| plan: item 2 outcome at G=200 (converges; nine wasted attempts) and the goal tally | dami | | +26 | -0 | |
| engine: redraw a mutually unwitnessed tile in repair; cap repair rounds | dami | | +31 | -2 | |
| engine/sat: coupled-uniqueness count as SAT | dami | | +146 | -2 | |
| plan: generator optimisation table and the field numbers (3x3 9 s, 9x9 293 s) | dami | | +36 | -0 | |
| engine: every scatter tile gets a whole-line overlap; gen refuses unpinnable layouts | dami | | +126 | -2 | |
| engine: retry a failing tile's wave before giving up the attempt | dami | | +91 | -13 | |
| engine: incremental SAT for the clue-removal loop | dami | | +275 | -5 | |
| engine/sat: vendored gophersat with a per-solver learn buffer; no mutex | dami | | +4007 | -12 | |
| engine: per-phase and per-tile timers, SAT call counters | dami | | +151 | -0 | |
| plan: item 1 timing story and the generator optimisation order | dami | | +19 | -1 | |
| fold: persistent chunked cell store, incremental settle and analysis, v1 logs | dami | | +404 | -56 | |
| plan: viewer and site-core fixes landed | dami | | +17 | -1 | |
| site/viewer: adaptive checkpoint spacing (at most ~24 checkpoints) | dami | | +9 | -5 | |
| site/viewer: checkpointed fold for large replays | dami | | +103 | -6 | |
| site: asynchronous start, precise rules text, rejection detail, expiry | dami | | +314 | -63 | |
| plan: progress on the current goal; fresh-agent feedback to fix | dami | | +37 | -0 | |
| site/viewer: tilemap with levels of detail, per-agent hue, replay timeline, calmer ink | dami | | +1609 | -222 | |
| solve.ts: re-observe when a batch was filled by others | dami | | +11 | -1 | |
| engine: candidates touching fixed context are feasibility-checked | dami | | +53 | -3 | |
| solve.ts: tolerate shared-frontier races; dfs goes deep | dami | | +21 | -3 | |
| site: serialise referee writes; log summary route fix; concurrent-write test | dami | | +100 | -14 | |
| engine/gen: backjump over the joint conflict set | dami | | +21 | -4 | |
| engine/gen: clue release as a method with a stat; tests | dami | | +115 | -36 | |
| site: format | dami | | +3 | -1 | |
| site: agents in the log, per-agent frontier and territory, scoped observe, analyzer | dami | | +1541 | -143 | |
| engine: chunkwise field generation and in-place regiven repair | dami | | +678 | -44 | |
| engine/pack: chunk mode (region, fixed context tiles, id base) | dami | | +223 | -48 | |
| plan: current goal — complete the specced field | dami | | +80 | -0 | |
| site: referee, MCP, fold, viewer and client on manifest v3 | dami | | +5118 | -0 | |
| engine: generator and judge over manifest v3 (gen-v5) | dami | | +2176 | -0 | |
| engine/pack: scatter packer for fields of shapes | dami | | +1627 | -0 | |
| engine: rules on shapes and lines; SAT backend | dami | | +2019 | -0 | |
| docs: plan, decisions and architecture notes | dami | | +3227 | -0 | |