the HANDOFF WORKS
ALTITUDE 3 · ALTERNATE PLATE — the sheet-3 task-manager inset at full size: 9 of 14 workflows · 65 mise tasks in 4 homes · turbo ci 1251 nodes, 332 real · 4 seam types · 3 service doors · every frame sized to the widest DIN line it holds, so the spine is computed rather than hand-set · every count imported from www/atlas.lit-ui-router.dev/data/census-handoff.json + census-plate.json · counted at origin/main @ 3f55e419 (2026-10-31)
SEAM SCHEDULE — every crossing between the two machines · what crosses · what the boundary buys · cite
| seam | crossing | count | what crosses | what the boundary buys | cite |
|---|---|---|---|---|---|
| A | workflow → mise | 56 call sites · 36 targets · 9 workflow files | env, never argv (no ${{ }} in run lines) | pinned tools + node-free bootstrap | — |
| B | mise → turbo | 7 tasks · 8 invocations | TURBO_* ambient env | remote cache + --summarize | config.toml:201-231 · tools/release/mise.toml:100,108-111 |
| C | turbo → mise | 7 root scripts + 1 member script (7 in ci) | script body `mise run …` | TURBO CACHES MISE — inputs hash the task files + mise.lock | turbo.json:327-362 · tools/release/turbo.json:50-62 |
| D | mise → pnpm → turbo | 1 (check_workers_builds, manual) | — | only env passthrough + addressing — the turbo leg is cache:false | tasks file :21 |
| D2 | mise → mise | 8 edges · 16 depends (setup · lint_workflows ×4, from 12 declaring tasks) + run-line delegations | — | — | cutest: turbo_login → mise run read_secret · tasks/turbo_login:44 |
| E | bypasses | 3, all deliberate | — | — | deflake-e2e.yml:75 (bare turbo) · :89 (pnpm outside turbo) · cloudflare-build.ts:71-76 (npm -g pnpm + npx turbo, no mise — production) |
TOTALS — 65 mise tasks · 34 with $usage_* specs · 153 turbo definitions · ci 1251 nodes / 332 real · 1 dead task (playwright_deps) · counted at origin/main @ 3f55e419 (2026-10-31) · graph via turbo 2.11.10
GENERAL NOTES
Method — one census, cited throughout. Every count on this plate is imported: www/ for the workflows, the mise tasks and the turbo definitions, census-plate.json for the graph. Both are written by probes that read a materialized archive of the ref — the 14 workflow files, the 31 turbo.json files, .config/ and both member mise.toml files — with the graph figures from a bare turbo run ci --dry=json on an installed archive. No mise or turbo runs on this machine to draw it, and nothing numeric here is hand-pasted: the task-name lists, the cited file:lines and this prose are the editorial part. Basis: counted at origin/main @ 3f55e419 (2026-10-31); graph surveyed at origin/main @ 3f55e419 (2026-10-31) · turbo 2.11.10.
The star fitting: turbo caches mise. Six root / scripts in the ci graph have mise run … as their literal command, and their turbo inputs explicitly hash .config/ and .config/ (turbo.json:327-331, 343-351, 356-362); a seventh port, @tools/, re-enters from a member script and hashes config.toml the same way (tools/release/turbo.json:50-62). That is the whole trade drawn as one gasket on the return duct: mise owns the tool versions (taplo, rumdl, shellcheck, actionlint, zizmor — none installable by node), turbo owns the cache, and the gasket hashes one machine against the other, so a taplo pin bump invalidates exactly the taplo lane and nothing else.
A DAG in a loop costume. The circuit workflow → mise → turbo → mise looks re-entrant, but the 65 tasks partition cleanly: the seven that shell turbo (★ — ci, ci_main, build, codecov_bundle, dts_backtest_matrix, check_pack, published_diff) are reachable only from workflows and humans, while the eight turbo re-enters (↩ — the lint and format tasks, and check_release_closure) only exec pinned binaries, file tasks or a manifest reader. No edge leads from the second set back to the first. The deepest chain is six hops and runs on every PR, four tool lanes in parallel: workflow YAML → mise run ci → turbo run ci → / → mise run lint_toml → the taplo file task → the pinned binary.
Three service doors, all deliberate. deflake-e2e.yml:75 runs bare turbo run build --filter=… — over the umbrella, though mise still supplies the PATH; deflake-e2e.yml:89 runs the flake attempts through pnpm outside turbo, because a cached test task would replay attempt 1’s logs; and the production docs deploy never sees mise at all — Cloudflare Workers Builds clears corepack’s shims and installs the packageManager pin of pnpm globally through npm before npx turbo @www/ (tools/workers-builds/cloudflare-build.ts:71-76), because the hosted image’s corepack shim cannot materialize pnpm 12. The doors are drawn red and hatched because each one gives up something the machines provide — and each was opened on purpose.
Two curiosities the census surfaced. One task in the whole machine is dead: / (mise.toml:93-97) has no caller anywhere, superseded by playwright_deps_engines. And one umbrella exists twice: mise lint_workflows (a 4-leg depends, config.toml:154-158) and turbo / (an umbrella whose dependsOn fans out to the four, turbo.json:316-324) are the same shape maintained by hand in both schedulers — the one place the two machines duplicate rather than delegate. The phantom shroud around turbo’s core — 919 of 1251 nodes that exist only to carry hashes — is drawn as wall thickness here; sheet 12 punches it hole by hole.
KEY
| trunk — the handoff, in flow direction | |
| coupling gasket — a seam between the machines | |
| the cache gasket — turbo hashes mise-owned files | |
| the deepest chain — 6 hops, circled digits | |
| service door — a deliberate bypass | |
| shells turbo / re-entered by turbo — disjoint sets | |
| phantom shroud — 919 nodes that run nothing (sheet 12) | |
| dead task — no caller anywhere |