Issue one Driver(cmd) RPC against a freshly-connected channel, then
release the channel. Returns the responseβs state string on success;
bail-errors when ok=false or the RPC itself fails. Used by the boot
path for both CMD_INIT and CMD_ACTIVATE, with identical timeout / channel
hygiene.
Mirrors robonix_codegen::contract_gen::contract_id_to_service_name.
Uniform PascalCase: robonix/primitive/chassis/driver β
RobonixPrimitiveChassisDriver. No prefix stripping. Full gRPC
service path: /robonix.contracts.<this>/Driver.
Probe a host:port. Returns Ok(()) when nothing is listening (we can
safely bind), Err describing the live owner otherwise. This is a
race-prone pre-check (someone else can grab the port between probe
and spawn) but in practice the failure mode it catches β a stale
previous-boot daemon β has been alive for minutes, not seconds, so
a single connect attempt is enough.
Render a one-line βwhat is this binary doingβ string for the boot
log. Pulls out the high-signal flags (port, vlm model+host) and
drops noisy ones (βcapabilities, βlog, raw API keys).
Per-binary required-arg sanity check, run before spawning.
Compute a PackageEntryβs expected on-disk path. PURE β no I/O,
no logging, no cloning. path: entries land at manifest_dir/path;
url: entries land at cache_root/<name> (whether or not itβs
been cloned yet). Use entry_path_exists_on_disk to check
presence; use the public cmd::fetch::clone_remote_packages
(called from rbnx build) to actually populate the cache.
Poll atlas until a provider NOT in before appears. Returns the new
provider_id plus an optional driver_contract_id if the new provider
declared a */driver gRPC capability (signal to the caller that
Driver(CMD_INIT) lifecycle should run).
Strip the leading <component>_ from the boot-log pkg_label.
system_memory β memory; primitive_tiago_chassis β tiago_chassis.
Keeps boot-output columns narrow (the section header above already
said which class the entry belongs to).
Spawn one primitive / service package and wait for it to register
at least one capability with atlas. If the new provider has a */driver
gRPC capability, also drive Driver(CMD_INIT) and pass the entryβs
config: as config_json. Packages that donβt declare a driver
(e.g. system packages or new packages that just
donβt need init-time wiring) are deployed as-is once their first provider
appears in atlas.
Translate a system.<name>: block into CLI args for the corresponding
Rust binary. Per-binary mapping kept narrow β adding a new flag means
touching exactly this function plus the binaryβs clap struct.
Run fut while animating the boot spinner so the user sees the
[ β ] name msg_prefix N.Ns line update steadily even when the
underlying RPC takes a while (Driver(CMD_INIT) for sensor-warm-up
packages routinely sits at 30+ seconds). Without this the line goes
silent right after wait_for_registration finishes and rbnx looks
hung between OK lines.