fuzzyworld

tower / cascadia / files / design.md

Branch cascadia · default branch · all branches

design.md

Blame: the commit that last changed each line · file · history

866c7f96 2026-09-07 Pavel Safronov1# 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 |
de65ab10 2026-09-08 Pavel Safronov35| Wall depth | **1 km** | floor to outer skin, D-044 |
866c7f96 2026-09-07 Pavel Safronov36| 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
1affced2 2026-09-08 Pavel Safronov45The Wisconsin comparison is a fact about area alone, and the honest form of it is
46worth stating: **the areas match and the shapes do not.** Wisconsin spans about
47525 km east–west against a circumference of 314, so at 1:1 it cannot be laid on
48this surface at all — it overlaps itself by 67%. Feeling the size needs a region
49shaped like a corridor rather than a blob, which is what §2.5 is for.
50
866c7f96 2026-09-07 Pavel Safronov51### 1.2 Spin and gravity
52
53| Quantity | Value |
54|---|---|
55| Angular velocity ω | **0.014005 rad/s** |
56| Spin period | **448.6 s** = 7 min 29 s |
57| Rotation rate | **0.134 rpm** |
58| Rim speed | **700.2 m/s** |
59| Floor gravity | **1.000 g** by construction |
60
61Consequences that the app should show or at least respect:
62
63- **Gravity falls off linearly with height.** g(h) = ω²(R−h). A 1 km peak sits at
64 0.98 g; the axis is weightless. Mirrors at the axis float.
65- **Coriolis is mild but real.** 2ω = 0.0280 s⁻¹. Walking is unaffected (0.4 % g).
66 A ball thrown at 30 m/s deflects at 8.6 % g — enough that Tower's sports differ
67 from Earth's, and enough that thrown objects visibly curve.
769726ea 2026-09-08 Pavel Safronov68- **Nothing in the sky moves, except through the far cap.** The wall is sealed
69 (§1.4), so along 539 of the 540 km there is nothing to wheel past — the far side
70 of the world overhead co-rotates with you and hangs perfectly still. The one
71 exception is the far cap window, where the sky is *outside* and does not
72 co-rotate: it turns once every 7 min 29 s about a single motionless star on the
73 axis. The spin is invisible upward and obvious deepward, and only at night.
866c7f96 2026-09-07 Pavel Safronov74- **But everything that falls leans.** Rain hangs at a permanent 1.47° slant, smoke
75 drifts the other way, and a 1 km waterfall lands 133 m off its own cliff (§1.9.2).
76 This inversion is the alien fact the interior view must sell: **the sky is still
77 and the water is not.**
78
79### 1.3 The sun system
80
81Sunlight enters through the sun-facing end cap and runs the full 540 km axis.
82
83- **Collector.** A mirror array flies ahead of Tower, gathering sunlight and
84 concentrating it into the beam. **46,900 km² of aperture — a disc ~244 km
85 across**, two and a half times Tower's own diameter. It is the dominant visual
86 element of the exterior view.
87- **Beam.** **10 km in circumference** — 1,592 m radius, 7.96 km² cross-section —
88 carrying **54.3 TW** at a concentration of **5,000×**, or 6.8 MW/m². It runs the
89 axis from sun cap to far cap.
90- **Diffusers.** Not lamps — a **swarm**. See §1.3.1.
91- **The beam is visible, and it glows by itself.** There is real air at the axis
92 (§1.5), and a 6.8 MW/m² beam Rayleigh-scattering through 3.18 km of it radiates
93 **779 W/m²/sr** — **26× brighter than clear blue sky, 25,700× dimmer than the
94 sun's disc.** It is a brilliantly sunlit cloud extruded into a rod, safe to look
95 at directly. From the floor 50 km below it is **3.65° wide, about seven
96 sun-widths**, running the whole length of the sky. This glow is a property of the
97 beam and the air, not of the diffusers — it would be there if the beam were empty.
98
9c891d2e 2026-09-08 Pavel Safronov99#### 1.3.0 Tower never sees the sun
100
101The collector is **244 km across and flies 320 km ahead of the sun cap**, which puts
102it **41.8° wide** in Tower's sky against the sun's 0.53° — **79 times the sun's
103diameter**. It sits squarely between Tower and the sun, so it occults it completely,
104and the umbra it casts is 120 km across where Tower's 51 km sits inside it. The
105eclipse is total, permanent, and self-inflicted.
106
107So **nobody aboard can see the sun**, for the same reason nobody can see Earth
108(§1.4). What they can see, through the sun cap window, is the *back* of the
109collector: 46,938 km² of structure radiating its own waste heat at about 245 K —
110infrared, and therefore black. It is the only object in Tower's sky that is neither
111Tower nor a star, and it never moves, because the collector flies in formation
112rather than spinning. D-050.
113
49b0d64d 2026-09-08 Pavel Safronov114**Its edge is not black.** The face is a mirror pointed away, but the collector is
115*backlit*, and the structure holding 46,938 km² flat stands proud of the mirror
116plane at the rim, where the sun strikes it side-on. With the scatter any real mirror
117throws at grazing incidence, the edge reads as a thin sun-coloured ring — so the
118collector is a hole in the stars with a lit rim rather than an absence, which is how
119anything backlit looks. **It is not sunlight leaking past the edge**: Tower is wholly
120inside the umbra, so the sun's disc is hidden from every point in the world. The ring
121is lit structure. D-054.
122
866c7f96 2026-09-07 Pavel Safronov123#### 1.3.1 The diffuser swarm
124
125The diffusers must be individually invisible, or the sky becomes a row of separate
126suns. Two thresholds govern this, and only the second one binds:
127
128- **Resolvability.** At 50 km, one arcminute is 14.5 m. Anything larger is a
129 resolved disc with a visible edge.
130- **Visibility.** Being unresolved is not enough — stars are unresolved and we see
131 them. A mirror *preserves radiance*, so a mirrorlet aimed at an observer shows
132 the sun's own surface brightness over a tiny angle. A 1 m mirrorlet reads at
133 magnitude −13.6, brighter than the full moon. Blending into daylight requires
134 **~1.2 cm**, at magnitude −4.0, just under Venus.
135
136Diverting 54.3 TW needs 11.3 km² of mirror, so:
137
138| | |
139|---|---|
140| Mirrorlet size | **1.2 cm**, ~1.4 cm², 2 mg |
141| Count | **78 billion** |
142| Total mass | **158 tonnes** — the entire sun system |
143| Mean spacing in beam | **3.8 m** — sparse enough to fly through |
144| Optical depth over 540 km | 1.41, so **24 % of light reaches the far cap** |
145
146**The swarm cannot be passive — it must fly, always.** The axis is not weightless.
147At the beam's edge gravity is **0.312 m/s²**, enough that a foil sinks outward at
1480.26 m/s and **leaves the beam in 1.7 hours**. A drifting swarm dissolves the same
149afternoon. Every foil is therefore under continuous individual control. This is not
150a flourish on a working system; it is the only configuration that works.
151
152**They have absurd power to do it with.** Each foil intercepts 979 W of beam.
153Harvesting 0.1 % gives it ~1 W on a 2 mg body — **489,600 W/kg**, some fifty times
154a jet engine's specific power.
155
156| | |
157|---|---|
158| Down-beam, riding radiation pressure | 0.85 m/s, 7.4 days |
159| Back up-beam under its own power at 1.5 m/s | 15 µW, 4.2 days |
160| Harvestable from ambient world-light | **14,400 µW** — a 1000× margin |
161
162**So there is no recirculation machinery, at either cap.** The foils fly home on
163scavenged daylight. Nothing needs to be built for them, and the 1000× power margin
164means Tower can afford to move them *wastefully* — in spirals, shoals and patterns
165that cost energy for no reason but preference.
166
167**Lighting is a render target, not a schedule.** 78 billion independently aimed
168mirrors put any intensity on any patch of ground at any time. Dawn, dusk, moving
169cloud shadows and seasons are compositing problems, not optical ones.
170
171**Aiming resolution is human-sized.** A 1.2 cm mirror is diffraction-limited to
1724.6×10⁻⁵ rad, so its reflection lands as a **2.3 m spot** on the floor 50 km below.
173Tower can put a glint on one person that someone five metres away cannot see. The
174privacy is set by the wavelength of light, not by any protocol.
175
176**Mirrorfall.** A failed foil sinks out of the beam and falls. Terminal velocity at
177the floor is 0.48 m/s; the descent takes about two days and it lands like a
178snowflake. There is a permanent slow glitter coming down out of Tower's sky.
179
180#### Illumination is a dial, not a constant
181
18254.3 TW is Tower's *capability*, not its setting. Spread over the inner surface it
183is 320 W/m² mean, which — with roughly half the surface lit at a time and a
184sinusoidal day profile — puts **local noon at ~1,000 W/m², Earth clear-sky
185daylight**. But the diffusers are software-controlled, so brightness is genuinely
186adjustable in-world across the full range:
187
188| Setting | Mean W/m² | Feels like |
189|---|---|---|
190| Twilight | 30 | permanent overcast dusk |
191| Temperate | 200 | Earth's global mean |
192| **Full** | **320** | **Earth clear-sky noon** |
193
194This should be a control in the app, not a fixed number. It is the most
195characterful thing about a world whose sun is a machine.
196
197#### Headroom
198
1995,000× is **11 % of the étendue limit** (46,223× at 1 AU). Tower could in principle
200push the beam 9.2× further and cook itself; the diffuser network is as much a safety
201system as a lighting system. 5,000× was chosen because it is *demonstrated*
202technology — the Odeillo solar furnace reaches ~10 MW/m² on Earth today. Nothing in
203Tower's sun system requires physics that does not exist. See `decisions.md` D-003.
204
392bb8a7 2026-09-08 Pavel Safronov205#### 1.3.2 Night, and the difference between banked and off
206
207**Night cannot be made by aiming the swarm away.** The glow above belongs to the
208beam and the air, not to the diffusers, so a fully lit beam lights the world
209whatever the mirrorlets are doing: 779 W/m²/sr over a strip 3.65° wide running
210horizon to horizon is about 0.2 sr, which lands **~100 W/m² on the floor** — half
211of temperate, and no kind of night. Tower's night is therefore made by **banking
212the beam itself**, to a thousandth of full: **0.32 W/m²**, a rod you can still find
213overhead and a world you can just make out under it (D-046).
214
215**Shutting the beam down entirely is a different state and a much worse one.** No
216airlight, no lit ground, no rod — the only thing left in the world is the sky
217through the far cap. §1.9.4 gives the thermal mass about a week of coasting, so
218this is a state Tower can survive and not one it can sit in.
219
220| Setting | Floor | What it is |
221|---|---|---|
222| Dark | **0** | the beam shut down. Stars, and nothing else. |
223| Night | **0.32 W/m²** | the beam banked to a thousandth |
224| Twilight | 30 W/m² | |
225| Temperate | 200 W/m² | |
226| Full | 320 W/m² | Earth clear-sky noon |
227
da6bcb0e 2026-09-08 Pavel Safronov228#### 1.3.3 The far cap mirror, and where the last quarter of the beam goes
229
230The swarm has optical depth 1.41, so **24% of the beam survives all 540 km** — and
231it survives *collimated*, in the beam's own 7.96 km² cross-section. That is the
232whole shape of the problem: not 13 TW spread over a 7,854 km² cap, but **1.7 MW/m²
233in a 3.2 km spot**, about 1,200 suns. An absorber there sits at **2,330 K**.
234
235**So the spot is a mirror** (D-048), and only the spot: it is a thousandth of the
236cap's area, which is what leaves the other 99.9% free to be window (§1.4). A mirror
237is the cheap answer rather than the expensive one — at 99.9% it absorbs **1,665
238W/m²**, about 1.2 Earth solar constants, so the thing that would have glowed white
239is merely warm.
240
241**It also recovers the energy.** The residual goes back up the column, which makes
242the optical path 1,080 km instead of 540 and utilisation **1 - e^(-2τ) = 94%**
243rather than 76%. What survives even the return trip leaves through the beam
244aperture toward the collector, which sends it back again; in the limit the whole
24554.3 TW lands on the inner surface. **This is why full brightness is 320 W/m² and
246not 243** — the figure in §1.3 assumes the entire beam is eventually used, and with
247the cavity closed at both ends it is.
248
249Aiming light at a region to warm it is a separate lever and stays one (§1.9.4). The
250mirror is about not wasting the beam; the desert is about where the weather goes.
251
2bb3e0de 2026-09-08 Pavel Safronov252#### 1.3.4 The day, and why dawn has a direction
253
254Tower's day is **24 hours**, chosen for the people living under it — nothing
255physical offers one, since the spin is 7.5 minutes and has nothing to do with light.
256
257**Dawn cannot be a dimmer, and it cannot be the swarm either.** §1.3 gives the glow
258to the beam and the air, so the sky, the airlight and the rod overhead all brighten
259together the moment beam power comes up; there is no way to have one end of the axis
260light before the other. But the *ground* is lit by the diffusers, and they can put
261the light wherever they like. So Tower brings the day up as a **front running
262deepward from the sun cap**, 540 km in 40 minutes — **225 m/s**, near Tower's own rim
263speed, and slow enough to stand and watch arrive.
264
265The result is a morning nothing on Earth has: **a fully lit sky over dark ground**,
266with a line of daylight coming toward you along the world. §1.9.4 says Tower has no
267latitude. The cycle gives it **longitude** — 40 minutes of it, sun cap to far cap.
268
269Dusk runs the same way, so the light withdraws in the direction it arrived and the
270sun-cap end always has the shorter day by a hair. Nothing forces that; the
271alternative was a dusk that retreats, and a consistent direction of time reads as
272designed rather than as an oscillation.
273
866c7f96 2026-09-07 Pavel Safronov274### 1.4 Sealed hull, and the cap windows
275
276**The cylinder wall is opaque and unbroken.** No slats, no windows, no view out
277along any of the 540 km. From anywhere on the inner surface, the sky is land, haze
278and the beam — nothing else. See D-017.
279
280The only views out are at the **end caps**, and they are peculiar:
281
282- **A cap is a wall, not a floor.** Gravity there points radially outward, which is
283 *tangent* to the cap's surface, so nothing rests on it — you would slide to the
284 rim. Each cap is a **50 km vertical cliff** standing at the end of the world, and
285 its windows sit at its base, at eye level for anyone standing on the floor.
286- **The sky through them does not sweep — it turns.** A cap window looks along the
287 spin axis, which is the celestial pole. Stars rotate about a fixed centre, one
288 full turn every 7.5 minutes, with one motionless star at the middle. **A pinwheel
769726ea 2026-09-08 Pavel Safronov289 sky.** It is the only moving sky anyone in Tower ever sees — and because the axis
290 is horizontal from the floor, it wheels about a point on the **horizon** rather
291 than overhead.
292- The **far cap is glazed whole** — a 100 km window looking into deep anti-sun
293 space, not a wall with windows at its foot (D-045). Its structure survives as the
294 window's **mullions**, on the same polar tessellation the checker used and at the
295 same cell pitch, so the one object in the world with a known scale still is one:
296 the rule now reads against the sky instead of against a plate. The **sun cap**
9c891d2e 2026-09-08 Pavel Safronov297 faces the collector rather than the sun, and is **glazed too** (D-050): §1.3.0
298 retires the "heavy glare management" this section used to demand of it, because no
299 direct sunlight has ever reached it. Through it, a 244 km black disc, stars round
300 the edge of it, and the beam blazing out of the aperture at its centre.
769726ea 2026-09-08 Pavel Safronov301- **By day the window is simply blue.** §1.5 puts the far cap 100–200 km into the
302 haze, so from anywhere but the deepward end the airlight in front of it swamps
303 whatever is behind, and the cap reads as a disc of sky. The stars are there at
304 noon and unseeable, which is a fact about eyes and not about the glass.
da6bcb0e 2026-09-08 Pavel Safronov305- **The beam does not go through it.** §1.3.3 puts the surviving quarter of the
306 beam on a 3.2 km bullseye at the centre of the cap, and that bullseye is a mirror
307 rather than glass: it returns the residual up the column for a second pass. The
308 window is everything else, which is 99.9% of the disc.
309- **The mirror is not the pinwheel's centre, and it is worth being clear why.** The
310 sky turns about the direction *parallel* to the spin axis, and from anywhere on
311 the floor that direction is horizontal — so **the pinwheel's centre is at eye
312 level, dead ahead**, down where the window meets the ground, not overhead and not
313 at the middle of the cap. The mirror is a physical object *on* the axis, which
314 from 270 km sits about 10° above that. They coincide only for an observer
315 standing on the axis itself, and nobody can. By day the mirror blazes — it is
316 returning 1.7 MW/m² — and is the brightest thing in Tower's sky; at night it
317 banks with the beam and goes dark.
866c7f96 2026-09-07 Pavel Safronov318
319**Nobody aboard can ever see Earth.** Tower holds a terminator orbit (D-004), which
320puts Earth roughly 90° off the axis — out the *side* of the cylinder, which is now
321solid hull. A habitat in Earth orbit whose inhabitants have never seen the planet
322they orbit.
323
324The caps are therefore the only places in the world with a horizon that is not
325Tower. Whatever grows up around them, it will not be ordinary.
326
327### 1.5 Atmosphere and the look of the sky
328
329Air co-rotates with the shell. Because g falls linearly to zero at the axis, the
330atmosphere is much deeper than Earth's:
331
332- Pressure at the axis, 50 km up: **5.2 kPa** — thin, but genuinely air.
333- A vertical column floor-to-axis is ~10,600 kg/m², about **one Earth atmosphere**.
334
335So the interior sky behaves like this, and the shader must reproduce it:
336
337- **Straight up** you look through ~1 atmosphere and see the far side of the world
338 100 km away — visible, but washed to pale blue like a very distant mountain range.
339- **Along the axis** you look through many atmospheres. The far end cap is not
340 visible as a wall; it dissolves into blue haze around 100–200 km out. The world
341 reads as endless in the axial direction and closed in the circumferential one.
342- **The ground curves up on both sides** into that same blue, meeting overhead.
343- **The beam** is a self-luminous scattering shaft 3.65° wide at 779 W/m²/sr —
344 render it as a bright sunlit cloud, not as a light source with a halo. With the
345 hull sealed, it is the only thing in the sky that is not land.
346
347### 1.6 Orbit and attitude
348
349- Tower holds a high circular orbit with its **orbital plane kept normal to the
350 Earth–Sun line** — a terminator orbit. This is why one cap can face the sun
351 permanently and Tower is never eclipsed.
352- The plane precesses 360° per year to track the sun. Tower's angular momentum is
353 enormous, so this 1°/day reorientation is actively driven, continuously, forever.
354 Canon treats this as Tower's defining maintenance burden.
355- Consequence for the interior view: the star field slowly drifts across the year
356 while spinning fast every 7.5 minutes. Two nested motions.
357
358### 1.7 Coordinates
359
360The canonical surface coordinate is **(θ, z)**:
361
362- `θ` — angle around the cylinder, 0 to 2π. θ = 0 is the centre of land strip 0.
363- `z` — distance from the sun cap, 0 to 540 km.
364
365The 2D map is the direct unroll: `x = z`, `y = (θ − θ₀) · R`. No projection
366distortion — a cylinder unrolls exactly. This is a genuine advantage over mapping a
367globe and the map view should lean on it.
368
369**The map shows the surface once, bounded**, so its extent is readable. That means
370it needs an edge, and the edge is placed at **θ₀ = the centre of the last slat**.
371Land strip 0 is centred on θ = 0, so cutting there would slice a whole strip in
372half across the top and bottom margins; cutting at a slat centre leaves every land
373strip whole and splits only a band of stars, which carries no geography. Same
374reasoning as putting Earth's map edge at the antimeridian. A sightline whose short
375route crosses the edge is drawn as two segments, so the drawn path always matches
376the measured distance.
377
378---
379
380### 1.8 Sightlines: Tower has two horizons
381
382Along the axis the floor is perfectly flat and never falls away, so nothing is ever
383hidden by curvature. **Tower's horizon is haze.** Circumferentially the floor curves
384*up*, so distant land rises into the sky rather than sinking below a line. The two
385directions behave completely differently, and this is one of the most alien facts
386about living there.
387
388Rayleigh transmission from a floor-level observer:
389
390| Distance | Along the axis | Across the interior (overhead) |
391|---|---|---|
392| 26 km | 78 % | 77 % |
393| 50 km | 56 % | 70 % |
394| 100 km | **31 %** | **78 %** |
395| 270 km (far cap from midpoint) | **4 %** — a ghost | — |
396
397Two consequences:
398
399- **The axial horizon closes at 100–150 km.** From the midpoint you cannot see
400 either end cap. Everyone can see 100 km, knows there is more beyond, and cannot
401 resolve it — a different psychology of distance than Earth's 5 km cliff-edge.
402- **The far side of the world is clearer than the ground at the same distance,**
403 because a sightline across the interior rises through thin axis air while one
404 along the floor grinds through full density. It gets *better* with distance: the
405 land directly overhead, 100 km away, is the crispest far object in Tower at 78 %.
406 **Distant geography is best seen by looking up.** People would orient by what is
407 overhead; the ground is the vague part. This inverts the human default.
408
409### 1.9 Water
410
411Tower's hydrology is stranger than its geometry, and most of it follows from one
412fact and one absence.
413
414#### 1.9.1 Coriolis never pushes surface water sideways
415
416The floor's tangent plane is spanned by θ̂ and ẑ, and the spin axis is ẑ. For any
417flow along the surface:
418
419- **along the axis** — `ẑ × ẑ = 0`, no Coriolis force at all;
420- **around the circumference** — `ẑ × θ̂ = −ŝ`, the force is purely radial.
421
422The Coriolis term never has a component *inside* the surface. So **Tower's rivers
423do not curve.** No hemispheres, no Baer's law, no preferred bank erosion, no gyres,
424no cyclones. Every large-scale rotational habit of Earth's water and weather is
425absent, and a meander in Tower is pure flow dynamics with no thumb on the scale.
426
427#### 1.9.2 What it does instead: everything vertical leans
428
429The force goes into the floor rather than across it, so it appears whenever water
430moves up or down. Deflection of a free fall goes as h^1.5:
431
28f9a6bc 2026-09-07 Pavel Safronov432| Fall | Lands (retrograde) | Lean of the path | Lean at impact |
433|---|---|---|---|
434| 100 m | 4.2 m | 2.4° | 3.6° |
435| 500 m | 47 m | 5.4° | 8.1° |
436| **1,000 m** | **133 m** | **7.6°** | **11.3°** |
437| 2,000 m | 377 m | 10.7° | 15.8° |
438
439Two different angles, and the interior view needs both. The **path** leans by where
440the water lands against how far it fell — the tilt of a waterfall's plume seen
441whole. The **impact** lean is the direction the water is actually moving when it
442arrives, which is what a streak of it is drawn at, and it is half again the other in
443tangent. `src/canon/motion.ts` computes both.
866c7f96 2026-09-07 Pavel Safronov444
445**Rain falls permanently slanted** — a raindrop at terminal velocity sits at a fixed
446**1.47° against the spin**, ~51 m of drift over a 2 km fall, never varying, never
28f9a6bc 2026-09-07 Pavel Safronov447reversing. It is fixed because drag holds the fall speed constant, so unlike free
448fall the angle does not grow with the drop: rain leans the same 1.5° whatever the
449cloud. Set against a waterfall's 11°, **the waterfall is the compass and the rain is
450not**, which is the opposite of what §2.4 originally assumed (D-034). Rising things lean the opposite way: smoke drifts spinward, rain drifts
866c7f96 2026-09-07 Pavel Safronov451anti-spinward. Every plume and every shower in Tower tilts, and they tilt against
452each other.
453
454The same applies to anything that descends, not just water — see §1.11 on what it
455does to skiing.
456
457Horizontal flow changes *weight* rather than direction (Eötvös): +0.57 % for a
4582 m/s prograde river, negligible hydrologically. It only matters at speed — an
459express train at 100 m/s gains 29 %, and anything moving retrograde at the 700 m/s
460rim speed is stationary in space and therefore weightless.
461
462#### 1.9.3 A perfect cylinder has no slope anywhere
463
464Potential depends only on radius, so **the whole floor is a single equipotential
465surface.** Water on it has no preferred direction: a perfect Tower has no rivers at
466all, forever.
467
468**Every river in Tower exists because the floor was shaped.** There are no
469tectonics and no uplift, so erosion is strictly one-way — a 3 km range wears flat in
470~30 Myr under a wet engineered climate, ~150 Myr under a dry one. Tower's rivers
471are steadily destroying its landscape and the highlands must be rebuilt to keep them
472running. This is D-004's theme again: Tower's rivers are plumbing it chose to
473install and has to keep re-installing.
474
475Two corollaries:
476
477- **No river can circumnavigate.** A closed loop has no net descent.
478- **Lakes curve upward.** Level means constant radius, so across a 30 km lake the
479 far shore rides **2.3 km above your tangent plane** — Earth would hide it 18 m
480 below the horizon. You look *up* at the opposite beach, and water appears to
481 climb away from you.
482
483#### 1.9.4 There is no passive climate at all
484
485**Tower has no latitude** — every point is equidistant from the light — and with the
486hull sealed it has no windows either. Nothing breaks the thermal uniformity. A
487uniform hull radiates at 274 K everywhere, so left alone the world settles into a
488flat calm: no gradient, no wind, no evaporation, no rain, no rivers.
489
490**So every weather system in Tower is deliberate.** Tower makes climate the only way
491left to it — by aiming light. It warms where it wants convection and shades where it
492wants condensation; the hull's uniform loss is the sink. Every cloud, every
493rainfall, every jet stream is something Tower is doing, continuously, on purpose.
494
495This is D-009 arriving at its conclusion. The mirrorlet swarm was already Tower's
496body language; now it is also its lungs and its weather. There is no autonomic
497layer underneath. **If Tower's attention ever lapses, the rain stops.**
498
499Costs, for scale against a 54.3 TW budget:
500
501| | | |
502|---|---|---|
503| Earth-like rainfall, 1,000 mm/yr | **12.2 TW** | **22.4 %** — Earth spends the same fraction |
504| Recirculating all runoff (1,792 m³/s) against 500 m | 8.8 GW | 0.016 % |
505
506#### 1.9.5 Rivers are a closed, pumped circulation
507
508With no natural cycle and no natural slope, a Tower river is a **loop**: a headwater
509reservoir, a shaped descent through the landscape, a lake at the bottom, and a lift
510back to the top. Source and sink are the same system.
511
512Two ways to close the loop, and they give completely different rivers:
513
514- **The pump outfall.** A river begins at a machine. Walk to the source of any
515 river and find a wall of water coming out of a structure — not a spring, an
516 outlet. Costs a rounding error (above).
517- **The made cloud.** Tower evaporates the lake with aimed light and condenses it
518 over the highlands, so rain falls exactly where the river should start. No
519 machinery: the swarm is the pump. Costs the 22.4 % above, and buys real weather
520 with it.
521
522Canon uses **both** — made weather for the world's general hydrology, pumps for
523watercourses Tower wants under precise control.
524
525Two consequences of the sealed hull:
526
527- **A river can circle the world.** The surface is one unbroken sheet, so a channel
528 can run the full 314 km circumference and close on itself — a lazy river returning
529 to its own source. Gravity cannot drive a closed loop, so it is pumped.
530- **The water inventory is conserved and exactly known.** Nothing evaporates to
531 space. Tower knows how much water it has, to the litre, forever.
532
533Lifting is also slightly cheaper than on Earth, since gravity falls off with height:
5341 % cheaper at 1 km, 5 % at 5 km, 25 % at 25 km.
535
536### 1.10 Slat orientation — RESOLVED: none
537
538Axial strips versus rings was weighed at length (D-016) and answered by removing
539slats entirely (D-017). The comparison is kept in D-016 because it established what
540the choice *cost*, and because the reasoning — that slat layout sets the shape of
541Tower's countries, its climate map and its astronomy all at once — is what made
542"none" a real option rather than an absence.
543
544### 1.11 The world as built
545
546Authored geography lives in **`content/geography.json`** — the source of truth — and
547`npm run terrain` renders it. Names are provisional. Tower is laid out in **belts
548along the axis**, which is the natural grain of an engineered climate (§1.9.4):
549
550| z | | |
551|---|---|---|
552| 0–42 km | **The Sunward Sea** | ring ocean at the foot of the sun cap |
03607270 2026-09-08 Pavel Safronov553| 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) |
866c7f96 2026-09-07 Pavel Safronov554| 148–218 km | **The Dry Reach** | desert **ringing the world**, 22,000 km², 13% of the surface |
555| 176/190/203 km | **three ridges** | ringing, concentric — and **The Narrows** is the only breach in all three |
556| 214–430 km | **Greatwood** | forest belt |
557| 248–402 km | **The Deep** | 154 × 32 km sea, long down the axis and narrow around |
558| 270 km | **The Capital / The Spindle** | axial midpoint, on The Deep's antispinward shore |
559| 496–540 km | **The Deepward Sea** | ring ocean at the foot of the far cap |
560
561#### Why the desert rings
562
563**On a cylinder you cannot go around a band.** Every desert on Earth can be
564circumnavigated; a ringed one cannot. It is an absolute barrier across the world's
565waist, and with the three ridges ringing too it becomes three concentric walls.
566
567#### The drainage, and why it keeps the chokepoint
568
569Four rivers come off the range — Westwall Water, Sisters Water, Eastwall Water and
570The Long Water. On Earth most drainages **do not** cut through a rising ridge; they
571are defeated and diverted, and only an *antecedent* river with enough power keeps
572its course. So three of the four are turned by First Ridge, run **along its front**
573gathering each other, and leave with the fourth through the single gap.
574
575- **The Narrows carries the entire world's runoff** — ~392 m³/s off a 9,800 km²
576 range, lifted 1,780 m for 6.9 GW (0.013% of budget).
577- The ridge-front reaches are **the only circumferential water in Tower**, and
578 weigh fractionally more or less for it (§1.9.2). Everything else runs axially,
579 where Coriolis is exactly zero.
580- Whoever holds The Narrows holds the axis of the world. The Capital sits behind it.
581
582#### The Deep is oriented for the view
583
584Long down the axis and narrow around it, so you cross it the **short** way — around
585θ, where the floor curves up. From the Capital the far shore is 32 km away and
586stands **2.6 km above eye level**. Crossing it lengthwise instead would be dead
587flat. The orientation is the whole point.
588
589It is also the world's flywheel: 19× the diurnal heat storage of bare ground, and
5905.9 days at full power to move its temperature one kelvin. Tower still supplies
591every joule (§1.9.4), but the world now coasts for about a week rather than
592stopping the moment attention lapses.
593
594#### The cap seas are not designed
595
596Gravity on an end cap points radially outward — *tangent* to the cap. Nothing rests
597there; water runs down to the rim and pools. **Both ring oceans exist whether anyone
598planned them or not**, each with a 314 km shoreline and a 50 km cliff standing
599behind it. The only windows in the world are at their feet (§1.4).
600
601#### Skiing, because it is a different sport here
602
603Level motion feels no Coriolis (§1.9.1) but a descending skier has radial velocity,
604and that does deflect:
605
606- **Down the axis:** a steady sideways push, always antispinward — 1.5% of g at
607 15 m/s on a 20° slope, 6.4% at 35 m/s on 40°.
608- **Around the cylinder:** you get heavier or lighter. 8.6% at 30 m/s, 11.4% at 40.
609
610So a **retrograde run gets lighter the faster you go**, which is self-reinforcing,
611while a prograde run grips harder as it accelerates. Every slope in Tower has a
612handedness. No Earth mountain does. Settlements sit at the tarns — Sisters Station,
613Hollow Station — around 2,100 m, with the runs above them.
614
615#### Open questions
616
617- **The Spindle's height.** 3.2 km is a placeholder; an object dropped from its top
618 lands ~760 m antispinward of its base.
03607270 2026-09-08 Pavel Safronov619- **z 430–496 km** is unauthored. The circumference outside the named peaks is no
620 longer empty — The Girdle carries the range round the whole 314 km — but it is
621 unwalked: peaks with no names, and no rivers drawn off them yet.
866c7f96 2026-09-07 Pavel Safronov622
623## 2. Application architecture
624
625### 2.1 Stack
626
627- **Vite** + **TypeScript** (strict), no framework — the app is three canvases and
628 a control panel, and a framework would not earn its weight.
fc11b064 2026-09-08 Pavel Safronov629- **One layout breakpoint**, at 720 px: above it the panel is a column beside the
630 world, below it a drawer over it (D-043). The world is a full-bleed canvas in
631 both, because all three views are drag-to-look and a scrolling page would be
632 fighting them for every touch.
866c7f96 2026-09-07 Pavel Safronov633- **Three.js** for the exterior and interior 3D views.
634- **Canvas 2D** for the map view.
62458672 2026-09-07 Pavel Safronov635- **GitLab CI → GitLab Pages**, publishing `dist/` as `static/`.
866c7f96 2026-09-07 Pavel Safronov636
637### 2.2 Module layout
638
639```
640src/
641 canon/
642 constants.ts single source of truth for every number in §1
643 geometry.ts (θ,z) <-> 3D, slat layout, map <-> surface
28f9a6bc 2026-09-07 Pavel Safronov644 atmosphere.ts the rotational density profile and its extinction (§1.5)
645 motion.ts how things fall in the rotating frame (§1.9.2) — the only
65484043 2026-09-08 Pavel Safronov646 evidence of the spin anywhere but the far cap window
866c7f96 2026-09-07 Pavel Safronov647 views/
648 palette.ts one colour per place kind, shared by map, list and editor
28f9a6bc 2026-09-07 Pavel Safronov649 raster.ts what npm run terrain wrote: grid, and what white means
866c7f96 2026-09-07 Pavel Safronov650 world/
651 schema.ts world.json types + validation
652 store.ts places CRUD, localStorage drafts, JSON import/export
653 instruments.ts sightline, viewshed, lighting probe, travel (§3.3)
654 state/
655 store.ts selected point, time-of-day, spin phase, view mode, writer flag
656 views/
5f38efd0 2026-09-07 Pavel Safronov657 exterior.ts Three.js: hull, caps, collector, beam, spin, point picker
866c7f96 2026-09-07 Pavel Safronov658 map.ts Canvas 2D: unrolled surface, slats, terminator, point picker
28f9a6bc 2026-09-07 Pavel Safronov659 interior.ts Three.js: shell geometry, the haze shader of §1.5, beam, rain
866c7f96 2026-09-07 Pavel Safronov660 ui/
28f9a6bc 2026-09-07 Pavel Safronov661 app.ts the whole panel: tools, editor, readouts, view switching
662 scales.ts slider mappings — kept out of views/ so the panel can label
663 the eye-height slider without pulling in Three.js
866c7f96 2026-09-07 Pavel Safronov664 main.ts
6364748a 2026-09-08 Pavel Safronov665
666tools/ node-only, never bundled; plain .mjs with no build step
667 terrain.mjs renders content/geography.json into static/ (§1.11)
668 png.mjs minimal PNG encoder — zlib is its only dependency
669 noise.mjs fbm and ridged noise for the terrain relief
670 screenshots.mjs drives the running application in a headless browser and
671 photographs it into docs/screenshots/ (D-042)
866c7f96 2026-09-07 Pavel Safronov672```
673
674`canon/constants.ts` is the spine. Every derived figure — period, rim speed, land
675area, slat width — is *computed* from radius, length, slat count and target land
676area, never hard-coded. Changing the radius changes the whole app coherently.
677
678### 2.3 State
679
680One small observable store. Views subscribe; nothing owns anything else.
681
682```ts
683type TowerState = {
684 point: { theta: number; z: number } | null // the picked location
685 tod: number // 0..1, position in the diffuser day cycle
686 brightness: number // W/m^2 mean, 30..320 -- the diffuser output setting
687 spinPhase: number // 0..2pi, rotation for star motion
688 spinning: boolean
689 view: 'exterior' | 'map' | 'interior'
690 writer: boolean // ?writer=1 -- a UI mode, not a security boundary
691 probe: { from: SurfacePoint; to: SurfacePoint } | null
692}
693```
694
695The exterior and map pickers both write `point`; the interior view reads it. That
696is the entire interaction loop.
697
5f38efd0 2026-09-07 Pavel Safronov698### 2.4 The exterior view
699
700Scene units are kilometres, so the code reads in canon numbers. Tower's axis lies
701along world Z with the sun cap at z = 0, which puts a canon surface point at
702`(R cos θ, R sin θ, z)` in the hull's own frame. The hull spins about Z and carries
703that frame with it, so **picking resolves the ray hit back through
704`worldToLocal`** — otherwise every point picked off a turning hull would be wrong by
705the spin phase.
706
707Two deliberate departures from physics, both reading aids of the same kind as the
708map's hillshade:
709
710- **Fill lighting.** Real sunlight here runs parallel to the axis, so Tower's flank
711 is edge-on to it and renders very nearly black — accurate and useless. Two fill
712 lights lift the hull enough to read its shape.
713- **A visible beam.** In vacuum there is nothing between collector and cap to
8b6287ba 2026-09-07 Pavel Safronov714 scatter light, so the converging beam would not be visible at all. It is drawn
715 as rays because it is the thing the view is about.
716
717Everything in the scene is captioned — collector, beam, both caps — with screen-space
718labels. A pale disc and a cone of light are not self-explanatory, and the collector
719is the least intuitive object in Tower: it is larger than the world it feeds.
5f38efd0 2026-09-07 Pavel Safronov720
721The default camera frames the whole system rather than Tower alone: the collector
722is 244 km across and flies 320 km ahead, and it is the larger object.
723
65484043 2026-09-08 Pavel Safronov724**The hull has two readings, and the view switches between them** (D-047). **True**
725is the outer skin: bare structure, the checkered sun cap, and the glazed far cap.
726**X-ray** wraps the terrain raster onto the outside instead — from outside Tower is
727structure, so what that texture shows is what is *inside*, which makes it a diagram
728and not a view. Both are worth having and they are not the same claim, so the
729control is a two-way switch rather than a checkbox.
730
731The wall is drawn as two meshes rather than one double-sided one, because its two
732faces show different things: the outer skin changes with the mode, and the inner
733surface is always the land. Since the far cap became a window (D-045) that inner
734surface is genuinely visible from outside — look in through the glass in true mode
735and the world is really there, lit and 540 km deep. It is the only line of sight
736into Tower that is not a projection. Three's cylinder runs u around and v along, while the raster is the other
11a13dbf 2026-09-07 Pavel Safronov737way round, so the UVs are rewritten from the original attribute rather than derived
738from vertex positions — the seam vertices are duplicated, and deriving an angle from
739them smears one column of triangles across the whole image.
740
15d933c9 2026-09-07 Pavel Safronov741**The camera position persists** across reloads, alongside the active view, so
742returning to the page returns to the vantage you left. Both end caps are places in
743their own right, so the view can frame them: a cap's marker sits on the **axis**,
744because a cap is a disc across the end and a point on its rim would ride round the
745edge as Tower turns.
746
11a13dbf 2026-09-07 Pavel Safronov747Markers are scaled per frame to hold a roughly constant size on screen. A 4 km dot
748is legible from 200 km and sub-pixel from the 1,200 km of the default view, which is
749to say the places would simply not be there.
750
28f9a6bc 2026-09-07 Pavel Safronov751### 2.4 The interior view — built
752
753Scope held: **real geometry, simple ground.**
754
755Real: the shell is the actual cylinder, curving up on both sides and closing
756overhead, displaced by `terrain-height.png` and painted with `terrain-color.png`.
65484043 2026-09-08 Pavel Safronov757**Stars only through the far cap** — the wall is sealed (§1.4), so for 539 of the
758540 km the sky is land and light. The far cap is glazed (D-045) and the sky beyond
759it is sampled by view direction in an azimuthal-equidistant projection about the
760spin axis, which makes the pinwheel fall out of the projection rather than being
761animated into it: azimuth plus spin phase, one turn every 7 min 29 s, and the
762point on the axis genuinely motionless.
28f9a6bc 2026-09-07 Pavel Safronov763
764Simple: the ground is the raster plus a little procedural grain in the near field,
765not modelled scenery. No buildings, no vegetation meshes. Cells are 0.7 km and
766texels 264 m, so relief a valley away is real and the ground underfoot is not.
767Detailed procedural scenery stays deferred.
768
769**Haze is the shader, and it is integrated rather than faked.** Every fragment
770samples the rotational density profile 24 times along the ray to the camera and
771extinguishes per channel — red survives twice as far as green, blue half as far,
772which is what makes distance blue rather than grey. From the floor it reproduces
773§1.8 from the inside: 78% straight up against 31% for the same 100 km along the
774ground, printed in the readout so the claim can be checked rather than believed.
775The airlight the haze adds is *neutral*; tinting it blue double-counts the
776wavelength dependence and turns even the desert mauve (D-034).
777
65484043 2026-09-08 Pavel Safronov778**Nothing inside the scene rotates**, because the observer, the ground and the air
e27aaf20 2026-09-08 Pavel Safronov779all co-rotate. What falls carries the spin, and §1.9.2 is lopsided about how: rain
780leans a fixed 1.5° whatever the cloud, because drag pins its speed, while only free
781fall keeps accelerating and so keeps leaning. **The waterfall is the compass; the
782rain is barely a hint.** Rain is no longer drawn (D-049) — 1.5° is not a picture,
783and the pinwheel below does the job it was standing in for. The physics stays in
784`canon/motion.ts` and stays tested; it was only ever the rendering that could not
785carry it.
65484043 2026-09-08 Pavel Safronov786
9c891d2e 2026-09-08 Pavel Safronov787**The one thing that does turn is outside.** The sky through the caps does not
65484043 2026-09-08 Pavel Safronov788co-rotate, so it wheels once every 7 min 29 s about the motionless star on the axis
e27aaf20 2026-09-08 Pavel Safronov789(D-045). It is by a wide margin the plainest evidence of the spin in the view, and
9c891d2e 2026-09-08 Pavel Safronov790it is the only evidence left now that the rain is gone. Both caps are windows
791(D-050), so it can be had looking either way along the axis — deepward into empty
792space, or sunward past the black disc of the collector.
28f9a6bc 2026-09-07 Pavel Safronov793
794The observer stands on the terrain, which means the height raster is read back onto
795the CPU and sampled against the mesh's own cell corners — the GPU cannot be asked
796where the ground is (D-035).
797
798Instruments in the view: eye height from 1.7 m to 25 km with the local gravity
65484043 2026-09-08 Pavel Safronov799beside it, the five canon illumination settings of §1.3, the field of view as a
28f9a6bc 2026-09-07 Pavel Safronov800pair of binoculars, and captions on every place still visible through the haze.
801Selecting a place walks the observer to it (D-038) — the haze horizon closes at
802100–150 km, so turning to face something usually just points at haze.
803
65484043 2026-09-08 Pavel Safronov804The caps are no longer the same object. **The sun cap is checkered** (D-041) —
805polar, six rings, cells about 8 km. **The far cap is glazed** (D-045), and the
806checker survives on it as the window's mullions: the same tessellation at the same
807pitch, so it is still the only object in the world with a known size and still
808doubles as a scale for judging distance, now read against sky rather than plate.
809Both patterns are shared with the exterior view.
810
811The far cap's glazing is set a kilometre into its own frame, so from inside there is
812a **1 km reveal** around it. That is the only place the wall depth of D-044 can be
813seen from within the world, which is why it is the only place it is drawn.
28f9a6bc 2026-09-07 Pavel Safronov814
815Not modelled: water has no surface. Lakes and seas are painted in the raster and cut
816into the shell as basins, so standing in one puts you on its floor.
866c7f96 2026-09-07 Pavel Safronov817
818---
819
1affced2 2026-09-08 Pavel Safronov820### 2.5 Surfaces — the Cascadia ruler
821
822The app can paint the cylinder with a second, non-canon ground: **the Pacific
823Northwest at 1:1**, as a scale reference. In UTM 10N the ground from the Pacific
824surf at Kalaloch east to the Columbia at Entiat measures 312.8 km against Tower's
825314.2 km circumference, so western Washington closes the ring on real terrain with
8261.4 km to spare — beach, Olympics, Puget Sound, Cascades, east flank, Columbia,
827back to the beach. Seattle lands 150 km deepward of the sun cap, and the point
828100 km straight overhead is both Kalaloch and Entiat: one place, reached by walking
829either way round.
830
831This is legitimate because **Tower has no north** (§1.7) — the compass is
832sunward/deepward/spinward/antispinward, so there is nothing for a real region's
833orientation to contradict.
834
835It is **not canon**. It contradicts §1.9.3 (all relief in Tower is engineered) and
836its rivers do not lean antispinward the way §1.9.2 requires. It is labelled in the
837panel, defaults off, and draws no places. The one artefact is a seam: theta wraps
838and geography does not, leaving a scarp of 369–844 m through the settled half,
839treated as a landform rather than repaired. Rotating the frame and sliding the cut
840were both measured against it; see D-055 for why neither is used.
841
842Every surface shares the raster grid and height window (§2.2), which is what keeps
843a surface to a swap of two PNG filenames rather than a second shader.
844
845`npm run cascadia` builds it. See D-055.
846
866c7f96 2026-09-07 Pavel Safronov847## 3. Writer mode and the world file
848
849The app is an instrument for writing the novel as much as a thing to look at. It
850must answer questions like *can the far face be seen from the midpoint?*, *where
851does a central embassy go?*, *can a lake overhang?* — and let their answers be
852placed, named and kept.
853
854### 3.1 Two modes over one data file
855
856| | Reader (default) | Writer (`?writer=1`) |
857|---|---|---|
858| World content | committed `world.json`, read-only | editable, drafts in `localStorage` |
859| Instruments (§3.3) | sightline probe only | all |
860| Output | permalinks to a point or place | **Export JSON** for the author to commit |
861| Panel | read-only detail card | full editor, canon controls, import/export |
862
863There is no backend — GitLab Pages is static. The loop is: the author edits in the
864browser, exports `world.json`, commits it, and the published site serves it. Simple,
865versioned in git alongside the prose, and diffable.
866
867**Writer mode is a UI mode, not a security boundary.** Anyone may set `?writer=1`;
868they can only edit their own local copy, which persists nowhere and reaches nobody.
869This is fine, and arguably good — a reader who finds it gets a sandbox. It must not
870be mistaken for access control.
871
872### 3.2 The world file
873
874```jsonc
875{
876 "version": 1,
877 "places": [{
878 "id": "hallow-crossing", // permalink target; see below
879 "name": "Hallow Crossing",
880 "kind": "city|embassy|lake|region|landmark|note",
881 "geometry": { "type": "point", "theta": 1.9635, "z": 270000 },
882 // or { "type": "polygon", "points": [[theta,z], ...] } for lakes, regions
883 "blurb": "public description, shown to readers",
884 "notes": "the author's working notes — NEVER shipped",
885 "public": true // false = not ready to exist publicly
886 }]
887}
888```
889
890**Two text fields, deliberately separate.** `blurb` is written for readers and
891ships; `notes` is the author's working thinking and never leaves the machine except
892in a backup. One field with a flag would have made every note a publication
893accident waiting to happen.
894
895**Ids follow the name until pinned.** An id is a permalink target and must be
896stable once published, but during world-building names churn constantly and a file
897full of `new-city-7` is unreadable. So the id tracks the name while it still
898matches it, and editing the id field freezes it for good. The editor shows the id
899for exactly this reason.
900
901Coordinates are canon (θ radians, z metres, §1.7) — never map pixels, so the file
902survives any change to how the map is drawn.
903
904**The `public` flag is a privacy trap worth naming.** Working notes ("embassy here?
905check sightline to the cap") must not ship to readers. But a `world.json` committed
906to a public repository is public regardless of any flag in it. So export writes two
907files: **`world.json`** (public entries only, committed) and
908**`world.private.json`** (everything, gitignored by default). Whether private notes
909should nonetheless be version-controlled — in a private repo, or a second one — is
910the author's call and is deliberately unresolved.
911
912### 3.3 Instruments
913
914The measuring tools are the real substance of writer mode. Each answers a question
915the novel actually raised:
916
917- **Sightline probe.** Pick two points; get surface distance, straight-line
918 distance, optical depth, transmission, and a plain verdict (*crisp / hazy / ghost
919 / invisible*). This is the tool that answered §1.8. Available to readers too — it
920 is the single most illustrative thing in the app.
921- **Viewshed overlay.** From a selected point, shade the whole map by transmission.
922 It renders the axis-versus-overhead asymmetry as one picture, which is worth more
923 than the table in §1.8.
924- **Lighting probe.** At a point, illumination across the day cycle at the current
925 brightness setting (§1.3) — for writing a scene at a specific hour.
926- **Travel.** Surface distance and journey time between points at chosen speeds,
927 including whether the route crosses a slat.
928- **Sky-at-a-time.** Star field, beam position and Earth transits for a given point
929 and moment, so a described sky is a correct sky.
930
931### 3.4 What readers get
932
933The public link is the finished map: embassies, towns, lakes, named regions — the
934permanent things, behaving like any map application. Plus the exterior view, the
935interior view from any point, and permalinks so a reader can be handed a place and
936a moment. Reading the world, not editing it.
937
938## 4. Phases
939
9401. **Design** — this document and `decisions.md`. ← current
9412. **Scaffold** — Vite/TS/Three, CI to Pages, `canon/` implemented and unit-tested.
5f38efd0 2026-09-07 Pavel Safronov9423. **Exterior** — ✅ hull, caps, collector, beam, spin, and hull point picking.
866c7f96 2026-09-07 Pavel Safronov9434. **Map** — unrolled surface, slat rendering, picking, sync with exterior.
28f9a6bc 2026-09-07 Pavel Safronov9445. **Interior** — ✅ shell geometry, the haze shader, the beam, rain, eye height,
65484043 2026-09-08 Pavel Safronov945 and the five illumination settings. Stars, but only through the far cap window.
866c7f96 2026-09-07 Pavel Safronov9466. **Writer mode** — ✅ *built ahead of 3–5, at the author's request, because the
947 world needs developing before there is anything to render.* Map view, place
948 editing for all thirteen kinds, points/polylines/polygons, localStorage
949 autosave, backup and static exports, import, and the sightline probe.
9507. **Content pipeline and reader mode** — ✅ `content/geography.json` +
951 `npm run terrain` (D-019); the rendered terrain drawn under the map; reader and
952 writer modes (D-011); permalinks (D-010).
6364748a 2026-09-08 Pavel Safronov9538. **Polish** — mobile ✅ (the sidebar is a drawer below 720 px, D-043) and a
954 screenshot tour that photographs all ten views through the UI, D-042.
fc11b064 2026-09-08 Pavel Safronov955 Remaining: transitions, performance.
866c7f96 2026-09-07 Pavel Safronov956
28f9a6bc 2026-09-07 Pavel Safronov957All five view phases are built. Phase 2's `canon/` landed with phase 6, since the
958map could not be drawn without it.
866c7f96 2026-09-07 Pavel Safronov959
960**Shareable permalinks are implemented** (phase 7) — the app has
961readers, and "stand here and look at this" is the whole reason it exists as a
962companion piece. Named locations from the novel should be markable on the map for
963the same reason.
964
965Later, explicitly out of scope for now: procedural scenery, settlements, weather
966systems.