clone

a takuzu puzzle field for agents to explore tile by tile, with a referee and a replayable spectator view

plan: goal extension — growing field with fog, then daily loop, hosting, identity

dami committed 483723c
commit
483723c3b5f767a537afee7143422c56e746e2a1
parent
76a3b9e0f9967a3bee1a5965413d04fdc8abab2e
author
dami <gazey55@gmail.com>
1 file changed, +40 -0
MPLAN.md40++++++++++++++++++++++++++++++
M PLAN.md +40 -0
@@ -495,6 +495,46 @@ chunks at 30-47 s), `observe`'s O(tiles) frontier scan, seed-tile
495495 reservations that never expire, and the harness field's dependence on496496 what real MCP clients send.497497 498+### Goal extension (set 2026-08-26, night): the field grows, then it is hosted499+500+Items 11-12 first, 13-15 after; each proven like the others.501+502+11. **Growing field.** The daily field is allocated at G=1000 from the503+ start with the initial 3x3 cluster at the centre, so cell ids never504+ change; `mosaic-engine field --grow --state <private>` generates the505+ next ring of chunks around the cluster (checkerboard within the506+ ring, existing border tiles as fixed context) and emits a delta507+ (new public tiles, new private tiles, merged solution, new ring508+ seed tiles). The referee applies it as a `grow` event (tiles509+ appended, geometry extended in place, late joiners' seeds drawn510+ from the newest ring), triggered by a timer (`grow.every_minutes`)511+ or when the frontier ring's coverage passes a threshold. Proof: a512+ field grown twice while two scripted agents play, replay == live,513+ determinism regardless of `--jobs`, growth wall clock per ring.514+12. **Fog.** With `rules.fog`, `observe` lists a hidden tile only if a515+ tile of the caller's group overlaps it (or it is the agent's own516+ seed reservation); the spectator sees every generated tile, with517+ unreached ones as the faintest wash at L0/L1 and a `grow` marker on518+ the timeline. Proof: a test that observe never lists an unreached519+ tile; screenshots of reach spreading over a grown field.520+13. **Daily loop.** `deno task daily`: at rollover archive the day521+ (manifest, log, analysis summary under `data/days/<date>/`, index522+ row in SQLite), start the new day's field from `daily.Seed(date)`523+ generated ahead, grow on schedule; `/` is today (live if running,524+ else the finished replay), `/day/<date>` the replay, `/calendar` the525+ month grid with per-day stats, "copy prompt" everywhere. Proof: two526+ simulated rollovers on localhost with clocks advanced, calendar527+ shows both days, both replay.528+14. **Hosted.** The site and engine run on the user's server under a529+ domain (name to be chosen), behind TLS, the MCP endpoint public and530+ authless, spectator public; the daily loop runs there as a service531+ with its logs and archives on that box (R2 mirror later). Proof: a532+ fresh agent on another machine plays today's field from the printed533+ prompt; the calendar shows the day.534+15. **Machine identity and shoo.dev** (from the identity decision):535+ machine keys at join, `/link` pairing, "yours" on login. Last;536+ optional for the first hosted days.537+498538 ### Status of the v2 items under this goal499539 500540 1 real packed run: done (v2 packings and v3 scatter fields played, logs