STANAG 4817 / AEP-105 · 0.3.0-rc4 (SD-3 RC4)
Messages

Task Result

A node reports the final outcome of a task.

Addressed MessageTypeEnum_TASK_RESULT

A node reports the final outcome of a task.

Directionnode → controller
CadenceOnce, when a task reaches a terminal state.
DeliveryAddressed — command plane (QoS 2, exactly-once)
Schemacatl/hibw/messages/task/TaskResult.json
Worked examples1

Purpose

The authoritative close-out of a task: the final state, any data_products produced (the deliverables — survey coverage, contacts, imagery references), a typed result description, and a result_reason explaining why it ended that way.

When to send it

  • Exactly once, when the task reaches a terminal state.
  • On rejection — with a result_reason the controller can act on.
  • On completion — attaching the data_products that were generated.

Where it fits

Loading diagram…

Message header

Every CATL message carries this envelope header.

FieldTypeMultiplicityDescription
message_typeMessageTypeEnum[1..1]An enumeration.
sourceGUID[1..1]Source that send this message. Often same as source of information, but different when relaying.
versionstring[1..1]Version of the schema used to create and validate this message. Has to follow major.minor.patch notation. For study draft 3 it should be 0.3.0.
time_sentTime[1..1]

Body — TaskResultBody

FieldTypeMultiplicityDescription
identifierGUID[1..1]
nodeGUID[1..1]
stateTaskStateEnum[1..1]
data_productsDataProduct [][0..*]
descriptionTaskResultUnion[0..1]
result_reasonResultReason[0..1]
constraints_complianceTaskConstraintsCompliance [][0..*]
bindingBindingInformationType[0..1]

Full TaskResultBody reference →

Key fields

  • identifier — The task id — closes the loop opened by TASK_ADMIN.
  • state — Terminal TaskStateEnum (e.g. COMPLETED / REJECTED / CANCELLED). Required.
  • data_products — Deliverables produced by the task — the payload a downstream consumer ingests.
  • result_reason — Why the task ended in this state — essential for REJECTED/CANCELLED handling.

Worked examples

Task Result Simple

✅ validates against catl/hibw/messages/task/TaskResult.json. Routes to 4817/exercise-alpha/v0.3.0/dst/node-bravo/task/result (QoS 2).

catl_16_task_result_simple.json
{
  "header": {
    "message_type": "MessageTypeEnum_TASK_RESULT",
    "source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "version": "0.3.0",
    "time_sent": "2025-03-18T12:05:00+00:00"
  },
  "body": {
    "identifier": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "state": "TaskStateEnum_REJECTED"
  }
}

Integrate it

The two calls every integrator needs — validate the message, then resolve its MQTT route (this type is addressed, so pass a dest_id):

# 1 · fetch a worked Task Result example
curl -s https://4817.r2d2.office.ilab.zone/examples/catl_16_task_result_simple.json | jq '.message' > msg.json

# 2 · validate it against the 0.3.0 schema
curl -s https://4817.r2d2.office.ilab.zone/validate -H 'content-type: application/json' \
  -d "{\"message\": $(cat msg.json)}" | jq '{valid, schema_ref, errors}'

# 3 · resolve where it publishes on MQTT
curl -s "https://4817.r2d2.office.ilab.zone/route?dest_id=node-bravo" -H 'content-type: application/json' \
  -d "{\"message\": $(cat msg.json)}" | jq

Try them interactively in the Integration API reference.

On this page