commit 5221cddf6656fd323c88f4a84e94ebe224799a98
parent d044af114ddf70fd38d176e98a1bf916df9469ef
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Sun, 20 Sep 2026 17:49:54 -0400
e2e: put walk-fixture w02 in the cache GAP, not half inside a neighbour
The bench plays the best OVERLAPPING file it has, so a clip nothing HOLDS can
still show a picture borrowed from the file next door -- w02 at 9.00-12.00
overlapped vid1_11.50-15.50 by half a second and rendered a player. Both
states are off the walk (neither can be watched through), but only a clip with
nothing touching it says "nothing fetched for this clip yet", which is what
this fixture is here to pin down.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/umtool/e2e/clip-bench.spec.ts b/umtool/e2e/clip-bench.spec.ts
@@ -359,8 +359,9 @@ test("a date that is not a real day is refused, and the bench says so", async ({
// These run against reports/walk-fixture, which is read-only for exactly this
// reason: every other test in this file writes verdicts into bench-fixture, so
// "ready 2 of 3" would be true there only until one of them ran. Its four
-// clips are w01 (fetched, unjudged), w02 (nothing holds 9-12), w03 (fetched,
-// already confirmed) and w04 (fetched, unjudged).
+// clips are w01 (fetched, unjudged), w02 (in the gap between two cached files,
+// so nothing to play at all), w03 (fetched, already confirmed) and w04
+// (fetched, unjudged).
// ---------------------------------------------------------------------------
test("the walk visits only the clips that need judgement and are fetched", async ({ page }) => {
diff --git a/umtool/e2e/fixtures/make-fixture.mjs b/umtool/e2e/fixtures/make-fixture.mjs
@@ -849,17 +849,22 @@ const BENCH = writeProject(
// transcript), locked so none of them raises a decision:
//
// w01 3.00- 6.00 fetched, unjudged -> on the walk
-// w02 9.00-12.00 NOT fetched -> skipped; nothing to play
+// w02 9.20-11.20 NOT fetched -> skipped; nothing to play
// w03 12.00-15.00 fetched, CONFIRMED -> skipped; already answered
// w04 15.00-18.00 fetched, unjudged -> on the walk
//
+// w02 sits in the GAP between two cached files rather than merely outrunning
+// one: the bench plays the best OVERLAPPING file it has, so a clip half-held by
+// a neighbour's download still shows a picture. That is a different state from
+// "nothing to play", and the walk skips both -- neither can be watched through.
+//
// So the walk is w01 <-> w04, over two different reasons, and the counter reads
// `ready 2 of 3`: three clips need judgement, two of them can have it today.
const WALK = writeProject(
"walk-fixture",
manifest("walk-fixture", "The Walk Fixture", { siteOrigin: "https://archive.example" }, [
{ type: "clip", id: "w01", video: "vid1", start: 3.0, end: 6.0, cite: 3, section: 0, lock: true, quote: "and because" },
- { type: "clip", id: "w02", video: "vid1", start: 9.0, end: 12.0, cite: 9, section: 0, lock: true, quote: "another whole sentence" },
+ { type: "clip", id: "w02", video: "vid1", start: 9.2, end: 11.2, cite: 9, section: 0, lock: true, quote: "another whole sentence" },
{ type: "clip", id: "w03", video: "vid1", start: 12.0, end: 15.0, cite: 12, section: 0, lock: true, quote: "a fourth one", verdict: "confirmed" },
{ type: "clip", id: "w04", video: "vid1", start: 15.0, end: 18.0, cite: 15, section: 0, lock: true, quote: "trailing off" },
]),
@@ -1051,9 +1056,10 @@ for (const name of ["vid1_10.00-16.00.mp4", "vid1_14.50-18.50.mp4"]) {
);
}
// walk-fixture's cache: a file holding w01, one holding w03 and one holding
-// w04, and NOTHING covering w02 -- 9.00-12.00 falls between 0.00-9.00 and
-// 11.50-15.50. The content is the same nine seconds of tone in all three; what
-// is being fixed here is which windows are held, not what is in them.
+// w04, and NOTHING touching w02 -- 9.20-11.20 falls in the gap between
+// 0.00-9.00 and 11.50-15.50, so it has no picture at all rather than half of
+// one. The content is the same nine seconds of tone in all three; what is being
+// fixed here is which windows are held, not what is in them.
mkdirSync(path.join(WALK, "out", "clips-raw"), { recursive: true });
for (const name of ["vid1_0.00-9.00.mp4", "vid1_11.50-15.50.mp4", "vid1_14.50-18.50.mp4"]) {
copyFileSync(