open-standards/joule-code/joule-code-rs/crates/joule-contrib
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dcharlot 152aab5c78
Some checks failed
wai-app and Create / wai-app · does this change touch it (push) Successful in 22s
wai-audit collector and player integration / does this change touch it (push) Successful in 25s
WAI operation catalogue / does this change touch it (push) Successful in 23s
wai-key-proxy / does this change touch it (push) Successful in 8s
wai-fleet service / does this change touch it (push) Successful in 18s
wai-ops integer operators / does this change touch it (push) Successful in 9s
wai formal verification (integer core) / does this change touch it (push) Successful in 21s
wai-quantum command line / does this change touch it (push) Successful in 6s
wai-quantum contract / does this change touch it (push) Successful in 6s
wai-quantum docs, course and locales / does this change touch it (push) Successful in 6s
wai-quantum resource estimation / does this change touch it (push) Successful in 6s
wai-quantum editors / does this change touch it (push) Successful in 9s
wai-quantum for JavaScript / does this change touch it (push) Successful in 8s
wai-quantum other formats / does this change touch it (push) Successful in 9s
wai-quantum pulse and dynamics / does this change touch it (push) Successful in 9s
wai-quantum OpenQASM reader / does this change touch it (push) Successful in 8s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (push) Successful in 51s
wai cross-architecture byte-equality / does this change touch it (push) Successful in 44s
wai-ledger service / does this change touch it (push) Successful in 26s
wai-quantum for Python / does this change touch it (push) Successful in 5s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 49s
wai-quantum extension points / does this change touch it (push) Successful in 5s
wai-quantum error correction and mitigation / does this change touch it (push) Successful in 7s
wai-quantum service / does this change touch it (push) Successful in 7s
energy meters on real hardware / RAPL and NVML on jetson-hub (push) Successful in 58s
wai-quantum variational and algorithm library / does this change touch it (push) Successful in 6s
wai-quantum studio and desktop / does this change touch it (push) Successful in 8s
wai-sink-swift native sink package / does this change touch it (push) Successful in 7s
WAI Studio / does this change touch it (push) Successful in 7s
wai-vector vector graphics / does this change touch it (push) Successful in 8s
wai-sink-android native sink library / does this change touch it (push) Successful in 25s
wai-quantum views in agent hosts / does this change touch it (push) Successful in 26s
wai-quantum verdicts and repairs / does this change touch it (push) Successful in 28s
wai-fleet service / service · macos (push) Successful in 45s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (push) Successful in 1m24s
wai-ops integer operators / linux-aarch64 (push) Successful in 1m9s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 52s
wai-ops integer operators / independent checker (Python) (push) Successful in 50s
wai-ops integer operators / linux-x86_64 (push) Successful in 1m2s
wai-ops integer operators / macos-arm64 (push) Successful in 1m2s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 1m38s
wai-key-proxy / proxy · linux (push) Successful in 1m7s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 1m40s
wai-ops integer operators / wasm32 under Node (push) Successful in 1m8s
wai-quantum contract / the policy is linked, and the deprecations page reads (push) Successful in 13s
wai-audit collector and player integration / collector · linux (push) Successful in 1m34s
wai formal verification (integer core) / every harness in one shard (push) Successful in 19s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (push) Successful in 1m29s
wai cross-architecture byte-equality / linux-aarch64 (push) Successful in 30s
wai-quantum command line / command line · macos (push) Successful in 1m34s
wai-fleet service / service · linux (push) Successful in 1m55s
energy meters on real hardware / sink decode table · per-task energy and the GPU rail on macOS (push) Successful in 3m6s
joule-code conformance gate / joule-moq-relay, every target (push) Successful in 3m7s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Successful in 3m17s
wai-quantum pulse and dynamics / the same bits · macos (push) Successful in 1m0s
wai cross-architecture byte-equality / macos-arm64 (reference) (push) Successful in 27s
energy meters on real hardware / sink decode table · RAPL on jetson-hub (NVML surveyed) (push) Successful in 2m44s
wai-quantum editors / editors · macos (push) Successful in 1m23s
wai-ledger service / service · macos (push) Successful in 57s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (push) Successful in 1m39s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (push) Successful in 2m31s
wai-quantum extension points / the registry and the example · linux-arm64 (push) Successful in 2m29s
wai-quantum service / service energy · linux packages (push) Successful in 1m32s
wai-quantum docs, course and locales / the course and the command line's languages · linux (push) Successful in 2m6s
wai-quantum for Python / python · macos (push) Successful in 2m23s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (push) Successful in 9s
wai-vector vector graphics / linux-aarch64 (push) Successful in 2m31s
wai-quantum contract / API compatibility · linux (push) Successful in 4m18s
wai formal verification (integer core) / kani (stage) (push) Successful in 3m18s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 5m10s
joule-code conformance gate / joule-moq-ingest, every target (push) Successful in 6m21s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 2m11s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 6m45s
wai-quantum resource estimation / estimation and calibration · linux, release (push) Successful in 1m55s
wai-quantum editors / editors · linux (push) Successful in 2m9s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 3m46s
wai-quantum contract / schemas and the committed tool lists · linux (push) Successful in 6m32s
wai-quantum command line / command line · linux (push) Successful in 3m28s
wai-quantum other formats / the set under wasm32-wasip2 (wasmtime) (push) Successful in 1m24s
wai-quantum for JavaScript / javascript · linux (push) Successful in 3m18s
wai-quantum OpenQASM reader / corpus under wasm32-wasip2 (wasmtime) (push) Successful in 46s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 9m2s
wai-vector vector graphics / macos-arm64 (push) Successful in 2m3s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs under wasm32-wasip2 (wasmtime) (push) Successful in 57s
wai cross-architecture byte-equality / linux-x86_64 (push) Successful in 29s
wai-quantum OpenQASM reader / reader and corpus · linux (push) Successful in 1m59s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs · linux, release (push) Successful in 1m26s
wai-quantum service / service · macos (push) Failing after 7m39s
wai-quantum other formats / readers, writers and the set · linux (push) Successful in 3m52s
wai-ledger service / service · linux (push) Successful in 1m47s
wai-quantum extension points / the registry under wasm32-wasip2 (wasmtime) (push) Successful in 59s
wai-quantum extension points / the registry and the example · linux (push) Successful in 2m30s
wai formal verification (integer core) / kani (arith) (push) Successful in 11m8s
wai-quantum for Python / python · linux (push) Successful in 3m27s
wai-quantum error correction and mitigation / codes, decoders, texts and mitigation · linux, release (push) Successful in 3m5s
wai formal verification (integer core) / kani (integer-core) (push) Successful in 11m51s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux, release (push) Successful in 2m2s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 57s
wai-vector vector graphics / wasm32 under Node (push) Successful in 26s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 5m13s
wai-vector vector graphics / wasm32-wasip2 (wasmtime) (push) Successful in 53s
wai-vector vector graphics / fuzz, peak allocation, comparison count (push) Successful in 19s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 12m46s
wai-quantum studio and desktop / studio · browser (push) Successful in 3m9s
wai-quantum service / service · linux (push) Successful in 5m20s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 10m26s
wai-vector vector graphics / wasm32 in three browser engines (push) Successful in 2m51s
wai-quantum verdicts and repairs / verdicts, repairs and the intent set · linux (push) Successful in 1m46s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 5m10s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (push) Successful in 15m44s
wai-vector vector graphics / linux-x86_64 (push) Successful in 4m9s
wai-quantum verdicts and repairs / the intent set and the verdict under wasm32-wasip2 (wasmtime) (push) Successful in 1m24s
wai-vector vector graphics / independent checker (Python) (push) Successful in 3m22s
wai formal verification (integer core) / kani (plan) (push) Successful in 17m1s
wai-quantum views in agent hosts / views · a scripted host (push) Successful in 3m30s
wai-quantum views in agent hosts / views · the page and its engine (push) Successful in 3m44s
wai formal verification (integer core) / kani (sound) (push) Successful in 21m26s
WAI Studio / Studio in WebKit · linux (push) Successful in 12m13s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 20m47s
wai formal verification (integer core) / kani (stage-long) (push) Successful in 24m54s
wai formal verification (integer core) / kani (isqrt512) (push) Successful in 27m5s
wai formal verification (integer core) / kani (rans64-t2) (push) Successful in 13m7s
Merge pull request 'Rust: one toolchain, the latest stable' (#606) from chore/rust-latest-stable into main
2026-11-04 14:18:26 -05:00
..
src joule-contrib: the SRT link tests again require every recovered packet taken before its delivery time; a recovery is pinned to when its gap was found, and a held packet keeps its margin at the link's end 2026-11-04 08:13:40 -05:00
tests joule-contrib: the SRT link tests again require every recovered packet taken before its delivery time; a recovery is pinned to when its gap was found, and a held packet keeps its margin at the link's end 2026-11-04 08:13:40 -05:00
Cargo.toml Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00
README.md live-contribution: registry, CI, READMEs, RIST's rate bound 2026-10-26 03:05:39 -04:00

joule-contrib

Contribution over UDP with retransmission, for WAI's ingest gateway: SRT (draft-sharabayko-srt-01) and RIST (VSF TR-06-1:2020 Simple Profile, VSF TR-06-2:2024 Main Profile), the MPEG transport stream both carry, and an account of what became of every sequence number. WAI's extensions/live-contribution.md profiles them; joule-moq-ingest uses this crate to bring a contribution link into a room's tracks.

SRT

srt::Listener serves many callers on one UDP port, each connection found by the socket ID its packets name; srt::call calls a listener. Both run the caller-listener handshake of the draft's §4.3.1 (the SYN cookie, the HSv5 extensions, the stream ID, the key material), and live mode (§7.1): every message one packet, TSBPD over the negotiated latency, too-late drop, ACK/ACKACK with the RTT estimate, immediate and periodic NAKs, retransmission, AES-CTR with the key wrapped (RFC 3394) under PBKDF2-HMAC-SHA1. A listener decides each caller through an Admission, which sees the stream ID and gives the passphrase, the role (receive or send) and the latency, or a rejection code.

RIST (feature rist)

rist::RistListener receives one flow: the Simple Profile's RTP on an even port P and RTCP on P + 1, or the Main Profile's GRE-over-UDP tunnel on one port, in reduced overhead mode with the VSF EtherType or the legacy one, keep-alives, and PSK (PBKDF2-HMAC-SHA256 over the GRE nonce, AES-CTR on the GRE sequence number). It takes the first flow whose CNAME is the one it expects, and, under PSK, whose packets decrypt. It requests what is missing with range or bitmask requests, measures the RTT with the RTT echo, and delivers each packet a buffer after it was expected. rist::send is the sender of either profile.

The account

stats::Account records what a receiver did with every sequence number, in order: delivered at the first try, recovered within the window, dropped when its time passed, or outstanding when the link ended; the loss runs, the requests sent and the numbers they named, the retransmissions, duplicates and late arrivals received, the round trips, how long each recovery took and its least margin. It is cut into parts, which the gateway signs as the link record.

The transport stream

ts::Demux reads the PAT and PMT (each section's CRC checked) and reassembles each stream's PES packets, with the PTS extended past 33 bits; a PES missing a packet is dropped whole and counted. ts::Mux writes a program of one video and one audio stream, and ts::Pacer times a stream's chunks by its PCR.

Tools

binary what
joule-contrib-send sends a transport stream file (paced by its PCR) or a synthetic program over SRT (calling or listening) or RIST
joule-contrib-recv receives over SRT or RIST into a file, and prints the link's account
joule-contrib-bench one link on loopback, both ends in the process: the payload rate, CPU time and energy, with a lossy path if asked

URLs: srt://HOST:PORT?streamid=…&passphrase=…&pbkeylen=16&latency=MS (calls; srt://:PORT listens), rist://HOST:PORT?profile=simple|main&cname=…&secret=…&aes-type=128|256&buffer=MS.

Tests

test what
unit tests RFC 3394, RFC 6070 and TR-06-2 Annex B vectors, SP 800-38A's CTR vector; the packet formats; the TR-06-1 Appendix A requests; the TS multiplexer against the demultiplexer, a lost packet, the PTS wrap; the account
srt_link SRT on loopback through a proxy that drops datagrams each way, every payload in order, the account of every sequence number; each key length, a wrong and a missing passphrase, the rejection codes; a packet held for the latency window; a listener that sends to a caller that receives
rist_link the Simple Profile with range and bitmask requests through lossy proxies; the Main Profile in the clear, under PSK of each length and in the legacy format; another CNAME and another passphrase refused
interop (ignored) against each transport's reference tools run locally, named by WAI_SRT_LIVE_TRANSMIT, WAI_RISTSENDER and WAI_RISTRECEIVER: their caller and senders into this crate and this crate into their listener and receivers, byte for byte, encrypted and through lossy paths. With --ignored, a tool not named fails the test

The lossy module's proxy drops, delays and reorders datagrams from a fixed seed.

Patents

VSF TR-06-1:2020 and TR-06-2:2024 each carry an intellectual property notice: a patent is claimed to read on their protocol sections, and its holder has assured the forum that it will license the claims to implementers. The RIST code is therefore built only with the feature rist, which no default build turns on; whether a distributed build carries it is a licensing decision for the distributor (extensions/live-contribution.md §10).

Dependencies

AES, CTR, HMAC, SHA-1 and SHA-256 from RustCrypto (MIT OR Apache-2.0); PBKDF2 (RFC 8018) and AES key wrap (RFC 3394) are written here over them. tokio, serde, serde_json, hex, tracing and rand_core: MIT or Apache-2.0. No C library is linked.

Licence

Apache-2.0.