<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-li-coap-task-resources-01" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="CoAP Task Resources">CoAP Extensions for Asynchronous Task Resources</title>
    <seriesInfo name="Internet-Draft" value="draft-li-coap-task-resources-01"/>
    <author initials="L." surname="Li" fullname="Linzhe Li">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <code>100094</code>
          <country>China</country>
        </postal>
        <email>lilz@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="Y." surname="Cui" fullname="Yong Cui">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>cuiyong@tsinghua.edu.cn</email>
        <uri>http://www.cuiyong.net/</uri>
      </address>
    </author>
    <date year="2026" month="July" day="22"/>
    <area>WIT</area>
    <workgroup>CoRE</workgroup>
    <keyword>CoAP</keyword>
    <keyword>task resource</keyword>
    <keyword>asynchronous operation</keyword>
    <keyword>lifecycle</keyword>
    <abstract>
      <?line 54?>

<t>Many operations on constrained devices cannot complete within a single CoAP request and response exchange.  Examples include firmware installation, diagnostic procedures, commissioning, calibration, and physical actuation.</t>
      <t>This document defines a common lifecycle model for representing such operations as addressable CoAP Task Resources.  It specifies task creation, state monitoring, discovery, cancellation, terminal-state retention, and eventual removal.  It also defines a four-part request payload model, identified by the existing CoAP Content-Format Option, for carrying resource operations together with task execution controls.  No new CoAP Option is defined.</t>
    </abstract>
  </front>
  <middle>
    <?line 60?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A CoAP request <xref target="RFC7252"/> normally produces a response describing the immediate result of applying a method to a resource.  Some operations, however, continue after the request has been accepted.  A firmware installation may download an image, verify it, install it, and reboot the device.  A diagnostic operation may run multiple tests and retain a report.  Commissioning and physical actuation may wait for external events or take a substantial amount of time.</t>
      <t>Applications commonly represent these operations using implementation-specific job identifiers, state fields, polling endpoints, or Observe notifications. Although these mechanisms can work within one application, they do not provide a reusable contract for generic CoAP clients.  In particular:</t>
      <ul spacing="normal">
        <li>
          <t>a client has no common state vocabulary for determining whether an operation is pending, active, completed, failed, aborted, or rejected;</t>
        </li>
        <li>
          <t>a lost creation response or a client restart can leave an outstanding task undiscoverable;</t>
        </li>
        <li>
          <t>progress alone cannot reliably identify terminal failure or cancellation;</t>
        </li>
        <li>
          <t>cancellation is often confused with removal of the resource representing the operation;</t>
        </li>
        <li>
          <t>resource-operation semantics and task-execution controls are often carried in application-specific CoAP Options or payloads.</t>
        </li>
      </ul>
      <t>The primary contribution of this document is a common lifecycle for asynchronous Task Resources.  A Task Initiator submits an operation using POST. When the Executor accepts the operation for asynchronous processing, it creates a Task Resource and returns the location of that resource. The Task Initiator subsequently retrieves or observes the Task Resource, updates permitted task parameters, or requests cancellation through a cancellation resource using existing CoAP methods.</t>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <dl>
        <dt>Task Initiator:</dt>
        <dd>
          <t>A CoAP client that requests an operation that may be processed asynchronously.</t>
        </dd>
        <dt>Executor:</dt>
        <dd>
          <t>A CoAP server that accepts, executes, and reports the operation.</t>
        </dd>
        <dt>Task Resource:</dt>
        <dd>
          <t>A CoAP resource representing one accepted operation.  It exposes task state and MAY expose progress, estimated completion time, diagnostics, and per-resource results.</t>
        </dd>
        <dt>Task Request:</dt>
        <dd>
          <t>The four-part payload defined in <xref target="task-request-payload"/>.  It contains resource-operation content and task-execution content.</t>
        </dd>
        <dt>Resource Operation:</dt>
        <dd>
          <t>One application operation on a target resource, carried in the Resource content part of a Task Request.</t>
        </dd>
        <dt>Terminal State:</dt>
        <dd>
          <t>COMPLETED, FAILED, ABORTED, or REJECTED.</t>
        </dd>
      </dl>
    </section>
    <section anchor="scope">
      <name>Scope</name>
      <t>This document specifies:</t>
      <ul spacing="normal">
        <li>
          <t>a common Task Resource lifecycle and state vocabulary;</t>
        </li>
        <li>
          <t>task creation, retrieval, observation, update, and cancellation behavior;</t>
        </li>
        <li>
          <t>discovery using CoRE Link Format interface descriptions;</t>
        </li>
        <li>
          <t>a four-part Task Request payload identified by Content-Format;</t>
        </li>
      </ul>
      <t>This document does not change the base CoAP message layer, token processing, retransmission behavior, or proxy behavior.  It defines no new CoAP Option.</t>
    </section>
    <section anchor="task-lifecycle">
      <name>Task Lifecycle</name>
      <t>A Task Resource represents an operation accepted for asynchronous processing. Its state follows the state machine below.</t>
      <figure>
        <name>Task Lifecycle</name>
        <artwork><![CDATA[
        +---------+       Dynamic admission fails
        | PENDING | -------------------------> [ REJECTED ]
        +---------+
            |
            | Waiting for activate
            v
        +---------+       cancellation
        | PENDING | -------------------------> [ ABORTED ]
        +---------+
            |
            | Accepted for execution
            v
        +---------+       Cancellation
        | ACTIVE  | -------------------------> [ ABORTED ]
        +---------+
            |
            | Execution finishes
            v
      +--------------+
      |  Successful? | -- Yes ---------------> [ COMPLETED ]
      +--------------+
            |
            | No
            v
        [ FAILED ]
]]></artwork>
      </figure>
      <t>The states are:</t>
      <dl>
        <dt>PENDING:</dt>
        <dd>
          <t>A Task Resource exists, but execution has not started.</t>
        </dd>
        <dt>ACTIVE:</dt>
        <dd>
          <t>The operation is executing.</t>
        </dd>
        <dt>COMPLETED:</dt>
        <dd>
          <t>The operation completed successfully.</t>
        </dd>
        <dt>FAILED:</dt>
        <dd>
          <t>Execution terminated without successful completion.</t>
        </dd>
        <dt>ABORTED:</dt>
        <dd>
          <t>Execution was canceled before completion.</t>
        </dd>
        <dt>REJECTED:</dt>
        <dd>
          <t>The Task Resource was created and remained PENDING, but a dynamic admission decision made before execution determined that the operation could not be started under the current runtime conditions.  Examples include insufficient currently available processing capacity, memory, storage, energy, execution slots, or excessive device load.  REJECTED MUST NOT be used for an unsupported task type, malformed payload, unsupported execution control, authorization failure, or failure of a profile-specific security or safety requirement.  Such failures are detected before Task Resource creation, reported using an appropriate 4.xx response, and do not produce REJECTED.  A resource or load failure that occurs after the task becomes ACTIVE produces FAILED rather than REJECTED.</t>
        </dd>
      </dl>
      <t>An Executor SHOULD keep a terminal Task Resource available long enough for the Task Initiator to retrieve its final state.  Retention time is deployment specific.  Where possible, the Executor SHOULD indicate how long the Task Resource is expected to remain available.  The applicable application profile defines how this indication is conveyed; this document does not define a retention Option or a new retention field.</t>
      <t>After the retention period expires, the Executor MAY remove the Task Resource. Subsequent requests to the removed URI SHOULD receive 4.04 (Not Found).</t>
    </section>
    <section anchor="task-request-payload">
      <name>Task Request Payload</name>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>A Task Request MUST include the CoAP Content-Format Option with value 62, identifying <tt>application/multipart-core</tt> as defined by <xref target="RFC8710"/>.  This document does not define or register a new Content-Format.</t>
        <t>The payload contains exactly two multipart-core parts.  The first part carries the Resource representation, and the second part carries the Task representation.  Because each multipart-core part consists of a Content-Format identifier followed by a byte string or <tt>null</tt>, the complete Task Request is encoded as a four-element CBOR array.</t>
        <t>An Executor that does not support Content-Format 62 for Task Requests MUST respond with 4.15 (Unsupported Content-Format).</t>
      </section>
      <section anchor="four-part-payload">
        <name>Four-Part Payload</name>
        <t>A Task Request contains four ordered logical parts:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Part</th>
              <th align="left">Name</th>
              <th align="left">Content</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">1</td>
              <td align="left">Resource Content-Format</td>
              <td align="left">The registered CoAP Content-Format identifier for Part 2</td>
            </tr>
            <tr>
              <td align="right">2</td>
              <td align="left">Resource representation</td>
              <td align="left">A byte string containing resources and values to be operated on</td>
            </tr>
            <tr>
              <td align="right">3</td>
              <td align="left">Task Content-Format</td>
              <td align="left">The registered CoAP Content-Format identifier for Part 4</td>
            </tr>
            <tr>
              <td align="right">4</td>
              <td align="left">Task representation</td>
              <td align="left">A byte string containing task controls, or <tt>null</tt> when no Task content is supplied</td>
            </tr>
          </tbody>
        </table>
        <t>The parts have the following semantics:</t>
        <ol spacing="normal" type="1"><li>
            <t>The first element is the registered CoAP Content-Format identifier of the Resource representation carried in the second element.  An application profile selects this value.  For example, the value is 60 when the Resource representation uses <tt>application/cbor</tt>.</t>
          </li>
          <li>
            <t>The second element is a non-empty CBOR byte string containing exactly one Resource representation encoded according to the first element.</t>
          </li>
          <li>
            <t>The third element is the registered CoAP Content-Format identifier of the Task representation carried in the fourth element.  This document uses 60 (<tt>application/cbor</tt>) for the Task-Content map defined below.</t>
          </li>
          <li>
            <t>The fourth element is a CBOR byte string containing exactly one Task-Content map encoded using <tt>application/cbor</tt>.  It MAY be <tt>null</tt> when the request carries no execution mode or profile-specific task parameters.</t>
          </li>
        </ol>
        <t>The values in the first and third elements identify the embedded representations; they are not format-version numbers.  In particular, the outer value 62 MUST NOT be repeated in either position unless the corresponding embedded representation is itself another <tt>application/multipart-core</tt> representation.</t>
      </section>
      <section anchor="encoding">
        <name>Encoding</name>
        <t>The complete Task Request has the following CDDL structure, using the multipart-core rules from <xref target="RFC8710"/>:</t>
        <sourcecode type="cddl"><![CDATA[
Task-Request = [
  resource-content-format: content-format,
  resource-representation: bstr,
  task-content-format: 60,
  task-representation: bstr / null
]

content-format = 0..65535

Task-Content = {
  ? 1 => execution-mode,
  ? 2 => profile-parameters
}

execution-mode = atomic / sequential
atomic = 1
sequential = 2

profile-parameters = { * int => any }
]]></sourcecode>
        <t>The byte string in <tt>resource-representation</tt> MUST be interpreted according to <tt>resource-content-format</tt> and the applicable application profile.  The byte string in <tt>task-representation</tt>, when present, MUST contain exactly one well-formed CBOR data item matching <tt>Task-Content</tt>; no bytes may remain after that item is decoded.</t>
        <t>The outer multipart-core array, the Task-Content map, and CBOR Resource representations defined by an application profile SHOULD use the deterministic encoding requirements in Section 4.2.1 of <xref target="RFC8949"/>.  Indefinite-length items MUST NOT be used in the outer array or Task-Content map.</t>
        <t>A receiver MUST reject the complete Task Request with 4.00 (Bad Request) if:</t>
        <ul spacing="normal">
          <li>
            <t>the outer array does not contain exactly four elements;</t>
          </li>
          <li>
            <t>the first or third element is not an unsigned integer;</t>
          </li>
          <li>
            <t>the Resource representation is absent, <tt>null</tt>, or empty;</t>
          </li>
          <li>
            <t>the fourth element is neither a byte string nor <tt>null</tt>;</t>
          </li>
          <li>
            <t>the third element is not 60 when the fourth element is a byte string; or</t>
          </li>
          <li>
            <t>an embedded representation is malformed according to its Content-Format.</t>
          </li>
        </ul>
        <t>The Executor MUST NOT apply any Resource Operation from a malformed Task Request.  If Content-Format 62 is supported but an embedded Content-Format is not supported for the applicable profile, the Executor MUST respond with 4.15 (Unsupported Content-Format).</t>
      </section>
      <section anchor="resource-operations">
        <name>Resource Operations</name>
        <t>The Resource content part identifies target resources and the content to be applied to them.  Every target MUST be within the authorization scope of the request.  An application profile MUST define how resources are identified, how operation order is represented, and which value types and operations are permitted.</t>
        <t>The representation is profile-defined because firmware management, diagnostics, commissioning, and actuation differ.  A profile SHOULD reuse an existing resource representation where possible and MUST specify how its contents are applied.</t>
      </section>
      <section anchor="task-execution-controls">
        <name>Task Execution Controls</name>
        <t>The Task content part can carry these execution modes:</t>
        <dl>
          <dt>atomic (1):</dt>
          <dd>
            <t>The Resource Operations form one atomic unit.  The Executor MUST either apply all operations successfully or leave all targets unchanged.  An Executor that does not support this guarantee for the requested task type or Resource Operations MUST reject the request with 4.22 (Unprocessable Entity) and MUST NOT create a Task Resource.  An Executor that supports the guarantee but cannot admit the created task because of current runtime resource availability follows the dynamic admission procedure in <xref target="task-lifecycle"/> and transitions the Task Resource to REJECTED.</t>
          </dd>
          <dt>sequential (2):</dt>
          <dd>
            <t>The Executor applies Resource Operations in the order expressed by the Resource content part.  The application profile defines whether execution stops after the first failed operation.  Task-Status SHOULD include per-operation results when more than one operation was attempted.</t>
          </dd>
        </dl>
        <t>For more than one Resource Operation, Task content MUST state the requested execution mode unless equivalent semantics are defined by the application profile.  For one operation, the mode MAY be omitted.</t>
        <t>Task controls are interpreted only by the Task Initiator and Executor. Intermediaries are not required to understand the representation.  Profiles MAY instead define equivalent semantics through collection or interface behavior.</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>The following example uses multipart-core diagnostic notation.  The Resource representation and Task representation both use Content-Format 60 (<tt>application/cbor</tt>).  The example Resource representation <tt>h'A101F5'</tt> is a profile-defined CBOR map, while <tt>h'A10102'</tt> encodes the Task-Content map <tt>{1: 2}</tt>, requesting sequential execution.</t>
        <artwork><![CDATA[
POST /operations
Content-Format: 62

[
  60, h'A101F5',
  60, h'A10102'
]
]]></artwork>
        <t>The complete encoded payload for this example is:</t>
        <artwork><![CDATA[
84 18 3C 43 A1 01 F5 18 3C 43 A1 01 02
]]></artwork>
        <t>If the same request carries no Task content, the fourth element is <tt>null</tt>:</t>
        <artwork><![CDATA[
[
  60, h'A101F5',
  60, null
]
]]></artwork>
      </section>
    </section>
    <section anchor="task-resource-mapping">
      <name>Task-Resource Mapping</name>
      <section anchor="creation">
        <name>Creation</name>
        <t>A Task Initiator submits a Task Request using POST to an operation-submission resource or task collection identified by the application profile.  POST is used because processing the request creates a distinct Task Resource whose URI is returned by the Executor.  This document does not use PATCH or iPATCH to submit a Task Request: those methods apply changes to the resource identified by the request URI, whereas Task Request submission creates a separate Task Resource.</t>
        <t>If the Executor accepts the operation for asynchronous processing, it MUST create a Task Resource and return 2.01 (Created). The response MUST include one or more Location-Path Options identifying the Task Resource. This specification does not use Location-Query to identify a Task Resource.</t>
        <t>Location is the sole protocol mechanism defined here for returning the Task Resource URI.  A client MUST NOT depend on a separate task-link Option.</t>
        <t>Before returning 2.01 (Created), the Executor MUST complete pre-creation validation.  This validation MUST include the Task Request structure and embedded representations, support for the requested task type and Resource Operations, support for the requested execution controls, authorization for every target, and all profile-specific security and safety requirements.  If pre-creation validation fails, the Executor MUST return an appropriate 4.xx response and MUST NOT create a Task Resource.</t>
        <t>After creating the Task Resource and while it remains PENDING, the Executor MAY perform dynamic admission based on runtime conditions that can vary after creation.  These conditions include currently available processing capacity, memory, storage, energy, execution slots, and device load.  If dynamic admission determines that the operation cannot be started, the Executor MUST transition the Task Resource to REJECTED.  The Executor MUST NOT use REJECTED for a condition that was required to be checked during pre-creation validation.</t>
      </section>
      <section anchor="methods-on-a-task-resource">
        <name>Methods on a Task Resource</name>
        <dl>
          <dt>GET:</dt>
          <dd>
            <t>Retrieves Task-Status or another selected representation.  A Task Resource MAY be observable using CoAP Observe <xref target="RFC7641"/>.</t>
          </dd>
          <dt>FETCH:</dt>
          <dd>
            <t>Retrieves selected task-state information when supported by the profile.</t>
          </dd>
          <dt>PATCH and iPATCH <xref target="RFC8132"/>:</dt>
          <dd>
            <t>Update mutable task parameters when permitted by the profile.  An update MUST NOT change the identity of the represented operation.</t>
          </dd>
          <dt>DELETE:</dt>
          <dd>
            <t>Requests removal of the Task Resource, consistently with <xref target="RFC7252"/>. The Executor MUST NOT interpret DELETE as a cancellation request.  If deletion is permitted and succeeds, the Executor SHOULD return 2.02 (Deleted), and the Task Resource URI is no longer available.  An Executor SHOULD reject deletion of a PENDING or ACTIVE task with 4.09 (Conflict) unless an application profile explicitly permits removal while execution continues.</t>
          </dd>
        </dl>
        <t>An Executor MAY remove a terminal Task Resource automatically after its retention period. Explicit DELETE and automatic retention expiry have the same resource-removal semantics.</t>
      </section>
      <section anchor="cancellation-resource">
        <name>Cancellation Resource</name>
        <t>An Executor that supports cancellation MUST expose a cancellation resource associated with each cancellable Task Resource.  The cancellation resource is identified by appending the single path segment <tt>cancel</tt> to the Task Resource URI.  For example, if the Task Resource URI is <tt>/tasks/89</tt>, the cancellation resource URI is <tt>/tasks/89/cancel</tt>.</t>
        <artwork><![CDATA[
{Task-Resource-URI}/cancel
]]></artwork>
        <t>The Task Initiator requests cancellation by sending POST to this resource.  If cancellation is not supported for the Task Resource, the Executor MUST return 4.04 (Not Found) or 4.05 (Method Not Allowed), as applicable.  If the task is PENDING or ACTIVE and cancellation succeeds, the Executor SHOULD return 2.04 (Changed) and transition the Task Resource to ABORTED.  The Task Resource remains available during its retention period so clients can retrieve the terminal state.</t>
        <t>If the task is already terminal, the Executor SHOULD return 4.09 (Conflict), unless the application profile defines cancellation as idempotent and permits a success response.  Refusal to cancel because stopping the underlying operation would be unsafe SHOULD also use an appropriate error response and MUST NOT change the current task state.</t>
      </section>
    </section>
    <section anchor="task-status-subresources">
      <name>Task Status Subresources</name>
      <t>An Executor MAY expose subordinate resources identified by appending the corresponding path segment to the Task Resource URI:</t>
      <artwork><![CDATA[
{Task-Resource-URI}/state
{Task-Resource-URI}/progress
{Task-Resource-URI}/eta
]]></artwork>
      <t>For example, if the Task Resource URI is <tt>/tasks/89</tt>, the state subresource URI is <tt>/tasks/89/state</tt>.</t>
      <t><tt>/state</tt> contains the numeric state value defined in <xref target="task-status-payload"/>.  <tt>/progress</tt> contains an unsigned integer from 0 to 100.  <tt>/eta</tt> contains estimated seconds to completion.</t>
      <t>Successful responses from <tt>/state</tt>, <tt>/progress</tt>, and <tt>/eta</tt> MUST include Content-Format 60 (<tt>application/cbor</tt>).  Each response payload MUST contain exactly one CBOR unsigned integer.  For <tt>/state</tt>, the integer is one of the state values defined in <xref target="task-status-payload"/>.  For <tt>/progress</tt>, it is in the range 0 to 100.  For <tt>/eta</tt>, it is the estimated number of seconds to completion.</t>
      <t>A client MUST determine terminal status using <tt>/state</tt> or the state field of a Task-Status representation.  Progress is informational.  FAILED, ABORTED, and REJECTED are not required to report progress 100.</t>
    </section>
    <section anchor="conditional-observation">
      <name>Conditional Observation</name>
      <t>Task-state and task-progress resources MAY support Conditional Query Parameters defined by <xref target="I-D.ietf-core-conditional-attributes"/>.  This reduces Observe traffic without defining task-specific query parameters.</t>
      <t>For example:</t>
      <artwork><![CDATA[
GET /tasks/89/progress?c.st=20&c.pmin=5&c.pmax=60
Observe: 0
]]></artwork>
      <t>A client needing every transition SHOULD observe <tt>/state</tt> without a step condition.  Conditional reporting MUST NOT make terminal state permanently unavailable.</t>
    </section>
    <section anchor="task-discovery">
      <name>Task Discovery</name>
      <t>Task Resources SHOULD be discoverable using CoRE Link Format <xref target="RFC6690"/> and its interface description mechanism. This document defines no new discovery protocol.</t>
      <artwork><![CDATA[
</tasks/89>;if="core.task"
]]></artwork>
      <t>A client can request Task Resources using:</t>
      <artwork><![CDATA[
GET /.well-known/core?if=core.task
]]></artwork>
      <t>Subject to authorization and privacy policy, retained terminal Task Resources SHOULD remain discoverable during retention.  This permits a restarted client to recover outstanding or recently completed tasks.</t>
      <t>Executors MUST NOT expose task existence, target paths, status, or diagnostics to unauthorized clients through discovery.</t>
    </section>
    <section anchor="task-status-payload">
      <name>Task Status Payload</name>
      <t>Task-Status is encoded using CBOR <xref target="RFC8949"/> and described using CDDL <xref target="RFC8610"/>.  A response carrying a Task-Status representation MUST include Content-Format 60 (<tt>application/cbor</tt>).</t>
      <sourcecode type="cddl"><![CDATA[
Task-Status = {
  1 => task-state,          ; task state
  ? 2 => progress,          ; progress percentage
  ? 3 => uint,              ; estimated seconds to completion
  ? 4 => tstr,              ; diagnostic text
  ? 5 => [ + Sub-Result ]   ; per-resource-operation result
}

task-state = 0..5
progress = 0..100
coap-response-code = 0..255

Sub-Result = {
  1 => tstr,                ; target resource path
  2 => coap-response-code   ; CoAP response code
}
]]></sourcecode>
      <t>The state values are:</t>
      <table>
        <thead>
          <tr>
            <th align="right">Value</th>
            <th align="left">State</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">0</td>
            <td align="left">PENDING</td>
          </tr>
          <tr>
            <td align="right">1</td>
            <td align="left">ACTIVE</td>
          </tr>
          <tr>
            <td align="right">2</td>
            <td align="left">COMPLETED</td>
          </tr>
          <tr>
            <td align="right">3</td>
            <td align="left">FAILED</td>
          </tr>
          <tr>
            <td align="right">4</td>
            <td align="left">ABORTED</td>
          </tr>
          <tr>
            <td align="right">5</td>
            <td align="left">REJECTED</td>
          </tr>
        </tbody>
      </table>
      <t>The compound representation is used when a client needs complete state in one response. Task Status Subresources SHOULD return only the corresponding individual task-status value. A client MUST determine terminal status from state, not progress.</t>
      <t>A Task-Status representation containing a state or progress value outside the ranges defined above is malformed.  The response code in a Sub-Result is the 8-bit CoAP Code value.  An Executor MUST NOT generate an unassigned or reserved CoAP response code in a Sub-Result.</t>
    </section>
    <section anchor="workflow">
      <name>Workflow</name>
      <t>The scalar state payloads in the following exchanges are shown in CBOR diagnostic notation.  Responses carrying these payloads use Content-Format 60 (<tt>application/cbor</tt>).</t>
      <artwork><![CDATA[
Task Initiator                              Executor
     |                                         |
     | POST /operations                        |
     | Content-Format: 62                      |
     | Payload: four-part Task Request         |
     | 1=Resource CF; 2=Resource bytes;        |
     | 3=Task CF; 4=Task bytes                 |
     |---------------------------------------->|
     |                                         |
     | 2.01 Created                            |
     | Location-Path: "tasks"                  |
     | Location-Path: "89"                     |
     |<----------------------------------------|
     |                                         |
     | GET /tasks/89/state                     |
     | Observe: 0                              |
     |---------------------------------------->|
     |                                         |
     | 2.05 Content                            |
     | Content-Format: 60                      |
     | Payload: 1 (ACTIVE)                     |
     |<----------------------------------------|
     |                                         |
     | 2.05 Content                            |
     | Content-Format: 60                      |
     | Payload: 2 (COMPLETED)                  |
     |<----------------------------------------|
]]></artwork>
      <t>Failure, cancellation, or rejection produces FAILED, ABORTED, or REJECTED rather than relying on progress reaching 100.</t>
      <t>Cancellation, when needed, uses a separate interaction:</t>
      <artwork><![CDATA[
Task Initiator                              Executor
     |                                         |
     | POST /tasks/89/cancel                   |
     |---------------------------------------->|
     |                                         |
     | 2.04 Changed                            |
     |<----------------------------------------|
     |                                         |
     | GET /tasks/89/state                     |
     |---------------------------------------->|
     |                                         |
     | 2.05 Content                            |
     | Content-Format: 60                      |
     | Payload: 4 (ABORTED)                    |
     |<----------------------------------------|
]]></artwork>
    </section>
    <section anchor="error-handling">
      <name>Error Handling</name>
      <t>The Executor MUST reject a request before creating a Task Resource when:</t>
      <ul spacing="normal">
        <li>
          <t>the Task Request structure or an embedded representation is malformed;</t>
        </li>
        <li>
          <t>the requested task type, Resource Operation, or execution control is not supported;</t>
        </li>
        <li>
          <t>a target or operation is not allowed;</t>
        </li>
        <li>
          <t>authorization for any target fails;</t>
        </li>
        <li>
          <t>a profile-specific security or safety requirement is not satisfied.</t>
        </li>
      </ul>
      <t>4.15 (Unsupported Content-Format) is used when the media type is unsupported. 4.00 (Bad Request) is used when the multipart-core structure or an embedded representation is malformed. 4.22 (Unprocessable Entity) is used when a syntactically valid request asks for semantics that the Executor cannot provide, including an unsupported execution guarantee. Authorization errors use the code required by the security profile.  Insufficient runtime resources or excessive device load discovered during dynamic admission after Task Resource creation are reported using REJECTED.  Once a task becomes ACTIVE, inability to continue execution is reported using FAILED and optional diagnostics and Sub-Result fields.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Task Requests can change multiple resources and initiate long-running physical or administrative operations.  The Executor MUST authorize the complete request, including every target and requested execution control, before creating a Task Resource.</t>
      <t>Atomic execution can require buffering, rollback state, or durable storage. The Executor MUST reject atomic mode unless it can preserve all-or-nothing behavior across relevant failures. Profiles SHOULD define whether this includes power loss and reboot.</t>
      <t>Attackers can create expensive tasks to exhaust processing, storage, bandwidth, or energy.  Executors SHOULD apply admission control, authorization, quotas, request-size limits, task-count limits, and retention limits.</t>
      <t>Discovery and Task-Status can expose operational history, target paths, and diagnostics. Access MUST be protected according to application policy.</t>
      <t>Task Requests remain end-to-end application data.  A proxy can recognize Content-Format 62 as <tt>application/multipart-core</tt> without understanding the application semantics of the two embedded representations.  Such a proxy is not expected to inspect Task-Content or enforce execution controls. Deployments requiring confidentiality or integrity across intermediaries SHOULD use an appropriate end-to-end security mechanism.</t>
      <t>Cancellation can be safety-sensitive.  The Executor MUST authorize POST to the cancellation resource and MAY reject it when stopping the underlying operation would be unsafe.  DELETE authorization is separate and controls removal of the Task Resource, not cancellation of the underlying operation.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="task-request-content-format">
        <name>Task Request Content-Format</name>
        <t>This document uses the existing <tt>application/multipart-core</tt> CoAP Content-Format (ID 62) registered by <xref target="RFC8710"/>.  It requests no new media type or CoAP Content-Format identifier.</t>
      </section>
      <section anchor="interface-description-registration">
        <name>Interface Description Registration</name>
        <t>IANA is requested to register:</t>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t>core.task</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>CoAP Task Resource for an asynchronous or long-running operation.</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <t>An Executor can persist Task Resource state independently from the execution engine.  Persisting state, request identity, and final result allows recovery after reboot and reduces duplicate work after application retries.</t>
      <t>Profiles should define limits on Resource Operations, request size, execution modes, mutable task fields, and retention.  They should also define how a client correlates a retry with an existing task when duplication is unsafe.</t>
    </section>
    <section anchor="changes-from-draft-li-coap-task-resources-00">
      <name>Changes from draft-li-coap-task-resources-00</name>
      <ul spacing="normal">
        <li>
          <t>Removed the Batch-Control and Progress-Link CoAP Options.</t>
        </li>
        <li>
          <t>Made Location the sole mechanism for returning the Task Resource URI.</t>
        </li>
        <li>
          <t>Added a four-part Task Request payload identified using Content-Format.</t>
        </li>
        <li>
          <t>Encoded the four elements using the existing <tt>application/multipart-core</tt> Content-Format (ID 62), with one Resource representation and one Task representation.</t>
        </li>
        <li>
          <t>Moved atomic and sequential controls into Task content.</t>
        </li>
        <li>
          <t>Updated examples, error handling, proxy behavior, and security text.</t>
        </li>
        <li>
          <t>Separated cancellation from deletion: POST to the <tt>cancel</tt> subresource of a Task Resource requests cancellation, while DELETE removes the Task Resource.</t>
        </li>
        <li>
          <t>Distinguished pre-creation validation from post-creation dynamic admission and clarified the use of REJECTED.</t>
        </li>
        <li>
          <t>Constrained Task-Status state, progress, and CoAP response-code values in CDDL.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC6690">
        <front>
          <title>Constrained RESTful Environments (CoRE) Link Format</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
          <date month="August" year="2012"/>
          <abstract>
            <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6690"/>
        <seriesInfo name="DOI" value="10.17487/RFC6690"/>
      </reference>
      <reference anchor="RFC7252">
        <front>
          <title>The Constrained Application Protocol (CoAP)</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2014"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
            <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7252"/>
        <seriesInfo name="DOI" value="10.17487/RFC7252"/>
      </reference>
      <reference anchor="RFC7641">
        <front>
          <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7641"/>
        <seriesInfo name="DOI" value="10.17487/RFC7641"/>
      </reference>
      <reference anchor="RFC8132">
        <front>
          <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
          <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
          <date month="April" year="2017"/>
          <abstract>
            <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
            <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8132"/>
        <seriesInfo name="DOI" value="10.17487/RFC8132"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8610">
        <front>
          <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
          <author fullname="C. Vigano" initials="C." surname="Vigano"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2019"/>
          <abstract>
            <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8610"/>
        <seriesInfo name="DOI" value="10.17487/RFC8610"/>
      </reference>
      <reference anchor="RFC8710">
        <front>
          <title>Multipart Content-Format for the Constrained Application Protocol (CoAP)</title>
          <author fullname="T. Fossati" initials="T." surname="Fossati"/>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="February" year="2020"/>
          <abstract>
            <t>This memo defines application/multipart-core, an application-independent media type that can be used to combine representations of zero or more different media types (each with a Constrained Application Protocol (CoAP) Content-Format identifier) into a single representation, with minimal framing overhead.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8710"/>
        <seriesInfo name="DOI" value="10.17487/RFC8710"/>
      </reference>
      <reference anchor="RFC8949">
        <front>
          <title>Concise Binary Object Representation (CBOR)</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
          <date month="December" year="2020"/>
          <abstract>
            <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="94"/>
        <seriesInfo name="RFC" value="8949"/>
        <seriesInfo name="DOI" value="10.17487/RFC8949"/>
      </reference>
      <reference anchor="I-D.ietf-core-conditional-attributes">
        <front>
          <title>Conditional Query Parameters for CoAP Observe</title>
          <author fullname="Bill Silverajan" initials="B." surname="Silverajan">
            <organization>Tampere University</organization>
          </author>
          <author fullname="Michael Koster" initials="M." surname="Koster">
            <organization>Dogtiger Labs</organization>
          </author>
          <author fullname="Alan Soloway" initials="A." surname="Soloway">
            <organization>Qualcomm Technologies, Inc.</organization>
          </author>
          <date day="6" month="July" year="2026"/>
          <abstract>
            <t>   This specification defines Conditional Notification and Control Query
   Parameters compatible with CoAP Observe (RFC7641).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-13"/>
      </reference>
    </references>
    <?line 537?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank CoRE Working Group participants who reviewed earlier versions and encouraged the document to focus on the reusable task lifecycle, reuse existing discovery and observation mechanisms, and avoid unnecessary CoAP Options.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA809+3Pbxpm/86/YcWaudkLSkiw5tlw3lSW50Y1ftZVmcpnM
CQSWJGoQYLGAJMZ2//b7XvsCQFlxr7nz3KUUiN399tvv/VhOJpNRkzeFPlTH
1dEbdXrd6NLkVWnUvKrVkdmU6bKuyqo16jwx79Vbbaq2TrUZJbNZrS9lXOe7
rErLZAWTZnUybyZFPkmrZD1p4K1Jbd+a7OyO0qTRi6reHCrTZCPTzla5weWb
zRpGn52ePx/l6/pQNXVrmr2dncc7e6Ok1smh+vHsfHRV1e8XddWuEYq3p6P3
egOPssORUhOCiz7gqsquSk+ScFvVWtdJA2vSV0U+1+kmLfRoZJqkzP47KapS
EwDwKGmbZVUfjiaqrgBnMCIvzaF6MVUvcviD9/wiL39dan5S1YtD9V/Lqlws
2qRM21K9SGYVrAd7hq9NU2vd4Dxp3gASnun873m5gL9rvQCQ6Jsqg0l3d2Dz
+/RnWzaIsONlXibwYL1EAOGDXiV5cQg7KH7986+LtEhmU52107TsgvvTVB23
Ht6fADp5QOCeGwBh2SbqhzK/1LUByPqgehADoD2oj24FatrmG1j8z42saOFV
qq3zQ7VsmvXh/ftXV1dTeXNa6ub+aFRW9QqO7JLmevv8eG9397F8fPjw8Y58
/HbvYM9+fLi/Kx8f7T7Ycx+/3bcfH+7aYY++9R8f79O8Z5OTaa6bOVBxreE/
ZZYjwSTFJGmaOp+1jTZAFBOgrBngKUmb0ehlUm48bQGZlYCPEr/NS52pTF/m
wAMqTcqyauCr1brQjVZXeQPIUolClBSauavW/2i1aRTQIxLyGubRSl+ny6Rc
6KkCrk1wuIHjTYs202qe16sr4BM87yYpCoJhrLI8WZSVafJUresqBWzDbGNc
XNgO1oQ/kyKf1TIEl1wvNyaHpwo21tLz6Wh0vsyNAj5vV7psYDtz2JYBuHEy
2KvjI7UCoihImtR6DevB67CMMm26DPGTwP9lGXxvkpnddyxVYKNnjTJrnebz
HNYivk5BGDCksNEGVytzYC7aSJabtAIK3uCeylQ7PDS6XuV4fDymBsSXfrv6
Ev5qYbu1XlWXScHrJoWpgm3OAabJOqkbdzjrZFNUScb7Has8wzkB0EzNNqpZ
4oHlhrZOezsGIQdvTJ4TLavXawYA8ZQmdb3BF63QCvHUVAsNs9VEKYwDfa3T
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
a6g3HfHwP1aGKZzlcgAA

-->

</rfc>
