phoxal-bus
The Phoxal bus ABI floor: the Zenoh-native wire boundary (D26/D62/D1) plus
the two contract primitive traits ([ApiVersion] / [ContractBody]) the bus
client is generic over.
Samples are Zenoh-native: the key
(<namespace>/robots/<robot-id>/<version>/<topic>, the version folded
in per D1), an encoding string + a [BusMetadata] attachment (codec and
provenance only - no schema/family/api identity, D1), and a plain MessagePack
body payload - there is no Phoxal frame independent of Zenoh, and no
{"v":…} version tag in the body (D62). Identity lives entirely in the key:
different version-qualified contract names are different keys and physically
cannot collide, so a receiver's per-key subscription is the whole fast-reject.
The concrete API versions (v1, …) generated by the
phoxal_api_tree! macro - and their [ApiVersion] / [ContractBody] impls -
live in the phoxal-api crate (phoxal::api, …), which also re-exports
these two traits. The phoxal engine re-exports the typed authoring subset at
phoxal::bus, so the traits are also reachable as phoxal::bus::ApiVersion /
phoxal::bus::ContractBody. The raw session-opening surface lives behind the
explicit phoxal-bus opt-in.