Messages
Task Result
A node reports the final outcome of a task.
Addressed
Body —
catl_16_task_result_simple.json
MessageTypeEnum_TASK_RESULT
A node reports the final outcome of a task.
| Direction | node → controller |
| Cadence | Once, when a task reaches a terminal state. |
| Delivery | Addressed — command plane (QoS 2, exactly-once) |
| Schema | catl/hibw/messages/task/TaskResult.json |
| Worked examples | 1 |
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_reasonthe controller can act on. - On completion — attaching the
data_productsthat were generated.
Where it fits
Loading diagram…
Message header
Every CATL message carries this envelope header.
| Field | Type | Multiplicity | Description |
|---|---|---|---|
message_type | MessageTypeEnum | [1..1] | An enumeration. |
source | GUID | [1..1] | Source that send this message. Often same as source of information, but different when relaying. |
version | string | [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_sent | Time | [1..1] |
Body — TaskResultBody
| Field | Type | Multiplicity | Description |
|---|---|---|---|
identifier | GUID | [1..1] | |
node | GUID | [1..1] | |
state | TaskStateEnum | [1..1] | |
data_products | DataProduct [] | [0..*] | |
description | TaskResultUnion | [0..1] | |
result_reason | ResultReason | [0..1] | |
constraints_compliance | TaskConstraintsCompliance [] | [0..*] | |
binding | BindingInformationType | [0..1] |
Full TaskResultBody reference →
Key fields
identifier— The task id — closes the loop opened by TASK_ADMIN.state— TerminalTaskStateEnum(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).
{
"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)}" | jqTry them interactively in the Integration API reference.