docs: record the audio clock, and that CI is green
Build & publish Arch package / arch-package (push) Successful in 2m2s
CI / check (push) Successful in 2m18s
Search index maintenance / maintain-index (push) Successful in 6s
CI / e2e (push) Successful in 4m33s

The e2e job passes on both engines for the first time, so the three
files that describe it as red are wrong. Also records the two things
that made it findable: the CI container is reproducible under Docker,
and the app's own audio stack had to be the thing measured.
This commit is contained in:
2026-08-12 14:03:09 -04:00
parent 0a25bca128
commit d681a7223e
4 changed files with 92 additions and 25 deletions
+12 -14
View File
@@ -834,20 +834,18 @@ per-step status (which is how "WebKit was skipped" was found) and
`GET /api/v1/repos/{owner}/{repo}/actions/jobs/{job_id}/logs` returns
the whole log, with `Authorization: token $GITEA_TOKEN`.
**The `e2e` job is currently red on both engines, for one reason.**
48 specs pass under Chromium and 48 under WebKit; the same three fail
— `playback.spec`'s elapsed clock and two in `player-truth.spec` —
because playback does not advance in the container: the UI
interpolates while the backend position stays at zero, 1718 s adrift.
It is the audio device, not the renderer and not the app. Which means
the paragraph below was measured once and is no longer true.
Two things the container needs that a developer machine does not. It
has no PulseAudio socket, so `/etc/asound.conf` makes ALSA's `null`
plugin the default device — that plugin is *supposed* to advance its
pointer on a timer, so playback is consumed at real-time rate and the
elapsed clock moves, which `e2e/specs/playback.spec.ts` asserts; it no
longer does. And
Two things the container needs that a developer machine does not.
**It needs an audio device that keeps time**, because the player's
position is derived from what has been consumed — so a device that
accepts audio instantly makes every track finish instantly and the
clock never move. That is what ALSA's `null` plugin does, contrary to
a year of this file and `ci.yml` saying it paces on a timer: measured
through beep and oto with `player.InitSpeaker`'s own arguments,
**3000 ms of audio consumed in 2.96 ms**. It is a PulseAudio null sink
now (the same 3000 ms takes 3762 ms), started in system mode because
the job runs as root, with a step that plays three seconds and fails
if they take under two — a dependency with a rate, checked like one.
And
`YJ_CORE_INDEX_URL` points at a dead address so no run fetches the real
explore artifact, matching what `scripts/seed-sandbox.sh` already does.