Changelog
This file records unpublished draft changes and changes between protocol snapshots.
Unpublished draft: canonical inline messages
- Model-visible content uses ordered canonical messages (
id,role,parts), with rolessystem,developer,user,assistant, ortool. - Parts are
textorattachment. Ordinary text is inline event JSON; structured content is application-serialized text, not a JSON part or uploaded prompt JSON. Uploads carry only immutable non-text, non-JSON media attachments. - Content selection applies to inline text as well as attachments. User messages, MCP elicitation, progress, summaries, and file snapshots follow these rules.
- Message-list and text-part-list replacement replaces the entire list; merge appends in order without deduplication. Actual object targets retain shallow merge. Atomic acceptance and serial effective-value chaining remain required.
- Tool result
modify(output)targets canonicaltool.after.items, with whole-list replacement and ordered append merge, not an undeclared native JSON result field. - Elicitation result
modify(content)retains the structured MCP answer object and shallow merge, unlike outbound message content lists. Contextual validation rejects cross-boundary value types. Elicitation request params do not gain modification authority.
Unpublished draft: content receipts and shared events
- Event content references now contain only
ref. The HTTP 201 upload response is a separateContentUploadReceiptcontainingref,size, andsha256. - Ready body-selected attachment parts no longer repeat
sizeorsha256; both fields are explicitly forbidden there and inside content references. Metadata, omitted, and body-gap descriptors retain their optional metadata disclosure. - Interception and observation use the shared
Eventschema. Intercept requests retain their existing event-type subset as a request-level constraint.
Breaking migration
This changes the draft wire contract and generated SDK APIs. Upgrade senders and
receivers together. Keep {ref, size, sha256} only as the upload receipt; after
checking it against the uploaded bytes, publish {ref} in event and effect
references. Remove outer size and sha256 from ready attachment parts too.
Do not remove metadata from metadata-only or unavailable-body disclosures.
Receivers resolve references in the authenticated scope and use their stored
metadata; legacy size/hash claims are rejected, not trusted or silently ignored.
Use the shared generated Event type for both request event fields. Intercept
requests still reject known observation-only event kinds. Moving an event into
an intercept request does not make that event interceptable.
Date-versioning model
- protocol releases, frozen directory names, release tags, public schema
$idnamespaces, snapshot metadata, and on-wireprotocolVersionnow use oneYYYY-MM-DDpublication date; - the mutable working snapshot uses the literal
draftin all four artifact roots, metadata, schema IDs and constants, examples, fixtures, and on the wire until release preparation assigns a date; - release preparation retargets and validates all four copied trees; and
- frozen validation uses the newest reachable date release tag as its immutable full-tree baseline, while repositories with no such tag remain able to validate a first release.