State Model
How STANAG 4817 combines a stateless message envelope with a stateful shared operational picture.
BLUF
STANAG 4817 is stateless at the message layer and stateful at the domain layer. Every CATL message is fully self-describing — no session, handshake, or delivery order is required to interpret it. But the meaning of the message set depends on a shared operational picture that endpoints maintain over time: tracks, contacts, volumes, nodes, and the lifecycle of every task.
Stateless transport
Each message carries everything needed to interpret it on its own:
- A header with the originating node (
source), themessage_type, a schemaversion, andtime_sent. - A body with the full payload for that message type.
There is no connection setup, no sequence numbers, and no requirement that messages
arrive in order to be individually valid. This makes the format transport-agnostic —
it rides equally well over DDS, MQTT, or a file drop. Identity and recency are
carried in the data (GUID identifiers and time_of_validity / timestamp
fields) rather than in transport state.
Stateful domain
While delivery is stateless, the message set operates on state that endpoints accumulate. Three mechanisms make the domain stateful:
1. The shared picture, maintained by DYNAMIC_UPDATE
DYNAMIC_UPDATE carries incremental operations against the receiver's data-product
store, so a receiver must hold and reconcile state across messages.
| Operation | Effect |
|---|---|
GET_REFERENCE | Resolve / request a data product by reference. |
PUT_VALUE | Create or update a data product (track, contact, volume, …). |
QUERY | Select data products matching a CQL query. |
DELETE_REFERENCE | Remove a data product from the shared picture. |
Because updates are keyed by GUID and stamped with time_of_validity, they are
idempotent and order-tolerant: a late or duplicated update reconciles to the
same picture.
2. The task lifecycle
Tasking is an explicit state machine. A TASK_ADMIN action drives transitions;
the node reports progress with TASK_FEEDBACK and final products with TASK_RESULT.
TaskStateEnum defines 21 states; the core lifecycle is:
The full
TaskStateEnumalso models the acknowledgement handshakes (WAITING_FOR_PUSH_ACK,WAITING_FOR_CANCEL_ACK, …) and planning states (PLANNING,PREPARED,ACTIONABLE).TaskAdminActionEnumis the input alphabet:ASSIGN,PUSH,PULL,UPDATE,PAUSE,RESUME,CANCEL.
3. Track lifecycle
A Track carries a TrackPhase that evolves as observations arrive or stop:
A tasking exchange end-to-end
Putting it together — stateless messages that advance stateful task and track machines between a C2 node and an unmanned system:
Implications for implementers
- Keep the message handler stateless — validate and route each message on its own; never require prior messages to parse one.
- Keep a reconciling store for the shared picture, keyed by
identifier(GUID) and ordered bytime_of_validity; applyDYNAMIC_UPDATEoperations idempotently. - Track task state explicitly per task GUID; treat
TASK_ADMINas the only driver of transitions andTASK_FEEDBACKas the observable state. - Tolerate loss, duplication, and reordering — the design assumes lossy links.
Message Model
The CATL message envelope, the seven message types, and the base entity model they carry.
Autonomy & Doctrine
How autonomy (ALFUS), Rules of Engagement, Courses of Action, and tasking logic relate to STANAG 4817 — what the standard carries, and what it deliberately leaves to policy and the system.