fuzzyworld

tower / files / design.md

design.md

89.0 KB · history · blame

Tower — Design

Tower is the setting of a novel. This app exists to serve that: first as an instrument for the author to see the place and keep it consistent, and second as a companion piece readers can explore. Where a choice trades spectacle against coherence, coherence wins — canon here is series-bible material, and the book is downstream of it.

Tower is a smart cylinder in orbit around Earth, spun for 1 g, with an inner surface the size of Wisconsin, lit by sunlight piped down its axis and scattered by a swarm of mirrors it flies itself. It is also a person.

The app has three linked views:

  1. Exterior — a 3D render of Tower from outside, with its collector, beam and orbit. You pick a point on the hull.
  2. Map — a 2D unrolled map of the inner surface. You pick a point here too; the two pickers stay in sync.
  3. Interior — a first-person "streetview" from the picked point, with live controls for time of day and spin phase.

1. Canon

1.1 Dimensions

All numbers derive from two free parameters — radius and length — chosen so the inner surface matches Wisconsin.

Quantity Value Notes
Radius 50 km floor to axis
Length 540 km sun cap to far cap
Wall depth 1 km floor to outer skin, D-044
Circumference 314.16 km the world's "width"
Inner surface area 169,646 km² Wisconsin total area, 169,635 km²
Habitable land area 169,646 km² all of it — the hull is sealed (§1.4)

Every square metre of the inner surface is land. There are no windows in the wall, so nothing is subtracted. An earlier version sized star slats to leave exactly Wisconsin's land area of 140,268 km²; D-017 removes them and that second coincidence with it.

1.2 Spin and gravity

Quantity Value
Angular velocity ω 0.014005 rad/s
Spin period 448.6 s = 7 min 29 s
Rotation rate 0.134 rpm
Rim speed 700.2 m/s
Floor gravity 1.000 g by construction

Consequences that the app should show or at least respect:

1.3 The sun system

Sunlight enters through the sun-facing end cap and runs the full 540 km axis.

1.3.0 Tower never sees the sun

The collector is 244 km across and flies 320 km ahead of the sun cap, which puts it 41.8° wide in Tower's sky against the sun's 0.53° — 79 times the sun's diameter. It sits squarely between Tower and the sun, so it occults it completely, and the umbra it casts is 120 km across where Tower's 51 km sits inside it. The eclipse is total, permanent, and self-inflicted.

So nobody aboard can see the sun, for the same reason nobody can see Earth (§1.4). What they can see, through the sun cap window, is the back of the collector: 46,938 km² of structure radiating its own waste heat at about 245 K — infrared, and therefore black. It is the only object in Tower's sky that is neither Tower nor a star, and it never moves, because the collector flies in formation rather than spinning. D-050.

Its edge is not black. The face is a mirror pointed away, but the collector is backlit, and the structure holding 46,938 km² flat stands proud of the mirror plane at the rim, where the sun strikes it side-on. With the scatter any real mirror throws at grazing incidence, the edge reads as a thin sun-coloured ring — so the collector is a hole in the stars with a lit rim rather than an absence, which is how anything backlit looks. It is not sunlight leaking past the edge: Tower is wholly inside the umbra, so the sun's disc is hidden from every point in the world. The ring is lit structure. D-054.

1.3.1 The diffuser swarm

The diffusers must be individually invisible, or the sky becomes a row of separate suns. Two thresholds govern this, and only the second one binds:

Diverting 54.3 TW needs 11.3 km² of mirror, so:

Mirrorlet size 1.2 cm, ~1.4 cm², 2 mg
Count 78 billion
Total mass 158 tonnes — the entire sun system
Mean spacing in beam 3.8 m — sparse enough to fly through
Optical depth over 540 km 1.41, so 24 % of light reaches the far cap

The swarm cannot be passive — it must fly, always. The axis is not weightless. At the beam's edge gravity is 0.312 m/s², enough that a foil sinks outward at 0.26 m/s and leaves the beam in 1.7 hours. A drifting swarm dissolves the same afternoon. Every foil is therefore under continuous individual control. This is not a flourish on a working system; it is the only configuration that works.

They have absurd power to do it with. Each foil intercepts 979 W of beam. Harvesting 0.1 % gives it ~1 W on a 2 mg body — 489,600 W/kg, some fifty times a jet engine's specific power.

Down-beam, riding radiation pressure 0.85 m/s, 7.4 days
Back up-beam under its own power at 1.5 m/s 15 µW, 4.2 days
Harvestable from ambient world-light 14,400 µW — a 1000× margin

So there is no recirculation machinery, at either cap. The foils fly home on scavenged daylight. Nothing needs to be built for them, and the 1000× power margin means Tower can afford to move them wastefully — in spirals, shoals and patterns that cost energy for no reason but preference.

Lighting is a render target, not a schedule. 78 billion independently aimed mirrors put any intensity on any patch of ground at any time. Dawn, dusk, moving cloud shadows and seasons are compositing problems, not optical ones.

Together they make Tower's sun (D-074). Individually invisible, the swarm gathers by day into a single shoal on the axis and throws the beam's light out sideways from there — one blazing point 3.2 km across, which is Tower's sun. The shoal moves: it forms at the sun cap at sunrise and flies the length of the world by sunset, where it disperses (§1.3.4). Each mirrorlet in it is aimed, so Tower sends as much of the sun's light toward ground far away as toward ground beneath it, and the sun looks equally bright from everywhere, as Earth's does; the ground is lit by how high it stands. The shoal takes only part of the beam and lets the rest run on (D-079), so the rod glows from cap to cap at every hour, a little dimmer past the sun than before it, and ends on the far cap's mirror. This is the one exception to the rule above that the diffusers must never read as a sun: Tower wants exactly one.

Aiming resolution is human-sized. A 1.2 cm mirror is diffraction-limited to 4.6×10⁻⁵ rad, so its reflection lands as a 2.3 m spot on the floor 50 km below. Tower can put a glint on one person that someone five metres away cannot see. The privacy is set by the wavelength of light, not by any protocol.

Mirrorfall. A failed foil sinks out of the beam and falls. Terminal velocity at the floor is 0.48 m/s; the descent takes about two days and it lands like a snowflake. There is a permanent slow glitter coming down out of Tower's sky.

Illumination is a dial, not a constant

54.3 TW is Tower's capability, not its setting. Spread over the inner surface it is 320 W/m² mean, which — with roughly half the surface lit at a time and a sinusoidal day profile — puts local noon at ~1,000 W/m², Earth clear-sky daylight. But the diffusers are software-controlled, so brightness is genuinely adjustable in-world across the full range:

Setting Mean W/m² Feels like
Twilight 30 permanent overcast dusk
Temperate 200 Earth's global mean
Full 320 Earth clear-sky noon

This should be a control in the app, not a fixed number. It is the most characterful thing about a world whose sun is a machine.

Headroom

5,000× is 11 % of the étendue limit (46,223× at 1 AU). Tower could in principle push the beam 9.2× further and cook itself; the diffuser network is as much a safety system as a lighting system. 5,000× was chosen because it is demonstrated technology — the Odeillo solar furnace reaches ~10 MW/m² on Earth today. Nothing in Tower's sun system requires physics that does not exist. See decisions.md D-003.

1.3.2 Night, and the difference between banked and off

Night is the sun going out and the beam banked (D-074). The sun reaches the far cap at sunset and the shoal disperses; the beam is then banked for the night, and comes back up for the sun to light at the sun cap in the morning. Banking is not optional, for the reason below.

Night cannot be made by aiming the swarm away. The glow above belongs to the beam and the air, not to the diffusers, so a fully lit beam lights the world whatever the mirrorlets are doing: 779 W/m²/sr over a strip 3.65° wide running horizon to horizon is about 0.2 sr, which lands ~100 W/m² on the floor — half of temperate, and no kind of night. Tower's night is therefore made by banking the beam itself, to a thousandth of full: 0.32 W/m², a rod you can still find overhead and a world you can just make out under it (D-046).

Shutting the beam down entirely is a different state and a much worse one. No airlight, no lit ground, no rod — the only thing left in the world is the sky through the far cap. §1.9.4 gives the thermal mass about a week of coasting, so this is a state Tower can survive and not one it can sit in.

Setting Floor What it is
Dark 0 the beam shut down. Stars, and nothing else.
Night 0.32 W/m² the beam banked to a thousandth
Moonlit night up to 0.64 W/m² the same, and a full moon's light again (§1.3.5)
Twilight 30 W/m²
Temperate 200 W/m²
Full 320 W/m² Earth clear-sky noon

1.3.3 The far cap mirror, and where the last quarter of the beam goes

Since D-079 the mirror is lit at every hour. By day the sun's shoal takes part of the beam where it is and lets the rest run on to the far cap; by night the mirror works on the banked beam. The rod always ends on it.

The swarm has optical depth 1.41, so 24% of the beam survives all 540 km — and it survives collimated, in the beam's own 7.96 km² cross-section. That is the whole shape of the problem: not 13 TW spread over a 7,854 km² cap, but 1.7 MW/m² in a 3.2 km spot, about 1,200 suns. An absorber there sits at 2,330 K.

So the spot is a mirror (D-048), and only the spot: it is a thousandth of the cap's area, which is what leaves the other 99.9% free to be window (§1.4). A mirror is the cheap answer rather than the expensive one — at 99.9% it absorbs 1,665 W/m², about 1.2 Earth solar constants, so the thing that would have glowed white is merely warm.

It also recovers the energy. The residual goes back up the column, which makes the optical path 1,080 km instead of 540 and utilisation 1 - e^(-2τ) = 94% rather than 76%. What survives even the return trip leaves through the beam aperture toward the collector, which sends it back again; in the limit the whole 54.3 TW lands on the inner surface. This is why full brightness is 320 W/m² and not 243 — the figure in §1.3 assumes the entire beam is eventually used, and with the cavity closed at both ends it is.

Aiming light at a region to warm it is a separate lever and stays one (§1.9.4). The mirror is about not wasting the beam; the desert is about where the weather goes.

1.3.4 The day: a sun that crosses the world

Rewritten for D-074; it replaces the dawn front of D-053.

Tower's day is 24 hours, chosen for the people living under it — nothing physical offers one, since the spin is 7.5 minutes and has nothing to do with light. Tower keeps an Earth city's days: Pisa's (D-089; until then, Sydney's). Its clock is Pisa's — Italian time, daylight saving included — and its sunrise and sunset are Pisa's, so the days lengthen and shorten with Pisa's seasons. Day 0 is the northern autumn equinox, 23 September 2026, so the calendar starts on a 12-hour day and shortens toward December. The city and that date are the calendar in the world file, and can be changed there. The app's clock opens at Pisa's time now and runs on at the speed it was last run at.

The sun crosses the world once a day. It lights at the sun cap at sunrise, travels at a steady speed down the axis, and reaches the far cap at sunset, where it goes out. At the equinox that is 540 km in 12 hours 11 minutes — 44 km/h, a sun you can watch move; at midwinter the day is 8 h 55 min and it runs at 61 km/h, and at midsummer 15 h 27 min and 35 km/h. It takes a quarter of an hour to light and a quarter of an hour to go out, which is the shoal gathering and dispersing. Then it is night (§1.3.2) until the next sunrise.

Every place has its own noon. The sun is 50 km overhead when it passes, so each place along the world has its midday at a different hour: the sun-cap end in the early morning, The Capital at about midday, the far-cap end towards evening. Away from overhead the sun stands lower — 45° at 50 km off, 11° at 270 km — and the ground is lit by how high it stands (§1.3.1). It never sets: from one cap, the sun at the other is still 5° up. Morning is a low sun in the sunward sky, evening a low sun deepward. §1.9.4 says Tower has no latitude; the sun gives it longitude, and a direction for its days.

The same sun inside and out. The sun is a point on the beam, lit by the beam, and it is drawn once and seen by both views — from the floor, and in through the windows from outside — with the same haze between it and the eye.

1.3.5 The night: a moon

Asked for by the author, 2026-09-28; D-088.

Tower has a moon. By night the swarm gathers a second, smaller shoal on the banked beam, the size of the sun — 3.2 km, as Earth's Moon and Sun are one size in Earth's sky. It lights at the far cap as the sun goes out there at dusk, and crosses the world the other way, sunward, reaching the sun cap by sunrise, where the sun lights behind it. At the equinox that is 540 km in about 11 h 50 min, some 46 km/h; the long winter nights run it slower.

It keeps Earth's Moon's phases, as the sun keeps Pisa's days. Its disc is lit as much as the Moon is lit that night, and shaped like it: the lit part lies toward the far cap while it waxes — the end the sun went out at, as a waxing moon on Earth is lit on the side of the set sun — and toward the sun cap while it wanes, the end the sun will light at. The dark part is not drawn; those mirrorlets are simply turned away. At new moon there is no moon.

It lights the world. At full it throws as much light on the floor as the whole banked rod, so a full-moon night is twice as bright as a moonless one — 0.64 W/m² against 0.32 — and lit from one direction, with the land facing it brighter. Tower banks the beam that much less to feed it. This is a choice and not a necessity: Earth's full moon is about a hundred and fiftieth of Tower's banked night, and would be lost in it. Water shows a path of moonlight.

1.4 Sealed hull, and the cap windows

The cylinder wall is opaque and unbroken. No slats, no windows, no view out along any of the 540 km. From anywhere on the inner surface, the sky is land, haze and the beam — nothing else. See D-017.

The only views out are at the end caps, and they are peculiar:

Nobody aboard can ever see Earth. Tower holds a terminator orbit (D-004), which puts Earth roughly 90° off the axis — out the side of the cylinder, which is now solid hull. A habitat in Earth orbit whose inhabitants have never seen the planet they orbit.

Spacecraft dock anywhere on the outer shell (author, 2026-09-28; D-087). There is no port: a ship matches the hull's spin and sets down where it likes. Docked, it turns with the hull at 700 m/s and hangs from its clamps, pressed outward at 1.02 g — its feet toward the hull and its floor toward space.

The caps are therefore the only places in the world with a horizon that is not Tower. Whatever grows up around them, it will not be ordinary.

1.5 Atmosphere and the look of the sky

Air co-rotates with the shell. Because g falls linearly to zero at the axis, the atmosphere is much deeper than Earth's:

So the interior sky behaves like this, and the shader must reproduce it:

1.6 Orbit and attitude

1.7 Coordinates

The canonical surface coordinate is (θ, z):

The 2D map is the direct unroll: x = z, y = (θ − θ₀) · R. No projection distortion — a cylinder unrolls exactly. This is a genuine advantage over mapping a globe and the map view should lean on it.

The map shows the surface once, bounded, so its extent is readable. That means it needs an edge, and the edge is placed at θ₀ = the centre of the last slat. Land strip 0 is centred on θ = 0, so cutting there would slice a whole strip in half across the top and bottom margins; cutting at a slat centre leaves every land strip whole and splits only a band of stars, which carries no geography. Same reasoning as putting Earth's map edge at the antimeridian. A sightline whose short route crosses the edge is drawn as two segments, so the drawn path always matches the measured distance.


1.8 Sightlines: Tower has two horizons

Along the axis the floor is perfectly flat and never falls away, so nothing is ever hidden by curvature. Tower's horizon is haze. Circumferentially the floor curves up, so distant land rises into the sky rather than sinking below a line. The two directions behave completely differently, and this is one of the most alien facts about living there.

Rayleigh transmission from a floor-level observer:

Distance Along the axis Across the interior (overhead)
26 km 78 % 77 %
50 km 56 % 70 %
100 km 31 % 78 %
270 km (far cap from midpoint) 4 % — a ghost —

Two consequences:

1.9 Water

Tower's hydrology is stranger than its geometry, and most of it follows from one fact and one absence.

1.9.1 Coriolis never pushes surface water sideways

The floor's tangent plane is spanned by θ̂ and ẑ, and the spin axis is ẑ. For any flow along the surface:

The Coriolis term never has a component inside the surface. So Tower's rivers do not curve. No hemispheres, no Baer's law, no preferred bank erosion, no gyres, no cyclones. Every large-scale rotational habit of Earth's water and weather is absent, and a meander in Tower is pure flow dynamics with no thumb on the scale.

1.9.2 What it does instead: everything vertical leans

The force goes into the floor rather than across it, so it appears whenever water moves up or down. Deflection of a free fall goes as h^1.5:

Fall Lands (retrograde) Lean of the path Lean at impact
100 m 4.2 m 2.4° 3.6°
500 m 47 m 5.4° 8.1°
1,000 m 133 m 7.6° 11.3°
2,000 m 377 m 10.7° 15.8°

Two different angles, and the interior view needs both. The path leans by where the water lands against how far it fell — the tilt of a waterfall's plume seen whole. The impact lean is the direction the water is actually moving when it arrives, which is what a streak of it is drawn at, and it is half again the other in tangent. src/canon/motion.ts computes both.

Rain falls permanently slanted — a raindrop at terminal velocity sits at a fixed 1.47° against the spin, ~51 m of drift over a 2 km fall, never varying, never reversing. It is fixed because drag holds the fall speed constant, so unlike free fall the angle does not grow with the drop: rain leans the same 1.5° whatever the cloud. Set against a waterfall's 11°, the waterfall is the compass and the rain is not, which is the opposite of what §2.4 originally assumed (D-034). Rising things lean the opposite way: smoke drifts spinward, rain drifts anti-spinward. Every plume and every shower in Tower tilts, and they tilt against each other.

The same applies to anything that descends, not just water — see §1.11 on what it does to skiing.

Horizontal flow changes weight rather than direction (Eötvös): +0.57 % for a 2 m/s prograde river, negligible hydrologically. It only matters at speed — an express train at 100 m/s gains 29 %, and anything moving retrograde at the 700 m/s rim speed is stationary in space and therefore weightless.

1.9.3 A perfect cylinder has no slope anywhere

Potential depends only on radius, so the whole floor is a single equipotential surface. Water on it has no preferred direction: a perfect Tower has no rivers at all, forever.

Every river in Tower exists because the floor was shaped. There are no tectonics and no uplift, so erosion is strictly one-way — a 3 km range wears flat in ~30 Myr under a wet engineered climate, ~150 Myr under a dry one. Tower's rivers are steadily destroying its landscape and the highlands must be rebuilt to keep them running. This is D-004's theme again: Tower's rivers are plumbing it chose to install and has to keep re-installing.

Two corollaries:

1.9.4 There is no passive climate at all

Tower has no latitude — every point is equidistant from the light — and with the hull sealed it has no windows in its walls either. A uniform hull radiates at 274 K everywhere, so left alone the world settles into a flat calm: no gradient, no wind, no evaporation, no rain, no rivers. The one exception is the far cap, whose window is a cold wall the size of the cap (§1.9.6, D-090); it makes a gradient at the deepward end whatever Tower does.

So every weather system in Tower is deliberate. Tower makes climate the only way left to it — by aiming light. It warms where it wants convection and shades where it wants condensation; the hull's loss is the sink. Every cloud, every rainfall, every jet stream is something Tower is doing, continuously, on purpose.

Tower also sets the sink (D-090). The loss through the hull cannot be passive: 1 km of rock conducting the mean 320 W/m² would need a difference of some 100,000 K across it, so heat reaches the outer skin because Tower sends it there. It follows that Tower can send less of it from one place and more from another. It can move about 5 TW — a tenth of the beam — between regions this way: enough to hold the far end cold and a few projects besides, not enough to run the climate on. Light is still how Tower makes weather; heat rejection is how it keeps the books.

This is D-009 arriving at its conclusion. The mirrorlet swarm was already Tower's body language; now it is also its lungs and its weather. There is no autonomic layer underneath. If Tower's attention ever lapses, the rain stops.

Costs, for scale against a 54.3 TW budget:

Earth-like rainfall, 1,000 mm/yr 12.2 TW 22.4 % — Earth spends the same fraction
Recirculating all runoff (1,792 m³/s) against 500 m 8.8 GW 0.016 %
The far cap window's loss to space (§1.9.6) 0.65–1.9 TW 1–4 %

1.9.5 Rivers are a closed, pumped circulation

With no natural cycle and no natural slope, a Tower river is a loop: a headwater reservoir, a shaped descent through the landscape, a lake at the bottom, and a lift back to the top. Source and sink are the same system.

Two ways to close the loop, and they give completely different rivers:

Canon uses both — made weather for the world's general hydrology, pumps for watercourses Tower wants under precise control.

Two consequences of the sealed hull:

Lifting is also slightly cheaper than on Earth, since gravity falls off with height: 1 % cheaper at 1 km, 5 % at 5 km, 25 % at 25 km.

1.9.6 The far end is cold, and Tower keeps it so

Worked out with the author, 2026-09-28; D-090.

The window is a radiator. Glass is opaque to thermal infrared, so the far cap's single glazing does not let the world's heat out as light — it absorbs it, and its outer face radiates it to space at 3 K. A pane 0.1–1 m thick loses 80–250 W/m², and over the cap's 7,854 km² that is 0.65–1.9 TW, 1–4 % of the beam. Air cooled against the glass is denser and slides down the cap, which on a cap means radially outward to the rim, and it spreads sunward over the Deepward Sea as a cold wind off the window, roughly 5–15 m/s. Nothing Tower does makes this; it is what a cold wall does. The ice at the foot of the cap is where the physics was going anyway.

Tower keeps that end of the world dim, and lets it freeze in bands. Sunward to cap:

z (km) Band By day By night
496–512 open water grey sea at about freezing, with sea smoke where the cold wind crosses it dark
512–525 pack ice floes made at the fast ice's edge, carried sunward by the wind, melting where they meet open water dark
525–528.5 fast ice dusk — the rod's glow and nothing aimed night; the sun goes out overhead at dusk
528.5–540 the Cap Range ice mountains, 2–3 km high against the glass, a few crests bare rock the same, dark
540 the window white frost with a scatter of clear panes, its foot buried in ice stars through the clear panes

The window frosts, and Tower clears it one pane at a time. Cold glass collects frost on its inner face — very roughly millimetres a day, enough to whiten a pane in days — so left alone the far cap would go white and the stars would go. Tower heats one pane at a time from its frame: melting a pane's frost is about 6 × 10¹² J, a few minutes at tens of GW, and the meltwater runs down the cap onto the ice.

As drawn (D-091). The Deepward Sea's ice in the world file puts the bands where the table has them, and the water shader draws the pack as floes and leads and the fast ice as one cracked sheet. Tower's aimed light falls from the shore to about a third at the ice edge, a tenth at the fast ice and nothing on it, which leaves the fast ice the rod's twentieth by day; the views show that through the same 0.35 power the exposure gives the light dial, so the fast ice reads as dusk, not black. The frost closes a cleared pane as 1 − e^(−age / 10 h), which leaves about one pane in ten nearly clear, and the pane being cleared thaws across its turn. Both views share the window, so the frost is the same from outside.

1.9.7 Farms on their own days

Asked for by the author, 2026-09-30; D-095.

Tower gives each crop the day its plant wants. Any light on any field at any hour is what the swarm is for (§1.3.1), so a farm in Tower does not live by the sun. The author's first thought was full sunlight around the clock; the plants would not thank Tower for it. Most flowering plants measure the night to know when to flower, and some — tomatoes — are injured by light that never stops. So every field gets darkness, and its own length of day:

Day Tower gives it Why
rapeseed, flax, wheat 18 h long-day plants: they flower sooner and fuller under long days
lavender, poppies, phacelia, tomatoes 16 h long-day; tomatoes are day-neutral but need about six hours of dark
tulips, sunflowers, maize, lettuce 14 h day-neutral, or nearly
buckwheat, potatoes 12 h short-day; potatoes set their tubers on short days

1.10 Slat orientation — RESOLVED: none

Axial strips versus rings was weighed at length (D-016) and answered by removing slats entirely (D-017). The comparison is kept in D-016 because it established what the choice cost, and because the reasoning — that slat layout sets the shape of Tower's countries, its climate map and its astronomy all at once — is what made "none" a real option rather than an absence.

1.11 The world as built

Authored geography lives in content/world.json — the source of truth — as features the browser generates the terrain from live (world-generation.md, D-062). Names are provisional. Tower is laid out in belts along the axis, which is the natural grain of an engineered climate (§1.9.4):

z
0–42 km The Sunward Sea ring ocean at the foot of the sun cap
55–140 km the range Westwall, The Sisters, Snowcrown (4,300 m), Eastwall — the named high points of The Girdle, which rings the world at z 90 km (D-051)
105–150 km The Uplands ground Tower raised to about 1,000 m, ringing the world, so the rivers off the range can run down to The Narrows (D-064)
148–218 km The Dry Reach desert ringing the world, 22,000 km², 13% of the surface: mesas over dune fields, dry washes, and salt pans ringed by shorelines (D-069)
176/190/203 km three ridges ringing, concentric — and The Narrows is the only breach in all three
129–470 km the farms nine farms of about 28 km², 250 km² in all, round the world: on the Uplands, in Greatwood's clearings, before the far end (§1.9.7, D-095, D-096)
214–430 km Greatwood forest belt: about three billion trees, with meadows Tower left open in it (D-071)
248–402 km The Deep 154 × 32 km sea, long down the axis and narrow around
270 km The Capital / The Spindle axial midpoint; 20 km across, its spinward edge on The Deep's shore (D-070)
496–540 km The Deepward Sea ring ocean at the foot of the far cap: open water to 512 km, pack ice to 525, dim fast ice to the Cap Range (§1.9.6, D-090)
528.5–540 km The Cap Range ice mountains Tower raised against the far cap's window, 2–3 km high (D-093)
110–480 km The Axial Line railway down the length of the world, through The Narrows (D-086)
140 km The Uplands Ring railway round the world across the Uplands (D-086)

The railways keep a grade of their own over the ground rather than cutting it, so they run on piers much of the way: 10–20 m up over ordinary country, and on long viaducts over the rivers' gorges. A train going round the world has a handedness, like a ski run: the Ring's trains, at 100 m/s, are 31% heavier running spinward and 27% lighter running antispinward (canon/motion.ts); a train along the axis feels nothing.

Both ring seas carry ninety sailing ships each, and Tower's published weather plan (D-067) runs a 28-day cycle of storms, gales and a calm over them and The Deep.

What the desert is made of

The Dry Reach is not sand with some rock in it; it is the whole grammar of a desert, because Tower had seen deserts (D-069). Tiers of rock stand over dune fields whose crests run across the wind Tower sends there; rocky hills break up the open ground; a network of dry washes is routed by the same drainage the ranges are eroded by, because a channel network that ignores drainage is the one thing that would look wrong. In the lowest ground there are salt pans, dead flat, ringed by the shoreline benches of lakes that never stood. The middle of the Reach stands 150 m above its rim so that the washes have somewhere to run, and Tower keeps its rock 6.5 km clear of the rivers it had already routed — a mesa across The Narrows would leave the world's drainage in a slot.

Rock is laid in beds, and a bed in Tower is a constant radius, so the strata line up across separate mesas however far apart they stand. That is what makes a field of them read as one formation eroded out of one plateau.

Why the desert rings

On a cylinder you cannot go around a band. Every desert on Earth can be circumnavigated; a ringed one cannot. It is an absolute barrier across the world's waist, and with the three ridges ringing too it becomes three concentric walls.

The drainage, and why it keeps the chokepoint

Four rivers come off the range — Westwall Water, Sisters Water, Eastwall Water and The Long Water. On Earth most drainages do not cut through a rising ridge; they are defeated and diverted, and only an antecedent river with enough power keeps its course. So three of the four are turned by First Ridge, run along its front gathering each other, and leave with the fourth through the single gap.

The drainage needed the floor raised, and generating it honestly is what showed it (D-063, D-064). As v1 authored it, the ground between the Girdle's foot and the Dry Reach — z 115 to 135 km — was a lowland barely 60 m high, below a plateau of 800–1,100 m, and v1 painted its rivers across it a kilometre up. A river cannot climb. Generated faithfully, each needed an embankment up to 950 m high to reach The Narrows.

So Tower raised the lowland: The Uplands, a ring of ground lifted to about 1,000 m, meeting the Girdle's skirt on one side and the plateau's edge on the other. The rivers now fall steadily off the range, across the Uplands and onto the plateau, and the floor under them is mostly cut — The Narrows about 500 m deep — and built up by no more than ~200 m anywhere, the height of a levee rather than a dam.

The Deep is oriented for the view

Long down the axis and narrow around it, so you cross it the short way — around θ, where the floor curves up. The authored outline is 154 × 32 km and the water fills about 18 km of that width; from the Capital's waterfront the far shore is that 18 km away and stands 2.6 km above eye level. Crossing it lengthwise instead would be dead flat. The orientation is the whole point.

The Capital is a footprint, not a dot (D-070). It is 20 km across, centred on the axial midpoint — the only centre a cylinder has — which is just wide enough that its spinward edge is on The Deep's shore, 9.8 km out, where the ground has come down from 300 m to the water's 120 m. So the city holds both the middle of the world and a waterfront. The streets and buildings inside that footprint are phase 7's.

It is also the world's flywheel: 19× the diurnal heat storage of bare ground, and 5.9 days at full power to move its temperature one kelvin. Tower still supplies every joule (§1.9.4), but the world now coasts for about a week rather than stopping the moment attention lapses.

The cap seas are not designed

Gravity on an end cap points radially outward — tangent to the cap. Nothing rests there; water runs down to the rim and pools. Both ring oceans exist whether anyone planned them or not, each with a 314 km shoreline and a 50 km cliff standing behind it. The only windows in the world are at their feet (§1.4).

They are not the same sea. The far cap's window is a cold wall, so the Deepward Sea is a polar one — ice-cold throughout, and frozen in bands toward the cap (§1.9.6). The sun cap is double-glazed and does none of this, so the Sunward Sea stays temperate.

Skiing, because it is a different sport here

Level motion feels no Coriolis (§1.9.1) but a descending skier has radial velocity, and that does deflect:

So a retrograde run gets lighter the faster you go, which is self-reinforcing, while a prograde run grips harder as it accelerates. Every slope in Tower has a handedness. No Earth mountain does. Settlements sit at the tarns — Sisters Station, Hollow Station — around 2,100 m, with the runs above them.

The range as generated (D-065) is the named summits and a scatter of unnamed ones, joined by ridges and cut by water into branching valleys, all eroded as one group with the Girdle. The named summits are held at exactly their heights and are the highest ground around them; each tarn sits on a shelf the valleys were not allowed to cut, which puts Sisters Tarn at 2,173 m.

Open questions

2. Application architecture

2.1 Stack

2.2 Module layout

src/
  canon/
    constants.ts    single source of truth for every number in §1
    geometry.ts     (θ,z) <-> 3D, slat layout, map <-> surface
    atmosphere.ts   the rotational density profile and its extinction (§1.5)
    motion.ts       how things fall in the rotating frame (§1.9.2) — the only
                    evidence of the spin anywhere but the far cap window
  terrain/          world generation, pure TypeScript — runs in workers, on the
                    main thread and under vitest alike (world-generation.md §5)
    compile.ts      the world compile: shapes, river profiles, lake levels
    mountains.ts    summits, ridge graphs, steady-state erosion, pinned summits
    grid.ts         grids on the surface: drainage, blur, sampling — shared by the above
    desert.ts       plateaus and mesas, dry washes, salt pans, abandoned shorelines
    forest.ts       where trees stand, how big they are, and what a canopy is
    water.ts        wind seas, fetch, river speed and foam: the water's physics
    sea-state.ts    every lake and sea's waves and whitecaps now, from the weather
    ships.ts        ship lanes, positions from the clock, the wave sum they ride
    rails.ts        railway lines, and the grade their track keeps over the ground
    falls.ts        waterfall sheets, leaning antispinward as they fall
    cache.ts        the compiled world kept in IndexedDB between visits
    field.ts        the elevation function: one answer to "how high is it here"
    noise.ts        seeded simplex noise on the cylinder, and the hash under it
    shapes.ts       signed distance, smoothed lines, on the unrolled (z, θR) plane
    tile.ts         the tile quadtree scheme, and one tile's mesh data
    palette.ts      material weights to colour, as TypeScript and as GLSL
    map-image.ts    the map's picture of the world, rendered in bands
    worker.ts       one worker: compile, tiles, map rows
    service.ts      the pool, generations, the status dialog's progress, ground queries
  views/
    palette.ts      one colour per feature kind, shared by the map and the list
    terrain-lod.ts  the ground as a quadtree of tiles, refined around the eye
    craft.ts        the tour's flyers as meshes: paragliders to giant airships, trains, spacecraft
    tour-player.ts  plays the tour's legs: the deal, the fades, the caption
    forest-view.ts  the trees near the eye: meshes, then cards, then the canopy skin
  tour/             the scenic tour, pure: no Three.js, flown by the views and the tests
    geo.ts          the floor's coordinates and the tower's frame, and the sums between them
    director.ts     a craft's track and bank, what is worth looking at, where the camera rides
    interior-legs.ts  the legs inside, found in the compiled world
    exterior-legs.ts  the legs outside, in kilometres, clear of the beam
    plan.ts         the deal: every leg once, no two of a kind in a row, 12–18 s each
  world/
    schema.ts       world.json v2 types + validation: features, not places
    instruments.ts  sightline, viewshed, lighting probe, travel (§3.3)
    weather.ts      Tower's weather plan read at an hour: what it does, what it told people
    photos.ts       a saved shot of a 3D view: its numbers, checked (D-099)
  state/
    store.ts        selected point, time-of-day, spin phase, view mode
  views/
    exterior.ts     Three.js: hull, collector, beam, spin, point picker
    interior-model.ts  ground tiles, caps, bore, beam and haze, shared by both 3D views
    map.ts          Canvas 2D: unrolled surface, slats, terminator, point picker
    interior.ts     Three.js: shell geometry, the haze shader of §1.5, beam
  ui/
    app.ts          the whole panel: list, detail card, weather board, readouts, view switching
    eye-gauge.ts    the interior's eye-height gauge and its landmarks of known height
    scales.ts       slider mappings — kept out of views/ so the panel can label
                    the eye-height gauge without pulling in Three.js
  main.ts           loads world.json and starts the app
vite.config.ts      also makes world.json from content/world.json (§3.1), and on a dev
                    server writes the author's saved shots to content/photos.json (D-099)

tools/                node-only, never bundled; plain .mjs with no build step
  port-world.mjs      the one-off port of v1's geography.json into world.json v2
  build-pages.sh      the Pages site: every branch built into one, with branches.json (D-073)
  screenshots.mjs     drives the running application in a headless browser and
                      photographs it into docs/screenshots/ (D-042)
  photos.mjs          renders the shots in content/photos.json to photos/, the view alone,
                      at 4K (D-099)
  browser.mjs         what those two share: the browser, the warm world, waiting for terrain

canon/constants.ts is the spine. Every derived figure — period, rim speed, land area, slat width — is computed from radius, length, slat count and target land area, never hard-coded. Changing the radius changes the whole app coherently.

2.3 State

One small observable store. Views subscribe; nothing owns anything else.

type TowerState = {
  point: { theta: number; z: number } | null  // the picked location
  tod: number        // 0..1, position in the diffuser day cycle
  brightness: number // W/m^2 mean, 30..320 -- the diffuser output setting
  spinPhase: number  // 0..2pi, rotation for star motion
  spinning: boolean
  view: 'exterior' | 'map' | 'interior'
  probe: { from: SurfacePoint; to: SurfacePoint } | null
}

The exterior and map pickers both write point; the interior view reads it. That is the entire interaction loop.

2.4 The exterior view

Scene units are kilometres, so the code reads in canon numbers. Tower's axis lies along world Z with the sun cap at z = 0, which puts a canon surface point at (R cos θ, R sin θ, z) in the hull's own frame. The hull spins about Z and carries that frame with it, so picking resolves the ray hit back through worldToLocal — otherwise every point picked off a turning hull would be wrong by the spin phase.

Two deliberate departures from physics, both reading aids of the same kind as the map's hillshade:

The stars are the interior's, and they are Earth's (D-075). The sky is a sphere around the scene painted with the same star field the windows use (D-056), sampled by direction from the camera so the stars sit at infinity and hold still as the camera orbits. The field is the Yale Bright Star Catalogue — every star to magnitude 6.5 — set by the clock's date: the axis points at the sun, so the sky behind Tower is fixed by the sun's ecliptic longitude, and turns once a year. Outside, ecliptic north is up (scene +Y), the one roll square to the axis on every day. Spin does not turn it — the camera is not riding the hull — and there is no daylight to adapt to, so it is drawn at full gain (D-060).

The hull can be tried in other dress (D-076). Rock is the first: a cratered, lumpy shell a few kilometres thick laid over the metal skin, never into it, with the windows left clear. It is an experiment in how Tower might look, not canon — the mass alone would be a question for §1.2 — and it sits in the Hull switch beside True and X-ray. Piping is the second (D-077): the skin plated in panels, banded every ~36 km with hoop pipes either side, pipe bundles running between the bands on brackets, clustered blocks of plant, vents whose grilles and plumes switch on and off at random, and thruster pods at each end that fire rarely, with long flaring flames and real light on the hull. Everything is dusted, matte where the dust lies, so the metal does not read as chrome. Every part is outside the skin, so the windows still see only Tower's inside. Rock and piping is the third (D-081), the two at once: the reading is that rock was heaped over the plant as shielding, so it lies in banks tens of kilometres across over about three fifths of the hull, half as tall again as the Rock reading, with scarps at their edges; the plant rooms and vents crowd into the bare ground between, the bands and pipe runs are laid regardless and go under the rock, and the rock is dug clear round each thruster pod.

Everything in the scene is captioned — collector, beam, both caps — with screen-space labels. A dark disc and a cone of light are not self-explanatory, and the collector is the least intuitive object in Tower: it is larger than the world it feeds.

The default camera frames the whole system rather than Tower alone: the collector is 244 km across and flies 320 km ahead, and it is the larger object.

The hull has two readings, and the view switches between them (D-047). True is the outer skin: bare structure, with a window at each cap. X-ray wraps the map's picture of the terrain onto the outside instead — the same image the map draws, rendered live from the world (world-generation.md §9) — from outside Tower is structure, so what that texture shows is what is inside, which makes it a diagram and not a view. Both are worth having and they are not the same claim, so the control is a two-way switch rather than a checkbox. True is the default, and the last reading chosen is remembered across reloads and view switches (D-061).

The inside of Tower is the interior view's own model (D-060), not a lookalike. The displaced ground, both glazed caps, the far cap's bore and the beam are built once in interior-model.ts and added to both scenes, so looking in through either window from outside shows the same land, hazed by the same integral, as standing in it does. Two things make that work from outside. The haze integral clips its segment to the air — the part of the sightline inside the tube, between the sun cap and the far cap's glass — so the kilometres of vacuum between the camera and the window add nothing; from inside the clip is the whole segment and nothing changes. And the windows are see-through: a pane that paints the computed sky from inside is transparent from outside, carrying only the haze in front of it, so what shows through is the scene that is really there — the land beyond the near cap, and the collector and the stars beyond the far one. The shaders work in the tower's frame, and the exterior hands them the world-to-tower transform each frame, because the hull is turning and the air turns with it.

The outer skin keeps its own mesh and its own two modes. It sits a kilometre out from the floor, where D-044 puts the wall's outer face, with a ring closing the wall at each end — generated ground goes below the datum, and a skin at the floor's own radius let sea floors and tile skirts show through the hull (D-064). Three's cylinder runs u around and v along, while the image is the other way round, so the UVs are rewritten from the original attribute rather than derived from vertex positions — the seam vertices are duplicated, and deriving an angle from them smears one column of triangles across the whole image.

The camera position persists across reloads, alongside the active view, so returning to the page returns to the vantage you left.

The scenic tour runs outside too (D-085): spacecraft, a new one every 12–18 seconds — skimming the hull, circling it against its spin, docking on it, looking in through the far cap, over the collector's rim, down the beam, and Tower, the collector and the sun framed together. A leg flies either in space, where the hull turns past at real speed, or in the hull's own frame, where it holds still and the stars wheel. No craft enters the beam's cone.

There are no place markers (D-060). Selecting a place still swings the camera round to it, and a cap is framed from about 40° off the axis so its window faces the camera; the sidebar and the map carry the places themselves.

2.4 The interior view — built

Scope, since D-062: real geometry, and ground generated to match it.

Real: the ground is the actual cylinder, curving up on both sides and closing overhead, built from generated tiles (world-generation.md §6). Stars only through the far cap — the wall is sealed (§1.4), so for 539 of the 540 km the sky is land and light. The far cap is glazed (D-045) and the sky beyond it is the real one (D-075): the Yale Bright Star Catalogue, baked into cells on a cube's faces so a pixel reads only the nine cells round it, and looked up by view direction turned about the spin axis by the spin phase — one turn every 7 min 29 s, the point on the axis genuinely motionless — and then by the date, which sets where the antisolar point is.

The ground is a quadtree of tiles, each a 65-vertex grid bent onto the cylinder in a worker: 34 km tiles on the far side of the world, 33 m tiles underfoot, so vertices are half a kilometre apart overhead and half a metre apart at your feet. A tile splits once the eye is within 1.8 tile-widths of it, and only once all four of its children have arrived — detail pops in, and the ground is never missing. The tiles carry material weights rather than colour, and the shader turns them into colour from the same palette the map uses, with v1's mottling and a little grain near the eye. There is still no scenery: no buildings, no trees, no water surface of its own. Those are phases 3–7 of world-generation.md.

Haze is the shader, and it is integrated rather than faked. Every fragment samples the rotational density profile 24 times along the ray to the camera and extinguishes per channel — red survives twice as far as green, blue half as far, which is what makes distance blue rather than grey. From the floor it reproduces §1.8 from the inside: 78% straight up against 31% for the same 100 km along the ground, printed in the readout so the claim can be checked rather than believed. The airlight the haze adds is neutral; tinting it blue double-counts the wavelength dependence and turns even the desert mauve (D-034).

Nothing inside the scene rotates, because the observer, the ground and the air all co-rotate. What falls carries the spin, and §1.9.2 is lopsided about how: rain leans a fixed 1.5° whatever the cloud, because drag pins its speed, while only free fall keeps accelerating and so keeps leaning. The waterfall is the compass; the rain is barely a hint. Rain is no longer drawn (D-049) — 1.5° is not a picture, and the pinwheel below does the job it was standing in for. The physics stays in canon/motion.ts and stays tested; it was only ever the rendering that could not carry it.

The one thing that does turn is outside. The sky through the caps does not co-rotate, so it wheels once every 7 min 29 s about the motionless star on the axis (D-045). It is the only evidence of the spin in the view. Both caps are windows (D-050), so it can be had looking either way along the axis — deepward into empty space, or sunward past the black disc of the collector.

The observer stands on the terrain by asking the same elevation function the tiles are built from, at full detail. D-035's readback of a raster is gone with the raster.

Keyboard flight: W A S D or the arrows move along the heading, E and Q climb and descend, shift is five times faster. Speed is proportional to height above the ground, so the ground passes at the same apparent pace from a metre up or ten kilometres.

Instruments in the view: eye height from 1.7 m to the edge of the beam, 48.4 km up (D-084), with the local gravity beside it — a vertical gauge up the view's right side, marked with real-world things of known height so the number means something (D-082) — the five canon illumination settings of §1.3, a field of view fixed at 60° (D-083), and captions on every place still visible through the haze. Selecting a place walks the observer to it (D-038) — the haze horizon closes at 100–150 km, so turning to face something usually just points at haze.

Both caps are glazed (D-045, D-050), framed by a lattice of identical equilateral triangles 8.3 km on a side (D-078), with a vertex on the axis where six meet. That is the pitch of the polar checker it replaced (D-041), so it is still the only object in the world with a known size and still doubles as a scale for judging distance, read against sky. The exterior draws these same caps — the same meshes and shaders, not a copy of them (D-060).

The far cap's glazing is set a kilometre into its own frame, so from inside there is a 1 km reveal around it. That is the only place the wall depth of D-044 can be seen from within the world, which is why it is the only place it is drawn.

Water is geometry (D-066). Every lake, sea and river is a surface at its own level — a level in Tower is a constant radius, so a lake curves up with the floor — drawn over the ground with the depth test finding the shoreline, and the ground under it drawn as bed. Deep water is dark and shallow water shows the bed through it. Waves are sized from each body's wind — Tower's weather plan, or the body's usual wind when nothing is scheduled (D-067) — and the fetch it blows over, by the relations fitted to real seas, and drawn as six components that displace the surface near the eye and shade it beyond; rivers carry ripples downstream at the speed Manning's equation gives them, and turn white on their rapids. Whitecaps cover the share of a sea the wind speed gives. Water mirrors the hazed land overhead, and glints where it mirrors the beam.

The forest is trees (D-071). Greatwood is a density field — stems per hectare, thinned at its edges, opened where Tower left meadows, stopped by water, rock and the treeline — and the trees themselves are found by a rule rather than kept in a list, so the same trunks stand in the same places for everyone who walks there. Within a few hundred metres they are meshes; out to three quarters of a kilometre, cards turned to face the eye; beyond that the tile carries a canopy skin at the canopy's own height, which sinks back onto the ground as you approach. The Tall Wood is 52 km² of 90–115 m giants near the Capital, placed once from the world's seed: a landmark standing 75 m proud of the wood around it.

Ships sail the ring seas (D-067): procedural hulls, mainsails and jibs, instanced, each on a lane round the world at a position that is a function of the clock, riding the waves drawn under it with the mainsail set to the wind. While a gale or storm is published for their sea in time to get in, they are in harbour — off the water, since harbours are not drawn yet; a squall announced too late catches them out.

The scenic tour (D-085, replacing D-068's) flies the view itself, on the world's flyers: a new one every 12–18 seconds, dealt at random, fading through black between them — a paraglider on a summit's flank, a glider in a thermal, light aircraft and seaplanes, an airliner round the Girdle, airships low down and giants near the axis, one of them circling the sun outside the beam, trains on both railways, ships in fair weather and foul. Each craft exists for its leg. The camera rides in it or chases it, banks with it, and is pointed by a director at whatever is worth seeing from there — scored by the same haze integral the view is drawn with, so it never turns to stare at something the air has eaten. The legs are worked out from the world, so they follow its edits, and the screenshot tour photographs them.

Waterfalls lean. A river's profile steps where it cannot slope — off a range, into The Deep — and a step is a fall with a gorge below it. The falling sheet leaves the lip at the river's speed and drifts antispinward by the free-fall drift of §1.9.2, so the Long Water's 680 m fall off the range lands about 75 m antispinward of its lip. It is the first thing in the view that shows the spin by leaning, which §1.9.2 always said the waterfall would be.

The beam is drawn after all water: it is always in front of it, and drawn first it was blended under the far side's seas.


3. The world file, and how it changes

The app is an instrument for writing the novel as much as a thing to look at. It must answer questions like can the far face be seen from the midpoint?, where does a central embassy go?, can a lake overhang? — and their answers are placed, named and kept in the world file.

3.1 One file, changed in the repository

content/world.json is the world, and the only copy of it (D-072). The author writes alongside Tower rather than in it, and changes the world by talking it over with Claude, who edits the file; git keeps its history beside the prose. There is no editor in the browser, no local draft in localStorage, and no import or export.

World content content/world.json, committed; the app only reads it
What the app loads world.json, made from it by vite.config.ts: every notes emptied, every feature with "public": false left out
Instruments (§3.3) the sightline probe
Output permalinks to a point or place
Panel view controls, place list, a read-only detail card, the weather board

The published world.json is derived, never committed: the dev server serves it fresh on every request and reloads an open page when content/world.json is saved, and the build writes it into dist/. There is no second copy to keep in step. There is no backend — GitLab Pages is static — and none is needed: the loop is edit, commit, push, and the published site serves it.

Everyone sees the same app. Until D-072 there was a writer mode (the default) and a reader mode (?reader=1); the query parameter now does nothing.

One exception, and it is not the world (D-099): on a dev server the author has a button and a key that save the open view as a photograph, into content/photos.json, written by the dev server. It is not in the build, so readers still see one app, and it changes nothing about the world: a photograph is a camera position and a moment.

3.2 The world file

{
  "version": 2,
  "seed": 1729,                         // every feature's randomness mixes this in
  "ground": { "baseM": 60, "reliefM": 260, "notes": "" },
  "features": [{
    "id": "the-deep",                   // permalink target; see below
    "name": "The Deep",
    "kind": "mountains|lake|sea|river|desert|forest|settlement|road|path|railway|embassy|tower|landmark|note|region",
    "geometry": { "type": "polygon", "points": [[theta, z], ...] },
    //        or point, polyline, or band { "zFrom", "zTo" } for anything ringing the world
    "blurb": "public description, shown to readers",
    "notes": "the author's working notes — NEVER shipped",
    "public": true,                     // false = not ready to exist publicly
    "seed": 1437950893,                 // written once at creation, never from the id
    "levelM": 120, "depthM": 330, "basin": "flooded", "shoreM": 11000
    // ...and whatever parameters the kind has: world-generation.md §3
  }],
  "weather": {                          // Tower's published plan (D-067)
    "cycleDays": 28,                    // the plan repeats; 0 for never
    "events": [{
      "id": "deepward-sea-storm", "target": "deepward-sea", "kind": "calm|breeze|gale|storm",
      "start": { "day": 20, "hour": 18 }, "durationH": 30,
      "wind": { "directionDeg": 60, "speedMS": 30 },   // toward; 0 deepward, 90 spinward
      "publishedAt": { "day": 17, "hour": 9 },
      "revisions": [{ "at": { "day": 21, "hour": 6 }, "kind": "gale",
                      "wind": { "directionDeg": 60, "speedMS": 18 }, "reason": "..." }]
    }]
  }
}

Every kind has the same geometry field, so the map, the list and the editor treat them one way; what a kind adds is parameters beside it, and a phase of world-generation.md adds a parameter only when a generator reads it. v1 files, with places, load as empty — there is no backwards compatibility (D-062).

Two text fields, deliberately separate. blurb is written for readers and ships; notes is the author's working thinking and never reaches the app. One field with a flag would have made every note a publication accident waiting to happen.

Ids are permalink targets. Once a place has been linked to, its id should not change even if its name does; a river names what it flows into by id, so renaming an id means rewriting those references too.

Coordinates are canon (θ radians, z metres, §1.7) — never map pixels, so the file survives any change to how the map is drawn.

The public flag is a privacy trap worth naming. Working notes ("embassy here? check sightline to the cap") are kept out of the app, and a "public": false feature is left out of it entirely. But content/world.json is committed to a public repository, notes and unpublished features included — exactly as content/geography.json was before it — so anything in it is public to anyone who reads the source. The flag keeps things out of the map, not out of sight. Whether private notes should live somewhere else — a private repo, or a second one — is the author's call and is deliberately unresolved.

3.3 Instruments

The measuring tools answer questions the novel actually raised. Only the sightline probe is built; the rest are planned:

3.4 What readers get

The public link is the finished map: embassies, towns, lakes, named regions — the permanent things, behaving like any map application. Plus the exterior view, the interior view from any point, and permalinks so a reader can be handed a place and a moment. Reading the world, not editing it — which, since D-072, is what the author gets too.

4. Phases

  1. Design — this document and decisions.md. ← current
  2. Scaffold — Vite/TS/Three, CI to Pages, canon/ implemented and unit-tested.
  3. Exterior — ✅ hull, caps, collector, beam, spin, and hull point picking.
  4. Map — unrolled surface, slat rendering, picking, sync with exterior.
  5. Interior — ✅ shell geometry, the haze shader, the beam, eye height, and the five illumination settings. Stars, but only through the far cap window.
  6. Writer mode — ✅ built ahead of 3–5, at the author's request, because the world needs developing before there is anything to render. Map view, place editing for all thirteen kinds, points/polylines/polygons, localStorage autosave, backup and static exports, import, and the sightline probe. Removed by D-072: the world is now changed in content/world.json, and only the sightline probe remains.
  7. Content pipeline and reader mode — ✅ reader and writer modes (D-011, one mode since D-072); permalinks (D-010). The terrain pipeline of D-019 — content/geography.json and npm run terrain — is replaced by live generation (below).
  8. Polish — mobile ✅ (the sidebar is a drawer below 720 px, D-043) and a screenshot tour that photographs all ten views through the UI, D-042. Remaining: transitions, performance.

All five view phases are built. Phase 2's canon/ landed with phase 6, since the map could not be drawn without it.

Shareable permalinks are implemented (phase 7) — the app has readers, and "stand here and look at this" is the whole reason it exists as a companion piece. Named locations from the novel should be markable on the map for the same reason.

Live world generation — in progress, planned in world-generation.md (D-062). Phase 1 ✅ (D-063): world file v2, the elevation function, the worker pool, tiled ground, the status dialog, keyboard flight, the map drawn from the features. Phase 2 ✅ (D-065): mountain ranges of summits, ridges and eroded valleys, and summit editing. Phase 3 ✅ (D-066): water as surfaces with waves and flow, and waterfalls that lean. Phase 4 ✅ (D-067): Tower's weather plan with revisions, a day on the clock, and ships. Phase 5 ✅ (D-069): the desert's mesas, dunes, washes, salt pans and shorelines. Phase 6 ✅ (D-071): Greatwood as individual trees, its meadows, and the Tall Wood of giants. Phases 7–8 bring settlements and roads — procedural scenery this section used to list as out of scope. Clouds and rain stay undrawn (D-049).

5. Backlog

Things decided to be worth coming back to, not scheduled.

The plan: glTF binary (.glb) files in a models/ folder, a small manifest naming which kind each replaces and how it faces, and the built-in shape as the fallback for any kind without one, so models can arrive one at a time. Imported models go through Tower's own lighting and haze — otherwise they are lit wrong and never fade into the distance — keeping each part's colour at first, and image textures once a textured variant of the shader exists. Budgets: tour craft can be detailed (tens of thousands of triangles); ships a few thousand; trees a few hundred. Models must be licensed for redistribution, since the app is published.

Source
1# Tower — Design
2
3**Tower is the setting of a novel.** This app exists to serve that: first as an
4instrument for the author to see the place and keep it consistent, and second as a
5companion piece readers can explore. Where a choice trades spectacle against
6coherence, coherence wins — canon here is series-bible material, and the book is
7downstream of it.
8
9Tower is a smart cylinder in orbit around Earth, spun for 1 g, with an inner
10surface the size of Wisconsin, lit by sunlight piped down its axis and scattered by
11a swarm of mirrors it flies itself. It is also a person.
12
13The app has three linked views:
14
151. **Exterior** — a 3D render of Tower from outside, with its collector, beam and
16 orbit. You pick a point on the hull.
172. **Map** — a 2D unrolled map of the inner surface. You pick a point here too; the
18 two pickers stay in sync.
193. **Interior** — a first-person "streetview" from the picked point, with live
20 controls for time of day and spin phase.
21
22---
23
24## 1. Canon
25
26### 1.1 Dimensions
27
28All numbers derive from two free parameters — radius and length — chosen so the
29inner surface matches Wisconsin.
30
31| Quantity | Value | Notes |
32|---|---|---|
33| Radius | **50 km** | floor to axis |
34| Length | **540 km** | sun cap to far cap |
35| Wall depth | **1 km** | floor to outer skin, D-044 |
36| Circumference | **314.16 km** | the world's "width" |
37| Inner surface area | **169,646 km²** | Wisconsin total area, 169,635 km² |
38| Habitable land area | **169,646 km²** | all of it — the hull is sealed (§1.4) |
39
40Every square metre of the inner surface is land. There are no windows in the wall,
41so nothing is subtracted. *An earlier version sized star slats to leave exactly
42Wisconsin's land area of 140,268 km²; D-017 removes them and that second
43coincidence with it.*
44
45### 1.2 Spin and gravity
46
47| Quantity | Value |
48|---|---|
49| Angular velocity ω | **0.014005 rad/s** |
50| Spin period | **448.6 s** = 7 min 29 s |
51| Rotation rate | **0.134 rpm** |
52| Rim speed | **700.2 m/s** |
53| Floor gravity | **1.000 g** by construction |
54
55Consequences that the app should show or at least respect:
56
57- **Gravity falls off linearly with height.** g(h) = ω²(R−h). A 1 km peak sits at
58 0.98 g; the axis is weightless. Mirrors at the axis float.
59- **Coriolis is mild but real.** 2ω = 0.0280 s⁻¹. Walking is unaffected (0.4 % g).
60 A ball thrown at 30 m/s deflects at 8.6 % g — enough that Tower's sports differ
61 from Earth's, and enough that thrown objects visibly curve.
62- **Nothing in the sky moves, except through the far cap.** The wall is sealed
63 (§1.4), so along 539 of the 540 km there is nothing to wheel past — the far side
64 of the world overhead co-rotates with you and hangs perfectly still. The one
65 exception is the far cap window, where the sky is *outside* and does not
66 co-rotate: it turns once every 7 min 29 s about a single motionless star on the
67 axis. The spin is invisible upward and obvious deepward, and only at night.
68- **But everything that falls leans.** Rain hangs at a permanent 1.47° slant, smoke
69 drifts the other way, and a 1 km waterfall lands 133 m off its own cliff (§1.9.2).
70 This inversion is the alien fact the interior view must sell: **the sky is still
71 and the water is not.**
72
73### 1.3 The sun system
74
75Sunlight enters through the sun-facing end cap and runs the full 540 km axis.
76
77- **Collector.** A mirror array flies ahead of Tower, gathering sunlight and
78 concentrating it into the beam. **46,900 km² of aperture — a disc ~244 km
79 across**, two and a half times Tower's own diameter. It is the dominant visual
80 element of the exterior view.
81- **Beam.** **10 km in circumference** — 1,592 m radius, 7.96 km² cross-section —
82 carrying **54.3 TW** at a concentration of **5,000×**, or 6.8 MW/m². It runs the
83 axis from sun cap to far cap.
84- **Diffusers.** Not lamps — a **swarm**. See §1.3.1.
85- **The beam is visible, and it glows by itself.** There is real air at the axis
86 (§1.5), and a 6.8 MW/m² beam Rayleigh-scattering through 3.18 km of it radiates
87 **779 W/m²/sr** — **26× brighter than clear blue sky, 25,700× dimmer than the
88 sun's disc.** It is a brilliantly sunlit cloud extruded into a rod, safe to look
89 at directly. From the floor 50 km below it is **3.65° wide, about seven
90 sun-widths**, running the whole length of the sky. This glow is a property of the
91 beam and the air, not of the diffusers — it would be there if the beam were empty.
92
93#### 1.3.0 Tower never sees the sun
94
95The collector is **244 km across and flies 320 km ahead of the sun cap**, which puts
96it **41.8° wide** in Tower's sky against the sun's 0.53° — **79 times the sun's
97diameter**. It sits squarely between Tower and the sun, so it occults it completely,
98and the umbra it casts is 120 km across where Tower's 51 km sits inside it. The
99eclipse is total, permanent, and self-inflicted.
100
101So **nobody aboard can see the sun**, for the same reason nobody can see Earth
102(§1.4). What they can see, through the sun cap window, is the *back* of the
103collector: 46,938 km² of structure radiating its own waste heat at about 245 K —
104infrared, and therefore black. It is the only object in Tower's sky that is neither
105Tower nor a star, and it never moves, because the collector flies in formation
106rather than spinning. D-050.
107
108**Its edge is not black.** The face is a mirror pointed away, but the collector is
109*backlit*, and the structure holding 46,938 km² flat stands proud of the mirror
110plane at the rim, where the sun strikes it side-on. With the scatter any real mirror
111throws at grazing incidence, the edge reads as a thin sun-coloured ring — so the
112collector is a hole in the stars with a lit rim rather than an absence, which is how
113anything backlit looks. **It is not sunlight leaking past the edge**: Tower is wholly
114inside the umbra, so the sun's disc is hidden from every point in the world. The ring
115is lit structure. D-054.
116
117#### 1.3.1 The diffuser swarm
118
119The diffusers must be individually invisible, or the sky becomes a row of separate
120suns. Two thresholds govern this, and only the second one binds:
121
122- **Resolvability.** At 50 km, one arcminute is 14.5 m. Anything larger is a
123 resolved disc with a visible edge.
124- **Visibility.** Being unresolved is not enough — stars are unresolved and we see
125 them. A mirror *preserves radiance*, so a mirrorlet aimed at an observer shows
126 the sun's own surface brightness over a tiny angle. A 1 m mirrorlet reads at
127 magnitude −13.6, brighter than the full moon. Blending into daylight requires
128 **~1.2 cm**, at magnitude −4.0, just under Venus.
129
130Diverting 54.3 TW needs 11.3 km² of mirror, so:
131
132| | |
133|---|---|
134| Mirrorlet size | **1.2 cm**, ~1.4 cm², 2 mg |
135| Count | **78 billion** |
136| Total mass | **158 tonnes** — the entire sun system |
137| Mean spacing in beam | **3.8 m** — sparse enough to fly through |
138| Optical depth over 540 km | 1.41, so **24 % of light reaches the far cap** |
139
140**The swarm cannot be passive — it must fly, always.** The axis is not weightless.
141At the beam's edge gravity is **0.312 m/s²**, enough that a foil sinks outward at
1420.26 m/s and **leaves the beam in 1.7 hours**. A drifting swarm dissolves the same
143afternoon. Every foil is therefore under continuous individual control. This is not
144a flourish on a working system; it is the only configuration that works.
145
146**They have absurd power to do it with.** Each foil intercepts 979 W of beam.
147Harvesting 0.1 % gives it ~1 W on a 2 mg body — **489,600 W/kg**, some fifty times
148a jet engine's specific power.
149
150| | |
151|---|---|
152| Down-beam, riding radiation pressure | 0.85 m/s, 7.4 days |
153| Back up-beam under its own power at 1.5 m/s | 15 µW, 4.2 days |
154| Harvestable from ambient world-light | **14,400 µW** — a 1000× margin |
155
156**So there is no recirculation machinery, at either cap.** The foils fly home on
157scavenged daylight. Nothing needs to be built for them, and the 1000× power margin
158means Tower can afford to move them *wastefully* — in spirals, shoals and patterns
159that cost energy for no reason but preference.
160
161**Lighting is a render target, not a schedule.** 78 billion independently aimed
162mirrors put any intensity on any patch of ground at any time. Dawn, dusk, moving
163cloud shadows and seasons are compositing problems, not optical ones.
164
165**Together they make Tower's sun** (D-074). Individually invisible, the swarm gathers
166by day into a single shoal on the axis and throws the beam's light out sideways from
167there — one blazing point 3.2 km across, which is Tower's sun. The shoal moves: it
168forms at the sun cap at sunrise and flies the length of the world by sunset, where it
169disperses (§1.3.4). Each mirrorlet in it is aimed, so Tower sends as much of the sun's
170light toward ground far away as toward ground beneath it, and the sun looks equally
171bright from everywhere, as Earth's does; the ground is lit by how high it stands. The
172shoal takes only part of the beam and lets the rest run on (D-079), so **the rod glows
173from cap to cap at every hour**, a little dimmer past the sun than before it, and ends
174on the far cap's mirror. This is the one exception to the rule
175above that the diffusers must never read as a sun: Tower wants exactly one.
176
177**Aiming resolution is human-sized.** A 1.2 cm mirror is diffraction-limited to
1784.6×10⁻⁵ rad, so its reflection lands as a **2.3 m spot** on the floor 50 km below.
179Tower can put a glint on one person that someone five metres away cannot see. The
180privacy is set by the wavelength of light, not by any protocol.
181
182**Mirrorfall.** A failed foil sinks out of the beam and falls. Terminal velocity at
183the floor is 0.48 m/s; the descent takes about two days and it lands like a
184snowflake. There is a permanent slow glitter coming down out of Tower's sky.
185
186#### Illumination is a dial, not a constant
187
18854.3 TW is Tower's *capability*, not its setting. Spread over the inner surface it
189is 320 W/m² mean, which — with roughly half the surface lit at a time and a
190sinusoidal day profile — puts **local noon at ~1,000 W/m², Earth clear-sky
191daylight**. But the diffusers are software-controlled, so brightness is genuinely
192adjustable in-world across the full range:
193
194| Setting | Mean W/m² | Feels like |
195|---|---|---|
196| Twilight | 30 | permanent overcast dusk |
197| Temperate | 200 | Earth's global mean |
198| **Full** | **320** | **Earth clear-sky noon** |
199
200This should be a control in the app, not a fixed number. It is the most
201characterful thing about a world whose sun is a machine.
202
203#### Headroom
204
2055,000× is **11 % of the étendue limit** (46,223× at 1 AU). Tower could in principle
206push the beam 9.2× further and cook itself; the diffuser network is as much a safety
207system as a lighting system. 5,000× was chosen because it is *demonstrated*
208technology — the Odeillo solar furnace reaches ~10 MW/m² on Earth today. Nothing in
209Tower's sun system requires physics that does not exist. See `decisions.md` D-003.
210
211#### 1.3.2 Night, and the difference between banked and off
212
213**Night is the sun going out and the beam banked** (D-074). The sun reaches the far
214cap at sunset and the shoal disperses; the beam is then banked for the night, and
215comes back up for the sun to light at the sun cap in the morning. Banking is not
216optional, for the reason below.
217
218**Night cannot be made by aiming the swarm away.** The glow above belongs to the
219beam and the air, not to the diffusers, so a fully lit beam lights the world
220whatever the mirrorlets are doing: 779 W/m²/sr over a strip 3.65° wide running
221horizon to horizon is about 0.2 sr, which lands **~100 W/m² on the floor** — half
222of temperate, and no kind of night. Tower's night is therefore made by **banking
223the beam itself**, to a thousandth of full: **0.32 W/m²**, a rod you can still find
224overhead and a world you can just make out under it (D-046).
225
226**Shutting the beam down entirely is a different state and a much worse one.** No
227airlight, no lit ground, no rod — the only thing left in the world is the sky
228through the far cap. §1.9.4 gives the thermal mass about a week of coasting, so
229this is a state Tower can survive and not one it can sit in.
230
231| Setting | Floor | What it is |
232|---|---|---|
233| Dark | **0** | the beam shut down. Stars, and nothing else. |
234| Night | **0.32 W/m²** | the beam banked to a thousandth |
235| Moonlit night | up to **0.64 W/m²** | the same, and a full moon's light again (§1.3.5) |
236| Twilight | 30 W/m² | |
237| Temperate | 200 W/m² | |
238| Full | 320 W/m² | Earth clear-sky noon |
239
240#### 1.3.3 The far cap mirror, and where the last quarter of the beam goes
241
242*Since D-079 the mirror is lit at every hour.* By day the sun's shoal takes part of the
243beam where it is and lets the rest run on to the far cap; by night the mirror works on the
244banked beam. The rod always ends on it.
245
246The swarm has optical depth 1.41, so **24% of the beam survives all 540 km** — and
247it survives *collimated*, in the beam's own 7.96 km² cross-section. That is the
248whole shape of the problem: not 13 TW spread over a 7,854 km² cap, but **1.7 MW/m²
249in a 3.2 km spot**, about 1,200 suns. An absorber there sits at **2,330 K**.
250
251**So the spot is a mirror** (D-048), and only the spot: it is a thousandth of the
252cap's area, which is what leaves the other 99.9% free to be window (§1.4). A mirror
253is the cheap answer rather than the expensive one — at 99.9% it absorbs **1,665
254W/m²**, about 1.2 Earth solar constants, so the thing that would have glowed white
255is merely warm.
256
257**It also recovers the energy.** The residual goes back up the column, which makes
258the optical path 1,080 km instead of 540 and utilisation **1 - e^(-2τ) = 94%**
259rather than 76%. What survives even the return trip leaves through the beam
260aperture toward the collector, which sends it back again; in the limit the whole
26154.3 TW lands on the inner surface. **This is why full brightness is 320 W/m² and
262not 243** — the figure in §1.3 assumes the entire beam is eventually used, and with
263the cavity closed at both ends it is.
264
265Aiming light at a region to warm it is a separate lever and stays one (§1.9.4). The
266mirror is about not wasting the beam; the desert is about where the weather goes.
267
268#### 1.3.4 The day: a sun that crosses the world
269
270*Rewritten for D-074; it replaces the dawn front of D-053.*
271
272Tower's day is **24 hours**, chosen for the people living under it — nothing
273physical offers one, since the spin is 7.5 minutes and has nothing to do with light.
274**Tower keeps an Earth city's days: Pisa's** (D-089; until then, Sydney's). Its clock is
275Pisa's — Italian time, daylight saving included — and its sunrise and sunset are Pisa's,
276so the days lengthen and shorten with Pisa's seasons. Day 0 is the northern autumn
277equinox, 23 September 2026, so the calendar starts on a 12-hour day and shortens toward
278December. The city and that date are the `calendar` in the world file, and can be changed
279there. The app's clock opens at Pisa's time now and runs on at the speed it was last run at.
280
281**The sun crosses the world once a day.** It lights at the **sun cap** at sunrise,
282travels at a steady speed down the axis, and reaches the **far cap** at sunset, where
283it goes out. At the equinox that is 540 km in 12 hours 11 minutes — **44 km/h**, a sun
284you can watch move; at midwinter the day is 8 h 55 min and it runs at 61 km/h, and at
285midsummer 15 h 27 min and 35 km/h. It takes a quarter of an hour to light and a quarter
286of an hour to go out, which is the shoal gathering and dispersing. Then it is night
287(§1.3.2) until the next sunrise.
288
289**Every place has its own noon.** The sun is 50 km overhead when it passes, so each
290place along the world has its midday at a different hour: the sun-cap end in the early
291morning, The Capital at about midday, the far-cap end towards evening. Away from
292overhead the sun stands lower — 45° at 50 km off, 11° at 270 km — and the ground is lit
293by how high it stands (§1.3.1). It never sets: from one cap, the sun at the other is
294still 5° up. Morning is a low sun in the sunward sky, evening a low sun deepward. §1.9.4
295says Tower has no latitude; the sun gives it **longitude**, and a direction for its days.
296
297**The same sun inside and out.** The sun is a point on the beam, lit by the beam, and it
298is drawn once and seen by both views — from the floor, and in through the windows from
299outside — with the same haze between it and the eye.
300
301#### 1.3.5 The night: a moon
302
303*Asked for by the author, 2026-09-28; D-088.*
304
305**Tower has a moon.** By night the swarm gathers a second, smaller shoal on the banked beam,
306the size of the sun — 3.2 km, as Earth's Moon and Sun are one size in Earth's sky. It lights
307at the **far cap** as the sun goes out there at dusk, and crosses the world **the other way**,
308sunward, reaching the **sun cap** by sunrise, where the sun lights behind it. At the equinox
309that is 540 km in about 11 h 50 min, some 46 km/h; the long winter nights run it slower.
310
311**It keeps Earth's Moon's phases**, as the sun keeps Pisa's days. Its disc is lit as much as
312the Moon is lit that night, and shaped like it: the lit part lies toward the far cap while it
313waxes — the end the sun went out at, as a waxing moon on Earth is lit on the side of the set
314sun — and toward the sun cap while it wanes, the end the sun will light at. The dark part is
315not drawn; those mirrorlets are simply turned away. At new moon there is no moon.
316
317**It lights the world.** At full it throws as much light on the floor as the whole banked rod,
318so a full-moon night is twice as bright as a moonless one — 0.64 W/m² against 0.32 — and lit
319from one direction, with the land facing it brighter. Tower banks the beam that much less to
320feed it. This is a choice and not a necessity: Earth's full moon is about a hundred and
321fiftieth of Tower's banked night, and would be lost in it. Water shows a path of moonlight.
322
323### 1.4 Sealed hull, and the cap windows
324
325**The cylinder wall is opaque and unbroken.** No slats, no windows, no view out
326along any of the 540 km. From anywhere on the inner surface, the sky is land, haze
327and the beam — nothing else. See D-017.
328
329The only views out are at the **end caps**, and they are peculiar:
330
331- **A cap is a wall, not a floor.** Gravity there points radially outward, which is
332 *tangent* to the cap's surface, so nothing rests on it — you would slide to the
333 rim. Each cap is a **50 km vertical cliff** standing at the end of the world, and
334 its windows sit at its base, at eye level for anyone standing on the floor.
335- **The sky through them does not sweep — it turns.** A cap window looks along the
336 spin axis, which is the celestial pole. Stars rotate about a fixed centre, one
337 full turn every 7.5 minutes, with one motionless star at the middle. **A pinwheel
338 sky.** It is the only moving sky anyone in Tower ever sees — and because the axis
339 is horizontal from the floor, it wheels about a point on the **horizon** rather
340 than overhead.
341- **The caps have more than one name.** The **sun cap** is the end the beam enters by.
342 The **far cap** is also the **star cap**: it is the one with the stars in it — and the
343 **night cap**, since night starts there: the sun goes out at it at dusk, and the moon sets
344 out from it (D-088). All are used, and more names are added as they come into use (author,
345 2026-09-27, 2026-09-28).
346- The **far cap is glazed whole** — a 100 km window looking into deep anti-sun
347 space, not a wall with windows at its foot (D-045). Its structure survives as the
348 window's **mullions**, a lattice of identical equilateral triangles 8.3 km on a side
349 (D-078) — the old checker's pitch — so the one object in the world with a known scale still is one:
350 the rule now reads against the sky instead of against a plate. The **sun cap**
351 faces the collector rather than the sun, and is **glazed too** (D-050): §1.3.0
352 retires the "heavy glare management" this section used to demand of it, because no
353 direct sunlight has ever reached it. Through it, a 244 km black disc, stars round
354 the edge of it, and the beam blazing out of the aperture at its centre.
355- **By day the window is simply blue.** §1.5 puts the far cap 100–200 km into the
356 haze, so from anywhere but the deepward end the airlight in front of it swamps
357 whatever is behind, and the cap reads as a disc of sky. The stars are there at
358 noon and unseeable, which is a fact about eyes and not about the glass.
359- **The far cap is single-glazed, and it frosts** (D-090). The glass is the coldest
360 surface in the world and collects frost on its inner face, so Tower clears it one pane
361 at a time, one pane per turn of the world in an order reshuffled every 35.1-hour loop.
362 Close to, the window is a white lattice with a scatter of clear, black, starry
363 triangles, and which ones are clear keeps changing. §1.9.6 has the numbers, and the
364 cold wind and ice the window makes at its foot.
365- **The sun cap is double-glazed** (author, 2026-09-29; D-090). Its inner pane stays
366 near the air's temperature, so it neither frosts nor chills the world: the Sunward Sea is
367 a temperate sea and the Deepward Sea the only cold one. The two caps are glazed
368 differently on purpose.
369- **The beam does not go through it.** §1.3.3 puts the surviving quarter of the
370 beam on a 3.2 km bullseye at the centre of the cap, and that bullseye is a mirror
371 rather than glass: it returns the residual up the column for a second pass. The
372 window is everything else, which is 99.9% of the disc.
373- **The mirror is not the pinwheel's centre, and it is worth being clear why.** The
374 sky turns about the direction *parallel* to the spin axis, and from anywhere on
375 the floor that direction is horizontal — so **the pinwheel's centre is at eye
376 level, dead ahead**, down where the window meets the ground, not overhead and not
377 at the middle of the cap. The mirror is a physical object *on* the axis, which
378 from 270 km sits about 10° above that. They coincide only for an observer
379 standing on the axis itself, and nobody can. By day the mirror blazes — it is
380 returning 1.7 MW/m² — and is the brightest thing in Tower's sky; at night it
381 banks with the beam and goes dark.
382
383**Nobody aboard can ever see Earth.** Tower holds a terminator orbit (D-004), which
384puts Earth roughly 90° off the axis — out the *side* of the cylinder, which is now
385solid hull. A habitat in Earth orbit whose inhabitants have never seen the planet
386they orbit.
387
388**Spacecraft dock anywhere on the outer shell** (author, 2026-09-28; D-087). There is no
389port: a ship matches the hull's spin and sets down where it likes. Docked, it turns with the
390hull at 700 m/s and hangs from its clamps, pressed outward at 1.02 g — its feet toward the
391hull and its floor toward space.
392
393The caps are therefore the only places in the world with a horizon that is not
394Tower. Whatever grows up around them, it will not be ordinary.
395
396### 1.5 Atmosphere and the look of the sky
397
398Air co-rotates with the shell. Because g falls linearly to zero at the axis, the
399atmosphere is much deeper than Earth's:
400
401- Pressure at the axis, 50 km up: **5.2 kPa** — thin, but genuinely air.
402- A vertical column floor-to-axis is ~10,600 kg/m², about **one Earth atmosphere**.
403
404So the interior sky behaves like this, and the shader must reproduce it:
405
406- **Straight up** you look through ~1 atmosphere and see the far side of the world
407 100 km away — visible, but washed to pale blue like a very distant mountain range.
408- **Along the axis** you look through many atmospheres. The far end cap is not
409 visible as a wall; it dissolves into blue haze around 100–200 km out. The world
410 reads as endless in the axial direction and closed in the circumferential one.
411- **The ground curves up on both sides** into that same blue, meeting overhead.
412- **The beam** is a self-luminous scattering shaft 3.65° wide at 779 W/m²/sr —
413 render it as a bright sunlit cloud, not as a light source with a halo. It runs
414 from cap to cap at every hour; by day it is dimmer past the sun (§1.3.1, D-079).
415- **The sun** is the other thing in the sky that is not land: a blazing disc on the
416 beam, 3.65° across from directly beneath and smaller from afar, with glare round it
417 (§1.3.4). By night there is the **moon** instead, smaller in light and crossing the other
418 way, as lit as Earth's Moon (§1.3.5). With the hull sealed, the rod, the sun and the moon are
419 all there is.
420
421### 1.6 Orbit and attitude
422
423- Tower holds a high circular orbit with its **orbital plane kept normal to the
424 Earth–Sun line** — a terminator orbit. This is why one cap can face the sun
425 permanently and Tower is never eclipsed.
426- The plane precesses 360° per year to track the sun. Tower's angular momentum is
427 enormous, so this 1°/day reorientation is actively driven, continuously, forever.
428 Canon treats this as Tower's defining maintenance burden.
429- Consequence for the interior view: the star field slowly drifts across the year
430 while spinning fast every 7.5 minutes. Two nested motions. Both are drawn (D-075):
431 the far cap looks at the antisolar point, which walks the ecliptic a degree a day.
432
433### 1.7 Coordinates
434
435The canonical surface coordinate is **(θ, z)**:
436
437- `θ` — angle around the cylinder, 0 to 2π. θ = 0 is the centre of land strip 0.
438- `z` — distance from the sun cap, 0 to 540 km.
439
440The 2D map is the direct unroll: `x = z`, `y = (θ − θ₀) · R`. No projection
441distortion — a cylinder unrolls exactly. This is a genuine advantage over mapping a
442globe and the map view should lean on it.
443
444**The map shows the surface once, bounded**, so its extent is readable. That means
445it needs an edge, and the edge is placed at **θ₀ = the centre of the last slat**.
446Land strip 0 is centred on θ = 0, so cutting there would slice a whole strip in
447half across the top and bottom margins; cutting at a slat centre leaves every land
448strip whole and splits only a band of stars, which carries no geography. Same
449reasoning as putting Earth's map edge at the antimeridian. A sightline whose short
450route crosses the edge is drawn as two segments, so the drawn path always matches
451the measured distance.
452
453---
454
455### 1.8 Sightlines: Tower has two horizons
456
457Along the axis the floor is perfectly flat and never falls away, so nothing is ever
458hidden by curvature. **Tower's horizon is haze.** Circumferentially the floor curves
459*up*, so distant land rises into the sky rather than sinking below a line. The two
460directions behave completely differently, and this is one of the most alien facts
461about living there.
462
463Rayleigh transmission from a floor-level observer:
464
465| Distance | Along the axis | Across the interior (overhead) |
466|---|---|---|
467| 26 km | 78 % | 77 % |
468| 50 km | 56 % | 70 % |
469| 100 km | **31 %** | **78 %** |
470| 270 km (far cap from midpoint) | **4 %** — a ghost | — |
471
472Two consequences:
473
474- **The axial horizon closes at 100–150 km.** From the midpoint you cannot see
475 either end cap. Everyone can see 100 km, knows there is more beyond, and cannot
476 resolve it — a different psychology of distance than Earth's 5 km cliff-edge.
477- **The far side of the world is clearer than the ground at the same distance,**
478 because a sightline across the interior rises through thin axis air while one
479 along the floor grinds through full density. It gets *better* with distance: the
480 land directly overhead, 100 km away, is the crispest far object in Tower at 78 %.
481 **Distant geography is best seen by looking up.** People would orient by what is
482 overhead; the ground is the vague part. This inverts the human default.
483
484### 1.9 Water
485
486Tower's hydrology is stranger than its geometry, and most of it follows from one
487fact and one absence.
488
489#### 1.9.1 Coriolis never pushes surface water sideways
490
491The floor's tangent plane is spanned by θ̂ and ẑ, and the spin axis is ẑ. For any
492flow along the surface:
493
494- **along the axis** — `ẑ × ẑ = 0`, no Coriolis force at all;
495- **around the circumference** — `ẑ × θ̂ = −ŝ`, the force is purely radial.
496
497The Coriolis term never has a component *inside* the surface. So **Tower's rivers
498do not curve.** No hemispheres, no Baer's law, no preferred bank erosion, no gyres,
499no cyclones. Every large-scale rotational habit of Earth's water and weather is
500absent, and a meander in Tower is pure flow dynamics with no thumb on the scale.
501
502#### 1.9.2 What it does instead: everything vertical leans
503
504The force goes into the floor rather than across it, so it appears whenever water
505moves up or down. Deflection of a free fall goes as h^1.5:
506
507| Fall | Lands (retrograde) | Lean of the path | Lean at impact |
508|---|---|---|---|
509| 100 m | 4.2 m | 2.4° | 3.6° |
510| 500 m | 47 m | 5.4° | 8.1° |
511| **1,000 m** | **133 m** | **7.6°** | **11.3°** |
512| 2,000 m | 377 m | 10.7° | 15.8° |
513
514Two different angles, and the interior view needs both. The **path** leans by where
515the water lands against how far it fell — the tilt of a waterfall's plume seen
516whole. The **impact** lean is the direction the water is actually moving when it
517arrives, which is what a streak of it is drawn at, and it is half again the other in
518tangent. `src/canon/motion.ts` computes both.
519
520**Rain falls permanently slanted** — a raindrop at terminal velocity sits at a fixed
521**1.47° against the spin**, ~51 m of drift over a 2 km fall, never varying, never
522reversing. It is fixed because drag holds the fall speed constant, so unlike free
523fall the angle does not grow with the drop: rain leans the same 1.5° whatever the
524cloud. Set against a waterfall's 11°, **the waterfall is the compass and the rain is
525not**, which is the opposite of what §2.4 originally assumed (D-034). Rising things lean the opposite way: smoke drifts spinward, rain drifts
526anti-spinward. Every plume and every shower in Tower tilts, and they tilt against
527each other.
528
529The same applies to anything that descends, not just water — see §1.11 on what it
530does to skiing.
531
532Horizontal flow changes *weight* rather than direction (Eötvös): +0.57 % for a
5332 m/s prograde river, negligible hydrologically. It only matters at speed — an
534express train at 100 m/s gains 29 %, and anything moving retrograde at the 700 m/s
535rim speed is stationary in space and therefore weightless.
536
537#### 1.9.3 A perfect cylinder has no slope anywhere
538
539Potential depends only on radius, so **the whole floor is a single equipotential
540surface.** Water on it has no preferred direction: a perfect Tower has no rivers at
541all, forever.
542
543**Every river in Tower exists because the floor was shaped.** There are no
544tectonics and no uplift, so erosion is strictly one-way — a 3 km range wears flat in
545~30 Myr under a wet engineered climate, ~150 Myr under a dry one. Tower's rivers
546are steadily destroying its landscape and the highlands must be rebuilt to keep them
547running. This is D-004's theme again: Tower's rivers are plumbing it chose to
548install and has to keep re-installing.
549
550Two corollaries:
551
552- **No river can circumnavigate.** A closed loop has no net descent.
553- **Lakes curve upward.** Level means constant radius, so across a 30 km lake the
554 far shore rides **2.3 km above your tangent plane** — Earth would hide it 18 m
555 below the horizon. You look *up* at the opposite beach, and water appears to
556 climb away from you.
557
558#### 1.9.4 There is no passive climate at all
559
560**Tower has no latitude** — every point is equidistant from the light — and with the
561hull sealed it has no windows in its walls either. A uniform hull radiates at 274 K
562everywhere, so left alone the world settles into a flat calm: no gradient, no wind, no
563evaporation, no rain, no rivers. **The one exception is the far cap**, whose window is
564a cold wall the size of the cap (§1.9.6, D-090); it makes a gradient at the deepward
565end whatever Tower does.
566
567**So every weather system in Tower is deliberate.** Tower makes climate the only way
568left to it — by aiming light. It warms where it wants convection and shades where it
569wants condensation; the hull's loss is the sink. Every cloud, every
570rainfall, every jet stream is something Tower is doing, continuously, on purpose.
571
572**Tower also sets the sink** (D-090). The loss through the hull cannot be passive:
5731 km of rock conducting the mean 320 W/m² would need a difference of some 100,000 K
574across it, so heat reaches the outer skin because Tower sends it there. It follows
575that Tower can send less of it from one place and more from another. **It can move
576about 5 TW** — a tenth of the beam — between regions this way: enough to hold the far
577end cold and a few projects besides, not enough to run the climate on. Light is still
578how Tower makes weather; heat rejection is how it keeps the books.
579
580This is D-009 arriving at its conclusion. The mirrorlet swarm was already Tower's
581body language; now it is also its lungs and its weather. There is no autonomic
582layer underneath. **If Tower's attention ever lapses, the rain stops.**
583
584Costs, for scale against a 54.3 TW budget:
585
586| | | |
587|---|---|---|
588| Earth-like rainfall, 1,000 mm/yr | **12.2 TW** | **22.4 %** — Earth spends the same fraction |
589| Recirculating all runoff (1,792 m³/s) against 500 m | 8.8 GW | 0.016 % |
590| The far cap window's loss to space (§1.9.6) | 0.65–1.9 TW | 1–4 % |
591
592#### 1.9.5 Rivers are a closed, pumped circulation
593
594With no natural cycle and no natural slope, a Tower river is a **loop**: a headwater
595reservoir, a shaped descent through the landscape, a lake at the bottom, and a lift
596back to the top. Source and sink are the same system.
597
598Two ways to close the loop, and they give completely different rivers:
599
600- **The pump outfall.** A river begins at a machine. Walk to the source of any
601 river and find a wall of water coming out of a structure — not a spring, an
602 outlet. Costs a rounding error (above).
603- **The made cloud.** Tower evaporates the lake with aimed light and condenses it
604 over the highlands, so rain falls exactly where the river should start. No
605 machinery: the swarm is the pump. Costs the 22.4 % above, and buys real weather
606 with it.
607
608Canon uses **both** — made weather for the world's general hydrology, pumps for
609watercourses Tower wants under precise control.
610
611Two consequences of the sealed hull:
612
613- **A river can circle the world.** The surface is one unbroken sheet, so a channel
614 can run the full 314 km circumference and close on itself — a lazy river returning
615 to its own source. Gravity cannot drive a closed loop, so it is pumped.
616- **The water inventory is conserved and exactly known.** Nothing evaporates to
617 space. Tower knows how much water it has, to the litre, forever.
618
619Lifting is also slightly cheaper than on Earth, since gravity falls off with height:
6201 % cheaper at 1 km, 5 % at 5 km, 25 % at 25 km.
621
622#### 1.9.6 The far end is cold, and Tower keeps it so
623
624*Worked out with the author, 2026-09-28; D-090.*
625
626**The window is a radiator.** Glass is opaque to thermal infrared, so the far cap's
627single glazing does not let the world's heat out as light — it absorbs it, and its outer
628face radiates it to space at 3 K. A pane 0.1–1 m thick loses **80–250 W/m²**, and over
629the cap's 7,854 km² that is **0.65–1.9 TW**, 1–4 % of the beam. Air cooled against the
630glass is denser and slides down the cap, which on a cap means radially outward to the
631rim, and it spreads sunward over the Deepward Sea as a **cold wind off the window**,
632roughly 5–15 m/s. Nothing Tower does makes this; it is what a cold wall does. The ice at
633the foot of the cap is where the physics was going anyway.
634
635**Tower keeps that end of the world dim, and lets it freeze in bands.** Sunward to cap:
636
637| z (km) | Band | By day | By night |
638|---|---|---|---|
639| 496–512 | **open water** | grey sea at about freezing, with sea smoke where the cold wind crosses it | dark |
640| 512–525 | **pack ice** | floes made at the fast ice's edge, carried sunward by the wind, melting where they meet open water | dark |
641| 525–528.5 | **fast ice** | dusk — the rod's glow and nothing aimed | night; the sun goes out overhead at dusk |
642| 528.5–540 | **the Cap Range** | ice mountains, 2–3 km high against the glass, a few crests bare rock | the same, dark |
643| 540 | **the window** | white frost with a scatter of clear panes, its foot buried in ice | stars through the clear panes |
644
645- **The dark is dusk by day, not darkness.** The rod's own glow cannot be aimed away
646 (§1.3.2) and runs on past the sun to the cap (D-079), so the fast ice gets tens of W/m²
647 by day — a permanent overcast dusk — and real night only by night. The sun still goes
648 all the way to the cap (§1.3.4), so once a day it goes out directly over the ice, and
649 the moon sets out from the same place.
650- **Ice mountains stand against the window** (D-093). Snow off the window wind and the
651 meltwater of every cleared pane come down at the cap's foot and freeze there, so the ice
652 is thickest against the glass. But grounded ice cannot stand much higher than a few
653 hundred metres over a few kilometres — it spreads under its own weight until the stress
654 at its bed is what the bed will take, about 150 kPa for cold ice frozen down — and on a
655 420 m sea that is a kerb: 280 m against a 50 km window. So **Tower raised a range there
656 for the ice to stand on**, as it raised the Uplands (D-064): the **Cap Range**, rock rising
657 from the sea bed at 524 km to about 2,400 m at the cap, higher in some places round the
658 ring than others. Ice mantles it from where the rock leaves the water, about 528.5 km, in a
659 low front over the fast ice, thickening as an ice sheet does to 350 m on the heights, and
660 it drapes the ridges rather than burying them level, so the range reads as mountains and
661 its sharpest crests stand out as bare rock. Against the glass it stands **2 to 3 km up the
662 window**, and the window's foot is buried in it. The sea no longer meets the cap: the
663 fast ice ends against the range.
664- **The fast ice holds.** The window wind pushes on it with about 1,500 N per metre of
665 shore; 3 m of ice frozen to the range's foot holds some 3 MN. **Tower has no tides** — its moon
666 is light (§1.3.5) — so the thing that breaks Earth's fast ice out is absent. Storm swell
667 is the threat to it, and the Deepward Sea is on the weather plan.
668- **The whole sea is ice-cold, not only the ice.** With no Coriolis in the plane of the
669 floor (§1.9.1), a 1 K difference in the water drives an exchange of about 0.45 m/s,
670 cold out along the bottom and warm in over the top. That mixes the sea's 44 km to within
671 about a kelvin, so the open water sits at freezing. It is a polar sea, grey and foggy,
672 and its coast has fog where the land's air comes down onto it. **No sea in Tower can
673 be frozen in one corner** — only whole or not at all.
674- **The window's bill is paid by the air.** If the sea paid the 0.65–1.9 TW, the open
675 water would need daylight on it, 140–400 W/m². Instead the weather runs one overturning
676 cell: warm air from the lit lands comes deepward aloft to the glass, cools, sinks, and
677 goes back sunward along the surface as the window wind. The sea pays only what that
678 wind takes from the open water, which is also how fast ice is made — so **Tower sets
679 the ice edge by how hard it runs the cell**.
680- **Tower turns the hull down under the sea** (§1.9.4). If the floor went on drawing its
681 share, the sea would be cooled from beneath and freeze on its bed first, and no light
682 would keep any of it open. The far end takes about 2 TW of Tower's 5 TW of heat control.
683
684**The window frosts, and Tower clears it one pane at a time.** Cold glass collects frost
685on its inner face — very roughly millimetres a day, enough to whiten a pane in days — so
686left alone the far cap would go white and the stars would go. Tower heats one pane at a
687time from its frame: melting a pane's frost is about 6 × 10¹² J, a few minutes at tens of
688GW, and the meltwater runs down the cap onto the ice.
689
690- **One pane per turn of the world**, every 7 min 29 s. The window has **282 panes**
691 (216 whole triangles and 66 cut by the rim, D-078), so a loop takes **35.1 hours** —
692 not a whole number of days, so the clearing drifts against day and night.
693- **Shuffled, and reshuffled every loop.** A fixed order could be learned by anyone who
694 watched long enough; a fresh one each loop cannot. Each loop's order is drawn from the
695 world's seed and the loop's number, so which panes are clear at any moment can be
696 worked out without the history, the same in the app and in the book.
697- A pane's gap between clearings runs from almost nothing to almost two loops, so the
698 frost on it ranges from clean glass to thick white. The window reads as a white lattice
699 with a scatter of black, starry triangles, perhaps one in ten; how long a pane stays
700 clear rests on the frost rate, which is rough to a factor of ten.
701
702**As drawn** (D-091). The Deepward Sea's `ice` in the world file puts the bands where the
703table has them, and the water shader draws the pack as floes and leads and the fast ice as
704one cracked sheet. Tower's aimed light falls from the shore to about a third at the ice
705edge, a tenth at the fast ice and nothing on it, which leaves the fast ice the rod's
706twentieth by day; the views show that through the same 0.35 power the exposure gives the
707light dial, so the fast ice reads as dusk, not black. The frost closes a cleared pane as
7081 − e^(−age / 10 h), which leaves about one pane in ten nearly clear, and the pane being
709cleared thaws across its turn. Both views share the window, so the frost is the same from
710outside.
711
712#### 1.9.7 Farms on their own days
713
714*Asked for by the author, 2026-09-30; D-095.*
715
716**Tower gives each crop the day its plant wants.** Any light on any field at any hour is
717what the swarm is for (§1.3.1), so a farm in Tower does not live by the sun. The author's
718first thought was full sunlight around the clock; the plants would not thank Tower for it.
719Most flowering plants measure the night to know when to flower, and some — tomatoes — are
720injured by light that never stops. So every field gets darkness, and its own length of day:
721
722| | Day Tower gives it | Why |
723|---|---|---|
724| rapeseed, flax, wheat | 18 h | long-day plants: they flower sooner and fuller under long days |
725| lavender, poppies, phacelia, tomatoes | 16 h | long-day; tomatoes are day-neutral but need about six hours of dark |
726| tulips, sunflowers, maize, lettuce | 14 h | day-neutral, or nearly |
727| buckwheat, potatoes | 12 h | short-day; potatoes set their tubers on short days |
728
729- **A field's day starts at sunrise and is lit as at noon** from first light to last, not
730 by a sun climbing and setting. A long-day crop is lit **on into the night**; a short-day
731 crop has its light taken away before the sun sets.
732- **Tower cannot make a field dark by day.** The rod's own glow cannot be aimed away
733 (§1.3.2), so a short day ends in the far end's dusk, a twentieth of the light, and only
734 the world's night is truly dark.
735- **The fields show at night.** For the first hours after sunset most of them are still lit
736 as at noon — a patchwork blazing in a dark world — and they go out one crop at a time,
737 the last of them six hours after sunset at the equinox.
738- **They cost the world a little of its night.** Lighting fields after dark means a beam
739 not quite banked, and the rod glows with the beam. With **250 km²** of fields, chosen by
740 the author for this, about 220 GW goes to them just after sunset — 0.4% of the beam —
741 which adds about 0.4 W/m² of the rod's glow everywhere, a moonlit night's worth, falling
742 to nothing by six hours after sunset. At 1,000 km² it would be a permanent twilight.
743- **Nine farms share the 250 km²**, spread round the world and down its length (D-096):
744 two on the Uplands beside the Uplands Ring, four in clearings cut out of Greatwood — one
745 of them the nearest fields to the Capital — and three on the open ground before the far
746 end, one at the Axial Line's railhead. Each is about 28 km² (provisional names: Ringside,
747 Far Ringside, Greatwood Clearing, Capital, Deepwood, Greatwood, Railhead, Far and Last
748 Fields). Three-quarters of the fields are flowers in bloom — tulips red, yellow, pink and
749 white, lavender, sunflowers, rapeseed, poppies, flax, phacelia, buckwheat — and the rest
750 maize, potatoes, tomatoes, wheat and lettuce.
751- **Farms grow; they are not drawn** (D-097). Each farm is a seed and an area, and grows
752 outward over the land a patch at a time, taking the nearest and luckiest ground at its
753 edge and never water, sand, rock, a range or a slope too steep to plough — so it comes out
754 ragged, with lobes and bays, and goes round a river rather than across it. Its edge runs
755 along its fields' edges: a field is in the farm or not, whole.
756- **Fields are irregular, the way old farmland is.** The land is divided into blocks about
757 1.5 km across, with farm tracks along their edges, and each block was taken in hand on its
758 own terms: its fields run at its own angle, are its own size (220–440 m), and are drawn out
759 long by its own stretch. Inside it the fields have straight edges meeting at odd angles,
760 and a third of them are cut again into long strips. No line runs further than a block, and
761 no two blocks agree.
762
763### 1.10 Slat orientation — RESOLVED: none
764
765Axial strips versus rings was weighed at length (D-016) and answered by removing
766slats entirely (D-017). The comparison is kept in D-016 because it established what
767the choice *cost*, and because the reasoning — that slat layout sets the shape of
768Tower's countries, its climate map and its astronomy all at once — is what made
769"none" a real option rather than an absence.
770
771### 1.11 The world as built
772
773Authored geography lives in **`content/world.json`** — the source of truth — as
774features the browser generates the terrain from live (world-generation.md, D-062).
775Names are provisional. Tower is laid out in **belts
776along the axis**, which is the natural grain of an engineered climate (§1.9.4):
777
778| z | | |
779|---|---|---|
780| 0–42 km | **The Sunward Sea** | ring ocean at the foot of the sun cap |
781| 55–140 km | **the range** | Westwall, The Sisters, **Snowcrown** (4,300 m), Eastwall — the named high points of **The Girdle**, which rings the world at z 90 km (D-051) |
782| 105–150 km | **The Uplands** | ground Tower raised to about 1,000 m, ringing the world, so the rivers off the range can run down to The Narrows (D-064) |
783| 148–218 km | **The Dry Reach** | desert **ringing the world**, 22,000 km², 13% of the surface: mesas over dune fields, dry washes, and salt pans ringed by shorelines (D-069) |
784| 176/190/203 km | **three ridges** | ringing, concentric — and **The Narrows** is the only breach in all three |
785| 129–470 km | **the farms** | nine farms of about 28 km², 250 km² in all, round the world: on the Uplands, in Greatwood's clearings, before the far end (§1.9.7, D-095, D-096) |
786| 214–430 km | **Greatwood** | forest belt: about three billion trees, with meadows Tower left open in it (D-071) |
787| 248–402 km | **The Deep** | 154 × 32 km sea, long down the axis and narrow around |
788| 270 km | **The Capital / The Spindle** | axial midpoint; 20 km across, its spinward edge on The Deep's shore (D-070) |
789| 496–540 km | **The Deepward Sea** | ring ocean at the foot of the far cap: open water to 512 km, pack ice to 525, dim fast ice to the Cap Range (§1.9.6, D-090) |
790| 528.5–540 km | **The Cap Range** | ice mountains Tower raised against the far cap's window, 2–3 km high (D-093) |
791| 110–480 km | **The Axial Line** | railway down the length of the world, through The Narrows (D-086) |
792| 140 km | **The Uplands Ring** | railway round the world across the Uplands (D-086) |
793
794The railways keep a grade of their own over the ground rather than cutting it, so they run
795on piers much of the way: 10–20 m up over ordinary country, and on long viaducts over the
796rivers' gorges. **A train going round the world has a handedness**, like a ski run: the
797Ring's trains, at 100 m/s, are 31% heavier running spinward and 27% lighter running
798antispinward (`canon/motion.ts`); a train along the axis feels nothing.
799
800Both ring seas carry ninety sailing ships each, and Tower's published weather plan
801(D-067) runs a 28-day cycle of storms, gales and a calm over them and The Deep.
802
803#### What the desert is made of
804
805The Dry Reach is not sand with some rock in it; it is the whole grammar of a desert,
806because Tower had seen deserts (D-069). Tiers of rock stand over dune fields whose crests
807run across the wind Tower sends there; rocky hills break up the open ground; a network of
808**dry washes** is routed by the same drainage the ranges are eroded by, because a channel
809network that ignores drainage is the one thing that would look wrong. In the lowest ground
810there are **salt pans**, dead flat, ringed by the **shoreline benches** of lakes that never
811stood. The middle of the Reach stands 150 m above its rim so that the washes have somewhere
812to run, and Tower keeps its rock 6.5 km clear of the rivers it had already routed — a mesa
813across The Narrows would leave the world's drainage in a slot.
814
815Rock is laid in beds, and a bed in Tower is a **constant radius**, so the strata line up
816across separate mesas however far apart they stand. That is what makes a field of them read
817as one formation eroded out of one plateau.
818
819#### Why the desert rings
820
821**On a cylinder you cannot go around a band.** Every desert on Earth can be
822circumnavigated; a ringed one cannot. It is an absolute barrier across the world's
823waist, and with the three ridges ringing too it becomes three concentric walls.
824
825#### The drainage, and why it keeps the chokepoint
826
827Four rivers come off the range — Westwall Water, Sisters Water, Eastwall Water and
828The Long Water. On Earth most drainages **do not** cut through a rising ridge; they
829are defeated and diverted, and only an *antecedent* river with enough power keeps
830its course. So three of the four are turned by First Ridge, run **along its front**
831gathering each other, and leave with the fourth through the single gap.
832
833- **The Narrows carries the entire world's runoff** — ~392 m³/s off a 9,800 km²
834 range, lifted 1,780 m for 6.9 GW (0.013% of budget).
835- The ridge-front reaches are **the only circumferential water in Tower**, and
836 weigh fractionally more or less for it (§1.9.2). Everything else runs axially,
837 where Coriolis is exactly zero.
838- Whoever holds The Narrows holds the axis of the world. The Capital sits behind it.
839- **The Long Water falls twice** (D-066): 680 m off the range below Hollow Tarn, into a
840 gorge, and 170 m into The Deep at its mouth. Eastwall Water falls 440 m off its side of
841 the range. Each leans antispinward as it drops.
842
843**The drainage needed the floor raised, and generating it honestly is what showed it**
844(D-063, D-064). As v1 authored it, the ground between the Girdle's foot and the Dry
845Reach — z 115 to 135 km — was a lowland barely 60 m high, below a plateau of
846800–1,100 m, and v1 painted its rivers across it a kilometre up. A river cannot climb.
847Generated faithfully, each needed an embankment up to 950 m high to reach The Narrows.
848
849So Tower raised the lowland: **The Uplands**, a ring of ground lifted to about 1,000 m,
850meeting the Girdle's skirt on one side and the plateau's edge on the other. The rivers
851now fall steadily off the range, across the Uplands and onto the plateau, and the floor
852under them is mostly cut — The Narrows about 500 m deep — and built up by no more than
853~200 m anywhere, the height of a levee rather than a dam.
854
855#### The Deep is oriented for the view
856
857Long down the axis and narrow around it, so you cross it the **short** way — around
858θ, where the floor curves up. The authored outline is 154 × 32 km and the water fills about
85918 km of that width; from the Capital's waterfront the far shore is that 18 km away and
860stands **2.6 km above eye level**. Crossing it lengthwise instead would be dead flat. The
861orientation is the whole point.
862
863**The Capital is a footprint, not a dot** (D-070). It is 20 km across, centred on the axial
864midpoint — the only centre a cylinder has — which is just wide enough that its spinward edge
865is on The Deep's shore, 9.8 km out, where the ground has come down from 300 m to the
866water's 120 m. So the city holds both the middle of the world and a waterfront. The streets
867and buildings inside that footprint are phase 7's.
868
869It is also the world's flywheel: 19× the diurnal heat storage of bare ground, and
8705.9 days at full power to move its temperature one kelvin. Tower still supplies
871every joule (§1.9.4), but the world now coasts for about a week rather than
872stopping the moment attention lapses.
873
874#### The cap seas are not designed
875
876Gravity on an end cap points radially outward — *tangent* to the cap. Nothing rests
877there; water runs down to the rim and pools. **Both ring oceans exist whether anyone
878planned them or not**, each with a 314 km shoreline and a 50 km cliff standing
879behind it. The only windows in the world are at their feet (§1.4).
880
881They are not the same sea. The far cap's window is a cold wall, so **the Deepward Sea is
882a polar one** — ice-cold throughout, and frozen in bands toward the cap (§1.9.6). The sun
883cap is double-glazed and does none of this, so the Sunward Sea stays temperate.
884
885#### Skiing, because it is a different sport here
886
887Level motion feels no Coriolis (§1.9.1) but a descending skier has radial velocity,
888and that does deflect:
889
890- **Down the axis:** a steady sideways push, always antispinward — 1.5% of g at
891 15 m/s on a 20° slope, 6.4% at 35 m/s on 40°.
892- **Around the cylinder:** you get heavier or lighter. 8.6% at 30 m/s, 11.4% at 40.
893
894So a **retrograde run gets lighter the faster you go**, which is self-reinforcing,
895while a prograde run grips harder as it accelerates. Every slope in Tower has a
896handedness. No Earth mountain does. Settlements sit at the tarns — Sisters Station,
897Hollow Station — around 2,100 m, with the runs above them.
898
899**The range as generated** (D-065) is the named summits and a scatter of unnamed ones,
900joined by ridges and cut by water into branching valleys, all eroded as one group with
901the Girdle. The named summits are held at exactly their heights and are the highest
902ground around them; each tarn sits on a shelf the valleys were not allowed to cut, which
903puts Sisters Tarn at 2,173 m.
904
905#### Open questions
906
907- **The Spindle's height.** 3.2 km is a placeholder; an object dropped from its top
908 lands ~760 m antispinward of its base.
909- **z 430–496 km** is unauthored but for three of the farms (D-096). The circumference
910 outside the named peaks is no
911 longer empty — The Girdle carries the range round the whole 314 km — but it is
912 unwalked: peaks with no names, and no rivers drawn off them yet.
913
914## 2. Application architecture
915
916### 2.1 Stack
917
918- **Vite** + **TypeScript** (strict), no framework — the app is three canvases and
919 a control panel, and a framework would not earn its weight.
920- **One layout breakpoint**, at 720 px: above it the panel is a column beside the
921 world, below it a drawer over it (D-043). The world is a full-bleed canvas in
922 both, because all three views are drag-to-look and a scrolling page would be
923 fighting them for every touch.
924- **Three.js** for the exterior and interior 3D views.
925- **Canvas 2D** for the map view.
926- **Web workers** for world generation (world-generation.md §5): a pool of up to six,
927 driven through **comlink**. Each must answer a ping before it is given the world. One
928 whose script fails, or that is still silent a few seconds after its siblings answered,
929 is replaced at once, up to four tries, then dropped, so a dead worker costs a few
930 seconds rather than freezing the load (D-080, D-092). Noise is **simplex-noise**, sampled in 3D on the
931 cylinder itself so nothing tears at θ = 0. Those two are the only runtime
932 dependencies besides Three.js.
933- **GitLab CI → GitLab Pages**, publishing `dist/` as `static/`.
934
935### 2.2 Module layout
936
937```
938src/
939 canon/
940 constants.ts single source of truth for every number in §1
941 geometry.ts (θ,z) <-> 3D, slat layout, map <-> surface
942 atmosphere.ts the rotational density profile and its extinction (§1.5)
943 motion.ts how things fall in the rotating frame (§1.9.2) — the only
944 evidence of the spin anywhere but the far cap window
945 terrain/ world generation, pure TypeScript — runs in workers, on the
946 main thread and under vitest alike (world-generation.md §5)
947 compile.ts the world compile: shapes, river profiles, lake levels
948 mountains.ts summits, ridge graphs, steady-state erosion, pinned summits
949 grid.ts grids on the surface: drainage, blur, sampling — shared by the above
950 desert.ts plateaus and mesas, dry washes, salt pans, abandoned shorelines
951 forest.ts where trees stand, how big they are, and what a canopy is
952 water.ts wind seas, fetch, river speed and foam: the water's physics
953 sea-state.ts every lake and sea's waves and whitecaps now, from the weather
954 ships.ts ship lanes, positions from the clock, the wave sum they ride
955 rails.ts railway lines, and the grade their track keeps over the ground
956 falls.ts waterfall sheets, leaning antispinward as they fall
957 cache.ts the compiled world kept in IndexedDB between visits
958 field.ts the elevation function: one answer to "how high is it here"
959 noise.ts seeded simplex noise on the cylinder, and the hash under it
960 shapes.ts signed distance, smoothed lines, on the unrolled (z, θR) plane
961 tile.ts the tile quadtree scheme, and one tile's mesh data
962 palette.ts material weights to colour, as TypeScript and as GLSL
963 map-image.ts the map's picture of the world, rendered in bands
964 worker.ts one worker: compile, tiles, map rows
965 service.ts the pool, generations, the status dialog's progress, ground queries
966 views/
967 palette.ts one colour per feature kind, shared by the map and the list
968 terrain-lod.ts the ground as a quadtree of tiles, refined around the eye
969 craft.ts the tour's flyers as meshes: paragliders to giant airships, trains, spacecraft
970 tour-player.ts plays the tour's legs: the deal, the fades, the caption
971 forest-view.ts the trees near the eye: meshes, then cards, then the canopy skin
972 tour/ the scenic tour, pure: no Three.js, flown by the views and the tests
973 geo.ts the floor's coordinates and the tower's frame, and the sums between them
974 director.ts a craft's track and bank, what is worth looking at, where the camera rides
975 interior-legs.ts the legs inside, found in the compiled world
976 exterior-legs.ts the legs outside, in kilometres, clear of the beam
977 plan.ts the deal: every leg once, no two of a kind in a row, 12–18 s each
978 world/
979 schema.ts world.json v2 types + validation: features, not places
980 instruments.ts sightline, viewshed, lighting probe, travel (§3.3)
981 weather.ts Tower's weather plan read at an hour: what it does, what it told people
982 photos.ts a saved shot of a 3D view: its numbers, checked (D-099)
983 state/
984 store.ts selected point, time-of-day, spin phase, view mode
985 views/
986 exterior.ts Three.js: hull, collector, beam, spin, point picker
987 interior-model.ts ground tiles, caps, bore, beam and haze, shared by both 3D views
988 map.ts Canvas 2D: unrolled surface, slats, terminator, point picker
989 interior.ts Three.js: shell geometry, the haze shader of §1.5, beam
990 ui/
991 app.ts the whole panel: list, detail card, weather board, readouts, view switching
992 eye-gauge.ts the interior's eye-height gauge and its landmarks of known height
993 scales.ts slider mappings — kept out of views/ so the panel can label
994 the eye-height gauge without pulling in Three.js
995 main.ts loads world.json and starts the app
996vite.config.ts also makes world.json from content/world.json (§3.1), and on a dev
997 server writes the author's saved shots to content/photos.json (D-099)
998
999tools/ node-only, never bundled; plain .mjs with no build step
1000 port-world.mjs the one-off port of v1's geography.json into world.json v2
1001 build-pages.sh the Pages site: every branch built into one, with branches.json (D-073)
1002 screenshots.mjs drives the running application in a headless browser and
1003 photographs it into docs/screenshots/ (D-042)
1004 photos.mjs renders the shots in content/photos.json to photos/, the view alone,
1005 at 4K (D-099)
1006 browser.mjs what those two share: the browser, the warm world, waiting for terrain
1007```
1008
1009`canon/constants.ts` is the spine. Every derived figure — period, rim speed, land
1010area, slat width — is *computed* from radius, length, slat count and target land
1011area, never hard-coded. Changing the radius changes the whole app coherently.
1012
1013### 2.3 State
1014
1015One small observable store. Views subscribe; nothing owns anything else.
1016
1017```ts
1018type TowerState = {
1019 point: { theta: number; z: number } | null // the picked location
1020 tod: number // 0..1, position in the diffuser day cycle
1021 brightness: number // W/m^2 mean, 30..320 -- the diffuser output setting
1022 spinPhase: number // 0..2pi, rotation for star motion
1023 spinning: boolean
1024 view: 'exterior' | 'map' | 'interior'
1025 probe: { from: SurfacePoint; to: SurfacePoint } | null
1026}
1027```
1028
1029The exterior and map pickers both write `point`; the interior view reads it. That
1030is the entire interaction loop.
1031
1032### 2.4 The exterior view
1033
1034Scene units are kilometres, so the code reads in canon numbers. Tower's axis lies
1035along world Z with the sun cap at z = 0, which puts a canon surface point at
1036`(R cos θ, R sin θ, z)` in the hull's own frame. The hull spins about Z and carries
1037that frame with it, so **picking resolves the ray hit back through
1038`worldToLocal`** — otherwise every point picked off a turning hull would be wrong by
1039the spin phase.
1040
1041Two deliberate departures from physics, both reading aids of the same kind as the
1042map's hillshade:
1043
1044- **Fill lighting.** Real sunlight here runs parallel to the axis, so Tower's flank
1045 is edge-on to it and renders very nearly black — accurate and useless. Two fill
1046 lights lift the hull enough to read its shape.
1047- **A visible beam.** In vacuum there is nothing between collector and cap to
1048 scatter light, so the converging beam would not be visible at all. It is drawn
1049 as rays because it is the thing the view is about.
1050- **A dark collector.** Both of its sides are dark, and for different reasons: the
1051 face pointed at Tower is a 245 K radiator, and the face pointed at the sun is a
1052 mirror, which shows the empty sky in front of it and not the sun behind the eye.
1053 What makes it legible is the sunlit rim of D-054 — the same 4 km ring the sun cap
1054 window sees from inside, drawn here as geometry rather than in a shader (D-055).
1055 The mirror face is lit **by the sun alone**, in its own shader: as a standard
1056 metal material it also reflected the fill lights, which do not exist, as a
1057 blue-white sweep across the disc (D-060). The sun sits on the axis behind the
1058 collector, so its glint shows only when looking nearly straight down that axis.
1059
1060**The stars are the interior's, and they are Earth's** (D-075). The sky is a sphere
1061around the scene painted with the same star field the windows use (D-056), sampled by
1062direction from the camera so the stars sit at infinity and hold still as the camera
1063orbits. The field is the Yale Bright Star Catalogue — every star to magnitude 6.5 — set by
1064the clock's date: the axis points at the sun, so the sky behind Tower is fixed by the sun's
1065ecliptic longitude, and turns once a year. Outside, ecliptic north is up (scene +Y), the one
1066roll square to the axis on every day. Spin does not turn it — the camera is not riding the
1067hull — and there is no daylight to adapt to, so it is drawn at full gain (D-060).
1068
1069**The hull can be tried in other dress** (D-076). **Rock** is the first: a cratered, lumpy
1070shell a few kilometres thick laid over the metal skin, never into it, with the windows
1071left clear. It is an experiment in how Tower might look, not canon — the mass alone would
1072be a question for §1.2 — and it sits in the Hull switch beside True and X-ray. **Piping**
1073is the second (D-077): the skin plated in panels, banded every ~36 km with hoop pipes either
1074side, pipe bundles running between the bands on brackets, clustered blocks of plant, vents
1075whose grilles and plumes switch on and off at random, and thruster pods at each end that
1076fire rarely, with long flaring flames and real light on the hull. Everything is dusted,
1077matte where the dust lies, so the metal does not read as chrome. Every part is outside the skin, so the windows
1078still see only Tower's inside. **Rock and piping** is the third (D-081), the two at once:
1079the reading is that rock was heaped over the plant as shielding, so it lies in banks tens
1080of kilometres across over about three fifths of the hull, half as tall again as the Rock
1081reading, with scarps at their edges; the plant
1082rooms and vents crowd into the bare ground between, the bands and pipe runs are laid
1083regardless and go under the rock, and the rock is dug clear round each thruster pod.
1084
1085Everything in the scene is captioned — collector, beam, both caps — with screen-space
1086labels. A dark disc and a cone of light are not self-explanatory, and the collector
1087is the least intuitive object in Tower: it is larger than the world it feeds.
1088
1089The default camera frames the whole system rather than Tower alone: the collector
1090is 244 km across and flies 320 km ahead, and it is the larger object.
1091
1092**The hull has two readings, and the view switches between them** (D-047). **True**
1093is the outer skin: bare structure, with a window at each cap.
1094**X-ray** wraps the map's picture of the terrain onto the outside instead — the same
1095image the map draws, rendered live from the world (world-generation.md §9) — from outside Tower is
1096structure, so what that texture shows is what is *inside*, which makes it a diagram
1097and not a view. Both are worth having and they are not the same claim, so the
1098control is a two-way switch rather than a checkbox. **True is the default**, and the
1099last reading chosen is remembered across reloads and view switches (D-061).
1100
1101**The inside of Tower is the interior view's own model** (D-060), not a lookalike.
1102The displaced ground, both glazed caps, the far cap's bore and the beam are built
1103once in `interior-model.ts` and added to both scenes, so looking in through either
1104window from outside shows the same land, hazed by the same integral, as standing in
1105it does. Two things make that work from outside. The haze integral **clips its
1106segment to the air** — the part of the sightline inside the tube, between the sun
1107cap and the far cap's glass — so the kilometres of vacuum between the camera and the
1108window add nothing; from inside the clip is the whole segment and nothing changes.
1109And the windows are **see-through**: a pane that paints the computed sky from inside
1110is transparent from outside, carrying only the haze in front of it, so what shows
1111through is the scene that is really there — the land beyond the near cap, and the
1112collector and the stars beyond the far one. The shaders work in the tower's frame,
1113and the exterior hands them the world-to-tower transform each frame, because the
1114hull is turning and the air turns with it.
1115
1116The outer skin keeps its own mesh and its own two modes. It sits **a kilometre out from
1117the floor**, where D-044 puts the wall's outer face, with a ring closing the wall at each
1118end — generated ground goes below the datum, and a skin at the floor's own radius let
1119sea floors and tile skirts show through the hull (D-064). Three's cylinder runs u
1120around and v along, while the image is the other way round, so the UVs are rewritten
1121from the original attribute rather than derived from vertex positions — the seam
1122vertices are duplicated, and deriving an angle from them smears one column of
1123triangles across the whole image.
1124
1125**The camera position persists** across reloads, alongside the active view, so
1126returning to the page returns to the vantage you left.
1127
1128**The scenic tour runs outside too** (D-085): spacecraft, a new one every 12–18 seconds —
1129skimming the hull, circling it against its spin, docking on it, looking in through the far
1130cap, over the collector's rim, down the beam, and Tower, the collector and the sun framed
1131together. A leg flies either in space, where the hull turns past at real speed, or in the
1132hull's own frame, where it holds still and the stars wheel. No craft enters the beam's cone.
1133
1134**There are no place markers** (D-060). Selecting a place still swings the camera
1135round to it, and a cap is framed from about 40° off the axis so its window faces the
1136camera; the sidebar and the map carry the places themselves.
1137
1138### 2.4 The interior view — built
1139
1140Scope, since D-062: **real geometry, and ground generated to match it.**
1141
1142Real: the ground is the actual cylinder, curving up on both sides and closing
1143overhead, built from generated tiles (world-generation.md §6).
1144**Stars only through the far cap** — the wall is sealed (§1.4), so for 539 of the
1145540 km the sky is land and light. The far cap is glazed (D-045) and the sky beyond it is
1146the real one (D-075): the Yale Bright Star Catalogue, baked into cells on a cube's faces
1147so a pixel reads only the nine cells round it, and looked up by view direction turned
1148about the spin axis by the spin phase — one turn every 7 min 29 s, the point on the axis
1149genuinely motionless — and then by the date, which sets where the antisolar point is.
1150
1151The ground is a **quadtree of tiles**, each a 65-vertex grid bent onto the cylinder
1152in a worker: 34 km tiles on the far side of the world, 33 m tiles underfoot, so vertices
1153are half a kilometre apart overhead and half a metre apart at your feet. A tile splits
1154once the eye is within 1.8 tile-widths of it, and only once all four of its children
1155have arrived — detail pops in, and the ground is never missing. The tiles carry
1156material weights rather than colour, and the shader turns them into colour from the
1157same palette the map uses, with v1's mottling and a little grain near the eye. There
1158is still no scenery: no buildings, no trees, no water surface of its own. Those are
1159phases 3–7 of world-generation.md.
1160
1161**Haze is the shader, and it is integrated rather than faked.** Every fragment
1162samples the rotational density profile 24 times along the ray to the camera and
1163extinguishes per channel — red survives twice as far as green, blue half as far,
1164which is what makes distance blue rather than grey. From the floor it reproduces
1165§1.8 from the inside: 78% straight up against 31% for the same 100 km along the
1166ground, printed in the readout so the claim can be checked rather than believed.
1167The airlight the haze adds is *neutral*; tinting it blue double-counts the
1168wavelength dependence and turns even the desert mauve (D-034).
1169
1170**Nothing inside the scene rotates**, because the observer, the ground and the air
1171all co-rotate. What falls carries the spin, and §1.9.2 is lopsided about how: rain
1172leans a fixed 1.5° whatever the cloud, because drag pins its speed, while only free
1173fall keeps accelerating and so keeps leaning. **The waterfall is the compass; the
1174rain is barely a hint.** Rain is no longer drawn (D-049) — 1.5° is not a picture,
1175and the pinwheel below does the job it was standing in for. The physics stays in
1176`canon/motion.ts` and stays tested; it was only ever the rendering that could not
1177carry it.
1178
1179**The one thing that does turn is outside.** The sky through the caps does not
1180co-rotate, so it wheels once every 7 min 29 s about the motionless star on the axis
1181(D-045). It is the only evidence of the spin in the view. Both caps are windows
1182(D-050), so it can be had looking either way along the axis — deepward into empty
1183space, or sunward past the black disc of the collector.
1184
1185The observer stands on the terrain by asking the same elevation function the tiles are
1186built from, at full detail. D-035's readback of a raster is gone with the raster.
1187
1188**Keyboard flight**: W A S D or the arrows move along the heading, E and Q climb and
1189descend, shift is five times faster. Speed is proportional to height above the ground,
1190so the ground passes at the same apparent pace from a metre up or ten kilometres.
1191
1192Instruments in the view: eye height from 1.7 m to the edge of the beam, 48.4 km up (D-084), with the local gravity
1193beside it — a vertical gauge up the view's right side, marked with real-world things of
1194known height so the number means something (D-082) — the five canon illumination settings of §1.3, a field of view fixed at 60° (D-083), and captions on every place still visible through the haze.
1195Selecting a place walks the observer to it (D-038) — the haze horizon closes at
1196100–150 km, so turning to face something usually just points at haze.
1197
1198**Both caps are glazed** (D-045, D-050), framed by a lattice of identical equilateral
1199triangles 8.3 km on a side (D-078), with a vertex on the axis where six meet. That is the
1200pitch of the polar checker it replaced (D-041), so it is still the only object in the world
1201with a known size and still doubles as a scale for judging distance, read against sky.
1202The exterior draws these same caps — the same meshes and shaders, not a copy of
1203them (D-060).
1204
1205The far cap's glazing is set a kilometre into its own frame, so from inside there is
1206a **1 km reveal** around it. That is the only place the wall depth of D-044 can be
1207seen from within the world, which is why it is the only place it is drawn.
1208
1209**Water is geometry** (D-066). Every lake, sea and river is a surface at its own level
1210— a level in Tower is a constant radius, so a lake curves up with the floor — drawn over
1211the ground with the depth test finding the shoreline, and the ground under it drawn as
1212bed. Deep water is dark and shallow water shows the bed through it. Waves are sized from
1213each body's wind — Tower's weather plan, or the body's usual wind when nothing is
1214scheduled (D-067) — and the fetch it blows over, by the relations fitted to real seas, and
1215drawn as six components that displace the surface near the eye and shade it beyond;
1216rivers carry ripples downstream at the speed Manning's equation gives them, and turn
1217white on their rapids. Whitecaps cover the share of a sea the wind speed gives. Water
1218mirrors the hazed land overhead, and glints where it mirrors the beam.
1219
1220**The forest is trees** (D-071). Greatwood is a density field — stems per hectare, thinned
1221at its edges, opened where Tower left meadows, stopped by water, rock and the treeline — and
1222the trees themselves are found by a rule rather than kept in a list, so the same trunks
1223stand in the same places for everyone who walks there. Within a few hundred metres they are
1224meshes; out to three quarters of a kilometre, cards turned to face the eye; beyond that the
1225tile carries a canopy skin at the canopy's own height, which sinks back onto the ground as
1226you approach. **The Tall Wood** is 52 km² of 90–115 m giants near the Capital, placed once
1227from the world's seed: a landmark standing 75 m proud of the wood around it.
1228
1229**Ships** sail the ring seas (D-067): procedural hulls, mainsails and jibs, instanced, each
1230on a lane round the world at a position that is a function of the clock, riding the waves
1231drawn under it with the mainsail set to the wind. While a gale or storm is published for
1232their sea in time to get in, they are in harbour — off the water, since harbours are not
1233drawn yet; a squall announced too late catches them out.
1234
1235**The scenic tour** (D-085, replacing D-068's) flies the view itself, on the world's flyers:
1236a new one every 12–18 seconds, dealt at random, fading through black between them — a
1237paraglider on a summit's flank, a glider in a thermal, light aircraft and seaplanes, an
1238airliner round the Girdle, airships low down and giants near the axis, one of them circling
1239the sun outside the beam, trains on both railways, ships in fair weather and foul. Each
1240craft exists for its leg. The camera rides in it or chases it, banks with it, and is
1241pointed by a director at whatever is worth seeing from there — scored by the same haze
1242integral the view is drawn with, so it never turns to stare at something the air has eaten.
1243The legs are worked out from the world, so they follow its edits, and the screenshot tour
1244photographs them.
1245
1246**Waterfalls lean.** A river's profile steps where it cannot slope — off a range, into
1247The Deep — and a step is a fall with a gorge below it. The falling sheet leaves the lip at
1248the river's speed and drifts antispinward by the free-fall drift of §1.9.2, so the
1249Long Water's 680 m fall off the range lands about 75 m antispinward of its lip. It is the
1250first thing in the view that shows the spin by leaning, which §1.9.2 always said the
1251waterfall would be.
1252
1253The beam is drawn after all water: it is always in front of it, and drawn first it was
1254blended under the far side's seas.
1255
1256---
1257
1258## 3. The world file, and how it changes
1259
1260The app is an instrument for writing the novel as much as a thing to look at. It
1261must answer questions like *can the far face be seen from the midpoint?*, *where
1262does a central embassy go?*, *can a lake overhang?* — and their answers are placed,
1263named and kept in the world file.
1264
1265### 3.1 One file, changed in the repository
1266
1267**`content/world.json` is the world, and the only copy of it** (D-072). The author
1268writes alongside Tower rather than in it, and changes the world by talking it over with
1269Claude, who edits the file; git keeps its history beside the prose. There is no editor
1270in the browser, no local draft in `localStorage`, and no import or export.
1271
1272| | |
1273|---|---|
1274| World content | `content/world.json`, committed; the app only reads it |
1275| What the app loads | `world.json`, made from it by `vite.config.ts`: every `notes` emptied, every feature with `"public": false` left out |
1276| Instruments (§3.3) | the sightline probe |
1277| Output | permalinks to a point or place |
1278| Panel | view controls, place list, a read-only detail card, the weather board |
1279
1280The published `world.json` is **derived, never committed**: the dev server serves it
1281fresh on every request and reloads an open page when `content/world.json` is saved, and
1282the build writes it into `dist/`. There is no second copy to keep in step. There is
1283no backend — GitLab Pages is static — and none is needed: the loop is edit, commit,
1284push, and the published site serves it.
1285
1286Everyone sees the same app. Until D-072 there was a writer mode (the default) and a
1287reader mode (`?reader=1`); the query parameter now does nothing.
1288
1289**One exception, and it is not the world** (D-099): on a dev server the author has a
1290button and a key that save the open view as a photograph, into `content/photos.json`,
1291written by the dev server. It is not in the build, so readers still see one app, and it
1292changes nothing about the world: a photograph is a camera position and a moment.
1293
1294### 3.2 The world file
1295
1296```jsonc
1297{
1298 "version": 2,
1299 "seed": 1729, // every feature's randomness mixes this in
1300 "ground": { "baseM": 60, "reliefM": 260, "notes": "" },
1301 "features": [{
1302 "id": "the-deep", // permalink target; see below
1303 "name": "The Deep",
1304 "kind": "mountains|lake|sea|river|desert|forest|settlement|road|path|railway|embassy|tower|landmark|note|region",
1305 "geometry": { "type": "polygon", "points": [[theta, z], ...] },
1306 // or point, polyline, or band { "zFrom", "zTo" } for anything ringing the world
1307 "blurb": "public description, shown to readers",
1308 "notes": "the author's working notes — NEVER shipped",
1309 "public": true, // false = not ready to exist publicly
1310 "seed": 1437950893, // written once at creation, never from the id
1311 "levelM": 120, "depthM": 330, "basin": "flooded", "shoreM": 11000
1312 // ...and whatever parameters the kind has: world-generation.md §3
1313 }],
1314 "weather": { // Tower's published plan (D-067)
1315 "cycleDays": 28, // the plan repeats; 0 for never
1316 "events": [{
1317 "id": "deepward-sea-storm", "target": "deepward-sea", "kind": "calm|breeze|gale|storm",
1318 "start": { "day": 20, "hour": 18 }, "durationH": 30,
1319 "wind": { "directionDeg": 60, "speedMS": 30 }, // toward; 0 deepward, 90 spinward
1320 "publishedAt": { "day": 17, "hour": 9 },
1321 "revisions": [{ "at": { "day": 21, "hour": 6 }, "kind": "gale",
1322 "wind": { "directionDeg": 60, "speedMS": 18 }, "reason": "..." }]
1323 }]
1324 }
1325}
1326```
1327
1328Every kind has the same `geometry` field, so the map, the list and the editor treat
1329them one way; what a kind adds is parameters beside it, and a phase of
1330world-generation.md adds a parameter only when a generator reads it. v1 files, with
1331`places`, load as empty — there is no backwards compatibility (D-062).
1332
1333**Two text fields, deliberately separate.** `blurb` is written for readers and
1334ships; `notes` is the author's working thinking and never reaches the app. One field
1335with a flag would have made every note a publication accident waiting to happen.
1336
1337**Ids are permalink targets.** Once a place has been linked to, its id should not
1338change even if its name does; a river names what it flows into by id, so renaming an
1339id means rewriting those references too.
1340
1341Coordinates are canon (θ radians, z metres, §1.7) — never map pixels, so the file
1342survives any change to how the map is drawn.
1343
1344**The `public` flag is a privacy trap worth naming.** Working notes ("embassy here?
1345check sightline to the cap") are kept out of the app, and a `"public": false` feature
1346is left out of it entirely. But **`content/world.json` is committed to a public
1347repository**, notes and unpublished features included — exactly as
1348`content/geography.json` was before it — so anything in it is public to anyone who
1349reads the source. The flag keeps things out of the map, not out of sight. Whether
1350private notes should live somewhere else — a private repo, or a second one — is the
1351author's call and is deliberately unresolved.
1352
1353### 3.3 Instruments
1354
1355The measuring tools answer questions the novel actually raised. Only the sightline
1356probe is built; the rest are planned:
1357
1358- **Sightline probe.** Pick two points; get surface distance, straight-line
1359 distance, optical depth, transmission, and a plain verdict (*crisp / hazy / ghost
1360 / invisible*). This is the tool that answered §1.8, and the single most
1361 illustrative thing in the app.
1362- **Viewshed overlay.** From a selected point, shade the whole map by transmission.
1363 It renders the axis-versus-overhead asymmetry as one picture, which is worth more
1364 than the table in §1.8.
1365- **Lighting probe.** At a point, illumination across the day cycle at the current
1366 brightness setting (§1.3) — for writing a scene at a specific hour.
1367- **Travel.** Surface distance and journey time between points at chosen speeds,
1368 including whether the route crosses a slat.
1369- **Sky-at-a-time.** Star field, beam position and Earth transits for a given point
1370 and moment, so a described sky is a correct sky.
1371
1372### 3.4 What readers get
1373
1374The public link is the finished map: embassies, towns, lakes, named regions — the
1375permanent things, behaving like any map application. Plus the exterior view, the
1376interior view from any point, and permalinks so a reader can be handed a place and
1377a moment. Reading the world, not editing it — which, since D-072, is what the author
1378gets too.
1379
1380## 4. Phases
1381
13821. **Design** — this document and `decisions.md`. ← current
13832. **Scaffold** — Vite/TS/Three, CI to Pages, `canon/` implemented and unit-tested.
13843. **Exterior** — ✅ hull, caps, collector, beam, spin, and hull point picking.
13854. **Map** — unrolled surface, slat rendering, picking, sync with exterior.
13865. **Interior** — ✅ shell geometry, the haze shader, the beam, eye height,
1387 and the five illumination settings. Stars, but only through the far cap window.
13886. **Writer mode** — ✅ *built ahead of 3–5, at the author's request, because the
1389 world needs developing before there is anything to render.* Map view, place
1390 editing for all thirteen kinds, points/polylines/polygons, localStorage
1391 autosave, backup and static exports, import, and the sightline probe.
1392 *Removed by D-072: the world is now changed in `content/world.json`, and only
1393 the sightline probe remains.*
13947. **Content pipeline and reader mode** — ✅ reader and writer modes (D-011, one
1395 mode since D-072);
1396 permalinks (D-010). The terrain pipeline of D-019 — `content/geography.json` and
1397 `npm run terrain` — is replaced by live generation (below).
13988. **Polish** — mobile ✅ (the sidebar is a drawer below 720 px, D-043) and a
1399 screenshot tour that photographs all ten views through the UI, D-042.
1400 Remaining: transitions, performance.
1401
1402All five view phases are built. Phase 2's `canon/` landed with phase 6, since the
1403map could not be drawn without it.
1404
1405**Shareable permalinks are implemented** (phase 7) — the app has
1406readers, and "stand here and look at this" is the whole reason it exists as a
1407companion piece. Named locations from the novel should be markable on the map for
1408the same reason.
1409
1410**Live world generation** — in progress, planned in world-generation.md (D-062).
1411Phase 1 ✅ (D-063): world file v2, the elevation function, the worker pool, tiled
1412ground, the status dialog, keyboard flight, the map drawn from the features. Phase 2 ✅
1413(D-065): mountain ranges of summits, ridges and eroded valleys, and summit editing. Phase 3
1414✅ (D-066): water as surfaces with waves and flow, and waterfalls that lean. Phase 4 ✅
1415(D-067): Tower's weather plan with revisions, a day on the clock, and ships. Phase 5 ✅
1416(D-069): the desert's mesas, dunes, washes, salt pans and shorelines. Phase 6 ✅ (D-071):
1417Greatwood as individual trees, its meadows, and the Tall Wood of giants. Phases 7–8 bring
1418settlements and roads — procedural scenery this section used to list as out of scope. Clouds and rain stay
1419undrawn (D-049).
1420
1421## 5. Backlog
1422
1423Things decided to be worth coming back to, not scheduled.
1424
1425- **The pinwheel's motionless star** (author, 2026-09-27). §1.4 promises one motionless
1426 star at the centre of the turning sky, and the real sky (D-075) has none there — the
1427 antisolar point walks a degree a day. The placed star in `STAR_GLSL` is **not canon**
1428 and stays only until this is revisited: a motionless point, a beacon Tower hangs there,
1429 or nothing.
1430- **The sun's share of the beam** (D-079). The rod now runs on past the sun at 70% of
1431 itself, which says the shoal takes only 30% — but the ground is still lit as if the sun
1432 took the whole beam. Canon has to settle the split, and the light budget with it.
1433- **The exterior's dress** (D-076, D-077, D-081). Rock, Piping, and Rock and piping are
1434 experiments, labelled as such in the Hull switch. Pick one or keep the bare skin — and
1435 if a heavy one stays, answer for its mass. The combined dress gives the rock a reason
1436 (shielding heaped on the plant), but taller and over three fifths of the hull it weighs
1437 about what D-076's shell does, so the mass question stands.
1438- **Traffic** (D-085). The tour's craft exist only for their legs: nothing flies, sails the
1439 sky or runs the railways when the tour is not watching, except the ships. A world with
1440 timetables — trains on the lines, airliners between the stations, giants on their slow
1441 circuits — would be the honest next step, and would let a reader standing anywhere see
1442 them go by.
1443- **The Axial Line's 7% grade** (D-086), where it comes down off the plateau into Greatwood,
1444 is a rack railway's grade, not an adhesion one. Regrade it round the slope, or say it is a
1445 rack section.
1446- **The giant airships** (D-087) are a consequence worked out from the thin air near the
1447 axis, not canon. Whether Tower's sky has them is the author's call.
1448- **The moon's light** (D-088). It is drawn as fed by Tower lifting the banked beam, so the rod
1449 is the same either side of it; the sun instead takes its share from the rod and leaves it
1450 dimmer past it (D-079). Canon could have the moon do the same, or settle why it does not.
1451- **The sun seen from the ice** (D-091). Tower aims none of the sun's light at the fast
1452 ice, so by §1.3.1's own rule the sun should look dim from there — a shoal lit toward
1453 everyone else. It is drawn as bright as from anywhere. Whether the sun going out over the
1454 ice each evening is seen from the ice as a blaze or as a dark disc in lit air is the
1455 author's call.
1456- **The farms' light at night** (D-095). Lighting the fields after sunset keeps the beam
1457 from being fully banked, and the rod's glow with it: about 0.4 W/m² more everywhere at
1458 sunset, nothing by six hours after. The app's night light does not include it yet.
1459- **3D models for the things drawn from plain shapes** (author, 2026-09-30). Everything that
1460 moves or stands on the land is built in code from boxes, cones and spheres. The author will
1461 supply real models; the app needs a way to load them. The list, with sizes as drawn:
1462 - *Tour craft* (`views/craft.ts`, metres, nose along +x, top along +y): paraglider (wing
1463 ~10 m), glider (17 m span), light aircraft (11 m span), seaplane, helicopter (11 m rotor),
1464 airliner (42 m), airship (120 m), giant airship (420 m), locomotive (22 m), railway
1465 carriage (25 m), spacecraft (~80 m).
1466 - *Instanced, drawn by the hundred or thousand*: the sailing ship as hull, mainsail and jib
1467 (~180 of them, 8–45 m; the mainsail swings about the mast, so it must stay a separate
1468 part with the mast at the origin), conifer, broadleaf and giant tree (up to 6,000 each,
1469 `views/forest-view.ts`), and the flat tree cards for distant woods (up to 75,000 — an
1470 image, not a model).
1471 - *Not candidates*: terrain, water, ice, falls, the railway viaducts, the hull dressings, the
1472 collector, beam, sun, moon and windows, all of which are shaped by the world.
1473
1474 The plan: glTF binary (`.glb`) files in a `models/` folder, a small manifest naming which
1475 kind each replaces and how it faces, and the built-in shape as the fallback for any kind
1476 without one, so models can arrive one at a time. Imported models go through Tower's own
1477 lighting and haze — otherwise they are lit wrong and never fade into the distance — keeping
1478 each part's colour at first, and image textures once a textured variant of the shader
1479 exists. Budgets: tour craft can be detailed (tens of thousands of triangles); ships a few
1480 thousand; trees a few hundred. Models must be licensed for redistribution, since the app is
1481 published.