Agent Fleet
Cross-tenant version distribution + force-update + staged rollout. Aggregates
tenants.tenant_agent_state across every tenant, reads in <100 ms
regardless of fleet size.
Version distribution
Staged rollout
Percentage of agents that see update_available=true for the current
target version. Drop to 5 → 25 → 50 → 100 to canary a release.
Stable hash bucket per agent_id, agents stay in or out as the percentage ramps.
Force fleet update
Fans out POST /api/agents/upgrade/trigger to every tenant portal
that has at least one agent reporting state. Agents on v3.0.2+ apply within ~30s;
older agents silently ignore (use the per-tenant manual snippet for those).