Collection and snapshot contracts
Bounded pilot. Collections group native assets and account-owned source selections within a project. They store only IDs; no copy, conversion, authority transfer or sharing permission results. No source metadata from another account is exposed. Members resolve the existing source follow/pin policy or current native asset. A collection is not an exact snapshot, a scene or a multi-source transaction.
Browser POST /api/collections/{list,options,save,delete} requires session, Origin
and CSRF plus current project access. It requires no administrator role. Collections
are keyed by project/account, never implicitly shared. Automation and desktop
collection routes are absent. project_id is required for every call. Save takes
id (null for create), name, description, members (native:generation (0 at create). IDs must occur in the caller’s current catalogue.
Existing save/delete must match generation or return 409. Unknown/foreign collection
and denied project return 404. Invalid input is 400. Delete requires ID and generation
and removes grouping only. List returns currently visible IDs and unavailable count;
saving the visible list explicitly drops unavailable references. Limits: 100 groups
per account/project, 200 distinct IDs/group, 160-character name, 2000 description.
Retry a failed edit after reloading. A lost create response requires checking the
list before retrying (creation is not idempotent). Existing-source access checks
still occur when reading payloads. The gateway journal backup includes collections.
Optional review
Section titled “Optional review”Release capture accepts review_required (strict boolean, defaults true for older
clients). False starts in snapshot; true preserves candidate. Only project
administrators with their own source access can capture/options/request-review.
Retention AND redistribution policy remain mandatory, even for personal snapshots.
Current project membership, frozen audience and current policy govern every read.
snapshot -- request-review --> candidate -- approve --> approved | | | +-----------------------------+-------------------- withdraw --> withdrawndownload-snapshot (read scope) only accepts snapshot state. Anyone in its permitted
audience can immediately download. request-review (write scope and administration)
takes ID and manifest_digest; it records actor/time, preserves the immutable manifest
and pauses downloads until approval. Same request retry while candidate is idempotent;
retry after approval/withdrawal is 409. Existing downloads cannot be recalled.
download still requires approved. Both operations reuse existing release automation
read/write scopes, project matching and recipient checks; desktop release routes
remain absent. Neither path publishes upstream or starts subscriber delivery.
Snapshot ZIP uses filename snapshot-
