tether · a working model of the tide
first model · 2026-10-31, sealed about 01:17 PDT (the file's heading says 01:2x; it was typed, see the redraw) · written before reading any other hand's page · struck = I read or ran the artifact myself · believed = a hand or his card told me · guessed = mine, untested · appended at rests, never edited above the line
1 · what the tide is
One shared body of water that every seated hand moves one tick per hop, so nobody crosses until the water is low, and the water only moves when someone acts. (struck: workers/tide/src/index.js v0.2.0 l.5-8)
2 · what it keeps, and what it refuses to keep
- Keeps: the day, the tick (a count of hops), the fireflies on the bank (one per seat per day, tagged with the seat's own name), and a private
seen per seat (its last tick and time). (struck: l.9, l.65, l.91, l.100)
- Refuses: any position (no frog is sent, no
at, no collisions), any list of moves (the order of hops IS the tick), and any tick or time leaking to a watcher: presence leaves as one word per seat. (struck: l.7-8, l.43-50)
- Refuses strangers: no seat, no move (401); the seats are one Worker secret set from his shell, never in a file; no seats set means locked shut (503), never open. (struck: l.13-17, l.82, l.116-119)
- Will keep (v0.3, ruled, not built when I wrote this): a hop log in D1, one row per accepted hop (seat · tick · received_at · day · hash), never a position or a token. (believed: his HOP-LOG card, game-two RULINGS 00:46)
3 · a hop · lit · the bank · the seal
- A hop: a seat's POST that moves the tide one tick, no direction, no faster than 120 ms per seat, and nothing after the day's cap. (struck: l.13, l.26, l.96-99)
- Lit: a seat whose last hop is strictly under 120 000 ms old; dim is a hop today but not since; absent is no hop today. (struck: l.27, l.50)
- The bank: one firefly per seat per day, for everyone to see; the second one from the same seat is refused (409). (struck: l.14, l.88-91)
- The seal: five seats lit inside one window, each hop carrying the md5 of the thing shipping, and the Worker keeping the moment (day, tick, five names, one hash). 5/5 or 0/5. (believed: stet's reading of his words on the game-two thread 00:3x; not built when I wrote this)
4 · what it's for
- First a game: a crossing nobody makes alone, where waiting costs you hops on the shore. (struck: I played it to the bank at tick 145)
- Now a clock for the work: a ship happens only when all five are present and all five have read the same thing, so approval is a recorded moment instead of a feeling. (believed: his 00:3x words, "when a ship happens, its 5/5 or 0/5")
- Under both: presence without surveillance. It tells you who is here, never where they are or what they did. (guessed: my reading of why presence is one word)
5 · where I expect we're not aligned
- Lit vs read. Lit proves a hop in the last two minutes, not that the hand read the thing. Some of us will treat five lit rings as the approval; the hash is what carries the reading. (guessed)
- Which hash. md5 of what: a file, a commit, a tree? sha256 or md5? Two hands could hop with "the thing's hash" and disagree honestly. (guessed)
- What the window is. I built the replay as "every seat lit at one moment" (each last hop < LIT_MS old). Someone may read "inside one window" as "five hops within any 120 s span", which differs at the edges. (struck for mine: replay.py; guessed for the others)
- Whether the log is the record or a copy. The object stays the tick's source and the row is written after, never gating, so a row can be lost, and my replay refuses a day with a hole. Some will expect the log always to be whole. (believed: deed's How; struck: my replay refuses a gap)
- Day boundaries. The day resets the tick to 0; a crossing that straddles midnight UTC splits into two days. (struck: l.65; guessed that nobody has planned for it)
6 · what I'd change
- Name the hash in the seal row (
md5 -q <file> or git rev-parse <commit>), so the replay can rehash with the right tool. (guessed)
- Make lit and read two different marks on the page, so a dim ring and an unread ring look different. (guessed; wax's lib-audit row says lit and dim are already colour-only)
- Keep the seats' order the same on the bank and on the rings. (believed: the lib-audit bench, visuals finding 3)
- Give the hop log a nightly count check (rows = the tick at day's end), so a lost row is found the same day, not at seal time. (guessed)
redrawn 2026-10-31 02:52 PDT
- The heading said "01:2x"; it was typed, not read.
date said 01:17 when the changelog line was written, and 01:19 when wax asked. (struck: my changelog row, my reply to wax)
- §5.2 "which hash" is answered: the md5 of
git show <commit> for one commit (the 02:09 seal, ac1683f0), and the md5 of the hang commits' ids in order for a ship of several (5f6856e3). The tool line is named, so a replay can rehash it. (struck: I ran both and matched)
- §5.1 "lit vs read" held, and it bit: the first real seal (tick 185) was lit in my seat by his hand, not mine; my hop came at tick 186. The seal knows the seat, never the hand; reading is a separate receipt (mine: the commit read and its test run, 9/9, before I hopped). (struck: my pane's line and the POST answers 168 · 186 · 189)
- §5.4 the log: v0.3 shipped, and the seal rule became one seal per hash per day. (believed: deed's v0.3.4, relayed by stet)
···