AUDIO
Source snapshot · 12 October 2026

Explicit CLAP discovery and trusted loading

Opt-in hosted block-start transport

HostedGraphNode::set_transport_enabled(true) and the f64 counterpart enable mapping on main while the native token is stopped, before transferring it to an audio owner. Default nodes continue to omit native transport. The standalone hosted_transport helper implements the same checked allocation-free conversion. All absent optional fields produce no native context. If any field is known, playing must be known: CLAP's transport flags cannot express unknown playing. This policy preserves absence without silently assuming stopped.

Known positive finite tempo, beat position and sample position map to flagged block-start fields. CLAP uses signed 31-fractional-bit beat/second timelines; rounding outside that range rejects with ProcessError::InvalidTransport, clears outputs and occurs before native calls/history/steady-time changes. Sample position converts through f64 seconds, so floating and fixed-point quantization apply; the whole i64 sample range does not promise exact roundtrip. Negative positions are allowed. Discontinuity has no native flag and does not reset DSP.

Optional Transport.details forwards recording/active-loop/pre-roll flags, positive signature components, finite BPM-per-sample tempo increment and current bar start/zero-based number. Increment requires known tempo; bar requires known beats. Active loops require ordered bounds for every known timeline; supplied inactive bounds reject. Fixed-point rounding must preserve strict endpoint order. Unknown details preserve legacy false flags/zero metadata; CLAP cannot distinguish unknown from false for these status flags. A status-only active loop with neither timeline is allowed. Negative bars/bounds and non-power-of-two denominators are accepted. No extrapolation, automatic looping, resetting or mid-block transport updates are added. See decision 0127. New metadata has offline conversion evidence; the loaded fixture profile below continues to cover the earlier playing/position/tempo fields.

The public fixture's --transport profile validates exact negative seconds/beats, positive tempo and flags, then uses alternating playing/stopped blocks for x2/ silent native output. Ordinary no-context fixture behavior remains x2.

CARGO_BUILD_JOBS=2 cargo build --release -p ravet-host --example graph-fixture --locked
CARGO_BUILD_JOBS=2 cargo run --release -p ravet-host --example hosted-graph --locked -- \
  --f64 --transport target/release/examples/libgraph_fixture.dylib org.ravet.host-graph-fixture 2

--transport is restricted to the known public fixture profile; it is not a musical host application or device transport. Typed nodes support opt-in with other explicit instances under their transport contracts. See decision 0111.