Some checks failed
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 23s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 28s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 28s
wai-app and Create / wai-app · does this change touch it (push) Successful in 28s
wai-fleet service / does this change touch it (push) Successful in 28s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (push) Successful in 40s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 48s
wai-fleet service / service · macos (push) Successful in 38s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 5m2s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 38s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Successful in 2m55s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 17m6s
wai-fleet service / service · linux (push) Successful in 3m32s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (push) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (push) Has been cancelled
communicationOS consolidated into WAI, and its site is retired. Where these texts meant the transport they now say WAI or MoQT, and joule-moq's description, the Joule Code docs and the Three Faces tables follow. The transport example names joule-moq, which it uses, and its test drops the old name. Changelog: none Co-Authored-By: Claude Opus 5.5 <[email protected]>
57 lines
2.4 KiB
Markdown
57 lines
2.4 KiB
Markdown
# `transport-moqt` — MoQT transport binding (the last federation layer)
|
|
|
|
A consumer **binding** showing a Joule Code collaboration's committed coding
|
|
operations carried over **WAI's MoQT transport** — the network wire
|
|
layer left deferred by [`spec/collab.md`](../../spec/collab.md) §2.
|
|
|
|
It closes the loop on the federation stack. The other three layers are already
|
|
built and tested in [`joule-code-collab`](../../joule-code-rs/crates/joule-code-collab/):
|
|
BFT consensus (`LockstepCluster`), FROST threshold authorization (`protected`),
|
|
and MLS group keying (`tests/mls_keying.rs`). This example adds the transport.
|
|
|
|
## What it demonstrates
|
|
|
|
The whole stack, end to end, in one in-process test:
|
|
|
|
```
|
|
BFT consensus (LockstepCluster) → committed, op_id-ordered coding ops
|
|
→ published as MoQT objects over WAI's transport (joule-moq)
|
|
→ each object carries a real Ed25519 / BLAKE3 signed receipt
|
|
→ a subscriber receives every op, verifies the signed receipts against the
|
|
publisher's key, and recovers the original SignedOp intact
|
|
```
|
|
|
|
A second test shows the ownerless-trust property: a subscriber that requires
|
|
receipts rejects a group whose signed receipt does not chain to a trusted
|
|
publisher key — no central authority decides who is authentic.
|
|
|
|
## The transport
|
|
|
|
The carrier is **[`inv-moq`](../../../../joulesperbit/crates/inv-moq)** —
|
|
joulesperbit's MoQT (Media over QUIC Transport) wire protocol plus its JWP
|
|
receipt extension, the WAI broadcast-media transport. It exposes
|
|
`Publisher` / `Subscriber` / `GroupHandle` / `Relay` traits with object-level
|
|
signed provenance and joule receipts.
|
|
|
|
The test drives `inv-moq` through its **`MockFabric`**, which runs the real
|
|
publish/subscribe/receipt machinery in-process — real Ed25519 signatures, real
|
|
BLAKE3 merkle receipts — with **no QUIC and no network**. `inv-moq`'s `quic`
|
|
feature is the real-wire path (quinn/rustls); the trait surface is identical, so
|
|
this binding moves to the network by swapping the fabric, not the code.
|
|
|
|
This is a **standalone workspace** (path-deps `inv-moq` from joulesperbit and the
|
|
`joule-code-*` crates), so the standard's reference library stays free of a
|
|
joulesperbit dependency — the same discipline as [`examples/l3-jouleclaw`](../l3-jouleclaw).
|
|
|
|
## Run
|
|
|
|
```sh
|
|
cargo test
|
|
```
|
|
|
|
Expected:
|
|
|
|
```
|
|
test untrusted_publisher_is_rejected ... ok
|
|
test committed_ops_replicate_over_moqt_with_signed_receipts ... ok
|
|
```
|