The Horse in Motion

The Frontier Record · Sheet XLIX

The Horse in Motion

The world will turn once, at four hours to the day, for everybody. Speed belongs to the past instead — where it costs nothing, and where the expensive half of the problem got cheap this evening by accident. Read through Muybridge, who did not photograph a gallop.

Palo Alto, 1878 · LIVE = 1/72 inputs 0.77% of the record · 0 positions in it
The finding You do not have to store the picture, because you can re-derive it. The record holds not one occurrence of gx anywhere — it is a statistics time series and nothing on disk can reconstruct a frame. It does not need to. In the same run, 64 of 8,290 log lines are inputs: 0.77%. The simulation is deterministic, the keyframe format already exists and has been proven on every hot reload for a week, and as of this evening there is a headless host to replay on — written for something else entirely.

I He did not photograph a gallop

The bet, as it is usually told, was whether a trotting horse ever has all four feet off the ground at once. Nobody could settle it by looking, because the answer happens faster than seeing does. In 1878 at Palo Alto, Eadweard Muybridge ran a line of cameras along a track and tripped them with threads as the horse went past.

What he produced was not a film of a gallop. It was a row of samples, and the motion was reconstructed from them afterwards, by anybody who cared to put them in order. The horse was not recorded. Enough about the horse was recorded that the horse could be worked out again — and it turned out the answer had been in front of everybody the whole time and could not be seen at the speed it happened.

This valley now has the same problem in the same shape and the opposite direction. A day here is four hours long. Nobody is going to watch one. The question is what somebody who was not there can be shown afterwards, and how much of it has to be kept in order to show them.

II The world turns once

SPEEDS gains LIVE = 1 / 72. A valley day is DAY_SECONDS = 200, so a day is four hours, a six-day week is twenty-four hours exactly, and YEAR_DAYS = 24 makes a year four weeks and four days of wall clock. The week closes on the human day, so a correspondent files at the same hour every day for ever and nothing drifts out from under them.

It had to be a clock change and not a day-length change, and that is the part worth writing down. DAY_SECONDS is a rate denominator as well as a day — some thirty-five sites express durations against it and all of them scale correctly. What does not scale is everything counted in seconds:

What a fourteen-thousand-second day would have done
as it isat a 4-hour DAY_SECONDS
hunger, 0→1238s — 1.2 days60 times a day
exhaustion, 0→1323s — 1.6 days45 times a day
SPEED_PXa crossing72 crossings
BEAT_SECONDSa few beats480 beats

Dividing the clock scales all of them together, because they are all against dt. Raising the day stretches the daylight curve over seventy-two times as much living. They are not the same change and only one of them is safe.

And nobody holds the dial. In the live service the keeper is a pawn like everybody else, so the rule that has governed this game from the beginning — the player is not a god — extends to time. One authoritative valley, one clock. If any viewer could hurry it, a correspondent's settler would spend the day their keeper filed while its author was asleep: the promise made to them, spent by somebody else's impatience.

The dial itself is safe, which is worth saying since it is the reason the answer can be no on grounds of fairness rather than of risk. Speed is applied as a step count and never as a longer step — the settlement is full of thresholds and one eight-times-longer step walks straight past them — so 32× is the same simulation more often, not a coarser one.

III The plate

What the record actually holds, frame by frame. Two of these are exposed and one is not.

i · charts stocks, prices, worth, output, who is roofless state.jsonl
ii · story the feed, beats, ballots, wishes, refusals log.jsonl
iii · intent decisions, goals, wishes filed, votes cast 64 lines · 0.77%
iv · picture where anybody was standing 0 × gx
v · picture not kept
vi · keyframe the whole simulation, minus one derived field save.ts · 36

Frames iv and v are the ones this sheet is about, and they are blank on purpose. logTick writes name, role, town, task, bed, happy, tired, hungry, carrying, coin and tools. Not one coordinate, in the whole record, ever.

Muybridge's answer applies exactly. The gap between storing the picture and re-deriving it is not close: state.jsonl runs to 9,640 bytes a snapshot and a positional stream at ten frames a second is roughly thirty times that line rate — against an input stream that is under one per cent of what is already being written.

IV Three things that turned out to be already true

determinism One Math.random in src/sim.ts — the run id, explicitly not simulation state — and none at all in world.ts or goals.ts. Everything else is toUnit(hashStep(seed, …)), and terrain is landUnits() over a compile-time SEED, so a viewer regenerates the coast for nothing.
the keyframe Already written, and already proven. src/save.ts snapshot/restore at SCHEMA = 36 stores the whole sim; packNpc drops exactly one field, path, which is derived. It has survived every hot reload for a week. The only reason it lives in sessionStorage is that it was built to outlast a reload rather than to be a save game. Written to a file, that is the format.
the host Written this evening, for something else. tools/daybook-run.mts loads src/sim.ts through Vite's SSR loader the way check-output.mjs does — no Chrome, no canvas, no frame loop, the real stepSim. It exists because a browser tab suspends its frame loop when it is not in front and a valley could not be measured while doing anything else.

COTTAGES.md called the picture the whole job, and it was right at the time: the expensive part was never the storage, it was needing somewhere to replay. That part is done, and it was done by accident, in service of a completely different question. The rewind got cheap while nobody was looking at it.

V The trap, which has not moved

Do not ship inputs and have each viewer re-simulate. Determinism holds within one engine; Math.sin/pow transcendentals are not bit-identical across V8 and SpiderMonkey, and a viewer whose valley silently diverges is worse than no viewer. COTTAGES.md, 28 August

Server-authoritative, frames out. A viewer asks for a moment and a span; the host restores the nearest keyframe, steps forward through the inputs, and returns what to draw. The viewer never runs a valley. That is the one line in this design that is not negotiable, and it is the same fault this record has now found four sheets running under other names: an instrument that quietly disagrees with the world and says nothing about it.

Which leaves the shape whole. The present turns once, at its own pace, for everybody. The past may be run at any speed anybody likes, because a replay consumes nobody's filed day, starves no bus and burns no record. A settler cannot be hurried. What they did can be.

VI What is left, honestly

donethe live rate and its sub-1× carry; idle; unbidden; a bus that holds more than one question and does not drop a late answer
smallkeyframes to a file rather than sessionStorage
not smallthe replay host — a service that holds keyframes, steps forward on request, and returns frames rather than state. Smaller than it was. Still a service.
unknownwhether four hours to the day is watchable at all. A tree takes about five wall minutes to fell. Whether that reads as slow television or as a broken game is a judgement about the thing on screen, and ten minutes of looking will settle it better than this sheet can.

Muybridge settled a question nobody could see by refusing to watch it happen. That is the whole method, and it is available here for less than one per cent of a record that is being written anyway.

Measured 29 August: state.jsonl 185 snapshots at 9,640 bytes · log.jsonl 8,290 lines, 64 inputs, 0.77% · occurrences of gx in the record: 0 · Math.random in the simulation: 1, and it is the run id · SPEEDS gains LIVE = 1/72 · full gate green at 49 sheets.

The Frontier Record · Sheet XLIX · 29 August