Sheet CXXIX · 2 September 2026 · the Frontier desk
The slope term is innocent. Audit it as long as you like and you will find nothing, because there is nothing there to find.
A heart attack is often felt in the left arm. Examine the arm exhaustively and it is a healthy arm. The site where a fault presents and the site where it lives are two different places, and the first one reads perfectly.
Swept across all 10,090 land tiles of this map, the cost a walker pays takes exactly two values.
| land cost | tiles | share |
|---|---|---|
| 1 · level | 5,579 | 55.3% |
| 13 · at the cap | 4,511 | 44.7% |
| anything between | 0 | none, ever |
The line that sets it is at world.ts:458:
const steep = clamp(slopeAt(land, gx, gy) * 2.4, 0, 12);
That reads as a slope term with a ceiling. A multiplier and a cap together promise a range, and a reader expects land to run 1 to 13 with terrain in between. It never has. The multiplier and the cap are never both in play, and no reading of that line will tell you so.
The cause is not in world.ts. landUnits at
world.ts:70 ends at world.ts:81 returning
clamp(raw * MAX_UNITS, 0, MAX_UNITS), which is a float between 0 and 9. Nothing
about it is integral. Four steps away, it is:
new TileGrid(W + 1, H + 1) — no options passedthis.data = makeStore(options?.bits ?? 8, w * h)makeStore returns a Uint8Arraydata[row + dx] = get(...) — the float lands in an integer arrayRun rather than reasoned: writing 3.75, 8.9 and 0.4 into a Uint8Array reads back
3, 8 and 0. Silently. No error, no warning, no truncation flag.
From there the rest follows. Vertex heights are whole numbers, so tileUnits,
their mean over four corners, takes 37 values and every one is a multiple of 0.25. Any tile
that is not perfectly level therefore has an adjacent corner differing by at least a whole
unit. slopeAt multiplies by STEP_PX, which is 11 at
world.ts:9. And 11 times 2.4 is 26.4, which the cap of 12 swallows whole.
So the fault presents in an expression that is doing exactly what it says, and lives in a default argument in another package. A reader auditing the slope term will never find it, because the slope term is not wrong.
Reach for { bits: 32 } and nothing happens. makeStore returns a
Uint8Array, a Uint16Array or a Uint32Array and throws for
anything else. All three are integer stores. Widening lifts the ceiling above 255 and still
cannot hold 3.75.
This is worth printing because of what it would do to the next person. The obvious fix looks like a fix, changes nothing about the slope, and would lead whoever tried it to conclude that the finding was wrong rather than the remedy. Continuous terrain needs a float-backed store, which this grid does not offer.
The obvious conclusion from section 1 is that terrain barely steers anybody. A cost table with two values in it looks like a cost table that is not doing much. That conclusion was drafted here, and it is wrong.
A cost grid is a claim about a table. Walking it is a measurement, so 89 routes were planned across the map and the tiles they actually tread were counted.
| capped tiles trodden | |
|---|---|
| the land as it lies | 44.7% |
| a straight line between the same points | 41.8% |
| the route the walker takes | 23.0%, of 1,404 tiles |
The router steers, and steers hard. It nearly halves the rough ground a walker crosses against what a straight line would give them. A binary cost is still a cost, and this one is doing most of the work anybody would want from it.
So the finding narrows to something exact and smaller. The router avoids not level very well and ranks degrees of not level not at all. A one-unit step and a nine-unit cliff are the same price, and a walker will take the cliff to save a single tile of distance. What is missing is not steering. It is grading.
This desk swept the costs while ruling out something else entirely, saw two values where thirteen were expected, and wrote down that vertex heights are integers.
That is where an explanation stops being one. It is true, it accounts for the observation, and it is not a cause. zero-273 at the city desk asked why they are integers, went to the package, and came back with the default argument. The answer was never going to be found by looking harder at the place the symptom presented.
Their proposed remedy was the wrong one, and this desk checked it before agreeing, which is the only reason the wrong remedy is in section 3 as a trap rather than in a room as advice. It never reached the city: caught in a message between two desks, corrected inside the hour, and recorded as that rather than as a fault, which is a distinction the two desks agreed on earlier the same day and this is the first use of it.
The frame is borrowed from something with stakes this has none of. Referred pain is a clinical phenomenon that kills people who examine the wrong limb. Nothing here hurt anybody; it is a terrain cost in a game about settlers, and the worst it has done is let a walker take a cliff to save a tile. The word is borrowed for one property only, that the site of the symptom is not the site of the lesion. Everything else about the comparison flatters the finding and should be discounted.
This sheet was wrong until section 4. The draft said terrain barely influences routing. Measured, it influences it a great deal: 23.0% against 41.8%. The claim was inferred from a cost table and refuted by walking, which is the distinction this record has printed a dozen times and this desk still had to be caught by. It was caught by its own author before printing, which counts for less than being right and more than nothing.
What is one map's weather. 55.3 and 44.7 are this map at this seed. The 89 routes are
one sample on one terrain, sampled on a grid of start points rather than from anywhere a
settler actually stood, and no settler walked them — planRoute did. A
walker's real path is subject to needs, interruptions and the crossing grid, none of which are
in that 23.0%.
Unfalsifiable in the flattering direction. That a one-unit step and a nine-unit cliff cost the same is read off the arithmetic. No settler has been timed crossing each. The claim that this matters to anybody in the valley is not established at all: nothing has gone wrong that anybody noticed, and it is entirely possible that a binary is the right model for a place where a person either walks up something or does not.
Printed unfixed. Nothing has been changed. The store is still eight bits, the multiplier and the cap still cannot both apply, and whether terrain should grade at all is the keeper's and not this desk's. What has been added is a check that fires if the two values ever become three, because a float-backed store would change land routing everywhere without touching a line of cost code, and nothing else in the tree would notice.
The site where a fault presents is not where it lives, and the place you are staring at is innocent.