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

Task Feedback

A node reports progress on a task it is executing.

Addressed MessageTypeEnum_TASK_FEEDBACK

A node reports progress on a task it is executing.

Directionnode → controller
CadencePeriodic while a task is active, and on state change.
DeliveryAddressed — command plane (QoS 1, exactly-once)
Schemacatl/hibw/messages/task/TaskFeedback.json
Worked examples2

Purpose

In-flight progress for an assigned task: current state (ACTIVE / PAUSED / COMPLETED / REJECTED / CANCELLED), percent_complete, per-constraint compliance, and an optional typed feedback union with task-specific detail. Lets a controller track execution without polling.

When to send it

  • On a cadence while the task is ACTIVE.
  • Immediately on a state transition (accepted, paused, about to complete).
  • When constraint compliance changes (e.g. a range breach).

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 — TaskFeedbackBody

Inherits from base::tasks::TaskIdentifierAndStatus.

FieldTypeMultiplicityDescription
percent_complete (inherited)PercentageBound[1..1]A percentage of task completion.
time_remaining (inherited)Duration[0..1]Time remaining (estimated) till task is completed.
waypoints_remaining (inherited)GUID [][0..*]
identifier (inherited)GUID[1..1]TaskIdentifier - specialization of FlexibleEnumeration to deal with tasks
state (inherited)TaskStateEnum[1..1]
FieldTypeMultiplicityDescription
nodeGUID[1..1]
feedbackTaskFeedbackUnion[0..1]
constraints_complianceTaskConstraintsCompliance [][0..*]
bindingBindingInformationType[0..1]

Full TaskFeedbackBody reference →

Key fields

  • identifier — Must match the identifier from the originating TASK_ADMIN so the controller can correlate.
  • state — TaskStateEnum — the current execution state. Required.
  • percent_complete — 0–100 progress. Optional but expected for long-running tasks.
  • constraints_compliance — Per-constraint compliance array — proactively reports breaches.

Worked examples

Task Feedback Simple

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

catl_15_task_feedback_simple.json
{
  "header": {
    "message_type": "MessageTypeEnum_TASK_FEEDBACK",
    "source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "version": "0.3.0",
    "time_sent": "2025-03-18T12:05:00+00:00"
  },
  "body": {
    "percent_complete": 0,
    "identifier": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "state": "TaskStateEnum_ACTIVE",
    "node": "a895f8f5-46b0-5603-bdf0-b270a2867c09"
  }
}

Task Feedback Complex

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

catl_19_task_feedback_complex.json
{
  "header": {
    "message_type": "MessageTypeEnum_TASK_FEEDBACK",
    "source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "version": "0.3.0",
    "time_sent": "2025-03-18T12:05:00+00:00"
  },
  "body": {
    "percent_complete": 0,
    "identifier": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "state": "TaskStateEnum_ACTIVE",
    "node": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "constraints_compliance": [
      {
        "state": "ConstraintStateEnum_ACTIVE",
        "breach_reason": "",
        "identifier": "c91c56bc-29e2-5533-9192-3f37585bea33",
        "constraint": {
          "$discriminator": "GeneralConstraintTypeEnum_TOGGLE",
          "toggle": {
            "value": false
          }
        }
      },
      {
        "state": "ConstraintStateEnum_BREACH",
        "breach_reason": "",
        "identifier": "c91c56bc-29e2-5533-9192-3f37585bea33",
        "constraint": {
          "$discriminator": "GeneralConstraintTypeEnum_RANGE",
          "range": {
            "value": 15.2
          }
        }
      },
      {
        "state": "ConstraintStateEnum_BREACH",
        "breach_reason": "",
        "identifier": "c91c56bc-29e2-5533-9192-3f37585bea33",
        "constraint": {
          "$discriminator": "GeneralConstraintTypeEnum_ENUMERATION",
          "enumeration": {
            "value": {
              "name": "ON"
            }
          }
        }
      },
      {
        "state": "ConstraintStateEnum_BREACH",
        "breach_reason": "",
        "identifier": "c91c56bc-29e2-5533-9192-3f37585bea33",
        "constraint": {
          "$discriminator": "GeneralConstraintTypeEnum_EQUIPMENT",
          "equipment": {
            "emission_control": "ConstraintTypeEmissionControlEnum_ROUTINE"
          }
        }
      }
    ],
    "binding": {
      "metadata_binding_container": [
        {
          "metadata_binding": [
            {
              "metadata": [
                {
                  "$discriminator": "MetadataUnionEnum_METADATA",
                  "metadata": {
                    "originator_confidentiality_label": {
                      "confidentiality_information": {
                        "policy_identifier": {
                          "uri": ""
                        },
                        "classification": {
                          "value": {
                            "name": "ClassificationEnum_UNCLASSIFIED_OFFICIAL"
                          }
                        }
                      },
                      "creation_date_time": "2026-01-23T17:24:01.662059+00:00"
                    }
                  }
                }
              ],
              "data": [
                {
                  "$discriminator": "DataUnionEnum_DATA_REFERENCE",
                  "data_reference": {
                    "uri": ""
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

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 Feedback example
curl -s https://4817.r2d2.office.ilab.zone/examples/catl_15_task_feedback_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