Mission Update & Completion
-11 gave the mission its own URL. Both of the agent's post-approval operations happen at POST {mission_endpoint}/{mission_s256}, discriminated by an `action` member: `update` records a change in the work, and `completion` proposes that the mission is finished. Completion used to live on the interaction endpoint; it moved because it is a lifecycle transition, not transport — creation and completion have the same shape, the agent proposes and the person decides.
action is REQUIRED at a mission's own URL. A PS MUST reject a missing or unrecognized action with 400 — the same discriminator the pending route uses.
An update does not change the mission. The blob is immutable, mission_s256 is unchanged, and every token carrying it stays valid — which is the point: the agent keeps working while the record catches up.
What it changes is the context the PS evaluates against. From acceptance onward the mission's meaning is the blob plus its accepted updates, and an audit MUST read both.
The PS returns the update's own s256 — the digest of the bytes it persisted — so the sequence of accepted updates is verifiable, not merely stored.
The PS MAY instead return 202 while the person reviews the update. Both narrowing and broadening can warrant that.
Step 1: POST /mission/{s256} {action: update} → 200 + update digest
Description (Markdown)
# Analyze Q2 Customer Feedback Read customer feedback records and produce a summary report with sentiment analysis and key themes.
Blob Members
The blob is what the digest covers. approver lives here and nowhere else — no token carries it.
Mission Identifier
eyJhcHByb3ZlciI6Imh0dHBzOi8vcHMuZXhhbXBsZSIsImFnZW50IjoiYWF1dGg6bG9jYWxAYWdlbnQuZXhhbXBsZSIsImFwcHJvdmVkX2F0IjoiMjAyNi0wNC0xNFQxNzoxNDo1NFoiLCJleHBpcmVzX2F0IjoiMjAyNi0wNS0xNFQxNzoxNDo1NFoiLCJkZXNjcmlwdGlvbiI6IiMgQW5hbHl6ZSBRMiBDdXN0b21lciBGZWVkYmFja1xuXG5SZWFkIGN1c3RvbWVyIGZlZWRiYWNrIHJlY29yZHMgYW5kIHByb2R1Y2UgYSBzdW1tYXJ5IHJlcG9ydCB3aXRoIHNlbnRpbWVudCBhbmFseXNpcyBhbmQga2V5IHRoZW1lcy4iLCJhcHByb3ZlZF90b29scyI6W3sibmFtZSI6IkZlZWRiYWNrUmVhZGVyIiwiZGVzY3JpcHRpb24iOiJSZWFkIGN1c3RvbWVyIGZlZWRiYWNrIHJlY29yZHMifSx7Im5hbWUiOiJSZXBvcnRXcml0ZXIiLCJkZXNjcmlwdGlvbiI6IldyaXRlIHRoZSBzdW1tYXJ5IHJlcG9ydCB0byB0aGUgc2hhcmVkIGRyaXZlIn1dLCJhcHByb3ZlZF9yZXNvdXJjZXMiOlsiaHR0cHM6Ly9hcGkuZXhhbXBsZSJdfQ
7SGTFsuKCcpYJwGRkVBi8vOc1Ssm7NdgnVaAruK87Rg
s256 is not a blob member. It is BASE64URL(SHA-256()) of the bytes mission decodes to, returned alongside it so the agent can verify the digest covers an unambiguous byte sequence. It travels as the mission_s256 claim of person, resource and auth tokens.
Approved Tools
Read customer feedback records
Write the summary report to the shared drive
PS Capabilities
ps.example
application/json
sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQ…
sig=("@method" "@authority" "@path" "content-type" "content-digest" "signature-k…
sig=:U2lnbmF0dXJlQnl0ZXNFeGFtcGxlVmFsdWVGb3JEZW1vbnN0cmF0aW9uUHVycG9zZXNPbmx5:
{
"action": "update",
"description": "# Scope of the feedback set changed\n\nThe April export was incomplete; 1,247 records are available rather than the ~900 assumed at approval. Continuing with the larger set — same tools, same report."
}Covered Components
Signature Base
Signature-Key Header
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQrand0In0…"
Signature-Input Header
sig=("@method" "@authority" "@path" "content-type" "content-digest" "signature-key");created=1700000000;alg="ed25519"
{"alg":"EdDSA","kid":"agent-key-1","typ"?:"aa-agent+jwt"}{"iss"?:"https://agent.example","dwk"?:"aauth-agent.json","sub"?:"aauth:local@agent.example","jti"?:"a6ae301d-1dc7-4b75-8f8b-5612197664a7","cnf"?:{"jwk"?:},"ps"?:"https://ps.example","iat"?:1776222894,"exp"?:1776226494}