commit 80b46803d2a3c883aa6c2c39a7dc7387c9c79a0d
parent a41c7c627651e29c936ac61f5c5f3a8dc6664a5b
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Tue, 29 Sep 2026 22:12:55 -0400
umtool: outputFileTracingExcludes keeps the e2e fixture, .next-e2e and env files out of every route's trace; the ignoreIssue stays, with its measured reason
The second line after cacheFile, measured on its own: with the old clip-audio
route it takes that trace from 2,167 files to 463. The "whole project was
traced" warning stays silenced (path + title only): 66 of 68 routes trace
umtool's 361 files outside dot-directories through path and fs calls on env,
home-directory and parameter values (opting out all 319 path ops in 53 modules
cleans 49 routes; the rest are fs calls), and the warning names the same file
for that walk as for one that reaches a dot-directory. The comment says so; the
dot-directory case is excluded here and checked after the build by
scripts/next-build-trace.test.mjs.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 25 insertions(+), 7 deletions(-)
diff --git a/umtool/next.config.ts b/umtool/next.config.ts
@@ -18,19 +18,37 @@ const nextConfig: NextConfig = {
// fail the whole module graph. Every page importing lib/projects then 500s
// with "Can't resolve 'cbor-x'", which names a package nothing here uses.
serverExternalPackages: ["lmdb"],
+ // No route's trace may list the e2e fixture (.e2e-song, where
+ // e2e/fixtures/make-fixture.mjs links the song data), the e2e server's own
+ // build directory (.next-e2e) or an env file: none is a run-time input. The
+ // clip-audio route's trace listed 1,704 such files (plans/release-15.md, slice
+ // UT). That was fixed at the call (lib/paths.mjs `cacheFile`); this is the
+ // second line, measured on its own: with the old route it takes the trace
+ // back to what the sibling routes list. scripts/next-build-trace.test.mjs
+ // reads the last build's traces back.
+ outputFileTracingExcludes: {
+ "/*": ["./.e2e-song/**/*", "./.next-e2e/**/*", "./.env*"],
+ },
turbopack: {
// Same reasoning as editor/next.config.ts: Turbopack infers the workspace
// root by walking up for the outermost lockfile, and a stray pnpm-lock.yaml
// above the checkout silently relocates it. Nothing here lives above the
// monorepo root, so pinning it costs nothing.
root: path.join(__dirname, ".."),
- // Suppress the harmless "whole project was traced unintentionally" NFT
- // warning, exactly as editor/next.config.ts does. It fires because the
- // server genuinely does runtime-dynamic fs reads it cannot statically bound
- // -- lib/paths.ts resolves SONG_DATA from an env var and the routes read
- // wav48/<video>.wav by name. We don't use `output: 'standalone'`, so the
- // .nft.json traces are never consumed and the over-tracing is cosmetic.
- // Scoped to this exact issue (path + title) so other warnings still surface.
+ // Silences the "whole project was traced unintentionally" warning, and only
+ // it (path + title), for one measured reason: 66 of the 68 routes trace
+ // umtool's own tree, its 361 files outside dot-directories, next.config.ts
+ // (the file the warning names) among them. A path or fs call on a value
+ // Turbopack cannot know (an env var, the home directory, a parameter) is a
+ // pattern over the project, and umtool has hundreds. Opting out every path
+ // op in the three path modules cleaned 31 routes; opting out all 319 in the
+ // 53 modules that have one cleaned 49, and the rest come through fs calls
+ // (lib/report/snapshots.mjs, among others). That walk skips dot-directories
+ // and does not enter symlinks, and the traces are not consumed while
+ // `output: "standalone"` stays off. The warning cannot tell that walk from
+ // one that does reach a dot-directory (both name next.config.ts), so that
+ // case is excluded above and checked after the build by
+ // scripts/next-build-trace.test.mjs instead.
ignoreIssue: [
{
path: "**/next.config.ts",