Repository navigation
Sharing and Synchronization
Pages, sessions, relationships and party members can be stored private (only the author's devices) or shared with the members. Character-sheet sections and images are shared-only, read-only projections. A relationship can be shared only if the pages it connects are shared too.
- It sends each saved change with a unique operation ID and the revision it was based on. Retries with the same ID are acknowledged instead of applied twice.
- It reads everything that changed since its last position (a cursor), including tombstones for deletions and withdrawals. If its cursor is too old, it lists the campaign again.
- While connected, it keeps a notification stream open; each hint only says "something changed", never what.
If two devices change the same item, the second write is refused with the current server version. The app shows both versions; the user chooses. The server never merges text.
Devices keep working offline; their changes wait locally and are sent when the server answers again. Operation IDs older than 30 days are no longer acknowledged; the device then re-evaluates the item from its current state.
Bounded page sizes, payload sizes, image sizes (8 MiB per original for sharing) and
storage quotas protect the server. See docs/API.md for exact values.
The desktop's M31 clue board sends a clue only after its author selects a
private copy or shares that item. Its source page and session IDs must already
be present for the same audience. The server validates the typed payload and
keeps the item attributed to its author. Revoking a referenced page or session
withdraws a publicly visible clue; it does not change the author's local note
or create a factual relationship.