specs/rooms/create/v0_2/payload library

Classes

Payload
An owner registers a data room with a host. 0.2 adds recordRetention: how long the room keeps its records by age, stated at creation so that no record is ever removed under a rule its readers could not have read.
RecordRetention
How long a room keeps its records, by age: the room's record retention. Records older than it states become eligible to be removed by rooms/records/prune; nothing is removed until a holder of admin asks for a prune, and nothing a prune removes can be brought back. Not retentionPolicy, and not retentionDays. Both names are taken in this family and mean other things. retentionPolicy (RetentionPolicy) is whether a room's key chain lets a member read epochs from before they joined, fixed at creation because key material either exists for an epoch or it does not. retentionDays (rooms/create) is how long a host keeps a whole room after it lapses unrenewed. This is a third question — how long the room keeps its records while it is live — and unlike the first it is a decision a room revisits, so it is changeable (rooms/records/retention/set). A name sharing either's would invite a reader to apply one's rules to the other. Age is the host's to measure, so age is updatedAt. On the sealed tiers a host can read nothing of a record but its key, version, status, pinning and when it last changed, so a policy the host applies can only be stated in those terms. That is also why it cannot use a record's own validUntil, which is sealed: expiry is a reader's rule, retention a host's. A curation is a change, so it restarts a record's age — a retraction starts a tombstone's. Absent, or {}, means no record is ever eligible by age, and that is the reading a host MUST apply whenever it cannot read a policy: removing data under a rule nobody stated is the failure this member exists to prevent. Every member can read the policy in force (rooms/info), so a record is never removed under a rule its readers could not have known.
Response
Success response to rooms/create. Type https://trusttasks.org/spec/rooms/create/0.2#response.

Extension Types

AnchorCadence
How often this room intends to write an EpochAnchor. A statement of intent, not a schedule anything enforces — nothing in this family can make an owner anchor. It is worth stating anyway, and the reason is the interesting part: it makes silence legible. A room that says renewal and has not anchored in ten epochs is telling a member something, and a member who did not know what to expect could not have noticed. A room that says never is telling them not to wait for one. - never — no anchor is intended. Honest, and cheap: anchoring costs a witnessed update and a rotation of the room DID's update key each time. - renewal — one anchor per epoch change, which is the cadence §9's lifecycle already moves at. - manual — the owner anchors when they decide to. A member should draw no freshness expectation from this at all, which is exactly what it is for: it is the honest answer where there is no rule. Deliberately not a duration. A room that promised "daily" would be making a claim its owner's availability cannot keep, and a member comparing against a clock would read an owner's holiday as a host's misbehaviour.
RetentionPolicy
Whether a room keeps its history readable across a membership change, fixed at creation and immutable thereafter — like Visibility, and for the same reason: the rungs of an epoch key chain either exist for an epoch or they do not, and no later change of mind can seal key material that was never sealed or unseal what was already severed. chained: each advance produces an EpochLink, so every member reads the room's whole retained history however long they have been in it — what a library wants, at the cost of post-compromise security for record content, since a compromised current key then reaches every retained epoch. fromJoin: no rungs are produced, so a member reads only from the epoch their group state is at — what a stream wants, and what a room under a strict forward-secrecy obligation wants, at the cost that a joining member finds an empty-looking room and nobody can reread a record once their group state has moved past the epoch it was sealed under. Absent means chained; see the prose on why the absent case is the readable one.
Visibility
How much of a room its host can see, fixed at creation and immutable thereafter. open: records are cleartext, searchable and fully audited. attributed: record content is sealed, and the host still learns which member acted. private: content is sealed and membership is presented in zero knowledge, so the host verifies that a member acted without learning which. Immutable because a downgrade cannot un-see cleartext and an upgrade would protect only what came after while presenting as though it protected everything.

Constants

deprecation → const String?
Why this specification version is deprecated, or null when it is current.
extendsVersion → const String?
The MAJOR.MINOR this version declares it extends (SPEC §5.2, "Declared extension"), or null when it declares none.
payloadSchemaJson → const String
This specification's payload schema, as JSON text.
responsePayloadSchemaJson → const String
As payloadSchemaJson, for the success-response variant.
responseSpec → const SpecPolicy
The SPEC §7.2 policy for the success-response variant.
responseTypeUri → const String
The success-response form of typeUri (SPEC §4.4.1).
spec → const SpecPolicy
The SPEC §7.2 policy for the request variant, taken from this specification's front matter.
typeUri → const String
The Trust Task type URI this library's Payload is carried under.

Typedefs

Ext = Map<String, dynamic>
Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.