joule-moq-web e2e: the service scenario seeks back from the relay's DVR window #377

Merged
dcharlot merged 1 commit from joule-moq/e2e-service-seek into main 2026-10-21 04:32:53 -04:00
Owner

What this changes

joule-moq-web's e2e/room.e2e.mjs: the service scenario now covers seek back, the control of WAI live-recording §8 and live-rooms §10.6. Until now only the dvr scenario covered it, in fixture mode, and the room page as deployed (service mode) never had its Seek back tested.

  • The local relay keeps a DVR window. The service scenario's relay gets a DVR window over every track (900 s, 256 MiB), with a cache far smaller than the span sought back (128 KiB). That is the dvr scenario's relay configuration. The room service's grants already carry the seek power.
  • A seek-back step. It runs after the late joiner: bob seeks eight seconds back into alice's tracks from his page's own control. It is held to the dvr scenario's checks, which are now one function, seekBackChecks, shared by both scenarios:
    • the control enables;
    • the window's video plays in its own view (runs.length === 1);
    • every fetched video and audio object verifies against its receipt;
    • the window holds the whole span, nothing unknown;
    • the video plays from its first key frame at the pace it was captured;
    • the page returns to live with its window view hidden;
    • live video goes on decoding.
      After the relay stops, its signed summaries must show the seek back was served from the window.
  • --seek on|off. It defaults to on locally and off with --base, since a deployment's relay may keep no window. A step not run is printed as skip, listed apart in the summary line and in results.json (now { checks, skipped }), and never counted as a passed check.
  • README. The service row and the --base paragraph say all of this.

No product code changes. The page, relay and room service are as at 1f4798770 (#366).

Checks (build host, through rb)

Check Result
BROWSER_BIN=<host Chrome> bash e2e/run.sh --runs 2, first time 2 of 2 runs passed; 316 of 316 checks ok
the same, second time 2 of 2 runs passed; 316 of 316 checks ok
the service scenario's seek back, in each of the four runs 121 of 121 video and 401 of 401 audio objects verified, 0 unknown, about 102 frames shown over about 6.8 s, back to live, live decoding on; about 1950 objects served from the window
--base https://wai.transaction.science --only service (production; no DVR window there yet) 1 of 1 runs passed; 30 of 30 checks ok; skip production: seek back into the relay's window, listed as skipped
the service scenario against the WAI site's own built /room/ (--web <site dist>), relay, service and wai_live_web at 1f4798770, before this change service + e2ee: 64 of 64 ok (the site's run, for reference)
python3 -I scripts/check-tests-in-ci.py, ./scripts/check-workflow-concurrency.sh, python3 scripts/check-spec-refs.py, python3 scripts/check-wai-section-refs.py, bash scripts/check-no-vanity-metrics.sh, bash scripts/test-public-text-checks.sh, bash scripts/check-comparative-prose.sh, python3 scripts/check-orphan-sources.py, scripts/check-public-names.sh (with the denylist) all exit 0

Falsifications

Each was made on the build host's copy after the commit, then restored.

  • --seek off locally. Exit 0, 33 of 33 checks. The step is reported skip service: seek back into the relay's window — --seek off. results.json lists it under skipped, and no check about the window or seeking was recorded.
  • The service relay with its configuration from before this change (no DVR window, default cache). Exit 1. The page's seek back is served from the cache, so the page-side checks pass, but FAIL service: the relay served the seek back from its DVR window — 0 objects from the window over 5 sessions. A seek back that did not come from the window is caught.
  • No window but the small cache. Exit 1. The late joiner's FETCH of earlier groups can no longer be answered (carol fetches the earlier groups … not within 120000 ms).

Not done

  • Production keeps no DVR window yet. Against it the step is skipped, and reported as skipped. --seek on with --base runs it once production keeps one.

🤖 Generated with Claude Code

## What this changes joule-moq-web's `e2e/room.e2e.mjs`: the `service` scenario now covers seek back, the control of WAI live-recording §8 and live-rooms §10.6. Until now only the `dvr` scenario covered it, in fixture mode, and the room page as deployed (service mode) never had its Seek back tested. - **The local relay keeps a DVR window.** The service scenario's relay gets a DVR window over every track (900 s, 256 MiB), with a cache far smaller than the span sought back (128 KiB). That is the `dvr` scenario's relay configuration. The room service's grants already carry the seek power. - **A seek-back step.** It runs after the late joiner: bob seeks eight seconds back into alice's tracks from his page's own control. It is held to the `dvr` scenario's checks, which are now one function, `seekBackChecks`, shared by both scenarios: - the control enables; - the window's video plays in its own view (`runs.length === 1`); - every fetched video and audio object verifies against its receipt; - the window holds the whole span, nothing unknown; - the video plays from its first key frame at the pace it was captured; - the page returns to live with its window view hidden; - live video goes on decoding. After the relay stops, its signed summaries must show the seek back was served from the window. - **`--seek on|off`.** It defaults to on locally and off with `--base`, since a deployment's relay may keep no window. A step not run is printed as `skip`, listed apart in the summary line and in `results.json` (now `{ checks, skipped }`), and never counted as a passed check. - **README.** The `service` row and the `--base` paragraph say all of this. No product code changes. The page, relay and room service are as at 1f4798770 (#366). ## Checks (build host, through `rb`) | Check | Result | |---|---| | `BROWSER_BIN=<host Chrome> bash e2e/run.sh --runs 2`, first time | 2 of 2 runs passed; 316 of 316 checks ok | | the same, second time | 2 of 2 runs passed; 316 of 316 checks ok | | the service scenario's seek back, in each of the four runs | 121 of 121 video and 401 of 401 audio objects verified, 0 unknown, about 102 frames shown over about 6.8 s, back to live, live decoding on; about 1950 objects served from the window | | `--base https://wai.transaction.science --only service` (production; no DVR window there yet) | 1 of 1 runs passed; 30 of 30 checks ok; `skip production: seek back into the relay's window`, listed as skipped | | the service scenario against the WAI site's own built `/room/` (`--web <site dist>`), relay, service and wai_live_web at 1f4798770, before this change | service + e2ee: 64 of 64 ok (the site's run, for reference) | | `python3 -I scripts/check-tests-in-ci.py`, `./scripts/check-workflow-concurrency.sh`, `python3 scripts/check-spec-refs.py`, `python3 scripts/check-wai-section-refs.py`, `bash scripts/check-no-vanity-metrics.sh`, `bash scripts/test-public-text-checks.sh`, `bash scripts/check-comparative-prose.sh`, `python3 scripts/check-orphan-sources.py`, `scripts/check-public-names.sh` (with the denylist) | all exit 0 | ## Falsifications Each was made on the build host's copy after the commit, then restored. - **`--seek off` locally.** Exit 0, 33 of 33 checks. The step is reported `skip service: seek back into the relay's window — --seek off`. `results.json` lists it under `skipped`, and no check about the window or seeking was recorded. - **The service relay with its configuration from before this change** (no DVR window, default cache). Exit 1. The page's seek back is served from the cache, so the page-side checks pass, but `FAIL service: the relay served the seek back from its DVR window — 0 objects from the window over 5 sessions`. A seek back that did not come from the window is caught. - **No window but the small cache.** Exit 1. The late joiner's FETCH of earlier groups can no longer be answered (`carol fetches the earlier groups … not within 120000 ms`). ## Not done - Production keeps no DVR window yet. Against it the step is skipped, and reported as skipped. `--seek on` with `--base` runs it once production keeps one. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
joule-moq-web e2e: the service scenario seeks back from the relay's DVR window
All checks were successful
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 12s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m15s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 9s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 1m31s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 1m50s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 2m56s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m23s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 6m47s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m1s
359d3eb31e
The service scenario's relay keeps a DVR window over every track, with a cache far smaller
than the span sought back, as the dvr scenario's relay does. After the late joiner, bob
seeks back eight seconds into alice's tracks from his page's control, under the seek power
the room service's grants carry (live-rooms 10.6), and the scenario holds it to the dvr
scenario's checks: the control enables, the window's video plays in its own view (one run),
every fetched object verifies, nothing is unknown, it plays at the pace it was captured, the
page returns to live and live video goes on decoding, and the relay's signed summaries show
it was served from the window. The checks are one function, seekBackChecks, shared by both
scenarios.

--seek on|off: on by default on loopback; off by default against a deployment (--base),
whose relay may keep no window. A step not run is reported as `skip`, listed apart in the
summary line and in results.json, and never counted as a check that passed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!377
No description provided.