323f0ba5

By: syd <syd@kronor.io>

Make test derivation outputs deterministic

nix build --rebuild reported the test derivations as possibly non-reproducible:
their output was Vitest stdout verbatim, which carries a wall-clock start time
and per-file durations. That defeats --rebuild and would defeat any
content-addressed early cutoff, since a rerun of unchanged tests produced a
different output hash every time.

The output is now a normalized summary: which files ran, how many assertions
passed, and the totals, with the timing dropped. All nineteen per-package test
derivations now pass --rebuild.

The machinery the two prototypes share moves to nix/support.nix.
guard-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-webconfiguredevShellallTestsbuild-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-webx86_64-linux