THE ALTITUDE ATLAS — DRAWING SETSHEET 3 / 14

the INSTRUMENT YARD

ALTITUDE 3 — 11 publishable packages · 26 tools · 96 turbo task names · one packer, many readers · every mass counted at origin/main @ eb1162da (2026-10-18) from www/atlas.lit-ui-router.dev/data/census-yard.json on scc Code lines — 358 authored files and 28,493 sloc across 18 massed structures, with the task-manager inset reading the same two plates sheet 3A draws

TWO TASK MANAGERS, ONE RE-ENTRANT LOOP mise — node-free umbrella · turbo — cached fan-out (remote R2) · neither sits above the other GITHUB ACTIONS 9 workflows mise 61 tasks · 12 declare depends turbo ci = 1154 task nodes AQUA TOOL BELT rumdl · taplo · shellcheck · actionlint · zizmor 54 call sites · 35 distinct tasks 7 tasks shell turbo 7 root scripts shell mise run cache key over tools node never installs mise/aqua provisions them SCALE — footprint side = 1.6 · √sloc (plan area ∝ sloc) · height = 1.5 px per authored file · mass = sloc × files GATE SEVERITY IS COLOUR, NOT HEIGHT — red stops the line, accent gates a later stage, faint never gates the tarball, the registry and the boundary are diagrammatic, not to scale GATE SEVERITY — READ THE COLOUR, NOT THE HEIGHT halts a publish — published-diff (11) stops the PR line — 7 · 8 · 9 · 10 · 17 gates a later stage — 12 · 19 never gates — 13 · 14 · 15 · 16 · 20 1 2 20 9 3 12 10 13 4 11 14 7 8 15 5 16 17 6 18 19 PACKAGES/* — THE MATERIAL 87 authored files · 8,156 sloc eleven published packages enter here THE TARBALL one packer · many readers · never re-packed NPM REGISTRY beyond the boundary a release is immutable and only published-diff still reads it published-diff — the only halt 5 files, 471 sloc docs deploy — gates the site SAMPLE APPS — 76f · 4,351 sloc the second-heaviest mass on the sheet gates nothing at all e2e — cypress · stops the line and drives the apps beside it the return: published-diff reads the LIVE npm tarball — the registry is inside the circuit, not at the end of it packages/ — the conveyor: source in, one tarball out tools/ — the instrument yard 26 packages, mostly measurement apps/ + www/ — proving ground & shopfront STRUCTURE SCHEDULE — authored source per structure · files (f) · sloc · gate tier 1 src — packages/*/src — 87f · 8,156 sloc · the line itself · eleven published + two private — the material 2 build — @tools/oxc-emit — 6f · 487 sloc · the line itself · JS pass + d.ts pass, one emitter 3 pack — packPublishTarball — 12f · 441 sloc · the line itself · the one packer (#449), cached 4 THE TARBALL — not massed · the artifact · the one artifact every check reads 5 publish — release-it — 31f · 1,494 sloc · the line itself · bump · tag · push · publish steps 6 npm registry — not massed · not massed · immutable once crossed 7 tests — vitest harness — 6f · 380 sloc · STOPS THE PR LINE · lit-test-env + happy-dom · 3 real browsers 8 compat-guards — 9f · 312 sloc · STOPS THE PR LINE · the lit 2 / mobx 6 / analyzer lanes 9 dts-backtest — 1f · 301 sloc · STOPS THE PR LINE · one 301-line run.ts holds the TS 5.0 floor 10 check:exports — 2f · 141 sloc · STOPS THE PR LINE · publint + attw over the raw pack 11 published-diff — 5f · 471 sloc · HALTS A PUBLISH · vs the LIVE npm tarball · halts publishing 12 peer-floor tier-2 — 4f · 258 sloc · gates a later stage · gates version bumps, never a PR 13 peer-floor tier-1 — 2f · 140 sloc · never gates · reports check runs, never gates 14 lint & probe fleet — 50f · 5,423 sloc · never gates · oxlint · elements · axe · CI gate 15 @tools/shared — 10f · 513 sloc · never gates · the library under every instrument 16 typedoc plugin — 2f · 344 sloc · never gates · builds the API pages, gates nothing 17 e2e — cypress — 11f · 826 sloc · STOPS THE PR LINE · drives the sample apps · stops the PR line 18 sample apps — 76f · 4,351 sloc · the line itself · effect + mobx + signals + vanilla + routes + shared 19 docs deploy watch — 9f · 790 sloc · gates a later stage · workers-builds triggers · gates the deploy 20 anti-slop rules — 35f · 3,665 sloc · never gates · vendored upstream · loaded by every oxlint lane TOTAL — 18 massed structures · 358 authored files · 28,493 sloc · counted at origin/main @ eb1162da (2026-10-18) · gate tier is colour, never height
FIG. 3The monorepo drawn as what it functionally is: a short conveyor that turns source into one tarball, inside a yard of instruments built to measure that tarball. Every structure carries its measured mass — footprint ∝ √sloc, height ∝ authored files — and gate severity is colour rather than height, because the two do not correlate: the blocks that stop the line are among the smallest on the sheet.

GENERAL NOTES

Method — one basis, shared with sheet 4. Every massed structure was counted from this repo's authored source, counted at origin/main @ eb1162da (2026-10-18) and read from www/atlas.lit-ui-router.dev/data/census-yard.json: .ts/.tsx/.js/.mjs under each member's source directory, excluding *.d.ts, *.test-d.ts, *.spec.* and *.test.*, specs/, __tests__/ and fixtures. sloc is scc's Code count — string-aware, so the interior of a template literal counts as code rather than as one line. @tools/release hosts several instruments at once, so it is attributed by module prefix — check-published-diff* to structure 11, check-exports* to 10, the pack modules to 3, the release steps to 5 — with every file landing in exactly one structure and none counted twice. 20 structures, 18 of them massed: 358 authored files, 28,493 lines. One member is massed nowhere: @tools/wintercg-globals is a single globals.d.ts, and declaration files are outside this basis. The tarball, the registry and the boundary are diagrammatic.

Mass is volume; volume does not predict authority. Footprint side is 1.6 · √sloc, so plan area tracks lines; height is 1.5 px per authored file, so a block's volume is its sloc × files. The three heaviest masses on the sheet gate nothing: packages/*/src (87 files, 8,156 lines), sample apps (76 files, 4,351 lines), lint & probe fleet (50 files, 5,423 lines). The 5 structures that can stop a pull request total 29 files between them, and one of them — dts-backtest — is a single 301-line run.ts. Encoding severity as height would imply the opposite; the census says a gate's authority has nothing to do with how much code it is.

Severity in colour. Red hatch across cap and flank marks a check that stops the PR line: the vitest harness (7), compat-guards (8), dts-backtest (9), check:exports (10) and Cypress e2e (17). One block is solid red — published-diff (11) — because it is the only structure that halts publishing itself, and it closes the loop by pulling the live npm tarball back for comparison, which makes the registry part of the circuit rather than a destination. Accent hatch marks the gates that fire later rather than on a PR: peer-floor tier-2 (12) gates version bumps, the workers-builds watch (19) gates the docs deploy. Faint, unhatched blocks never gate at all — peer-floor tier-1 reports check runs, the lint & probe fleet is advisory, @tools/shared, the typedoc plugin and the vendored anti-slop rules (20) are libraries. The tiers survive both themes because they differ in hatch as well as hue: solid red, red hatch, accent hatch, no hatch.

One packer, many readers (#449). The dashed trunk leaving the green crate is literal: check:exports (publint + attw), dts-backtest and published-diff all read the same cached packPublishTarball output. No check re-packs, so a drift verdict is always about the artifact that would actually ship. Known failure mode, drawn nowhere but real: a poisoned remote cache entry can replay a stale verdict — --force is the remediation.

Two task managers, one re-entrant loop. The inset at top left is drawn flat, not isometric, because a task manager is not a place — and because the relationship is not the clean layering it sounds like. GitHub Actions enters mise at 54 call sites across 9 workflows (35 distinct tasks); mise itself is almost graphless — 61 tasks with exactly 12 of them declaring depends (16 edges), among them lint_workflows → its four linters and setup → turbo_pin_worktree — because it delegates fan-out rather than modelling it. Seven mise tasks shell turbo, whose ci graph alone expands to 1154 task nodes. Then the loop closes back on itself: seven root package.json scripts shell mise run again, so turbo's //#lint:markdown node literally runs mise run lint_markdown. That return is the whole point — mise/aqua owns the versions of the non-node tools (rumdl, taplo, shellcheck, actionlint, zizmor), and turbo climbs back out to it to get a cache key over tools node never installs. Neither gantry is above the other.

KEY

halts a publish (published-diff alone)
stops the PR line
gates a later stage (bump · release · deploy)
never gates — reporters and libraries
mass — footprint ∝ √sloc, height ∝ files
the artifact (one tarball)
checks reading the cached tarball
the return from the live registry
PROJECTTHE ALTITUDE ATLAS
SHEET TITLEthe INSTRUMENT YARD
SCALETHE MONOREPO
FORMISOMETRIC CITY
CLIENTlit-ui-router · simshanith
DATE / REV2026-10-18 · H
DRAWN BYFable (Claude, AI)
SHEET3 OF 14