diff --git a/index.html b/index.html index f4b454d..b9a2127 100644 --- a/index.html +++ b/index.html @@ -124,6 +124,52 @@ Chaque tour de boucle laisse l'habitat un peu plus précis, un peu plus défendu, un peu plus capable de se gouverner seul.
+ +04 — une mutation racontée
+
+ Récit factuel d'un précédent ratifié : prec_013. Cinq mois plus tôt, n'importe quel agent pouvait ouvrir une connexion sur une table multi-tenant. Aujourd'hui, le runtime refuse — pas un reviewer, pas un linter : la base elle-même.
+
La table porte du RLS FORCE. La policy existe, le rôle Postgres ne possède pas BYPASSRLS. Premier réflexe d'agent : ouvrir postgres.js, lancer l'INSERT. Le résultat n'est pas une erreur. C'est silence : zéro ligne écrite, zéro exception, zéro indication. Le bug le plus dangereux est celui qui ne crie pas.
Toute mutation déclarée doit choisir parmi cinq catégories ratifiées. L'agent tente rls_policy seul. Le gate d'admission refuse : ce mécanisme n'est pas dans la liste des dix equivalent_enforcement fermés. La doctrine n'admet pas un mécanisme par convenance.
Polis examine : RLS protège la ligne, mais sans contexte applicatif posé (app.org_id, app.actor_id), la policy retourne vide au lieu d'erreur. Verdict : un mécanisme composé est nécessaire. Cinq conditions cumulatives, six prédicats fermés, audit différencié, test adversariel par surface.
prec_013 entre au registre, append-only.Le mécanisme prend un nom : rls_policy_with_app_context. Il devient le neuvième equivalent_enforcement ratifié. Le précédent est écrit dans polis_decisions avec ses cinq conditions, ses six prédicats, son test adversarial obligatoire. Le runtime peut le citer ; il ne peut pas l'inventer.
L'entrée du manifest référence prec_013. Les helpers withOrg(), withAgent(), withSuperAdmin() posent six GUC Postgres sur la transaction. Le code n'a plus à se souvenir : l'oubli est structurellement impossible.
Un nouvel agent — Claude, ChatGPT, un script interne — tente d'écrire sur la même table sans poser le contexte. Le gate d'admission lit prec_013, vérifie les conditions, refuse. La règle n'est plus dans une spec à lire. Elle est dans la base, dans le compilateur, dans le runtime. C'est ça, l'autocatalyse : chaque erreur réparée devient un mur que la machine ne se cogne plus jamais.
04 — économie + contenu
+05 — économie + contenu
05 — souveraineté
+06 — souveraineté
06 — état
-07 — état
++ Une partie de la machine tourne en production, vérifiable. Une autre est ratifiée doctrinalement, avec son implémentation runtime partielle ou en cours d'instrumentation. Une troisième est en écriture. Confondre les trois rendrait le tableau soit magique, soit ambitieux. La distinction est ce qui rend la cadence opposable. +
+ +polis_decisions live, supersedure traçablerls_policy_with_app_context (verrou étape 9 partiel)/me — le citoyen voit son propre métabolismefounder_root sur hardware token