Name the optional key that settles an ambiguous match, and how the ask shows the accounts (ADR 0317)
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed

This commit is contained in:
jochen
2026-10-12 12:43:23 +02:00
parent 091ad0aa68
commit ef452a7219
@@ -117,7 +117,11 @@ profile in use:
|---|---|
| once, in an account that is not Owl's | adopts it: takes its existing keys under its ownership, records them per node in its own directory, and places the declared values over them, which changes only those that differ (the apply names each by preference name) |
| nowhere | creates the account under its own `mesh_<name>` keys, as above |
| twice or more, or in Owl's account | refuses that account, writes nothing for it, and says the remedy: remove the duplicate in Betterbird, or name in that node's layer the account key to adopt |
| twice or more, or in Owl's account | refuses that account, writes nothing for it, and says the remedy: remove the duplicate in Betterbird, or give the account's optional `key` in that node's layer |
The optional `key` is the one field ADR 0317 adds to an entry of `accounts`: the account key to adopt on that
node, used only to settle an ambiguous match, and refused unless that key is in the list, has the declared
address and is not Owl's.
An adopted account keeps its mail, its folder, filter and cache preferences, and its kept sign-in: the module
writes only the fields the setting names. When it leaves the setting, its keys are released: dropped from the
@@ -126,8 +130,10 @@ removed from the list.
**The value is derived, not retyped.** The tool `betterbird_accounts` reads the accounts of the profile in use
and, with `propose`, builds the `accounts` value from every account but Owl's, without any credential, and
proposes it for the operator's Approve (ADR 0277). Its answer to the caller gives counts and kinds only; the
addresses and hosts reach the operator in the ask that shows the change.
proposes it for the operator's Approve (ADR 0277). Its answer to the caller gives counts and kinds only. The ask
shows the accounts in shape, with ‹address› in place of each address and host, beside the layer's fingerprint;
the operator reads the whole value at their own desk by the proposal's id and checks the fingerprint before
approving.
**The order.** The value is derived on a node whose profile already holds the accounts and set for every
desktop node. A node that holds the same accounts adopts them by address; a fresh node creates them, each
@@ -180,7 +186,7 @@ module needs.
their order, and is refused while Betterbird runs; the count of declared accounts without a kept sign-in is
taken from the login store's server names, which are kept in the clear, without decrypting anything.
- **The adoption's tests, on profile fixtures:** an address held once is adopted under its existing keys with the
list unchanged; an absent one is created; a duplicate or Owl's is refused with the remedy; a release leaves the
list unchanged; an absent one is created; a duplicate or Owl's is refused with the remedy, and a `key` settles a duplicate; a release leaves the
profile as it was; `betterbird_accounts` builds a value without Owl's account or a credential and answers counts
only.
- **The builder's tests:** an upstream file whose download does not match its sha256 fails the build.