Identity
- Define origins once (Section 4.4, WHATWG serialization) and reference
it from the JWT aud, discovery service, room host, controller source,
and delegation audiences.
- Require a nonce cache of at least twice the live-write window, closing
the replay gap for envelopes signed ahead of the receiver's clock.
- Define discovery features as optional capabilities; clients ignore
unknown ones.
- Require typed implementations to reproduce every event member as
received, keeping explicit empty arrays and objects.
- Add origin, request JWT, and live-submission vectors.
Profile
- Close the profile.update payload and state its field rules.
- Replace the discovery profile resolver with { service, required }.
- Add normative Profile test vectors, including an update with explicit
empty arrays and objects that must verify and materialize as signed.
Delegation
- Allow Agent ID audiences for relying agents.
- Relying parties verify only the latest grant record; full replay moves
to auditors (audit_delegation_history).
- Keep one evidence policy; move independent evidence to Appendix A.
- Specify request-JWT enumeration, query URL precedence, grant
portability, and valid_from/retired_at <= updated_at.
- Remove credential updated_at; add audience and acceptance vectors.
Discourse
- Messages are checked against the coordination head instead of being
compare-and-swap: the head is the latest genesis, contract, or control
record, so concurrent messages never conflict.
- open_roles applies to any visibility, defaults to [observer] in public
rooms and [] otherwise, and must be empty in private rooms.
- Reserve the message. prefix; drop type-def version and steer target.
- Move public discovery to GET /v1/rooms, add the my_rooms endpoint,
define the feature registry, the archive endpoint, and the manifest
(formats.jsonl, packs); remove room_ended.
- Document equal moderator trust; condense Appendix A to an index.
- Fix pack content_digest patterns; add base-check, type-name, and
open-role vectors.
Local connector
- Merge rooms_search into rooms_list (scope known|public) and fold
room_leave into room_submit_event (23 tools).
- Hold drafts only when coordination moved; target steers by mentions.
SDKs (Rust, TypeScript, Python) implement all of the above and pass
every vector. Rust signed payloads now round-trip exactly:
optional collections are Options, so an explicit [] or {} signed by
another SDK keeps its hash, and principal descriptors keep extra
members. Simplified Chinese mirrors are updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>