[remote] max_records (100000 by default, 16 to 10000000): the clock holds at most that many of a session's principals' records. When a record would pass the bound it holds none past it and ends the session: every present principal's leave (reason 2) signed after its last record taken, the host's last; GET /room's remote states ended "max_records", the records held and those over the bound; the session it holds stays whole and verifies, and the next host starts a new room. Ending rather than refusing inputs past the bound: a record the clock did not hold would leave a hole in its author's chain, the host would decide inputs the clock never held, and an input's refusal is the host's to state. The host agent stops at its own leave. tests/remote_room.rs: the host reaches the service and the relay through TLS fronts; alice's typing goes sealed, is injected as typed, and is absent from what bob receives and from the session the service serves to a viewer's grant; the session verifies at the commitment and the opened levels; and a session at a bound of 40 records ends, whole and verified. Co-Authored-By: Claude Opus 5.5 <[email protected]>
93 lines
4.2 KiB
YAML
93 lines
4.2 KiB
YAML
name: joule-moq-remote host agent
|
|
|
|
# The remote desktop host agent (joule-code/joule-code-rs/crates/joule-moq-remote), a workspace
|
|
# of its own with its own lock file (WAI extensions/remote-desktop.md): its room files, the
|
|
# pure-function H.264 encoder (every macroblock I_PCM), the pattern source and the recorder, and
|
|
# tests/loopback.rs, a session over a relay on loopback: three viewers verify every frame against
|
|
# its receipt, a click under the floor applied, a viewer with no control power and a controller
|
|
# off the floor refused, the floor handed over, a paused screen refused, latency records signed,
|
|
# and the session's chains verified whole by wai-rs; and the gate's order, a participant's records
|
|
# taken in its chain's order as a room service's clock takes them; alice's typing sealed to the
|
|
# host's sealing key, injected as typed and absent from what a viewer receives, and the session
|
|
# verified at the opened level too; and tests/tls.rs, the clients of the room service over
|
|
# https:// and of the relay over wss:// through a TLS front, every certificate verified. The same
|
|
# host in a room the room service keeps is joule-moq-room's tests/remote_room.rs. On Linux arm64 the Linux adapters (X11
|
|
# capture, the kernel's input device) compile and the session runs with the pure-function
|
|
# encoder; on macOS it runs again with the platform's hardware encoder, whose units are checked
|
|
# for the Annex B the capability carries.
|
|
#
|
|
# It builds on wai-rs's room and remote desktop records, on the relay and on joule-moq, 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-remote/**'
|
|
- 'joule-code/joule-code-rs/crates/joule-moq/**'
|
|
- '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-remote.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-remote · 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-remote.yml \
|
|
"${{ github.event.pull_request.base.sha }}" \
|
|
"${{ github.event.pull_request.head.sha }}")
|
|
echo "this change touches the host agent: $r"
|
|
echo "run=$r" >> "$GITHUB_OUTPUT"
|
|
|
|
test:
|
|
name: joule-moq-remote, every target (${{ matrix.os }})
|
|
needs: relevant
|
|
if: needs.relevant.outputs.run == 'true'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [linux-arm64, macos]
|
|
runs-on: ${{ matrix.os }}
|
|
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 --component clippy
|
|
rustup default 1.98.0
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
|
|
# One test at a time: the sessions share the host with other jobs, and each takes a lock.
|
|
- name: joule-moq-remote, every target, and clippy
|
|
working-directory: joule-code/joule-code-rs/crates/joule-moq-remote
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
cargo test --locked --all-targets -- --test-threads=1
|
|
cargo clippy --locked --all-targets --no-deps -- -D warnings
|