Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 823af47cec260d0084f4eb1f22f5c378a26d0b02
parent 00620595e3afb38d63de043544a0e32ed13fc4d2
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon, 21 Sep 2026 02:52:37 -0400

umtool e2e: the rest of the song-data skips, from a run on main

The first pass covered the files the earlier part of an alphabetical run
reached. These are the rest, and every one was confirmed to fail ON MAIN under
the same missing data before it was skipped — a skip added on a guess is a test
quietly retired.

  triage  whole file — it is one clip card, and there is no card without a
          queue
  usage   whole file — every plan in the fixture is candidate-derived
  undo    three of four; the empty-journal refusal deliberately keeps running,
          because it is about the journal and not about a clip
  projects  one — `/browse/alpha` is the song project's own page

NOT skipped, and flagged instead: `mix.spec.ts` is ORDER-DEPENDENT on leftover
corpus state, in both directions and on main. In a full suite run :166 and :201
fail while :110 passes; in a four-spec run on main it is exactly the other way
round. The cause is that the fixture is built once per suite invocation and
earlier specs leave clip windows in `channels/testchan/data/<id>/clips/`, which
`projectCache` then folds in — so which file `containing()` picks depends on
what ran first. That is a real fault in the suite and it predates this branch;
it is not a song-data capability and a skip would have hidden it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Diffstat:
Mumtool/e2e/projects.spec.ts | 6++++++
Mumtool/e2e/triage.spec.ts | 7+++++++
Mumtool/e2e/undo.spec.ts | 16++++++++++++++++
Mumtool/e2e/usage.spec.ts | 8++++++++
4 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/umtool/e2e/projects.spec.ts b/umtool/e2e/projects.spec.ts @@ -1,4 +1,5 @@ import { test, expect } from "@playwright/test"; +import { caps, NO_SONG_DATA } from "./capabilities"; import { execFileSync } from "node:child_process"; import { readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs"; import path from "node:path"; @@ -173,6 +174,11 @@ test("a pass-through folder chain collapses for DISPLAY and never in the URL", a }); test("the song URLs that already existed still mean the same thing", async ({ page }) => { + // THE SONG PROJECT IS THE SUBJECT. `/browse/alpha` lists cuts built from the + // candidate corpus, and make-fixture copies a candidate only when its wav is + // present — with no song bulk data the page this asserts the URL of has + // nothing on it. + test.skip(!caps.song, NO_SONG_DATA); // A project id is a path now, but /browse/alpha and /browse/alpha/wide are // the URLs in every decision href, every spec, and whatever anybody has open. await page.goto("/browse/alpha"); diff --git a/umtool/e2e/triage.spec.ts b/umtool/e2e/triage.spec.ts @@ -1,4 +1,11 @@ import { test, expect } from "@playwright/test"; +import { caps, NO_SONG_DATA } from "./capabilities"; + +// THE WHOLE FILE IS ONE CLIP CARD, and there is no card without a queue: /sort +// serves candidates, and make-fixture copies one only when its wav is present. +// With no song bulk data every assertion here is about an element that was +// never rendered. +test.skip(!caps.song, NO_SONG_DATA); // What these cover, in the order the plan asks for them: // * the card renders and the window is UNBOUNDED (widening fetches more audio) diff --git a/umtool/e2e/undo.spec.ts b/umtool/e2e/undo.spec.ts @@ -1,4 +1,5 @@ import { test, expect } from "@playwright/test"; +import { caps, NO_SONG_DATA } from "./capabilities"; // Undo, and the window a card is left on. // @@ -9,6 +10,11 @@ import { test, expect } from "@playwright/test"; // that and undo replays it rather than trying to invert the logic. test("undo restores the exact pile membership a verdict changed", async ({ request }) => { + // A VERDICT NEEDS A CLIP. /sort serves candidates, and make-fixture copies + // one only when its wav is present — with no song bulk data there is nothing + // to judge, so there is nothing to take back. (The empty-journal refusal + // below deliberately keeps running: it is about the journal, not a clip.) + test.skip(!caps.song, NO_SONG_DATA); const before = await (await request.get("/api/clips?mode=sort&limit=200")).json(); expect(before.clips.length).toBeGreaterThan(0); const key: string = before.clips[0].key; @@ -64,6 +70,11 @@ test("undo with an empty journal is refused rather than guessed at", async ({ re }); test("backspace takes back a capture before it leaves the card", async ({ page, request }) => { + // A VERDICT NEEDS A CLIP. /sort serves candidates, and make-fixture copies + // one only when its wav is present — with no song bulk data there is nothing + // to judge, so there is nothing to take back. (The empty-journal refusal + // below deliberately keeps running: it is about the journal, not a clip.) + test.skip(!caps.song, NO_SONG_DATA); await page.goto("/sort"); await expect(page.getByTestId("waveform")).toBeVisible(); @@ -93,6 +104,11 @@ test("backspace takes back a capture before it leaves the card", async ({ page, test("a card remembers the window it was left on, and R returns it to the server's", async ({ page, }) => { + // A VERDICT NEEDS A CLIP. /sort serves candidates, and make-fixture copies + // one only when its wav is present — with no song bulk data there is nothing + // to judge, so there is nothing to take back. (The empty-journal refusal + // below deliberately keeps running: it is about the journal, not a clip.) + test.skip(!caps.song, NO_SONG_DATA); await page.goto("/sort"); await expect(page.getByTestId("waveform")).toBeVisible(); diff --git a/umtool/e2e/usage.spec.ts b/umtool/e2e/usage.spec.ts @@ -1,4 +1,12 @@ import { test, expect } from "@playwright/test"; +import { caps, NO_SONG_DATA } from "./capabilities"; + +// THE WHOLE FILE IS ABOUT PLAN FILES, and every plan in the fixture is +// candidate-derived: make-fixture writes `fixture-build.plan.json` from the +// first COPIED cand2 entry, and it copies one only when its wav is present. +// With no song bulk data the index is empty and every assertion here is +// about a placement that was never written. +test.skip(!caps.song, NO_SONG_DATA); // "Used in" — and the confirmation before dropping something that is. //