ALTITUDE · MONOREPO, MEASURED PLATES READ: census-city.json · census-files.json · census-plate.json · census-shipped.json SEE ALSO 3  measured

FIT VERDICTthe census with districts and roads — tests as annexes, every edge cited: the 14-line harness stops every PR, and all 48 members are measured on the scc ruler

THE ALTITUDE ATLAS — DRAWING SETSHEET 7 / 14

the MEASURED CITY

ALTITUDE 3½ — the same city as sheet 3, surveyed by mass · 48 members in 4 districts, footprint ∝ √sloc, height ∝ authored files, spec mass drawn as an annex, gate severity in colour · counted at origin/main @ eb1162da (2026-10-18)

THE CENSUS CITY — WHO IS ACTUALLY HERE 48 workspace members · 4 districts · every road below is a real edge in the repo SCALE — footprint side = 1.6 · √sloc (plan area ∝ sloc) · height = 3 px per authored file · mass = sloc × files footprint floored at 12 plan units so the smallest instruments stay visible · annexes massed on the same rule from spec files GATE SEVERITY IS COLOUR, NOT HEIGHT — tiers match sheet 3 · the tallest block on the sheet is also the only publish halt every number on this sheet is read from www/atlas.lit-ui-router.dev/data/census-city.json — counted at origin/main @ eb1162da (2026-10-18) GATE SEVERITY — READ THE COLOUR, NOT THE HEIGHT halts a publish — 12 stops the PR line — 9 · 14 · 19 · 23 · 26 · 28 · 35 gates a later stage — 17 · 34 · 39 · 40 · 46 · 48 never gates — 13 · 15 · 16 · 18 · 22 · 24 · 25 · 30 · 32 · 33 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 A B C D E F G packages/ — THE PRODUCT 13 members, 11 published · 87 files · 8,156 sloc every one carries a bigger annex than itself sample-app-shared — 41f · 2,493 sloc the proving ground’s broadest block — outbuilt by five source blocks and five spec annexes apps/ — THE PROVING GROUND 7 members · 85 files · 4,776 sloc the proving ground gates nothing but e2e www/ + examples/ — THE SHOPFRONT 2 members · 41 files · 6,931 sloc tools/ — THE INSTRUMENT YARD 26 members · 202 files · 16,757 sloc 6 of its masses sit on this drawing’s minimum footprint lit-ui-router — THE PACKAGE THIS SET IS ABOUT 22 authored files · 2,860 sloc its annex — 30 files · 8,609 sloc, 3.0× the source the biggest thing this district ever built is a test @tools/release — 54f · 2,719 sloc the tallest block on the sheet, and the only publish halt ROAD REGISTER — NO ROAD IS DRAWN THAT THE REPO DOES NOT CARRY Abuilds intopackages/* → the sample apps · lit-ui-router → 4 of them, ui-router-server → routes Bbuilds into@tools/oxc-emit → all eleven published packages · devDep of each · runs build:js + build:types Ctests exercise@tools/dts-backtest → the runtime packages it deps on · #test dependsOn ^build Dtests exercise@tools/lit-test-env + @tools/happy-dom → the annex · devDep of lit-ui-router + -mobx Etests exercisesample-app-lit-e2e → docs · workspace dep · e2e dependsOn ^build, with @www/lit-ui-router.dev#wrangler:dev Ftypecheck readslit-ui-router src AND specs → docs · tsconfig include src/** · turbo dependsOn ^build:types Glibrary under@tools/shared → @tools/release · one of 22 dependents; only this road is drawn apps → docs is road A continued: docs depends on three sample apps and on ui-router-server STRUCTURE SCHEDULE — authored source per member · files (f) · sloc · spec annex · gate tier 1 lit-ui-router — 22f · 2,860 · annex 30f · 8,609 · the material · the subject of this set · annex 3.0× the source 2 ui-router-server — 15f · 1,670 · annex 22f · 4,587 · the material · the server adapter · annex 2.7× 3 lit-ui-router-mobx — 5f · 145 · annex 4f · 588 · the material · the mobx companion · annex 4.1× 4 navigation-location-plugin — 2f · 208 · annex 7f · 1,044 · the material · the location seat, core's pushStateLocation swapped out · annex 5.0× 5 sample-app-shared — 41f · 2,493 · annex 8f · 883 · the material · the routes + views every sample app mounts 6 sample-app-lit-vanilla — 8f · 426 · the material · the plain-lit demo 7 sample-app-lit-mobx — 8f · 448 · the material · the mobx demo 8 sample-app-routes — 2f · 56 · annex 4f · 369 · the material · the shared route table, server-side too 9 sample-app-lit-e2e — 9f · 425 · annex 12f · 860 · STOPS THE PR LINE · cypress · drives the docs build 10 docs — 10f · 1,133 · annex 3f · 452 · the material · vitepress + the worker that serves it 11 examples — 31f · 5,798 · annex 1f · 25 · the material · stackblitz-ready copies, own lockfiles 12 @tools/release — 54f · 2,719 · annex 24f · 2,999 · HALTS A PUBLISH · hosts published-diff — the one publish halt 13 @tools/typedoc-plugin — 2f · 344 · never gates · builds the API pages, gates nothing 14 @tools/dts-backtest — 1f · 301 · STOPS THE PR LINE · one 301-line run.ts holds the TS 5.0 floor 15 @tools/build_and_test — 15f · 2,942 · annex 7f · 3,343 · never gates · the CI graph helper — and its error summary 16 @tools/shared — 10f · 513 · annex 7f · 514 · never gates · the library under the instruments 17 @tools/workers-builds — 7f · 682 · annex 3f · 734 · gates a later stage · the docs deploy watch 18 @tools/bundle-probe — 6f · 535 · annex 3f · 216 · never gates · size probe, advisory 19 @tools/compat-guards — 11f · 524 · annex 3f · 524 · STOPS THE PR LINE · the lit 2 / mobx 6 / peer-floor lanes 20 @tools/oxc-emit — 6f · 487 · annex 3f · 284 · the material · both build passes, one emitter 21 @tools/release-config — 2f · 122 · annex 1f · 255 · the material · the shared release-it config 22 @tools/lit-template-lint — 3f · 151 · annex 1f · 46 · never gates · the lit-analyzer wrapper 23 @tools/lit-test-env — 4f · 366 · annex 2f · 336 · STOPS THE PR LINE · the browser harness every suite loads 24 @tools/vue-check — 1f · 36 · never gates · vue-tsc over the docs components 25 @tools/lcov-rebase — 2f · 30 · annex 1f · 30 · never gates · coverage path rewriting 26 @tools/happy-dom — 2f · 14 · annex 1f · 59 · STOPS THE PR LINE · the node-side DOM the unit suites run in 27 @tools/wintercg-globals — no source · types only — not massed · ambient types only — nothing to mass 28 @tools/lint-elements — 1f · 36 · STOPS THE PR LINE · the shared custom-element lint lane (#655) 30 @tools/eslint-ts-parser — 1f · 1 · never gates · a one-line parser shim — the smallest thing in the yard 31 eslint-plugin-lit-ui-router — 12f · 1,462 · annex 13f · 2,437 · the material · vendored uiSref lint rules · annex 1.7× 32 @tools/embed-heights — 3f · 343 · annex 1f · 33 · never gates · docs embed heights, measured in Chromium — outside ci 33 @tools/bootstrap — 3f · 58 · annex 3f · 107 · never gates · zero-dep manifest reads — the one thing that runs before pnpm install 34 @tools/eslint — 7f · 332 · annex 1f · 157 · never gates · the repo rule plugin, the oxlint stubs and the element lane root eslint.config.ts composes 35 @tools/repo-checks — 15f · 1,539 · annex 11f · 1,380 · STOPS THE PR LINE · graph edges, inputs, versions, coverage, patches, deps 36 sample-app-lit-effect — 9f · 471 · the material · the effect demo — the fourth app shell the docs site serves 37 lit-ui-router-effect — 4f · 281 · annex 5f · 1,078 · the material · the effect bindings · annex 3.8× 38 lit-ui-router-ssr — 13f · 1,127 · annex 12f · 2,989 · the material · the prerender bridge · verdicts in, @lit-labs/ssr pages out · annex 2.7× 39 @tools/crap — 2f · 124 · annex 1f · 78 · never gates · CRAP hotspots from coverage — reports, gates nothing 40 @tools/oxlint-anti-slop — 35f · 3,665 · never gates · the vendored anti-slop rules every oxlint lane loads 41 lit-ui-router-signals — 4f · 171 · annex 4f · 864 · the material · the signals bindings · annex 5.1× 42 ui-router-signals — 3f · 95 · annex 2f · 185 · the material · the framework-agnostic signal mirror · annex 1.9× 43 ui-router-effect — 2f · 21 · annex 2f · 62 · the material · the framework-agnostic SubscriptionRef · annex 3.0× 44 @repo/route-snapshot — 1f · 45 · annex 1f · 65 · the material · private · inlined into each consumer's dist by oxc-emit · annex 1.4× 45 sample-app-lit-signals — 8f · 457 · the material · the signals demo — no test script, the fifth app shell the docs site serves 46 @tools/a11y — 5f · 489 · annex 3f · 213 · never gates · axe over the docs pages and app mounts — acceptance, gates nothing 47 ui-router-mobx — 2f · 68 · annex 2f · 143 · the material · the framework-agnostic MobX store · annex 2.1× 48 @tools/ci-logs — 4f · 404 · annex 3f · 440 · never gates · a CI run's task logs fetched into one file — run by hand, gates nothing 49 @repo/dev-gate — 2f · 3 · annex 1f · 24 · the material · private · both halves of each package's #dev-gate import, inlined by oxc-emit · annex 8.0× TOTAL — 48 members, 47 massed · 415 authored files · 36,620 sloc · plus 212 spec files · 37,012 sloc of annex · counted at origin/main @ eb1162da (2026-10-18) (sloc = scc Code)
FIG. 7Sheet 3 drew the monorepo as a process; this sheet counts who lives in it. Footprint ∝ √sloc, height ∝ authored files, tests drawn as annexes rather than deleted — and over that census the two things a census alone cannot say: which district each member belongs to, and which roads run between them. Every road is a workspace dependency or a turbo task edge, never an impression.

GENERAL NOTES

Method — one basis, two series. Every count on this sheet is read at build time from the checked-in plate www/atlas.lit-ui-router.dev/data/census-city.json, counted at origin/main @ eb1162da (2026-10-18): .ts/.tsx/.js/.jsx/.mjs under each member's source directory, excluding *.d.ts, *.test-d.ts, fixtures, dist/ and node_modules/; sloc is scc's Code count — string-aware, so the interior of a template literal counts as code rather than as one line. Sheet 3 throws test code away; this sheet does not — anything matching *.{spec,test,cy}.* or living under specs/ test/ tests/ __tests__/ cypress/ is counted into a second series and drawn as that member's annex. 48 members: 415 authored files and 36,620 sloc of source, plus 212 files and 37,012 sloc of spec. The packages district's 13 buildings reconcile exactly with sheet 3's source slab — 87 files, 8,156 lines — because both are queries over one census rather than two hand counts.

Every shipped building carries an annex bigger than itself. lit-ui-router: 2,860 authored lines against 8,609 of spec (3.0×). ui-router-server: 1,670 vs 4,587 (2.7×). lit-ui-router-mobx: 145 vs 588 (4.1×). eslint-plugin-lit-ui-router: 1462 vs 2437 (1.7×). lit-ui-router-effect: 281 vs 1078 (3.8×). lit-ui-router-ssr: 1127 vs 2989 (2.7×). navigation-location-plugin: 208 lines in 2 files under 7 spec files (5.0×). lit-ui-router-signals: 171 vs 864 (5.1×). ui-router-signals: 95 vs 185 (1.9×). ui-router-effect: 21 vs 62 (3.0×). ui-router-mobx: 68 vs 143 (2.1×). The test budget lives exactly where the repo says it should — in packages/*, and nowhere else at that ratio.

Every road is citable. Solid roads are build edges: packages/* into the sample apps, the apps into docs, @tools/oxc-emit into all eleven published packages — each a workspace: dependency, each backed by turbo's build/docs tasks depending on ^build. Dashed soft roads are the test lane: @tools/dts-backtest depends on the runtime packages of the district and backtests their emitted d.ts against the TS 5.0 floor; @tools/lit-test-env and @tools/happy-dom run up into lit-ui-router's annex because they are its devDependencies and the harness its suites load; sample-app-lit-e2e depends on docs, and turbo's e2e depends on ^build and runs with @www/lit-ui-router.dev#wrangler:dev, so Cypress drives the built shopfront under its worker rather than a vite dev server. The accent road is the one that leaves a member twice — once from the source block and once from the spec annex — because the package's typecheck reads both: tsconfig.json includes src/**, specs and all (only the narrower typecheck:src excludes them), while the ^build:types dependency is what carries the result into the next district. One faint road stands for 22: that many members depend on @tools/shared, 16 of them instruments, and its src/globs.ts (#655) holds the custom-element glob three lanes share. Only the road to the largest is drawn, because drawing all 22 would turn the yard into hatching.

Severity in colour, mass in geometry — and they disagree. The tiers are sheet 3's, applied to whole members: @tools/release is solid red because it hosts published-diff, the only structure that halts a publish; red hatch marks the seven members that can stop a pull request — Cypress e2e, dts-backtest, compat-guards, lit-test-env, happy-dom, lint-elements, whose eslint lane runs at --max-warnings 0, and repo-checks, whose six checks — graph edges, task inputs, single version, patches, knip and dedupe — ride the lint lane; accent hatch marks @tools/workers-builds, which gates the docs deploy and nothing earlier. Here the two encodings happen to agree once, on release, and disagree everywhere else: the harness that can stop every pull request in the repo is 14 authored lines of @tools/happy-dom, sitting on the drawing's minimum footprint.

What the districts say. The product is 13 modest buildings — 8,156 lines — against 16,757 in the instrument yard and 4,776 in the proving ground. The broadest source block on the sheet is examples — 5,798 lines of stackblitz copies — with @tools/oxlint-anti-slop just behind at 3,665 and sample-app-shared, which ships to nobody and gates nothing, sixth at 2,493; the only footprint that outbuilds examples is lit-ui-router's spec annex. @tools/wintercg-globals is drawn on the floor with no mass at all: it is ambient types, and a census that hides its empty members is not a census.

Numbers by import, not by paste. Every count above and on the drawing is read from www/atlas.lit-ui-router.dev/data/census-city.json, the snapshot census-city.mjs writes out of the master per-file census; this module holds placement, tiers and prose only. The plate is measured at a named ref rather than at whatever a working tree happens to hold — counted at origin/main @ eb1162da (2026-10-18) — so every number here is citable to a committed file, and a member the sheet draws but the plate does not carry is a build error rather than a stale constant.

KEY

a member, massed — footprint ∝ √sloc, height ∝ files
its spec annex — the test mass, same rule
halts a publish (@tools/release)
stops the PR line
gates a later stage (the docs deploy)
never gates — reporters, libraries, the material
builds into — a workspace dep feeding a build
tests exercise — harness in, backtest out
typecheck reads — from src AND annex
library under the instruments
district (workspace glob)
PROJECTTHE ALTITUDE ATLAS
SHEET TITLEthe MEASURED CITY
SCALEWHOLE WORKSPACE
FORMMEASURED CITY
CLIENTlit-ui-router · simshanith
DATE / REV2026-10-18 · H
DRAWN BYFable (Claude, AI)
SHEET7 OF 14