docs(android): section 7 - a local account, so the app serves on its own

This commit is contained in:
r-zakarya
2026-08-21 13:55:13 +01:00
parent afc6119cf8
commit b1be802e22
+61
View File
@@ -612,6 +612,67 @@ n''écrit rien), retirer WebDAV le jour où il n''a plus d''usage, et une purge
périodique de l''historique — sans quoi le dépôt grossit périodique de l''historique — sans quoi le dépôt grossit
d'un instantané complet à chaque synchronisation, pièces jointes comprises. d'un instantané complet à chaque synchronisation, pièces jointes comprises.
## 7. Se servir de l'application seule — compte local
Aujourd'hui le téléphone ne sait que **lire un coffre venu d'ailleurs** : sans
URL, sans jeton et sans mot de passe de synchronisation, il n'affiche rien.
On veut qu'il serve seul, comme le poste : on s'inscrit, le coffre vit là, et
la synchronisation devient un ajout facultatif.
### Ce que ça entraîne, et qu'il vaut mieux dire tout de suite
Un coffre vide qu'on ne peut pas remplir ne sert à rien. **S'inscrire entraîne
donc créer des entrées depuis le téléphone** — précisément ce que §4 avait
écarté. C'est le vrai morceau ; l'écran de connexion n'en est que la façade.
### Le coffre local devient l'autorité, chiffré sous le mot de passe
Aujourd'hui `vault.bin` porte l'instantané **en clair**, scellé par le Keystore
(et, depuis peu, par un code). Le conteneur chiffré sous mot de passe, lui,
n'existe qu'au bout du réseau. Un compte local inverse la charge :
- un fichier local porte **exactement ce que porterait le dépôt** —
`EncryptContainer(instantané, mot de passe, 600k)` ;
- `vault.bin` reste ce qu'il est : le cache d'ouverture rapide.
Deux raisons, pas une : c'est le modèle du poste — le mot de passe maître
protège le coffre au repos, pas seulement le matériel — et **le format reste
celui du dépôt**, donc la synchronisation continue de marcher sans convertir
quoi que ce soit.
### Le nom d'utilisateur
Le conteneur le porte déjà (`username`, écrit par `buildSyncSnapshot`). Un seul
compte par appareil : plusieurs coffres sur un même téléphone est une envie
supposée, pas un besoin constaté. Le nom saisi se compare à celui du conteneur
après déchiffrement — c'est le mot de passe qui ouvre, le nom qui identifie.
### S'inscrire
Forge un instantané vide, le chiffre sous le mot de passe choisi, l'écrit
localement. Aucun réseau. **Le poste ne connaîtra pas ce compte** : il crée les
siens dans SQLite et rien ne les rapproche aujourd'hui. Un coffre né sur le
téléphone qu'on voudra ensuite ouvrir sur le poste demandera un import.
### Par étapes
1. **Identité** : écran connexion / inscription, conteneur local, coffre vide.
2. **Créer une entrée** — l'étape qui rend l'application utile seule. Un uuid
neuf, `updated_at` posé ; pas de tombstone, on ne supprime pas encore.
3. **Modifier n'importe quel champ, supprimer** : `PatchEntryField` prend déjà
le nom du champ ; supprimer exige les tombstones.
4. **Réconcilier avec la synchronisation** : un coffre né seul auquel on
ajoute un dépôt. C'est là que la fusion revient, et elle a été évitée
jusqu'ici pour de bonnes raisons.
### Ce qui devient facultatif
Sans dépôt configuré, *Sync* n'a rien à faire : les réglages du serveur
restent, mais l'application ne doit plus se comporter comme si le réseau était
la seule source.
---
## Ordre proposé ## Ordre proposé
1. **Vérifier §1 sur téléphone** — c'est ce qui valide le travail déjà fait, et 1. **Vérifier §1 sur téléphone** — c'est ce qui valide le travail déjà fait, et