joule-moq-relay, wai-remote-host: build on Windows; the cascade test takes a metered hop #511

Merged
dcharlot merged 3 commits from wai/dvr-windows-positional into main 2026-10-27 15:01:57 -04:00
Owner

The release wai-v0.3.0 built every leg except Windows: joule-moq-relay failed to compile there, because the DVR reads and writes its segments through std::os::unix::fs::FileExt (read_exact_at, write_all_at).

  • joule-moq-relay: on Windows the same two calls now run over seek_read and seek_write, each looping to the full length. They move the file's cursor, which the DVR never reads: every segment write is positional. Unix is unchanged.
  • wai-remote-host: its Unix file modes (0600 key files, the owner-only check on a host key) now apply on Unix only, as the room's keys already do. Without this, the Windows leg would have failed here next.
  • The cascade test: three_relays_in_a_chain asserted that every hop signs the unmetered marker. Where the relay reads its own counter (macOS, since the relay meters itself), each hop signs OnChipCounter instead, so the test failed on every run there. CI runs it only on linux-arm64, which has no counter. It now takes either form; relay_energy.rs still tests the metered figure itself.

Checked on the build host:

  • cargo check --target x86_64-pc-windows-gnu passes for the four released Windows binaries: the relay, the room, the remote host and wai-pack. The windows-gnu target has the same std::os::windows API as msvc.
  • cargo test -p joule-moq-relay passes every test, including the cascade test, which failed four runs out of four before the change.
  • joule-moq-remote passes its clippy (-D warnings) and its tests.

🤖 Generated with Claude Code

The release `wai-v0.3.0` built every leg except Windows: `joule-moq-relay` failed to compile there, because the DVR reads and writes its segments through `std::os::unix::fs::FileExt` (`read_exact_at`, `write_all_at`). - **joule-moq-relay:** on Windows the same two calls now run over `seek_read` and `seek_write`, each looping to the full length. They move the file's cursor, which the DVR never reads: every segment write is positional. Unix is unchanged. - **wai-remote-host:** its Unix file modes (0600 key files, the owner-only check on a host key) now apply on Unix only, as the room's keys already do. Without this, the Windows leg would have failed here next. - **The cascade test:** `three_relays_in_a_chain` asserted that every hop signs the unmetered marker. Where the relay reads its own counter (macOS, since the relay meters itself), each hop signs OnChipCounter instead, so the test failed on every run there. CI runs it only on linux-arm64, which has no counter. It now takes either form; `relay_energy.rs` still tests the metered figure itself. **Checked on the build host:** - `cargo check --target x86_64-pc-windows-gnu` passes for the four released Windows binaries: the relay, the room, the remote host and `wai-pack`. The `windows-gnu` target has the same `std::os::windows` API as `msvc`. - `cargo test -p joule-moq-relay` passes every test, including the cascade test, which failed four runs out of four before the change. - `joule-moq-remote` passes its clippy (`-D warnings`) and its tests. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The release's Windows leg failed to compile joule-moq-relay: the DVR read
and wrote its segments through std::os::unix::fs::FileExt. On Windows the
same two calls now run over seek_read and seek_write. wai-remote-host would
have failed next on its Unix file modes; they now apply on Unix only, as the
room's keys already do.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
joule-moq-relay: the cascade test takes a metered hop as well as the unmetered marker
Some checks failed
joule-moq-remote host agent / joule-moq-remote · does this change touch it (pull_request) Successful in 5s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 6s
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 7s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 2m45s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 3m29s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 8s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Failing after 2m7s
WAI examples / WAI examples · does this change touch them (pull_request) Successful in 22s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 2m18s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 3m35s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 3m28s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 4m0s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 7m20s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 6m43s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (pull_request) Successful in 42s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Successful in 56s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m42s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 15m22s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 11m54s
fe9dedaf40
three_relays_in_a_chain asserted each hop record's (joules, class) was the
unmetered marker. On a host where the relay reads its own counter (macOS,
since the relay meters itself) each hop signs OnChipCounter instead, so the
test failed there on every run; CI runs it only on linux-arm64, which has no
counter. relay_energy.rs tests the metered figure itself.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge remote-tracking branch 'origin/main' into wai/dvr-windows-positional
All checks were successful
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Has been skipped
wai-sink-swift native sink package / does this change touch it (pull_request) Successful in 8s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Has been skipped
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 9s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been skipped
wai-web wasm32 / does this change touch it (pull_request) Successful in 15s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been skipped
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 3m58s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 4m24s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 1m49s
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Successful in 5m31s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been skipped
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been skipped
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Successful in 5m44s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (pull_request) Successful in 34s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 7m10s
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Successful in 5m25s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 4m31s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 8m41s
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Successful in 6m22s
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Successful in 7m59s
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Successful in 8m12s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 7m40s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m53s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 9m56s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 8m50s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 13m55s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 19m19s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 16m57s
ea823be8a7
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!511
No description provided.