Command contexts
What you are commanding right now. RC3 carries one vocabulary across the spectrum — from a single platform to a mission — and adapts the surface to scope.
The spectrum
Platform
One platform
Direct command of a single robot. Teleop or supervised.
Group
Several coordinated platforms
Element- or section-level coordination. Two to a dozen platforms acting in concert.
Swarm
Many platforms acting on intent
Group-level intent over a larger force. Operator sets the rules, the swarm executes.
Mission
A strategic objective
Mission-level intent. The full force is sequenced toward an outcome.
Context-aware components
The role is constant. The content shifts with scope.
Components have the same name and the same shape across the spectrum. What they hold — identifiers, telemetry surface, safety actions — adapts to whatever scope the operator is addressing.
The Scope type
One type, shared across organisms.
Every RC3 organism that adapts to scope takes a scope prop. The type is canonical here so the concept and its TypeScript representation live together. Safety actions, comms / health strip, and autonomy mode selector all import their Scope alias from this same union.
type Scope = "platform" | "group" | "swarm" | "mission";
// What each value addresses:
// platform → a single robot
// group → an element / section, 2–12 platforms acting in concert
// swarm → larger force on shared intent
// mission → the full force sequenced toward a strategic outcomeThe same union surfaces in each organism's API as SafetyScope, Scope, and AutonomyScope — the aliases name the consuming organism, but the value set is identical and load-bearing. Your application owns the state machine that decides which scope the operator is addressing at any moment; the organisms render accordingly.
Without an unambiguous active context, the spectrum collapses. See Active context unambiguous in behavioural invariants.