Des contrôles qui refusent, ou qui ne refusent pas
Un moteur d'exécution où chaque contrôle est un morceau de code doté d'un mode de défaillance, d'un test qui prouve qu'il refuse, et d'une entrée de journal qui prouve qu'il a refusé à une date donnée.
Chiffres relevés le 21 août 2026 en exécutant les suites de tests, et non recopiés des fichiers README.
La plupart des artefacts de gouvernance sont irréfutables
Un document de politique affirme qu'une supervision humaine existe, et rien dans le système en fonctionnement ne le contredit lorsqu'elle n'existe pas. C'est la définition d'une revendication irréfutable : elle ne peut pas être fausse, donc elle ne dit rien.
La démonstration est une cellule d'inspection de soudure. Elle ne peut pas se mettre en route toute seule, ne peut pas dépasser l'enveloppe de fonctionnement déclarée dans sa carte de modèle, et ne peut pas dérouter une pièce sans motif énoncé. Chacune de ces trois phrases correspond à un refus observable, pas à une intention.
Compter ce qui a été empêché
« Presque personne ne compte ce qui n'a pas eu lieu. »
Les tableaux de bord de gouvernance comptent les événements survenus. Le chiffre qui sépare un contrôle porteur d'un contrôle décoratif est celui des demandes refusées, parce qu'une action interdite qui n'a pas eu lieu ne laisse aucune trace ailleurs que dans le contrôle qui l'a arrêtée. Ce moteur d'exécution le compte, et le journalise avant d'agir.
inferences : 10
requests : 11
allowed : 7
refused : 4 <- the number that matters
escalated : 1 (1 approved)
✗ start_attempt_before_release deny stop channel engaged: stopped
✓ set_speed_within_envelope allow allow-safe-speed
✗ set_speed_outside_envelope deny deny-excessive-speed
✗ action_on_foreign_target deny deny-foreign-targets
✗ action_without_rationale deny deny-unexplained-requests
✓ divert_P0002 require_human escalate-low-confidence-diversion
✓ divert_P0004 allow allow-confident-diversion
✓ stop_on_defect_run allow allow-stop-always
Onze demandes, sept autorisées, quatre refusées, une escaladée vers un opérateur humain qui l'a approuvée. Le refus le plus instructif est le quatrième : une action sans motif énoncé est rejetée, parce qu'une décision que personne ne peut relire ne peut pas être revue.
Ce que la suite éprouve
Cent trente-deux tests, exécutés le 21 août 2026 sur le dépôt public. Le fichier README du dépôt en annonce encore 113 : c'est le dépôt qui est en retard sur lui-même, et le chiffre juste est celui mesuré ici.
| Groupe | Tests | Ce qu'il éprouve |
|---|---|---|
test_policy.py | 26 | Le moteur de règles, éprouvé à ses bornes |
test_registry_admission.py | 26 | L'admission d'un modèle et la vérification de sa carte signée |
test_journal.py | 20 | La chaîne d'empreintes du journal, et sa vérification indépendante |
test_oversight_and_marking.py | 19 | La supervision humaine et l'étiquetage des chiffres estimés |
test_adversarial.py | 19 | Les tentatives de contournement, écrites pour casser la revendication |
test_runtime_e2e.py | 18 | Le scénario complet, de la demande au journal vérifiable |
test_cli.py | 4 | L'interface en ligne de commande |
| Total | 132 | 91 % |
La barrière d'intégration enchaîne l'analyse statique, le typage strict, la revue de sécurité du code et le plancher de couverture. Dix décisions d'architecture consignées expliquent ce qui a été écarté, et pourquoi.
Les lacunes connues, telles que le dépôt les énonce
Le modèle de menace du dépôt énumère sept risques résiduels. Les cinq qui comptent pour un lecteur extérieur sont ceux-ci.
- Rien n'a tourné sur du matériel. Toutes les couches d'accès matériel sauf le simulateur lèvent une erreur de portage explicite, plutôt que de renvoyer une valeur plausible.
- Aucune racine de confiance matérielle. Les clés de signature sont en clair sur le disque, et l'attestation sans élément sécurisé serait du théâtre. C'est une décision assumée, avec sa fiche.
- Qui détient la clé de l'appareil peut réécrire le journal de façon cohérente, et la vérification passera. La chaîne d'empreintes détecte l'édition partielle, pas la réécriture complète par un porteur de clé légitime.
- Le fichier de règles est modifiable par qui peut l'écrire. Les règles sont des données, délibérément, pour être relues par une instance de gouvernance plutôt que compilées.
- Le modèle simulé n'est pas un détecteur. Ses deux réglages sont un taux de manqué et un taux de fausse alarme : il sert à éprouver les contrôles, jamais à inspecter quoi que ce soit.
Quatre documents, dans l'ordre où ils se lisent
- docs/GETTING_STARTED.mdNe suppose ni terminal ni Python, et mène à la première exécution complète.
- docs/ARCHITECTURE.mdLes décisions de conception, et ce qu'elles écartent.
- docs/CONTROL_MAP.mdChaque contrôle rattaché au texte auquel il répond.
- docs/THREAT_MODEL.mdLes sept risques résiduels, énoncés sans atténuation.
Une revendication de gouvernance se vérifie ou ne vaut rien
Si l'un de ces maillons correspond à une question ouverte chez vous, la conversation commence par le code.