1
0

feat: one California is the product, not a flag

Behind `?one=1` the merged board was something a visitor could not find
and did not get: the site still landed on the Bay Area, the left column
still offered two other boards, and clicking one still tore the board
down and built another. The board existed and the product did not change.

A bare URL is now one California. `?city=sf` and `?city=socal` still get
the dedicated boards, unchanged and on purpose — twenty-nine capture
guards and the `bay-area` and `socal` budget cells aim at those boards by
name and assert the `data-board` they land on, and a metro id falling
back to the merged board would not degrade them, it would make them
silently measure something else. `?one=0` forces the old arrangement, and
both `california` budget cells now pass it: their caps are the plain
state board's 440,000, and without it they would measure the merged board
that `california-one` already covers.

Also `CALIFORNIA.md`: what a single cohesive California is still missing,
measured rather than listed. Every district on the board by the latitude
of its centre is 1 / 23 / 26 / 1 / 2 / 54 across 32-37 N and **zero above
38 N** — 107 districts, 103 of them in two clusters four hundred
kilometres apart, and four hundred and fifty kilometres of northern
California with not one building on it. Eight airports, all Bay or LA.
Two ports, both in San Pedro Bay. Two freeways of twelve vertices each
across a thousand kilometres of state.

The scale is not the problem and the file says so first: the board is
32.50-42.05 N and -124.50 to -114.00 W at 1,919 m to the unit, every
feature on its real coordinate, nothing schematic. It is not too small.
It is empty.
This commit is contained in:
2026-08-24 16:57:18 -07:00
parent 86033046ae
commit eeedfd7d6d
4 changed files with 258 additions and 4 deletions
+184
View File
@@ -0,0 +1,184 @@
# Building out one California
What the merged board is missing, sized so it can be worked in parallel.
This is a **content** programme. It is deliberately separate from `TODO.md`,
which tracks engine work that is decided but not done: nothing below needs a new
mechanism, and every item is a data file somebody can write against a pack format
that already exists. The two do meet in one place, and the meeting is stated up
front so nobody starts at the wrong end — see "What has to come first".
---
## The scale is already right. The density is not.
Worth settling before anything else, because "make the map bigger" and "make the
map denser" are different jobs and only one of them is open.
The board runs **32.5042.05 N and 124.50 to 114.00 W** — the whole state, at
its true shape, on real latitude and longitude. `World.project` is a linear map
from degrees to scene units at 1,919 m to the unit, and every hill, district,
landmark, bridge, airport and port in every pack is placed by its real
coordinate. Nothing is schematic and nothing is squashed to fit. A board 554
units across is 1,063 km across, and that is a fact rather than a framing.
So the state is not too small. **It is empty above 38 N**, and this is the
measurement that says so — every district on the board, by the latitude of its
centre:
| band | districts |
| --- | --- |
| 32 N | 1 |
| 33 N | 23 |
| 34 N | 26 |
| 35 N | 1 |
| 36 N | 2 |
| 37 N | 54 |
| **3842 N** | **0** |
107 districts, and 103 of them are in two clusters four hundred kilometres
apart. The northern **four hundred and fifty kilometres of California has not one
building on it**, and the Central Valley between the clusters has three. The
state capital is absent. So is San Diego, Fresno, Bakersfield, Stockton, Redding
and Santa Rosa.
The same is true of everything else the board carries:
- **Airports — 8, all of them Bay or Los Angeles.** KSFO, KSJC, KLAX, KBUR,
KVNY, KLGB, KSNA, KONT. No Sacramento, no San Diego, no Oakland, no Fresno, no
Santa Barbara, no Palm Springs.
- **Ports — 2, both in San Pedro Bay.** USLAX and USLGB. No Oakland, no
Richmond, no San Diego, no Stockton, no Humboldt Bay, no Hueneme.
- **Freeways — 2 roads of 12 vertices each.** US-101 and I-5, as twelve-point
polylines across a thousand kilometres of state. That is roughly one bend
every ninety kilometres, which is why they read as a diagram rather than as
roads, and it is before the separate problem that the engine draws them 1,919 m
wide on purpose.
---
## What has to come first
**Two engine items gate the value of most of this, and both are measured and
written up in `TODO.md`.** Content added before them will be authored against
ground that is about to change and a budget that is about to stop being the
binding constraint.
1. **The relief ramp is landed (`d6dc307`) but unjudged.** Vertical exaggeration
now falls from 15x to 5.78x as the camera descends. Every judgement about how
a hill or a skyline reads is a judgement about relief, so wait until this has
been looked at before tuning heights.
2. **Cost does not track the view.** Measured with `scripts/cost-at.mjs`: the
merged board draws 355,759 triangles at 400 km and 329,392 at 2.5 km — flat,
because `createTerrain` is one mesh and the anonymous city is one
`InstancedMesh`, and `three` culls per object. Until the terrain and the lots
are chunked, **every district added anywhere is paid for everywhere**, and the
400,000 cap is reached by content that is nowhere near the camera. After it,
the cap stops being the reason a city cannot be dense.
The honest order is therefore: judge the ramp → chunk the terrain → chunk the
lots → then add the cities below at a lot size that is finally worth choosing.
**Coastline, hydrography, airports, ports and the freeway geometry are exempt**
they are cheap, they are not lot-limited, and they can be authored in parallel
starting now.
---
## The work, in parcels
Each parcel is one pack-format contribution, sized to be reviewable on its own.
`src/tools/poseEditor.ts` (godmode, `G`) emits paste-ready `Chapter` blocks,
which is what makes adding a place cheap; `src/cities/socal.ts` is the reference
for a multi-city region and `src/cities/sf.ts` for a dense one.
**Everything is traced by hand.** ARCHITECTURE.md §3.2 is the constraint and it
has not moved: OpenStreetMap is ODbL, ODbL is share-alike, and a share-alike
obligation cannot live in an Apache-2.0 repo — nor be discharged by serving it
from an API instead. Original expression, or a US-Government public-domain source
named in `NOTICE`. `scripts/check-no-binaries.mjs` enforces the other half.
### A. The Central Valley — the corridor the board already drives
The two freeway chapters run through it and there is nothing to see. Highest
value per district in the programme, because a visitor is already sent here.
- **Sacramento** — the capital, and the most visible single absence. A downtown
district, the Capitol as a landmark, the river confluence, Old Sacramento.
- **Stockton and Modesto** — Delta port town and valley grid.
- **Fresno** and **Bakersfield** — the two big valley cities, low and wide.
- The **agricultural fabric** between them: the valley is not empty ground, it is
a grid, and a very low-coverage district with a near-zero tower chance reads as
farmland where bare terrain reads as desert.
### B. The north — four hundred and fifty kilometres with nothing on it
`TODO.md` already records that the Klamath knot reads as four chains at four
bearings and that the Cascade corner reads as Basin and Range. Both are relief
notes; these are settlement.
- **Redding** and **Chico**, the two northern valley towns.
- **Santa Rosa** and the Sonoma/Napa corridor — the nearest real settlement to
the Bay's northern edge and currently a hard stop at the pack boundary.
- **Eureka and Humboldt Bay** — the only harbour on four hundred kilometres of
North Coast, and the one place up there with a port.
- **Tahoe**: the lake exists as inland water; the basin has no settlement.
### C. San Diego — the missing corner
The board runs to 32.50 N and the southernmost district centre is at 32.75.
San Diego is a metro the size of the ones already modelled and it is absent:
downtown, Coronado, the bay, North Island, the mesa canyons that shape it, and
**the port**, which is one of the two things the board's vessel layer could
already use.
### D. The freeway network — the roads, as roads
Twelve vertices is a diagram. Two roads is not a network.
- **Retrace US-101 and I-5** at a vertex density that survives being looked at
from ten kilometres rather than from a thousand. The `Road` type already
carries `widthM` alongside `width`, and `cities/reconcile.ts` already reads it.
- **Add the ones a Californian would notice missing**: I-80 over Donner, I-15 to
the Mojave, I-10 east from Los Angeles, I-405, I-880/I-680 around the Bay,
CA-99 up the valley, CA-1 down the coast.
- **The width question is engine work, not content.** `createFreewayWorld` draws
a 4.7 km-wide atlas glyph because DRIVE mode has to drive down it on a board
where a real freeway is a fifth of a pixel, and `23e4bb8` withdraws that glyph
close in rather than fixing it — so today a city has no roads on it at all.
The true-width corridor needs the roadside props to be re-scaled with it
(`structures.ts` sets their setback from the slab, so a 44 m ribbon with
today's props puts 600 m oaks beside a two-lane road) and drive mode's near
plane is 0.1 units, which is 192 m on this board, against a car 2.6 mm long.
**File this as engine work in `TODO.md`, not as a tracing job.**
### E. Airports and ports — the assets
Both types are plain data with an existing renderer, so these are the cheapest
items here and they are not gated on anything in "What has to come first".
- **Airports**: KSMF (Sacramento), KSAN (San Diego), KOAK, KFAT (Fresno),
KSBA (Santa Barbara), KPSP (Palm Springs), KRDD (Redding), KMRY (Monterey).
- **Ports**: Oakland, Richmond, San Diego, Stockton, Humboldt Bay, Port Hueneme.
Oakland is the one to do first — it is across the water from a board the
product already photographs, and the vessel layer is already wired.
### F. Landmarks the eye goes looking for
58 today, all Bay and LA. The state Capitol, the Coronado bridge, Shasta Dam,
the Golden Gate's northern approach, the Carquinez bridges, Vandenberg,
the Salton Sea's shoreline works.
---
## Two things to check before opening a parcel
- **The block cap.** `src/test/packs/californiaBoard.test.ts` holds the state
pack's block count under 9,200 and it currently reads 8,881. Several parcels
above will cross it. The cap is a real budget on a real board and the right
move is to measure and move it deliberately, in the same commit, with the
number recorded — not to raise it quietly to make a test pass.
- **Draw calls, not triangles.** `TODO.md` records that adding Sacramento is
"a district and about 300 lots; the budget that has to be checked first is
draw calls on the california mobile cell, not triangles." That board reads 411
draws of a 460 cap. Draw calls are the scarce resource on this board, and they
are what a new airport, port or landmark group spends.
+27
View File
@@ -851,3 +851,30 @@ Two pieces, in this order:
**Do not do either before the relief ramp is judged**, since both are tuned **Do not do either before the relief ramp is judged**, since both are tuned
against how the ground looks and the ramp changes that. It landed at `d6dc307`. against how the ground looks and the ramp changes that. It landed at `d6dc307`.
## One California is the default now — two consumers that follow it
Landed 2026-08-24. A bare `tera.lumbridgecorp.com` is the merged board;
`?city=sf` and `?city=socal` still get the dedicated boards unchanged, because
twenty-nine capture guards and two budget cells assert the `data-board` they land
on and a metro id that silently fell back to the merged board would make them
measure something else. `?one=0` forces the old three-board arrangement.
Both `california` budget cells were pinned to `?one=0` in the same change: their
caps are the plain state board's 440,000, and left alone they would have measured
the merged board — passing, while `california-one` measured the same board and
nobody watched the other.
**The marketing imagery has not followed, and it should.** `shots.mjs` and
`films.mjs` build `?city=${shot.city ?? "california"}&handover=0`, so every shot
that does not name a city now photographs the merged board rather than the plain
state tier. That is the right picture of the product and the wrong thing to have
happen silently — the captions were written against a board with no cities on it,
and `scripts/check-chapter-identity.mjs` does not check prose. Re-shoot with
`npm run refresh`, then read the captions against what came back; `TODO.md`
already records that four captions were falsified by engine changes once before
and that nothing catches it.
The content programme this opens up — what a single cohesive California is still
missing, and in what order — is **`CALIFORNIA.md`**, kept separate because none
of it needs a new mechanism and all of it can be worked in parallel.
+12 -2
View File
@@ -54,13 +54,23 @@ const SCENES = {
// `california-overview` chapter never becomes ready — but a harness that // `california-overview` chapter never becomes ready — but a harness that
// depends on an app default is a harness that reports someone else's change // depends on an app default is a harness that reports someone else's change
// as its own flake. // as its own flake.
query: "?city=california&handover=0", // `one=0` on purpose: both California cells' caps were measured against the
// **plain** state board, which is now what `?one=0` means and no longer what
// a bare `?city=california` gives. Without it these measure the merged
// board — which passes, and which `california-one` already covers, so the
// failure is two cells measuring one board and nobody watching the other.
query: "?city=california&one=0&handover=0",
signature: "california-overview", signature: "california-overview",
ready: () => document.getElementById("boot")?.hidden === true && document.querySelector("#chapters .chapter[data-view='california-overview']") !== null, ready: () => document.getElementById("boot")?.hidden === true && document.querySelector("#chapters .chapter[data-view='california-overview']") !== null,
}, },
"california-drive": { "california-drive": {
host: "tera.lumbridgecorp.com", host: "tera.lumbridgecorp.com",
query: "?city=california&handover=0", // `one=0` on purpose: both California cells' caps were measured against the
// **plain** state board, which is now what `?one=0` means and no longer what
// a bare `?city=california` gives. Without it these measure the merged
// board — which passes, and which `california-one` already covers, so the
// failure is two cells measuring one board and nobody watching the other.
query: "?city=california&one=0&handover=0",
signature: "california-overview", signature: "california-overview",
ready: () => document.getElementById("boot")?.hidden === true && document.querySelector("#chapters .chapter[data-view='california-overview']") !== null && document.querySelector("#chapters .chapter[data-view='la-sf-us-101']") !== null, ready: () => document.getElementById("boot")?.hidden === true && document.querySelector("#chapters .chapter[data-view='california-overview']") !== null && document.querySelector("#chapters .chapter[data-view='la-sf-us-101']") !== null,
activate: () => { activate: () => {
+35 -2
View File
@@ -227,7 +227,7 @@ import type {
import type { PresenceIndicator } from "./realtime/presenceIndicator.ts"; import type { PresenceIndicator } from "./realtime/presenceIndicator.ts";
/** /**
* One full California, as **one pack**, behind `?one=1`. * One full California, as **one pack** and now the default.
* *
* The first attempt at this nested each metro's built scene inside the state * The first attempt at this nested each metro's built scene inside the state
* board's under a similarity transform. The transform was right and the result * board's under a similarity transform. The transform was right and the result
@@ -236,8 +236,41 @@ import type { PresenceIndicator } from "./realtime/presenceIndicator.ts";
* one `City` carrying the state's landform and both metros' detail, so the * one `City` carrying the state's landform and both metros' detail, so the
* engine builds one world, one lattice and one terrain mesh. See that file for * engine builds one world, one lattice and one terrain mesh. See that file for
* the measured lattice cost and for the two merges that are not a union. * the measured lattice cost and for the two merges that are not a union.
*
* ## Why it is no longer behind a flag
*
* Because a flag is a second product, and the whole point was to stop having
* three. Shipped behind `?one=1` the merged board was something a visitor could
* not find and did not get: `tera.lumbridgecorp.com` still landed on the Bay
* Area, the left column still offered two other boards, and clicking one still
* tore the board down and built another. The board existed and the product did
* not change.
*
* ## The three ways this resolves, and why the escape hatches are shaped so
*
* Default no `?city=`, or `?city=california` is **one California**.
*
* `?city=sf` and `?city=socal` still get the dedicated boards, unchanged. That
* is deliberate and it is not hedging: twenty-nine capture guards in
* `scripts/brand-assets` and the `bay-area` and `socal` cells of
* `scripts/performance-budget.mjs` aim at those boards by name and assert the
* `data-board` they land on. Making a metro id fall back to the merged board
* would not degrade those, it would make them silently measure and photograph
* something else which is the exact failure the budget harness's own comment
* says the `data-board` assertion exists to catch. A named board stays a named
* board.
*
* `?one=0` forces the three-board product whatever the city is. One consumer
* needs it the `california` budget cell, which is written against the *plain*
* state board's 440,000 cap and would otherwise measure the merged board that
* `california-one` already covers and it is the honest way to say "the old
* arrangement" without spelling a board id.
*/ */
const ONE_CALIFORNIA = new URLSearchParams(location.search).get("one") === "1"; const ONE_PARAM = new URLSearchParams(location.search).get("one");
const CITY_PARAM = new URLSearchParams(location.search).get("city");
const ONE_CALIFORNIA =
ONE_PARAM === "1" ||
(ONE_PARAM !== "0" && CITY_PARAM !== "sf" && CITY_PARAM !== "socal");
/** /**
* The boards on offer three, or **one**. * The boards on offer three, or **one**.