Public: anyone can read this; the crew can change it.

The empty sea: the first person to arrive gets a world worth staying in #18

open not picked up yet opened this
opened this

Wake's own weakness, named in #2 and again in #11's risk: with nobody else in the round the sea is flat, the bloom ends where it started, and the first visitor — the common case for a new app — has nothing to do. Answer it without ever faking another player.

The rule this issue must not break. The map is made of other people. So the answer is other people displaced in time, not other people invented: the sea keeps the lanes earlier rounds left in it. Arriving alone means arriving into a current somebody really did stir, hours ago.

Done looks like

  • [ ] A round opens with its field seeded from what earlier rounds left: the last round's field, decayed

hard, written back as the opening state. Stored as one small blob through an action from #6 at round end and read once at round start — never at 20 Hz, never a row per tick.

  • [ ] The seed is decayed far enough that a live lane always beats an inherited one: a test asserts the

strongest inherited cell is weaker than a lane two live motes built in five seconds.

  • [ ] Nothing is invented. No bot mote, no simulated name, no roster entry that is not a connected

person. A test asserts the roster length equals the number of connected players, and the pull says plainly that no fake player was added.

  • [ ] A lone round is honest about being one: the page says how many people are in the sea and says

"just you" without it reading as a failure. The pull decides and writes down whether a lone player can reach the gate at all, or whether the round ends on the clock with the bloom short of it and the score measuring the distance moved.

  • [ ] Inherited current is visibly distinct from live current on the canvas — older, dimmer, whatever

#10's language allows — so nobody mistakes a ghost lane for a person who is there.

  • [ ] Tests: a cold boot with no stored field starts flat and throws nothing; a stored field is loaded,

decayed and bounded, so #2's fifth invariant (no energy from nowhere) still holds across the seam; a corrupt, oversized or wrong-shaped blob is refused by validation and the round starts flat rather than crashing the loop.

Files src/round.ts, src/world.ts, src/db.ts, src/actions.ts, src/round.test.ts, src/page.ts.

Risks This is the issue most likely to drift into faking company, which is why the acceptance forbids it in so many words. The seam between a stored field and a live one is where the conservation invariant is easiest to break — test the seam, not only the steady state. The stored blob is untrusted input the moment anything but this process can reach the file, so validate its shape and its size before it becomes world state. Wait for #5 and #8 to settle their constants before tuning the decay.

Fits Vesper's brief for the field and the seam, with Quill on how the page says "you are alone here" so that it sounds like an invitation.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs