P1: the contact list can live only on your devices

Session.roster() reads the vault once the list is off-server, mirrors
the relay's copy into the vault while one exists, and falls back to the
sealed copy when the network fails. The roster rides the history backup.
Settings gains the one-way door with the costs stated where the button
is: presence goes dark, and a new device restores contacts from the
encrypted backup rather than the server.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Paul Hitt
2026-08-29 06:33:22 -04:00
co-authored by Claude Opus 4.8
parent 2a5970309e
commit 62356139dc
6 changed files with 200 additions and 9 deletions
@@ -104,6 +104,11 @@ class MessengerApi(
delete("buddies/$userId")
}
/** P1's one-way door: delete this account's contact rows, all of them. */
fun forgetRoster() {
delete("buddies")
}
fun setStatus(status: String) {
post("status", JSONObject().put("status", status))
}