Undelete decisions before implementation: restore data, kept accounts, the restore API (UD-4, UD-15a, UD-17)

This commit is contained in:
2026-09-18 19:49:34 -07:00
parent ec4d668bc4
commit a1ce14b76b
+19
View File
@@ -100,6 +100,12 @@ Task type `RestoreArchivedItem`, carrying the `accountId`, the
- **UD-4.** The copy is whole: for email, the full message as stored, with its
mailboxes and keywords recorded so restore can put them back (UD-8). The
archived record shows only the summary fields above.
**Decision** (2026-09-18) on where: what restore needs beyond the kept
copy (an email's mailboxes and keywords, a file's folder and name, an
event's calendar, a contact's address book) is kept beside the unchanged
`x:ArchivedItem` record, in the fork's own subspace (`_`, as masked email),
keyed by archived item id. Items archived before the fork have none, and
restore as upstream did: email to the Inbox.
- **UD-5.** `archivedUntil` is `archivedAt` plus the retention in force when
the item was archived. Changing the setting later doesn't move existing
deadlines. **Decision**: a shorter setting must never silently destroy what
@@ -168,6 +174,11 @@ Task type `RestoreArchivedItem`, carrying the `accountId`, the
the whole account (mail, files, calendars, contacts, scripts, settings) for
that period. The account can't sign in or receive mail while deleted.
Mail to it is refused as for an unknown address.
- **UD-15a.** **Decision** (2026-09-18) on how it's kept: the `x:Account`
record is removed as upstream removes it, so sign-in and delivery fail as
they already do, and a copy of it is kept in the fork's own subspace until
the deadline, with its id. The data waits for upstream's `DestroyAccount`
task, as it does today.
- **UD-16.** Its name and addresses stay reserved while it's kept, so nobody
else can take them and receive its mail. **Decision**, a fix: upstream
doesn't reserve them. A new account with the deleted one's name was created
@@ -191,6 +202,14 @@ Task type `RestoreArchivedItem`, carrying the `accountId`, the
and `archivedAt` ranges, and text over the summary fields, so ihasmail can
offer "deleted in the last week" and search. Kept deleted accounts listed
and restored through `x:Account` (shape settled with UD-17 once observed).
**Decision** (2026-09-18) on the shape: a method pair in the fork's
namespace, under `urn:inbuxa:jmap`: `inbuxa:DeletedAccount/get` lists kept
accounts (`id`, `name`, `addresses`, `memberTenantId`, `deletedAt`,
`keptUntil`), and `inbuxa:DeletedAccount/set` restores one (update
`{"restore": true, "password": "..."}`, which writes the record back with
the same id and cancels its `DestroyAccount` task) or destroys it for good
(destroy, which runs the task now). Server administrators see every kept
account; tenant administrators their own tenant's (MT-1).
## ihasmail