### The WHEP gateway forwards each player the rendition its sink dispatches first - **live-ingest §9.5**: `joule-moq-ingest` now reads a WHEP offer's capability attributes and forwards, per media kind, the owner's rendition the first advertised capability names at or below the grant's `max_layer`, answering that configuration as if it were the actual one: `a=acfg` in its section and its payload type as the `m=` line's only format. Where nothing advertised is published it forwards the floor, the layer the resource names. An offer with no capability attributes is answered as before, byte for byte the WebRTC stack's answer, and its session record is unchanged. - **`caps_unsupported` is no longer a refusal**: an offer that asks for what this revision does not negotiate (a required option other than `cap-v0` and `med-v0`, `sescap`, `lcfg`) is answered as if it carried no capability attributes, as RFC 5939 §3.3.2 has a recipient proceed that does not support a required extension, with `a=csup:med-v0` at the level of each such `creq` (RFC 5939 §3.6.2). The other seven reasons still refuse, `422`; §14 lists `caps_unsupported` apart, as a reason kept in the record. - **The session record** keeps the choice under `detail.caps`: per kind read, what the section advertised, in order, and the layer forwarded, with the capability and its `acfg` line or the floor; or `not_negotiated`. The session's subscriber time is counted under the highest layer it forwards. - **One implementation**: the gateway compiles `wai::sdp_caps` from its source file (`#[path]`), so it runs WAI's reference reader and pick, and its test run replays `live-conformance/sdp-caps/` through that copy. The module's tests read §9.5 and §14 from beside the file, so the same tests run in both crates.