FIT VERDICTfootprint = watched files, height = command sloc — 255 of 332 tasks are one-line pads; the tallest is the 373-sloc @tools/dts-backtest#test tower
the WATCHED CITY
ALTITUDE 3 · ALTERNATE PLATE B — the PR ci graph as a city: 332 real tasks in 36 massed structures · footprint = watched files (21,118 task-file hashes) · height = command sloc (5,870) · 919 phantom plots · every number imported from www/atlas.lit-ui-router.dev/data/census-mass3b.json, surveyed at origin/main @ 3f55e419 (2026-10-31)
STRUCTURE SCHEDULE — tasks (t) · watched files (per-task inputs, summed) · command sloc · every mass cited in data/census-mass3b.json
| # | structure | tasks | watched files | command sloc | note |
|---|---|---|---|---|---|
| 1 | repo-checks | 12 | 1,850 | 531 | the guard house — check-task-inputs.ts (122), the tallest one-file guard |
| 2 | //#format:check:root | 1 | 1,350 | 1 | one oxfmt line · the 1,350-file root glob |
| 3 | //#format:check:toml | 1 | 11 | 19 | mise run + tasks/taplo (17) — plate 3A, seam C |
| 4 | //#lint:actionlint | 1 | 22 | 2 | mise run + config.toml run line |
| 5 | //#lint:css | 1 | 1,350 | 1 | one stylelint line · the same 1,350-file surface |
| 6 | //#lint:markdown | 1 | 90 | 21 | mise run + tasks/rumdl (19) |
| 7 | //#lint:package-json | 1 | 1,350 | 1 | one eslint line watching 1,350 manifests |
| 8 | //#lint:root | 1 | 1,350 | 1 | one oxlint line · the same 1,350-file surface |
| 9 | //#lint:shellcheck | 1 | 19 | 28 | mise run + tasks/shellcheck (26) |
| 10 | //#lint:templates | 1 | 1,350 | 121 | lit-analyzer-ts-guard.ts (36) + lint-templates.ts (84) |
| 11 | //#lint:toml | 1 | 11 | 19 | mise run + tasks/taplo (17) — chain hop ③ |
| 12 | //#lint:zizmor | 1 | 22 | 2 | mise run + config.toml run line |
| 13 | //#typecheck:root | 1 | 1,350 | 1 | one tsc line · the same 1,350-file surface |
| 14 | //#lint:complexity | 1 | 1,350 | 1 | one eslint line · the same 1,350-file surface |
| 15 | lit-ui-router | 14 | 1,072 | 439 | guards + oxc-emit + bundle-probe bins behind every task |
| 16 | lit-ui-router-mobx | 15 | 416 | 476 | the lit2 and mobx6 guards ride four tasks |
| 17 | nav-location-plugin | 10 | 185 | 325 | the fourth-smallest quarter by watched files, same block shape |
| 18 | ui-router-server | 13 | 800 | 422 | node:test + runtime-globals lanes |
| # | structure | tasks | watched files | command sloc | note |
|---|---|---|---|---|---|
| 19 | eslint-plugin | 10 | 405 | 199 | the fifth quarter — rules, docs and oxlint lanes |
| 20 | lit-ui-router-effect | 15 | 416 | 476 | the sixth quarter — the effect bindings, running every lane |
| 21 | lit-ui-router-ssr | 11 | 632 | 396 | the seventh quarter — the prerender bridge |
| 30 | lit-ui-router-signals | 13 | 333 | 438 | the eighth quarter — the signals bindings |
| 31 | ui-router-signals | 10 | 155 | 325 | the ninth quarter — the framework-agnostic signal mirror |
| 32 | ui-router-effect | 12 | 200 | 363 | the tenth quarter — the framework-agnostic SubscriptionRef |
| 33 | @repo/route-snapshot | 5 | 29 | 5 | the eleventh quarter — private, five one-line lanes, nothing to build |
| 34 | ui-router-mobx | 12 | 212 | 363 | the twelfth quarter — the framework-agnostic MobX store |
| 35 | @repo/dev-gate | 5 | 34 | 5 | the thirteenth quarter — private, the two halves of each package's #dev-gate import |
| 36 | ui-router-registry | 7 | 193 | 120 | the fourteenth quarter — types only, no test lane |
| 22 | @tools/release | 7 | 694 | 85 | pack-all.ts (21) + check-exports.ts (57) live here |
| 23 | @tools/dts-backtest | 3 | 111 | 375 | run.ts (372) on a 111-file footprint: THE TOWER |
| 24 | @tools/shared | 4 | 96 | 4 | the library under the instruments — all one-liners |
| 25 | typedoc-plugin | 6 | 41 | 119 | oxc-emit both passes — 79 nodes wait on build:types |
| 26 | instrument terrace | 81 | 867 | 81 | 22 small tools × their style/test/typecheck rows |
| 27 | www — the harbour | 19 | 1,382 | 55 | eleven quarters ship docs:api here — its build waits on 27 nodes |
| 28 | examples — the plain | 6 | 592 | 21 | format:check:oxfmt hashes 94, lint:oxlint 101 |
| 29 | apps (7 sample pkgs) | 29 | 778 | 29 | 7 packages, every command one line |
TOTALS — 36 massed structures reconcile all 332 real tasks · 21,118 task-file hashes · 5,870 command sloc · +1 vacant twin lot (//#lint:workflows, phantom) · 919 phantom plots · surveyed at origin/main @ 3f55e419 (2026-10-31) · ROADS — five district arteries drawn, the graph's heaviest degrees: @www/lit-ui-router.dev#build waits on 27 nodes · typedoc-plugin#build:types unblocks 79 · lit-ui-router#build:types 89 · release#check:exports 52; 283 of the graph's 5,250 edges join two real tasks, the rest are local streets itemised in the dry-run JSON
GENERAL NOTES
Method — the graph, imported. Every mass and footprint on this plate is read from www/, the checked-in snapshot census-mass3b.mjs writes from a bare turbo run ci --dry=json on an installed archive of the ref — surveyed at origin/main @ 3f55e419 (2026-10-31), turbo 2.11.10: 1251 nodes, 332 real, 5,250 edges, 283 real→real. Nothing below is hand-pasted; a structure whose tasks have left the plate throws at build time rather than drawing a stale number, and the schedule totals are the plate's own sums. Footprint is the per-task inputs map — the files whose hashes decide that task's cache key — at 1.2·√files per side. Height is command mass: the package.json script line plus the repo script or bin file it executes, sloc-counted by census-mass3b.mjs on scc 4.0.0's Code basis (guards, emitters and mise task files each cited in the schedule; external binaries like tsc and oxlint contribute only their one line, because that is all this repo wrote). Wall-clock and cache-hit rates are excluded as geometry by design: they are properties of runs, not of the graph.
The city is flat, and that is the finding. 255 of 332 real tasks have command mass 1 — one script line handing the work to a pinned binary. The whole city executes 5,870 sloc of repo-written command while watching 21,118 task-file hashes. The skyline is inverted from intuition: @tools/, the tallest command in the city, is a 372-line run.ts on a 111-file lot — sheet 3 calls it "one 372-line run.ts holds the TS 5.0 floor", and the graph survey agrees to the line — while the largest footprint, the examples plain, watches 592 files (format:check:oxfmt 94 + lint:oxlint 101 alone) under 21 lines of command. The eslint-plugin quarter is nearly flat: eslint-plugin-lit-ui-router brings 10 tasks and 199 sloc, and all but build:js (78), build:types (37) and test:peer-floor (77) are one line apiece.
The root yard repays the walk. All 14 / plots are drawn individually, and seven of them — format:check:root, lint:css, lint:package-json, lint:root, lint:templates, typecheck:root and lint:complexity — are equal slabs watching one identical root surface of 1,350 files. Seven tasks, one surface, one number: it is the plate's cleanest finding. The guards that patrol that surface are not root tasks: @tools/ is a package, drawn whole as the guard house (1) standing apart, south-west of the yard, and eight of its 12 tasks — check:task-inputs, check:graph-edges, check:patches, check:single-version, check:package-coverage, check:knip, check:dedupe and check:shared-source — are named in the dependsOn list of the lint umbrella, so a lint run takes them along wherever it starts. Five of the eight are the city's tall one-file guards, 122, 117, 75, 91 and 114 lines of TypeScript apiece; the other three are one script line each — knip hashing 1,050 files, the widest lot in the block, pnpm dedupe --check hashing 96, and check:shared-source hashing 35. The taplo pad (11) is where plate 3A's six-hop chain touches ground: hops ①–② arrive from mise run ci, hop ③ is this block, and ④–⑥ leave immediately to run back inside mise through the cache gasket. And one lot in the yard is vacant on purpose — /, an umbrella with no script of its own, has no command even here.
One tier, stated in the key. Sheet 3's severity vocabulary survives, but at this altitude it degenerates truthfully: every real node in the ci graph stops the PR when it fails, so the tier is a constant: the blocks stand in ink, the key states the tier, and the drawing spends its information elsewhere. The 5 ci:main-only tasks (test:engines ×3, check:pack, test:matrix) sit outside this survey on an unmassed accent annex — 1305/337 nodes when they are included; the 919 phantom plots — 73.5% of the graph, transit and ^build hash carriers and the script-less lint, typecheck and format:check umbrellas — are the vacant field behind the city, inventoried hole-by-hole on sheet 12.
Roads and reach. Five arteries are drawn, one per district pair, and the plate labels them with degree rather than with an edge tally it cannot cite: @www/ waits on 27 nodes (eleven quarters ship docs:api there, plus worker types and app fixtures — it is the city's sink), @tools/ unblocks 79, @tools/ 52 (pack:all and check:exports read every published quarter), and the widest fan-out in the graph is lit-ui-router#build:types at 89. Of the graph's 5,250 edges only 283 join two real tasks; the rest hang off phantom transit nodes, which is why the roads are drawn as districts and not as a wire count.
KEY
| massed task block, in ink — every one stops the PR line, one tier | |
| height = command sloc — script line + the file behind it | |
| footprint = watched files — the task’s hashed inputs | |
| ci:main annex — gates main, not the PR; unmassed | |
| vacant plot — phantom node, runs nothing | |
| the phantom flats — 919 plots (see sheet 12) | |
| artery — real dependsOn edges, count labelled | |
| the deepest chain passing through (plate 3A, hops ②③) |