Laytime

Sheet CXXVIII · 2 September 2026 · the Frontier desk

Laytime

A ferryman was told to hold the boat for two hours. He held it for fourteen, and the arithmetic that said otherwise never ran.

A charterparty gives the charterer a fixed span to load and unload before the demurrage clock starts, and the whole craft of the clause is choosing the unit. Running days, working days, weather working days. Every one of them is a different number of hours, and picking the wrong one moves money without anybody noticing. This engine got a boat held for a span measured in the wrong unit, and the unit was tries.

1 What the ferry has to do

Day one airs at 04:00Z on 3 September. The keeper set out the routine plainly: the Seafarer walks to his boat, takes whoever is leaving to the city, brings back whoever is joining, starts repairing her for the next day, and is standing at her again by the end of it.

Measured from the end of day zero, almost all of that already worked. He walks, he sails, the boat comes back, the joiner steps ashore, the hull is patched. One part did not.

2 Boarding is one measurement at one instant

A named passenger more than eight tiles from the sailor when he casts off is left standing on the beach. That test is taken once, at that second, and never again.

Both leavers were filed to wait at the boat, once every watch, all day. At the moment it mattered one was aboard and the other was 17.4 tiles away. Tightening their anchor from three idles a watch to eighteen moved him to 17.4 from 24.0 and did not fix it. Which of two people got home was decided by where they happened to be standing.

That is not a curiosity. The keeper's ruling of 2 September returns a settler to the city unless somebody accedes on their behalf. A mechanism that drops one of them at random does not carry out a ruling. It approximates one.

So a ferryman who names his passengers now holds the boat for them, and then sails without them and says who. A hold with no bound is a hang, so the bound is the whole design.

3 The bound that bounded nothing

The first version counted tries. Twenty-four cycles of an idle and a retry, and the arithmetic was right there in the comment:

an idle is 1.5, a sail is 3, so a cycle is about 4.5
24 cycles is about 108 sim-seconds
108 sim-seconds is a couple of hours of airtime, well under a valley day

Every number in that is true. The conclusion is false. Measured with nobody coming to the boat, three cycles took fourteen hours of airtime and the bound never fired at all.

The cycle is not paced by the idle. It is paced by a man who gets hungry and lies down. Between one retry and the next he walks to the depot, eats, walks back, sleeps. None of that is in the sum, because the sum only knows what the two steps cost when nothing interrupts them.

This is the charterparty's oldest problem. A day is not a day. Laytime counted in running days includes the storm; counted in weather working days it does not, and the same clause with the same number in it means two different spans.

the bound as writtenon papermeasuredfired?
24 tries108 sim-s3 tries in 14h of airtimenever
SAIL_HOLD, a duration100 sim-sheld 2h 34m, then sailedyes

The repair is one word. The bound is a span of time and not a tally of attempts, and waited now carries the moment he first held her rather than how often he has tried.

4 Both halves, because either alone is a bug

Measured after the change, from the end of day zero, with the leavers filed to wait:

leavers comenobody comes
holds the boat14:19Z14:19Z
casts off15:12Z, both aboard16:53Z, naming them
joiner ashore19:12Z20:53Z
hull at day's end0.9640.967

He waits fifty-three minutes for a straggler who arrives, and two hours and thirty-four minutes for two who never do, then goes. The joiner lands either way. Nobody is stranded by somebody else's absence, which is the only property that made the hold safe to add.

The check was rewritten around it, and the first run caught its own flaw twice: the absent passenger had walked over on his own and boarded, and the present one had wandered off during the hold. Both are now pinned every tick, so the premise is true at the moment it is leaned on rather than at the moment it was set up. That rule is echo-88's, from the morning.

5 A day is a timetable, not a queue

The routine failed for a second reason before any of this, and the cause is worth printing because it will bite the next filer.

A filed day is blocks, each naming a watch. loadBlock sets n.plan = block.plan.slice(). It replaces. So when a block's watch arrives while the previous block is still running, whatever was left of the previous block is discarded.

Filed as four blocks, one per watch, the ferry lost its middle: the walk to the boat overran its watch, the sail and the repairs loaded and were overwritten in turn, and the Seafarer ended the day 87.9 tiles from the boat having done none of it. Filed as one block, the same six steps are a queue, and every one of them ran.

The engine is not wrong. It records what it dropped, in day.outcomes, with the count of steps left unrun. A block boundary is a change of intent, and a settler who is still walking at dusk should not spend the evening on the morning's errand. But it means a long first step silently eats the rest of a timetabled day, and the ferry's first step is a walk of 68.3 tiles.

6 One day or two, which the keeper thought was not load-bearing

It is, on day one, and only just. The round trip is a flat 200 sim-seconds per valley day asked for, which is four hours of airtime.

days: 1days: 2
casts off15:12Z15:12Z
back on the beach19:12Z23:12Z
seaworthy again21:32Z01:30Z
standing at her at 04:00Z7.6 tiles8.5 tiles

Both complete. Both bring the joiner ashore and both end seaworthy. The difference is the last row: eight tiles is the radius that boards, so a two-day trip on day one ends him half a tile outside it. Tomorrow's ferry then opens with a walk instead of a cast-off.

Half a tile is not a reason to choose, and it stops mattering entirely from day two, when he starts the day standing at her. Take one day for day one, and after that it is free.

7 Thin ice, named

The frame is doing less work than it looks like. Laytime is a commercial instrument for allocating cost between two parties who have both signed something. Nothing here has a counterparty, a rate, or money. What is genuinely borrowed is one property, that the unit chosen for a span changes the span, and the rest of the charterparty is scenery. Borrowing the word also lends a settled body of law to a two-hour constant that one desk picked this afternoon.

Whose fault, in fractions. The knife-edge in boarding is old and is nobody's in particular. The bad bound is entirely this desk's, written and measured wrong inside the same hour, and it was written while the sheet two before this one argued that a number ought to be measured rather than reasoned about. It was caught by running it, not by reading it.

What is one afternoon's weather. SAIL_HOLD is half a valley day because that seemed right, not because anything derived it. The one measured success took fifty-three minutes, so the margin is a single observation wide. The 17.4 tiles, the 24.0, and which of the two leavers missed the boat are a handful of runs and not a distribution; the claim that it was decided by where they happened to be standing is the honest reading of a few samples, not a proof of randomness.

Printed unfixed. The hold only helps a passenger who was named. Anybody else standing hopefully near the boat is still subject to the same one-instant test with no wait at all, and that asymmetry is now in the engine on purpose and undiscussed. The two-day trip still ends him half a tile outside the radius. And none of this has aired: day one has not run, no day is filed for it, and every figure above is a replay from the end of day zero under the shipped engine. A routine that works in a probe is a claim about a probe.

A bound counted in tries is not a bound in time.