zenkey-fleet
The fleet engine for keyspace-v2 Zenoh
tooling — the shared core of the zenctl and zengui explorers:
query— the RFC 05 §2.1 fan-in discipline (fleet_get: targetAll, consolidationNone, attribution by the reply's own key), in exactly one place. Answers carry zenoh's refcountedZBytes— no per-reply copies.registry—SliceSet: registry slices from the live bus (introspectfan-in) or localregistry/*.tomldirs, one type either way, with precedence-correct subject refinement (sharedzenkey::patternmatcher) and an on-disk cache.decode(featuredecode, default) — the RFC 08 §7 pipeline:SchemaStorelazily fetches each producer's serveddescribeschema set,decode_sampleturns wire bytes into named-field JSON with honest structural fallback; encoding resolution is sample > registry > sniff.decode-protobufadds dynamic protobuf via the served FileDescriptorSet,decode-cdradds XCDR1 (DDS / ROS 2) against a servedcdrfield list.body(featuredecode) — the other direction:prepare_publish/prepare_requestturn a typed body into the bytes that actually ship, encoded against the served schema and labelled with the declaredEncoding. Encode resolution is declared > registry > the schema kind's native encoding (never a sniff of the operator's text). A body that could not be encoded is reported as such —BodySourcedistinguishes encoded, as-typed, and raw, so no caller can ship an unencoded payload silently.write— the only two ways an explorer writes:Publication(a declared publisher with the closed QoS enum applied —send, and since #115retire, the RFC 04 §1.2 tombstone; there is deliberately no bare-put and no bare-delete helper) andcall, the disciplined RPC.check_retireis the class guard: state keys pass, everything else prices the operator act (--i-know), wildcards refuse outright.sub—Monitor: subscription multiplexing + liveliness watching (withhistory(true)— the roster arrives on join) into a bounded broadcast of events. Overflow surfaces as an explicitDropped(n); render loops pull the immutableKeyTreeSnapshoton the stats tick, so a hot bus cannot melt a UI.stats/tree— per-key rate/byte counters (EWMA, SourceInfo gap counting) and the chunk-grouped snapshot they build.roster/admin— the liveliness roster and raw@/**admin-space access.
Sessions opened here are deliberately un-namespaced (RFC 09 §5): an explorer sees the wire as it really is. Do not "fix" that.