a89fa319

By: syd <syd@kronor.io>

Fix the seven gaps found by following PLAN.md on a fresh workspace

The plan had never been tested by anyone following it. Rebuilt from it alone
against a generated ten-project workspace with the Nix side stripped out: ten
per-package test derivations, all green. So the plan works, but it left seven
things unsaid, four of which stop a follower outright.

Blocking:
- fetchDeps is a fixed-output derivation and needs a hash nobody can know in
  advance. The plan never mentioned it. Set lib.fakeHash, build, copy the got:
  value.
- Project discovery was assumed. The plan said "reduce each manifest" as though
  the list already existed; Nix cannot read pnpm-workspace.yaml, so the globs
  get restated and readDir walked.
- pnpm.configHook is what runs the install. Guessing that is not reasonable.
- Nothing described the working tree each derivation builds inside, only what
  the output must contain. That is the piece with no obvious shape, and the one
  that took longest to work out originally.

Non-blocking but wrong-footing: no note that tsc and vitest come from
node_modules/.bin; no note that the test derivation links dev dependencies
where the build does not; no note that the precondition resolution check needs
an install to have run first, without which nothing resolves and the control
cannot pass; and a stale 2 s where the measured upload cost is 1.8 s.

Phase 0 also gains `pnpm install --frozen-lockfile` as a check, because a fresh
workspace has no lockfile and everything downstream is derived from it.
build-astbuild-chain-abuild-chain-bbuild-chain-cbuild-chain-dbuild-clibuild-collectionsbuild-compilerbuild-corebuild-lexerbuild-loggingbuild-orphanbuild-parserbuild-reportbuild-runtimebuild-stringsbuild-test-utilsbuild-tokensbuild-webguard-astguard-chain-aguard-chain-bguard-chain-cguard-chain-dguard-cliguard-collectionsguard-compilerguard-coreguard-lexerguard-loggingguard-orphanguard-parserguard-reportguard-runtimeguard-stringsguard-test-utilsguard-tokensguard-webpre-committest-asttest-chain-atest-chain-btest-chain-ctest-chain-dtest-clitest-collectionstest-compilertest-coretest-lexertest-loggingtest-orphantest-parsertest-reporttest-runtimetest-stringstest-test-utilstest-tokenstest-webworkspaceProjectsconfiguredevShellallTestsbuild-astbuild-chain-abuild-chain-bbuild-chain-cbuild-chain-dbuild-clibuild-collectionsbuild-compilerbuild-corebuild-lexerbuild-loggingbuild-orphanbuild-parserbuild-reportbuild-runtimebuild-stringsbuild-test-utilsbuild-tokensbuild-webfile-ast--tests-nodes-test-tsfile-ast--tests-walk-test-tsfile-chain-a--tests-report-test-tsfile-chain-b--tests-sum-test-tsfile-chain-c--tests-twice-test-tsfile-chain-d--tests-step-test-tsfile-cli--tests-cli-test-tsfile-collections--tests-chunk-test-tsfile-collections--tests-multimap-test-tsfile-compiler--tests-compile-test-tsfile-core--tests-hash-test-tsfile-core--tests-outcome-test-tsfile-lexer--tests-lexer-test-tsfile-lexer--tests-throughput-test-tsfile-logging--tests-logger-test-tsfile-orphan--tests-base32-test-tsfile-parser--tests-parser-test-tsfile-parser--tests-roundtrip-test-tsfile-report--tests-report-test-tsfile-runtime--tests-agreement-test-tsfile-runtime--tests-vm-test-tsfile-strings--tests-pad-test-tsfile-strings--tests-slug-test-tsfile-test-utils--tests-expressions-test-tsfile-test-utils--tests-random-test-tsfile-tokens--tests-token-test-tsfile-web--tests-render-test-tsguard-astguard-chain-aguard-chain-bguard-chain-cguard-chain-dguard-cliguard-collectionsguard-compilerguard-coreguard-lexerguard-loggingguard-orphanguard-parserguard-reportguard-runtimeguard-stringsguard-test-utilsguard-tokensguard-webinstallInputsnarrow-ast--tests-nodes-test-tsnarrow-ast--tests-walk-test-tsnarrow-chain-a--tests-report-test-tsnarrow-chain-b--tests-sum-test-tsnarrow-chain-c--tests-twice-test-tsnarrow-chain-d--tests-step-test-tsnarrow-cli--tests-cli-test-tsnarrow-collections--tests-chunk-test-tsnarrow-collections--tests-multimap-test-tsnarrow-compiler--tests-compile-test-tsnarrow-core--tests-hash-test-tsnarrow-core--tests-outcome-test-tsnarrow-lexer--tests-lexer-test-tsnarrow-lexer--tests-throughput-test-tsnarrow-logging--tests-logger-test-tsnarrow-orphan--tests-base32-test-tsnarrow-parser--tests-parser-test-tsnarrow-parser--tests-roundtrip-test-tsnarrow-report--tests-report-test-tsnarrow-runtime--tests-agreement-test-tsnarrow-runtime--tests-vm-test-tsnarrow-strings--tests-pad-test-tsnarrow-strings--tests-slug-test-tsnarrow-test-utils--tests-expressions-test-tsnarrow-test-utils--tests-random-test-tsnarrow-tokens--tests-token-test-tsnarrow-web--tests-render-test-tsnodeModulespnpmDepstest-asttest-chain-atest-chain-btest-chain-ctest-chain-dtest-clitest-collectionstest-compilertest-coretest-lexertest-loggingtest-orphantest-parsertest-reporttest-runtimetest-stringstest-test-utilstest-tokenstest-webworkspaceProjectsx86_64-linux