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
|
||||
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
|
||||
open questions below come first.
|
||||
directly), D1 to D7 the agent's recommendations, which they chose; D11 to D13 the
|
||||
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),
|
||||
ADR 0016 (one account across an instance), ADR 0017 (key pairs), ADR 0019 (private
|
||||
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
|
||||
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
|
||||
|
||||
- **Moving rows between spaces.** A studyset's rows are in its owner's personal space;
|
||||
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.
|
||||
- **Moving rows between spaces.** Decided: D14.
|
||||
- **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.
|
||||
- **Handing on and leaving.** An Owner leaving must hand the studyset on first, or it
|
||||
goes with them, as their account's deletion deletes their spaces.
|
||||
- **Members across services.** On an instance with a register (ADR 0016), handles are
|
||||
the register's; a member of a Learn studyset needs no Todo account and the reverse.
|
||||
- **Handing on and leaving.** Decided: D11. To build: the account's deletion hands the
|
||||
shared spaces it owns on before it deletes the person's own.
|
||||
- **Members across services.** Decided: D13. A member of a Learn studyset needs no Todo
|
||||
account, and the reverse.
|
||||
- **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