docs(adr): shared spaces, decided further, in six steps
ADR 0044 records the answers to its open questions: a shared studyset passes on when its owner leaves or deletes their account (D11); an agent's token lapses after 90 days unused (D12); an invitation by handle waits for someone who never used the app (D13); and sharing copies the studyset under new IDs into the shared space (D14), since the sync engine's delete is soft and a row's ID can't be inserted into another space. Its Steps section orders the work, starting with the community's confirmation (D8, D9). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
3ca4b4308d
commit
f745516f36
1 changed files with 39 additions and 14 deletions
|
|
@ -2,8 +2,9 @@
|
||||||
|
|
||||||
- **Status:** decided 10 Nov 2026 by the developer: D8 is their own request, D9 and D10
|
- **Status:** decided 10 Nov 2026 by the developer: D8 is their own request, D9 and D10
|
||||||
their choices over the agent's recommendations (all ticked at first; agents editing
|
their choices over the agent's recommendations (all ticked at first; agents editing
|
||||||
directly), D1 to D7 the agent's recommendations, which they chose. Not built yet; the
|
directly), D1 to D7 the agent's recommendations, which they chose; D11 to D13 the
|
||||||
open questions below come first.
|
agent's recommendations, which they chose on 11 Nov 2026, D14 too. Not built yet;
|
||||||
|
the steps below.
|
||||||
- **Builds on:** ADR 0005 (publishing, reports and suggestions), ADR 0014 (the module),
|
- **Builds on:** ADR 0005 (publishing, reports and suggestions), ADR 0014 (the module),
|
||||||
ADR 0016 (one account across an instance), ADR 0017 (key pairs), ADR 0019 (private
|
ADR 0016 (one account across an instance), ADR 0017 (key pairs), ADR 0019 (private
|
||||||
studysets), ADR 0021 (operators and assistants).
|
studysets), ADR 0021 (operators and assistants).
|
||||||
|
|
@ -63,20 +64,44 @@ member reads everything in the space.
|
||||||
decisions, accepted suggestions applied by their item) are the start: they become
|
decisions, accepted suggestions applied by their item) are the start: they become
|
||||||
suggestions within a shared space too, not only on published releases.
|
suggestions within a shared space too, not only on published releases.
|
||||||
|
|
||||||
|
- **D11.** **A shared studyset passes on.** Leaving, the Owner picks the next Owner
|
||||||
|
first. Deleting their account, ownership passes by itself to the Editor who joined
|
||||||
|
first, else to the Viewer who joined first; only with no other member does the
|
||||||
|
studyset go with them.
|
||||||
|
- **D12.** **An agent's token lapses after 90 days unused;** while used it has no fixed
|
||||||
|
end, the owner revokes it any time, and their Profile shows when it was last used.
|
||||||
|
- **D13.** **An invitation by @handle waits** for someone who has an account on the
|
||||||
|
instance's register but has never used the app: they find it in their Inbox the first
|
||||||
|
time they sign in to it, and the inviter sees them as invited until then.
|
||||||
|
|
||||||
|
- **D14.** **Sharing copies the studyset under new IDs** into the shared space, rewrites
|
||||||
|
what names its rows (reviews, tags, the learning path, files) and deletes the old ones,
|
||||||
|
as ADR 0019's rewrites do; the fork stays as it is. Found 11 Nov 2026: the engine's
|
||||||
|
delete is soft (`insteadOfDelete`: the domain row stays, hidden by a tombstone in its
|
||||||
|
space's `crdt_data_rows`), and a synced table's primary key is the row's ID alone, so
|
||||||
|
the same ID can't be inserted into another space; teaching the engine to move a row
|
||||||
|
was the other way, set aside as a deeper change to its merge, kept on every rebase.
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. **Share with the community's confirmation** (D8, D9), needing nothing else here.
|
||||||
|
2. **Shared spaces in halkyon_base** (D1, D2, D11, D13): the module's tables (a shared
|
||||||
|
space, its members and roles, its Owner), its endpoints with their denial tests,
|
||||||
|
the engine's grants kept in step, the hand-on as an account is deleted.
|
||||||
|
3. **Keys** (D3): a private studyset's key wrapped to each member's key pair.
|
||||||
|
4. **Learn shares a studyset** (D14): the copy, *Manage collaborators* (invite by
|
||||||
|
@handle, the members, their roles, leaving), each member's own reviews.
|
||||||
|
5. **Invitations by email and by link** (D4, D5), the Inbox.
|
||||||
|
6. **Agents** (D6, D7, D10, D12).
|
||||||
|
|
||||||
## Open questions, before building
|
## Open questions, before building
|
||||||
|
|
||||||
- **Moving rows between spaces.** A studyset's rows are in its owner's personal space;
|
- **Moving rows between spaces.** Decided: D14.
|
||||||
sharing moves them into a new shared space. Row IDs are unique across a table and the
|
|
||||||
engine keeps a deleted row's tombstone until its space goes, so a row can't simply be
|
|
||||||
deleted in one space and inserted in another under the same ID. Either the engine
|
|
||||||
learns to move a row between spaces (a change to our fork), or sharing copies the tree
|
|
||||||
under new IDs and rewrites what names them (cards' reviews, tags, the learning path),
|
|
||||||
as ADR 0019's rewrites do with keys. To try against the fork first.
|
|
||||||
- **Whose reviews.** A Viewer's or Editor's schedule for a shared card stays in their own
|
- **Whose reviews.** A Viewer's or Editor's schedule for a shared card stays in their own
|
||||||
space, keyed by the card's ID; the card's own review rows today assume one learner.
|
space, keyed by the card's ID; the card's own review rows today assume one learner.
|
||||||
- **Handing on and leaving.** An Owner leaving must hand the studyset on first, or it
|
- **Handing on and leaving.** Decided: D11. To build: the account's deletion hands the
|
||||||
goes with them, as their account's deletion deletes their spaces.
|
shared spaces it owns on before it deletes the person's own.
|
||||||
- **Members across services.** On an instance with a register (ADR 0016), handles are
|
- **Members across services.** Decided: D13. A member of a Learn studyset needs no Todo
|
||||||
the register's; a member of a Learn studyset needs no Todo account and the reverse.
|
account, and the reverse.
|
||||||
- **The agent's token:** made and revoked in the owner's Profile, scoped to the agent's
|
- **The agent's token:** made and revoked in the owner's Profile, scoped to the agent's
|
||||||
account, never shown again after making; whether it expires.
|
account, never shown again after making; its lapse decided: D12.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue