# 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).