docs: vision du polyfill (shape-fidelity), modèle ReadCap/NURI réel, brief caps
vision.md — la charte : le polyfill n'est PAS une couche de sécurité (wallet
partagé + pas de crypto = insécurité ACCEPTÉE) ; seul objectif = exposer la
BONNE FORME des primitives futures pour que les consommateurs n'aient rien à
réécrire. Invariant tenu par une simulation crypto légère : un `did` nu (sans
ReadCap) ne permet PAS de lire ; un NURI avec ReadCap est suffisant et requis.
readcap-and-nuri-model.md — le vrai modèle, VÉRIFIÉ par lecture de
`nextgraph-rs` : ReadCap = ObjectRef {id BLAKE3, clé ChaCha20} = possession de
clé, PAS une ACL ; grant = sceller la clé à l'inbox du destinataire ;
révocation = re-key grossier et non-rétroactif ; grammaire NURI cap-less vs
cap-porteur (le segment `:k:` est le discriminant) ; table des divergences avec
l'émulation `caps.ts` (aujourd'hui une ACL — l'inversion exacte).
briefs/2026-07-20-caps-emulation-alignment.md — le chantier d'alignement :
spike P0 keyless-resolve (verdicts vérifiés : existence sans clé OUI,
détection de suppression sans clé NON, confidentialité OUI), puis P1 cap-less
vs cap-porteur, P2 possession, P3 re-key, P4 migration d'API. Inclut la revue
adverse (WriteCap = membership et non possession ; sans crypto la privacy de
lecture n'est pas applicable ; migration = re-architecture consommateur).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GbGgNEHRejVKoREvFuDFg
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# Vision & principes du polyfill `@ng-eventually/client`
|
||||
|
||||
## Raison d'être
|
||||
|
||||
Un **stand-in fidèle en FORME** des primitives futures de NextGraph. Objectif
|
||||
**unique** : que les consommateurs (Festipod) soient **codés contre le modèle
|
||||
mental CORRECT** — celui de NextGraph fini — et **n'aient RIEN à réécrire** quand
|
||||
NextGraph fournira les vraies primitives.
|
||||
|
||||
## Ce que le polyfill n'est PAS
|
||||
|
||||
Une couche de **sécurité**. Le **wallet partagé** (tout le monde partage les mêmes
|
||||
clés) + l'absence de vraie crypto rendent l'émulation **infiniment moins
|
||||
sécurisée** qu'un wallet-par-utilisateur — c'est un **véhicule de dev/staging**,
|
||||
pas un but. **L'insécurité est ACCEPTÉE.** Un attaquant qui contourne l'émulation
|
||||
n'est pas notre problème.
|
||||
|
||||
## Le seul critère : shape-fidelity, avec RIGUEUR
|
||||
|
||||
Les **surfaces exposées** doivent matcher **exactement la FORME** des primitives
|
||||
futures, **même là où l'enforcement est simulé**. Le **mode d'échec à éviter** :
|
||||
exposer la **mauvaise forme** → le consommateur code contre un modèle qui
|
||||
n'existera pas → réécriture. L'inversion **ACL** des ReadCaps était exactement ce
|
||||
défaut (une ACL là où le réel est **possession de clé**) — un manque de rigueur.
|
||||
|
||||
## Simuler la crypto pour EMPÊCHER les raccourcis
|
||||
|
||||
Sans un minimum de simulation crypto, des raccourcis préjudiciables sont pris (on
|
||||
lit le clair, on retombe sur des ACLs). Le polyfill **simule** donc le mécanisme
|
||||
final, assez pour tenir cet **invariant** :
|
||||
|
||||
> **Un `did` (id nu, SANS ReadCap) et un NURI (AVEC ReadCap) sont traités
|
||||
> VRAIMENT différemment : le premier ne permet PAS de lire la donnée ; le second
|
||||
> est SUFFISANT et REQUIS.**
|
||||
|
||||
Concrètement : la donnée d'un document est **stockée chiffrée** (chiffrement
|
||||
symétrique par-doc, même léger) ; le **ReadCap = la clé** ; sans elle, **impossible
|
||||
de déchiffrer/lire**. Pas d'ACL, pas de clair accessible « à côté ». Obtenir la
|
||||
lecture = **détenir la clé**, exactement comme en cible.
|
||||
|
||||
## Conséquences de forme (à respecter partout)
|
||||
|
||||
- **Lecture = possession d'une clé** (ReadCap = `{id, clé}`). Un id nu ne lit pas.
|
||||
- **Écriture = membership/permissions** (primitif **distinct** — PAS de la possession).
|
||||
- **Partage d'un cap = le sceller à un destinataire** (livraison **durable**, au
|
||||
moment du partage — PAS une ACL re-déclarée à chaque session).
|
||||
- **Révocation = re-key** (nouvelle clé ; les anciens détenteurs gardent l'ancien
|
||||
état). Non-rétroactif.
|
||||
- **Référence cap-less** (nommer/pointer sans lire) **distincte** de la référence
|
||||
cap-porteuse.
|
||||
|
||||
Voir `readcap-and-nuri-model.md` (le vrai modèle, vérifié dans `nextgraph-rs`) et
|
||||
`briefs/2026-07-20-caps-emulation-alignment.md` (le chantier d'alignement).
|
||||
Reference in New Issue
Block a user