commit 99cc00a5c14ea40e0917fcd804713228c9e07a97
parent 823af47cec260d0084f4eb1f22f5c378a26d0b02
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Mon, 21 Sep 2026 02:52:59 -0400
FACTS: what the umtool suite does without the song data
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 28 insertions(+), 0 deletions(-)
diff --git a/plans/FACTS.md b/plans/FACTS.md
@@ -4833,3 +4833,31 @@ or an explicit clips total, a count on the storage page, and an eviction rule").
60 s, 32 entries; `measureTree` is BANNED in
`noCorpusWalkInRenderPaths.test.ts` with an allow map naming that one file, and
the ban's match is word-bounded so `measureTreeCached` is distinguishable.
+
+### The umtool suite skips instead of going red without the song data
+
+- **`make-fixture.mjs` used to throw on its first readdir of `SONG_DATA`**,
+ taking the ENTIRE suite down before the test server started — including the
+ two dozen specs that have nothing to do with the song project. It tolerates
+ a missing or partial source now.
+- **`fixtures/song-capabilities.mjs` is the one rule, read by two callers.**
+ `make-fixture.mjs` writes `fixture-capabilities.json` as the record (and
+ warns on stderr); `e2e/capabilities.ts` answers the same question for the
+ specs, **from the SOURCE directories rather than from that file** — Playwright
+ loads spec modules to build its test list and the fixture is built by a
+ `webServer` command, so on a fresh checkout the file is not there yet and a
+ helper that failed closed on its absence would skip the song suite on a
+ machine that HAS the data.
+- Three capabilities, because they are three halves of the same absent archive:
+ `song` (cand2 + wav48), `media` (the face deck reads source videos), `asr`
+ (the phrase console runs against the real corpus).
+- Skipped, each confirmed failing on main under the same missing data: browse
+ (3), deck (2), faces (6), find (whole file), triage (whole file), usage
+ (whole file), undo (3 of 4 — the empty-journal refusal still runs), projects
+ (1).
+- **`mix.spec.ts` IS ORDER-DEPENDENT, in both directions, on main.** In a full
+ suite run `:166`/`:201` fail and `:110` passes; in a four-spec run it is the
+ other way round. The fixture is built once per suite invocation and earlier
+ specs leave clip windows in `channels/testchan/data/<id>/clips/`, which
+ `projectCache` folds in — so which file `containing()` picks depends on what
+ ran first. Not a capability, not skipped, and it predates this work.