open-standards/.github/workflows/joule-moq-room.yml
Transaction Science beb4679dc6 Merge #493 (wai/messaging-calls @01f3aac1): wai.live.message and wai.live.call, conversations and calls on live rooms
Merged last, as asked. Conflicts, all adjacent additions, both sides kept:
- joule-moq-room: Cargo.toml's wai features (live_world, remote_desktop and
  live_messaging); lib.rs's modules (messaging, msgstore, remote), Config's
  remote, messaging and call, Service's remote, messaging and calls, the epoch
  through remote::epoch with the conversation and calls opened beside it, and
  settings()'s refusals (#482's world room, #493's conversation and call); the
  README's world, conversation and call sections.
- joule-moq-web: app.js asks a remote room's grant as #489 does and takes a
  given grant as #493 does (a remote page's fallback to viewer only when it
  asked); run.sh runs room.e2e.mjs (now with --remote) and messaging.e2e.mjs,
  each its own --only scenarios; the usage names every scenario.
- workflows: joule-moq-room.yml's and joule-moq-web.yml's accounts;
  wai-conformance.yml's WAI_FEATURES gains live_messaging (#477's union) and
  the first step's test build names live_messaging beside the train's targets.
- wai-live-web's wai features (stream_termination, live_world, live_messaging),
  wai-rs lib.rs's modules, registry.rs's capability list, REGISTRY.md's rows;
  CHANGELOG, #493's entry on top.
- capabilities.json and v2.ttl regenerated (registry export, then --check).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 12:23:34 -04:00

98 lines
5 KiB
YAML

name: joule-moq-room room service
# The room service (joule-code/joule-code-rs/crates/joule-moq-room), a workspace of its own
# with its own lock file: its keys file, the grants it signs checked against its
# descriptor and read by the relay's reader, the places and the limiter, and
# tests/room_service.rs, the service against a relay on loopback that trusts its authority:
# a grant and its proof open a session and the clock announces the publisher, the grant
# alone opens none, the room verifies (live-rooms §9), a publisher past the room's places
# is refused, clients are bounded, and a new room starts when the last publisher has left;
# an end-to-end encrypted room (WAI confidentiality), members keying through the
# service's log on a relay; admission by age (WAI age-assurance §5.6), the service a
# Privacy Pass origin whose tokens' thresholds its grants state and the relay serves by; and a
# watch room (WAI co-watch): viewers admitted by a proof of their key, their controls and
# statements carried when co-watch accepts them, the clock's skew statements and leaves, and the
# room the log carries verified by wai-rs; and a remote desktop room (WAI remote-desktop,
# tests/remote_room.rs): the host agent of joule-moq-remote enters by an invitation over https://
# and wss:// through TLS fronts, viewers make their keys, the host hands control over by a grant
# exchange it proves its key for, inputs are applied and refused by the rules, a controller's
# typing sealed to the host and absent from what a viewer receives, refused floor statements
# change nothing, a record out of its chain's order is cut and its author removed, the session's
# records are read under a grant of the room alone, and the session verified by wai-rs as the
# clock and the host hold it, at the commitment and the opened levels; a viewer flooding past its
# own record bound (max_records_per_principal), cut and removed while the session goes on and
# verifies; and a session the clock ends at its record bound on the whole session (max_records),
# whole and verified; a conversation (WAI live-messaging, tests/messaging_room.rs):
# members keying through real MLS groups, messaging across a restart of the service from its
# history store, a thread, reactions, an edit and a retraction, a removed member served nothing
# past its removal, every record verified offline; and a call (tests/call_room.rs) rung, accepted
# and carrying audio and video through the relay, and another missed.
#
# It builds on wai-rs's room, event, composition, co-watch and remote desktop records, on the
# relay, on joule-moq-mls and on the remote desktop host agent, so a change to any of them runs
# it. Push filters match the push's delta, so every path the job reads is listed.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
paths:
- 'joule-code/joule-code-rs/crates/joule-moq-room/**'
- 'joule-code/joule-code-rs/crates/joule-moq-remote/**'
- 'joule-code/joule-code-rs/crates/joule-moq/**'
- 'joule-code/joule-code-rs/crates/joule-moq-mls/**'
- 'joule-code/joule-code-rs/crates/joule-moq-relay/**'
- 'joule-code/joule-code-rs/crates/jwp/**'
- 'joule-code/joule-code-rs/vendor/**'
- 'wai/wai-rs/**'
- 'wai/wai-ops/**'
- '.github/workflows/joule-moq-room.yml'
jobs:
# Forgejo matches `paths:` against the push delta, so a rebase fires this workflow
# whatever the pull request changes. This job reads the pull request's own diff against
# the paths above (scripts/pr-touches-paths.py, which fails open).
relevant:
name: joule-moq-room · does this change touch it
runs-on: linux
outputs:
run: ${{ steps.gate.outputs.run }}
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- id: gate
run: |
set -euo pipefail
r=$(python3 scripts/pr-touches-paths.py .github/workflows/joule-moq-room.yml \
"${{ github.event.pull_request.base.sha }}" \
"${{ github.event.pull_request.head.sha }}")
echo "this change touches the room service: $r"
echo "run=$r" >> "$GITHUB_OUTPUT"
test:
name: joule-moq-room, every target
needs: relevant
if: needs.relevant.outputs.run == 'true'
runs-on: linux-arm64
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust 1.98.0
shell: bash
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: joule-moq-room, every target
working-directory: joule-code/joule-code-rs/crates/joule-moq-room
shell: bash
run: cargo test --locked --all-targets