docs: record human decisions on Linux keyring policy, retention defaults, review gate

This commit is contained in:
Bernd Rodler
2026-08-04 22:19:23 +02:00
parent 46fc221f9e
commit 2ff4b7847e
+23 -20
View File
@@ -1269,28 +1269,31 @@ stage.
primary keys, the purge ordering (key before file), lazy materialisation, and the F1F49 failure primary keys, the purge ordering (key before file), lazy materialisation, and the F1F49 failure
table. table.
### Open questions for the human ### Open questions for the human — resolved 2026-08-04
1. **If Stage A item 6 shows an unsigned build loses its Keychain item across updates**, does the 1. **If Stage A item 6 shows an unsigned build loses its Keychain item across updates** — left open
encrypted store ship anyway (re-bootstrapping after each update — bandwidth, not data loss), or deliberately; this is an empirical Stage A outcome, not something to decide blind. Resolve once
wait on VNCprodbuild step 9 (Apple Developer ID, already a human-owned purchase)? This is the one Stage A actually runs and reports what happens.
Stage A outcome that could change the plan rather than just an implementation detail. 2. **Linux with no keyring (`basic_text`, §6.3.1 / E3): refuse outright.** Decided — matches this
2. **Linux with no keyring (`basic_text`, §6.3.1 / E3):** refuse outright, or offer an explicit design's own "cheapest wrong answer" philosophy (§ discussion of `safeStorage`'s silent-downgrade
opt-in that records the downgrade? Refusing is the safe default and what this design specifies; landmine): an honest failure beats a store that looks encrypted but isn't. No opt-in path in v1.
an opt-in is defensible for a single-user machine with full-disk encryption. Affects a real 3. **Concrete retention defaults: same as the mobile design's defaults.** Decided —
segment — AppImage users on minimal window managers. `offlineEnvelopeDays: 365`, `offlineBodyDays: 30`, MB cap on bodies matching mobile's default
3. **Concrete retention defaults** — `offlineEnvelopeDays` ≫ `offlineBodyDays` and the MB cap on (§ mobile M§2.1's shipped numbers). Consistent behavior across platforms for v1; revisit only if
bodies only are settled (M§2.1); the *numbers* are not recorded anywhere. Two constants; the desktop usage patterns actually show it's too narrow — don't widen speculatively.
design is value-independent. Same open question M ends on. 4. **§2.5 single-socket follow-up: not scheduled for v1.** Stays a gated follow-up as designed —
4. **Does the follow-up in §2.5 (collapse to one socket per account by having the renderer listen to don't collapse to one connection until the engine's own connection is proven in production.
the local server instead of Stalwart) get scheduled?** It would retire the renderer's WS 5. **Stage A as its own PR ahead of the offline engine: not decided separately** — proceed with the
circuit-breaker path as dead code and halve the connection count, but it makes a working implementation sequence as designed (Stage A is the first step regardless of PR boundaries); the
notification path depend on the new one, so it is deliberately not in v1. human can split the PR at merge time if desired, this doesn't block starting work.
5. **Should this land as its own PR ahead of the offline engine?** Stage A is pure verification and
§10.3's `app.requestSingleInstanceLock()` (E7) plus §8.4's cooperative quit are improvements to
the shell on their own merits, independent of any offline store.
None of these blocks starting Stage A. Also decided: **this design goes through an independent adversarial review next**, matching the
mobile engine's process (design → review → implementation), before any implementation code is
written — same reasoning as before: this is the same class of highest-stakes, hardest-to-undo
component (a persistent, encrypted, multi-account local store), and the review process caught real
critical bugs in the mobile design that this document's own author-side verification did not.
None of these blocks starting the review.
--- ---