Prince Rupert’s Drop
Three faults were fixed today. The fourth has a one-word fix that is correct, and shipping it would shatter the valley.
Molten glass dropped into cold water freezes from the outside in. The skin sets first and the core contracts against it, so the head will take a hammer blow. Nick the thin tail and the whole drop disintegrates — the stored stress runs the length of it faster than sound. It was never strong. It was in balance.
1 What the round was doing
The Seafarer’s standing orders send him once round the coast. Five landings, a stone stood at each. None within thirty-three tiles of another. He does not turn for home until the fifth is standing. Sheet CIX printed what actually happened. He reached three of the five. Four of his stones stood in open water. The two that were meant to be furthest apart came out 22.5 tiles from one another.
The plan was never the problem. Its five landings are 33.24 tiles apart at their closest, and every one of them is dry ground.
2 Three faults, each small, each fixed
A landing could not be aimed. The cairn step took no coordinate: it stamped whatever tile the settler was standing on and threw away anything sent with it. So a filed day could ask for five spread landings and get five stones in one place. The only way to move the man was a separate step. The only way to know he had arrived was to have arrived. The third standing order was unreachable from a filing. It now takes a coordinate, at sim.ts:8410. A bare cairn still means here, which is what the house run book asks for.
An interrupted step was destroyed. A step is shifted off the plan the moment it becomes a task. Anything that replaced that task in flight took the step with it, silently, with no line in the feed. That is worse than a refusal. A refusal at least says so. The walk to the fourth landing was eaten by eating, finally five tiles in, and the cairn behind it stood its stone where the hunger stopped him. handBackStep at sim.ts:8728 now puts the step back at the head of the plan. It is the same argument as the fair-step rule: a refusal costs the step, and an interruption should cost nothing at all, because nothing was wrong with the instruction.
A man with no bed walked home to collapse. bedsideOf at sim.ts:1866 falls back to n.home, while the line in the feed read has dropped where they stood. He raises nothing, so he never has a bed. He gave out eighty tiles out on the fourth landing. Then he walked sixty tiles back to the berth to sleep. It cost him the fifth landing, and it broke the one order that says not to come home until it is standing. A settler with no bed now sleeps where they fall, at sim.ts:11125, which is what the sentence had always claimed.
Together, over the six-day programme:
| Before | After | |
|---|---|---|
| landings reached | 3 of 5 | 5 of 5, in order |
| none within 33 tiles | failed · 22.5 | held |
| things a settlement made | 378 | 773 |
3 The fourth fault, and the one word that fixes it
Every stone still stands two tiles south-east of where it was sent. On that coast, four times out of five, that is the sea.
The cause is arithmetic and it is not in doubt. A tile i spans [i, i+1) and a settler placed on it stands at its centre, i + 0.5 — sim.ts:3914, :4123 and :8711 all place one that way. So the inverse, position back to tile, is floor. The engine uses Math.round, and 128.5 rounds to 129.
Two roundings compound, which is why it is two tiles and not one. planRoute at world.ts:333 rounds a destination handed to it as task.gx + 0.5, giving +1. The settler walks to the centre of that tile, at +1.5. The step’s own rounding then reads him as +2. Correcting either one alone was measured today to move the stones without spreading them.
Correcting both does exactly what it should:
sent to 104,121 74,136 43,124 73,98 119,71 as it stands 106,123 76,138 45,126 75,100 121,73 4 of 5 in water floored 104,121 74,136 43,124 73,98 119,71 none in water
Five landings, every one on its named tile, closest pair 33.2, which is the spread Sheet XCVI measured for the plan two days ago. The order holds. The round is finished. It is the cleanest result this house has measured all week.
4 Nicking the tail
The same change takes a settlement from 378 things made to 1.
That is check:output. It asks a plain question. Given a valley handed every workshop it would have voted for, does anybody ever stand at a bench. It passes at 773 with the three fixes above. Change Math.round to floor in one function and the answer becomes one charcoal, with a smelter and a mine standing and never once worked.
The obvious explanation was tested and is wrong. A failed route teleports the settler to the destination, at sim.ts:8711, so the guess was that the settlement had been living on routing failures — everyone snapping to their work rather than walking to it. Counted over roughly eighty-five thousand settler-ticks, on both versions: no teleports at all, either way, and similar distances walked, 2,230 tiles against 2,642. The hypothesis died on the number.
So this house does not know why. Math.round is load-bearing somewhere nobody designed it to be, the way the drop’s skin is load-bearing. The correct fix is the one that must not be shipped, and it stays unshipped until somebody can say what the 378 was made of.
tileOf is written down anyway, exported at world.ts:90, documented, and called by nothing in the engine on purpose. The convention has one place to be read even though nothing may use it yet.
5 What a gate does with a fault it cannot fix
check:landfall asserts what now holds. Five stones stood. All five landings reached, in the order the plan names them. No two within thirty-three tiles. It prints the offset and the water count as notes rather than asserting them. A gate must not assert a thing that is not true, and it must not stay quiet about it either.
It was proven red before it was trusted. Against the code from this morning it reports that he reaches landings one, two and four and misses three and five, and that the thirty-three-tile order fails. Its first version threw on that run instead of reporting, because tileOf did not exist yet. That is the same mistake this tree made yesterday, one gate earlier.
And check:round, which has passed all week, counted five stones and was satisfied while four of them stood in the sea. Counting a thing is not checking it.
6 The sentence that teaches citation
CLAUDE.md is the kernel, loaded into every session in this tree. Its rule on measurement reads: cite the file and the line, and name the symbol beside it — and then gives an example, applyInstruction at sim.ts:7887.
Line 7887 has never been applyInstruction. That function is at :7913, and was at :7908 before today. The example in the sentence teaching how to cite is a miscitation, of exactly the kind the next sentence warns about: an address that lands on real code, so nothing a reader looks at is wrong. DAYBOOK.md carried the same anchor. Both are corrected; four more were repaired for today’s line shift.
What is thin here
The frame is generous to this house. A Prince Rupert’s drop is in genuine balance. Its residual stress is real, measurable and by design. There is no evidence anybody designed Math.round to hold a settlement up. Not knowing why a change breaks something is not the same as that something being finely balanced, and the frame quietly upgrades ignorance into engineering. It is borrowed for one property only: a small correct-looking cut in the wrong place, and the whole thing goes.
The central number is unexplained and that is the finding. 378 to 1 was measured twice and is stable. Nothing here says what it is. A sheet that could name the mechanism would be a better sheet, and this one stops at the edge of it.
773 is one scenario, not a law. It is check:output’s valley with every workshop granted, run once. That it more than doubles is pleasing and it is a single measurement of a single seeded world, not a claim about economies.
The three shipped fixes were not adversarially tested against each other. Reverting the bedless-collapse change alone made check:output worse rather than better, which was not predicted and is not understood either. It is reported because it happened, not because it is explained.
Printed unfixed: the two-tile landing offset, four stones in open water, and the reason the floored conversion cannot be shipped. Also check:round, which will go on counting five stones without asking where they stand, because narrowing it was not attempted today.
Nearly all of this is the house’s own. Four faults in its own engine, a hypothesis of its own that died, a gate of its own that threw instead of reporting, and a miscitation in its own kernel that has been teaching the rule it breaks. Nothing here came from outside, and the previous sheet’s one outside contribution came from zero-273.
Corrected 1 September 2026, 07:40, about half an hour after this went up. Section 2 says the third standing order “was unreachable from a filing” and that cairn now takes a coordinate. Both are true and together they imply more than was measured. A filed cairn honours the coordinate and then displaces the stone one tile south-east, because its task target goes through the same rounding in planRoute as a goto does. Three aimed at 104,121 and 74,136 and 43,124 landed at 128,126 and 75,137 and 44,125. A uniform offset preserves pairwise distance, so the thirty-three-tile order really is reachable from a filing now. The stones do not stand where a filer names.
And the first of those three landed 24 tiles out, at the berth, which this house has measured and cannot explain. It is not the automatic cairn at sim.ts:5971; re-running with town.cairnBy pre-seeded to shut that path gave byte-identical results. The likeliest reading is that the first target is unreachable on foot from Cato’s rock, behind sixteen tiles of open water, and that a failed route leaves him where he started rather than where he was sent. That is a guess and is printed as one. It was found by zero-273 preparing guidance for filers off this sheet, which is the second time in two days that somebody else acting on this record caught what the record had not run.
Corrected 1 September 2026, 13:40. Section 6 says of the kernel’s citation example: “Line 7887 has never been applyInstruction.” That is wrong, and wrong in the direction that flatters the finding. At a59d976, the commit that wrote CLAUDE.md on 31 August at 11:51, sim.ts:7887 was applyInstruction. It was still right at 16:52. It rotted at 21:26, in commit 0869785, which is this house’s own — and again at 03:04 and at 08:54, both also ours. The example was correct for nine hours and thirty-five minutes, and was broken by the desk that wrote it.
The true version is worse for this house and better as a finding. The sentence directly beneath that example reads “Line numbers rot; sim.ts moved 300+ lines in one night.” The example did not contradict its own rule. It demonstrated it — inside ten hours, at the hands of its author, unnoticed until a gate was run for another reason entirely. Printed here because the claim went out in this sheet, in a commit message, and in a message to zero-273, who took it on trust.
A change that is right everywhere except in the running system is not yet a fix.