pub struct InstallHeartbeatFleet {
pub build_sha: Option<String>,
pub install_source: Option<String>,
pub update_channel: Option<String>,
pub updater_enabled: Option<bool>,
pub updater_status: Option<String>,
pub updater_version: Option<String>,
pub updater_checked_at: Option<String>,
pub updater_error: Option<String>,
pub native_arch: Option<String>,
pub started_at: Option<String>,
pub flow_armed: Option<bool>,
}Expand description
Optional fleet-admin fields on the install heartbeat, grouped so the
daemon can build (and the platform’s fleet-admin view can read) one
value rather than ten loose arguments. Flattened onto
InstallHeartbeatRequest via #[serde(flatten)], so on the wire
these fields sit alongside installId / appVersion / … with no
nesting.
Every field is optional and additive: an older daemon that never
sets them sends a body identical to the one before this struct
existed (an all-None InstallHeartbeatFleet serializes to no
extra keys), and a platform that hasn’t deployed the corresponding
migration yet simply stores nulls. Read by wavekat-platform’s
fleet-admin view (docs/45) — keep every field optional so this
remains safe to send against an older platform and safe to omit
from an older daemon.
Fields§
§build_sha: Option<String>The git SHA the daemon binary was built from.
install_source: Option<String>How this copy was obtained, at a finer grain than
InstallHeartbeatRequest::distribution — e.g. "mas",
"msstore", "snap", "appimage", "deb", "direct",
"dev". Free text by contract, not an enum: the platform
stores whatever arrives so a new install source can ship
without a server release.
update_channel: Option<String>Which release channel this build tracks — "stable" or
"beta".
updater_enabled: Option<bool>Whether the daemon’s self-updater is active. false where the
updater is inert because the platform’s own store owns updates
instead (Mac App Store, Microsoft Store) or the build is
unpackaged.
updater_status: Option<String>The self-updater’s current state machine status — "idle",
"checking", "available", "downloading", "downloaded",
"not-available", or "error".
updater_version: Option<String>The version the updater has staged or is offering, when there is one pending.
updater_checked_at: Option<String>ISO-8601 timestamp of the updater’s last check.
updater_error: Option<String>The updater’s last error message, if any. At most 256 characters — the caller truncates before sending.
native_arch: Option<String>os.machine() — the host’s native architecture. Differs from
arch when the process is running under translation (e.g.
Rosetta on Apple Silicon).
started_at: Option<String>ISO-8601 timestamp of when the daemon process started.
flow_armed: Option<bool>Whether a call flow is armed on at least one line right now.
The one activation fact that is state rather than a milestone,
so it rides the periodic snapshot; “did this install ever add an
account / register / connect a call” are milestones and go
through Client::install_usage_events_with instead. A yes/no
by design — the anonymous ping carries no identity. Absent means
“not reported by this build”, never “no”: the platform stores
NULL and reads it as unknown.