ALTITUDE · COMPANIONS PLATES READ: census-bricks.json · census-couplings.json SEE ALSO 2 2C 2E 2F 4 

FIT VERDICTalternate plate — the same joints at reading size: eight companion-to-companion joints from four companions, four of them two-armed, and ssr's arm bridges the flagship and the server across the no-DOM line

THE ALTITUDE ATLAS — DRAWING SETSHEET 2A / 14

the COUPLING PLAN

ALTITUDE 2 — ALTERNATE PLATE: the ten companions sheet 2 schedules, laid out for reading — core central as a socket wall, companions at its right, the server below the no-DOM line — with every coupling drawn disengaged and lettered to its API call · rows read census-bricks.json @ 3f55e419

SCALE — front-face area ≈ 35 px² per sloc (census-bricks.json @ 3f55e419) · the two smallest companions (both 1×1) are held to a legible minimum · depth is constant and carries no data BROWSER URL / HISTORY whoever holds the LOCATION SEAT speaks to it DOM the rendered <ui-view> tree @uirouter/core 6.1.2 — THE SOCKET WALL 80f · 5,272 sloc — peered by all, replaced by none B stateRegistry.decorator(‘views’, litViewsBuilder) — the render graft the views builder — the whole Lit graft D urlService.listen() · .sync() the client router starts here brick 1 starts & syncs the client A · router.plugin( ) — THE RAIL one method, any number of seats free seats queue here: visualizer · sticky-states · dsr · rx (sheet 4) router.plugin(servicesPlugin) seat 1 of rail A THE LOCATION SEAT — one per router: the Navigation API swaps core’s OUT exactly ONE location plugin per router pushStateLocation — swapped OUT C transitionService.onSuccess({}, update) one hook per router memoised by RouterStore.for() E globals.current · .params observed — never written mirrored, never written 1 lit-ui-router 1.19.0 25f · 3,262 sloc class UIRouterLit extends UIRouter — moulded onto the wall, not snapped PLUGS B · D · A(seat 1) its own stud ↓ 2 ui-router-navigation- location-plugin 1.2.0 2f · 214 sloc · core only — it has never heard of Lit PLUG THE LOCATION SEAT 3 lit-ui-router-mobx 1.4.0 · 5f · 144 sloc PLUGS blocks 1 · 10 no hook of its own peers block 10 ^0.2.0 seekRouter(host) the ui-router-context event the seat under block 1 no DOM below this line 4 ui-router-server 0.7.1 21f · 3,006 sloc adapters: connect · fetch · hono · vite tiers: ‘matcher’ (dep-free) · ‘simulate’ REQUEST GET /people/32 DECISION 302 · render · pass NO COUPLING — core is an OPTIONAL peer for the server the default ‘matcher’ tier is dependency-free and never loads the wall ‘simulate’ lazy-imports walls of its own — a prewarmed pool per mount, its config replayed peerDependenciesMeta: { ‘@uirouter/core’: { optional: true } } — the tie is drawn only to be crossed out peers ui-router-server ^0.7.0 peers lit-ui-router ^1.19.0 the bridge crosses the line 6 lit-ui-router-ssr 0.7.0 18f · 1,485 sloc PLUGS BOTH — the flagship and the server the one part that reaches across the no-DOM line peers lit-ui-router ^1.16.0 5 lit-ui-router-effect 0.6.0 · 4f · 285 sloc PLUGS blocks 1 · 8 no hook of its own peers block 8 ^0.2.0 8 ui-router-effect 0.2.0 · 3f · 30 sloc TAPS C · E routeRef( ) · snapshotRoute( ) peers lit-ui-router ^1.16.0 · seekRouter( ) 7 lit-ui-router-signals 0.3.0 · 4f · 170 sloc PLUGS blocks 1 · 9 no hook of its own peers block 9 ^0.2.0 9 ui-router-signals 0.2.0 · 4f · 104 sloc TAPS C · E RouterSignals.for( ) 10 ui-router-mobx 0.2.0 · 3f · 117 sloc PLUGS C · E RouterStore.for( ) taps C · E — as block 10 does THE MOULD — ONE 2×2 BRICK, ONE COURSE, THIRD-ANGLE every code is a row in THE MOULD under the plate A A P1P1 W1 R1 4 TOP · SCALE 2:1 · plan units 1a brick is P1 a stud each way on plan, C1 a course high 2studs stand on pitch centres, E1 in from every edge 3brick and studs are one casting; the cut is hatched 4a stud is round on plan; the model sweeps it in N1 sides 5the baseplate under the right view is drawn phantom 6a cord cap is a round 1×1 plate seated on a stud, its own stud the brick’s: R1 round, S1 high S1C1 H1 1 FRONT · SCALE 2:1 · plan units P2 5 RIGHT · SCALE 2:1 · plan units D1 E1P1E1 32 SECTION A–A · SCALE 2:1 · plan units K2 S1K1 K3 6 CORD CAP · SCALE 2:1 · plan units

THE MOULD

CodeVariableValueUnit
P1pitch — stud centre to stud centre40plan units
C1course — one brick high24plan units
P2plate — one baseplate high12plan units
S1stud height7plan units
R1stud radius12plan units
N1stud segments — the round as the model sweeps it24sides
K1cord cap height8plan units
K2cord cap radius19plan units
W12×2 brick side = 2·P180plan units
E1edge to stud centre = P1 ÷ 220plan units
D1stud diameter = 2·R124plan units
H1stud top above the foot = C1 + S131plan units
K3cap top above its seat = K1 + S115plan units
I1iso stud ellipse, half-width = R1·√2·cos 30°14.7plan units
I2iso stud ellipse, half-height = R1·√2·sin 30°8.49plan units

15 codes · read from generator/brick-glb.mjs and generator/connector-iso.mjs

FIG. 2AThe brick assembly, uncoupled and brought down to one elevation: core as a socket wall, companions as shallow blocks drawn just short of seated, and each of the six connection points on the wall — five published studs and one keyed red seat — large enough to letter its API call on the joint itself. Eight more joints are companion-to-companion, and one of those spans both halves of the plate.

GENERAL NOTES

This plate is the legibility companion to sheet 2. The exploded assembly (sheet 2, THE BRICK ASSEMBLY) shows the whole stack and where every brick falls; this plate isolates the couplings and draws each one at reading size. The arrangement answers to reading rather than to assembly — core central, companions at its right, the server in a request lane below the no-DOM line — and the packages are shallow solids, so the recovered space goes entirely to the joints.

Every joint is drawn disengaged. A seated plug hides both mating faces, so nothing here is seated: each stud on the wall stops 18px short of its plug’s mouth, the dashed centreline is the engagement, and the call that makes the coupling — stateRegistry.decorator('views', litViewsBuilder), urlService.listen()/.sync(), router.plugin(servicesPlugin), transitionService.onSuccess({}, update), globals.current/.params — is lettered on the connection itself, not in a schedule at the edge of the sheet.

One connection point is a seat, not a stud, and it is drawn as a keyed recess. A router holds exactly one location plugin, so ui-router-navigation-location-plugin does not add to the wall — it swaps: its keyed red plug approaches the LOCATION SEAT while a dashed ghost plug, core’s own pushStateLocation, leaves it. The rail above behaves the opposite way: router.plugin() is one method with any number of seats, which is where visualizer, sticky-states, dsr and rx would queue (sheet 4).

The seat under the flagship gets its own axis. lit-ui-router-mobx takes it: its upward socket waits under a stud on lit-ui-router’s underside — seekRouter(host), the bubbling ui-router-context event it falls back to when no context-request provider answers — and it holds no hook of its own: it takes RouterStore.for() from ui-router-mobx ^0.2.0 (block 10) through a stud on that block's face, and reacts to the store, never a write.

Eight joints never touch the wall, and one of them spans the sheet. They come from four companions, and four of those reach two blocks. lit-ui-router-mobx reaches two: the seat under block 1, ^1.16.0, and a stud on block 10's face, ^0.2.0. The other three leave studs on block 1's right face as nested L's, the highest arm turning down farthest out, so no arm crosses another. lit-ui-router-ssr (block 6, 18 files, 1,485 sloc) takes the highest: it peers lit-ui-router ^1.19.0 and ui-router-server ^0.7.0, so its arm runs down the right edge of the plate, crosses the no-DOM line, and meets a second stud on block 4's face below it. Nothing else here crosses; a package that prerenders Lit for a server router is exactly the thing that would. lit-ui-router-effect (block 5, 4 files, 285 sloc) takes the middle stud, ^1.16.0, and plugs a stud on top of ui-router-effect ^0.2.0, whose routeRef() and snapshotRoute() it re-exports and binds to a Lit host. lit-ui-router-signals (block 7, 4 files, 170 sloc) takes the lowest, ^1.16.0, and plugs a stud on top of ui-router-signals ^0.2.0, whose RouterSignals.for() and watchSelection() it binds to a Lit host. Each binding stands over the block it plugs and holds no hook of its own.

Three blocks tap the wall and plug no companion. ui-router-effect (block 8, 30 sloc), ui-router-signals (block 9, 104 sloc) and ui-router-mobx (block 10, 117 sloc) peer @uirouter/core and nothing in this repo: each holds one onSuccess hook on stud C and reads globals on stud E, into an Effect SubscriptionRef, a Signal.State or MobX observables. Block 10 holds the C and E plugs, and a dashed tap runs from blocks 8 and 9 back to its E plug, because those are the studs block 10 plugs: one stud, a hook per consumer. Each carries a stud for its Lit binding — blocks 8 and 9 on the top face, block 10 on its right face, beside block 3 — and the binding plugs it. Sheet 2 seats all three on the plate; this plan seats nothing, so it draws their joints.

The missing coupling is drawn only to be crossed out. ui-router-server takes no stud: @uirouter/core is an optional peer (peerDependenciesMeta), its default 'matcher' tier is dependency-free, and its 'simulate' tier lazily imports a wall of its own. Blocks are sized roughly by mass — front-face area ≈ 35 px² per sloc, from census-bricks.json counted at origin/main @ 3f55e419, which puts lit-ui-router at 3,262 sloc — with the two smallest companions (both 1×1) clamped up to a legible minimum, because at true scale they would be postage stamps, and their smallness is already sheet 2’s finding.

The mould. Every brick on sheets 2, 2C, 2E and 2F, in the models in the round and in the panel under this plan is cast from six numbers — P1 pitch, C1 course, P2 plate, S1 stud height, R1 stud radius and N1 segments — which live once, as exports of generator/brick-glb.mjs; the cord cap adds two, K1 and K2, in generator/connector-iso.mjs. The panel draws one 2×2 brick from them at 2:1 in third-angle projection, the top over the front and the right beside it, with section A–A cut through a row of studs and the cap on a stud of its own. THE MOULD under the plate reads the same identifiers the drawing does, its derived rows written as formulas, and the sheet throws when a scheduled value and the kit that draws the bricks disagree. The panel follows dimensional-drawing by enesozturk (MIT), after Apple's accessory dimensional drawings, its physical-product branch: third-angle views, a hatched section, codes on every dimension.

KEY

a published stud on the wall — core’s extension surface, lettered A–E
a companion’s plug, drawn just short of seated — both mating faces read
the LOCATION SEAT — keyed, one per router: the plug swaps core’s own out
the seat under block 1 — seekRouter( ), the one stud on a block’s underside
a tap — a block that takes a stud another block’s plug is drawn on
no coupling — the server’s core peer is optional; it never plugs this wall
context, not massed — browser, DOM, the request lane
the cut solid — section A–A through a row of studs, brick and studs one casting
a dimension — lettered by its code, the code a row in THE MOULD
the cutting plane A–A, seen in the direction of its arrows
PROJECTTHE ALTITUDE ATLAS
SHEET TITLEthe COUPLING PLAN
SCALETEN PACKAGES
FORMCOUPLING PLAN
CLIENTlit-ui-router · simshanith
DATE / REV2026-10-30 · J
DRAWN BYFable (Claude, AI)
SHEET2A OF 14