edge-ai-refusal-runtime
Un moteur d'exécution qui refuse de charger un modèle dont les pièces justificatives ne tiennent pas. La carte de modèle est signée, et elle est vérifiée avant le chargement, pas après.
Six dépôts publics. Chaque revendication de gouvernance y est un morceau de code doté d'un mode de défaillance, d'un test qui prouve qu'il refuse, et d'une trace qui prouve qu'il a refusé à une date donnée.
Une revendication de gouvernance que personne ne peut inspecter est une revendication que personne n'a à honorer. Ces dépôts sont publiés pour que la vérification n'ait pas à nous être demandée.
Ils ne se lisent pas comme six objets séparés. Ils forment une chaîne : décider, mesurer, exploiter, prouver. Chaque maillon répond à une question qu'un acheteur industriel pose avant toute question sur le modèle.
Chiffres relevés le 21 août 2026 en exécutant les suites de tests, et non recopiés des fichiers README.
« Le contrôle se déclenche-t-il, ou est-il décoratif ? »
La plupart des dispositifs de gouvernance comptent ce qui s'est produit. Presque aucun ne compte ce qui a été empêché, qui est pourtant le seul chiffre séparant un contrôle porteur d'un contrôle ornemental.
Un moteur d'exécution qui refuse de charger un modèle dont les pièces justificatives ne tiennent pas. La carte de modèle est signée, et elle est vérifiée avant le chargement, pas après.
Des contrôles de gouvernance appliqués dans le circuit et non dans une note de politique, sur cinq cartes Arduino. Quatre invariants, dont un que l'organe supervisé ne peut pas révoquer.
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_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
Quatre refus et une escalade. Le chiffre qui compte est celui du milieu : 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 chiffre a-t-il été mesuré, et par quel instrument ? »
Les chiffres publiés en IA embarquée sont des chiffres de démarrage, relevés dans les trente premières secondes, pendant que le composant est encore froid. L'inférence soutenue amène un processeur à refroidissement passif à sa limite thermique en quelques minutes, et le gouverneur rabat la fréquence. L'écart entre les deux est le chiffre avec lequel un déploiement vit réellement.
Un banc indépendant de l'instrument et de l'appareil mesuré. Il intègre l'énergie sur les horodatages réellement obtenus, publie sa marge d'incertitude, et refuse de livrer un chiffre qui n'a jamais été mesuré.
Le registre où les estimations des autres dépôts seront soldées. Un enregistrement sans instrument déclaré est refusé à l'entrée, et une estimation reste visible, étiquetée comme telle, tant qu'aucune mesure ne l'a remplacée.
Aucune mesure sur banc à ce jour : le registre attend son premier relevé.
$ mh energy-model run/report.json
synthetic-result-refused: report sha256:22cf9ff0… has provenance 'synthetic';
pass allow_synthetic=True to export a rehearsal figure, which will be labelled as one
$ wb summary
energy-model-calibration 0 measured 7 estimate(s)
lora-range-survey 0 measured 0 estimate(s)
Le registre ne contient aujourd'hui aucune mesure et sept estimations, et il l'affiche de lui-même. Le banc n'a pas encore tourné ; la lacune a un outil, une procédure et un propriétaire, ce qui vaut mieux qu'une clause de non-responsabilité.
« Que se passe-t-il quand une mise à jour est mauvaise ? »
Deux règles, et elles ne se négocient pas. Le silence vaut retour arrière : un nœud qui démarre une image neuve et ne se signale pas revient à ce qu'il exécutait avant, sur sa propre horloge, sans consulter personne. Et le parc s'arrête de lui-même : une vague au-delà de son budget d'échec interrompt le déploiement, sans option pour passer outre.
Bascule A/B, retour arrière automatique, manifestes liés par empreinte, différentiel de SBOM et builds reproductibles. Le modèle qui répond aux quatre questions posées avant celles sur le modèle.
plan : inspection-agent -> 2.4.0
waves : canary, pilot, fleet
updated : 2
failed : 4
rolled back : 2 <- the number that matters
untouched : 6
✓ node-01 updated health probe passed
✗ node-03 transport-failure link dropped during transfer
✗ node-04 digest-mismatch manifest says sha256:ceba2163…, bytes hash to sha256:c1735458…
✗ node-06 health-probe-failed no health probe supplied
Le téléchargement a réussi et a livré les mauvais octets. Un contrôle qui demande si le transfert s'est bien passé répond oui.
Retour arrière prononcé pour l'absence de contrôle. Une machine à laquelle personne ne peut poser de question ne conserve pas une modification sur la foi de son silence.
Le déploiement s'est arrêté de lui-même dans la vague « pilot », quatre nœuds sur cinq ayant échoué pour un budget d'un seul. Six machines n'ont jamais été touchées et exécutent encore la version qui fonctionne : c'est le déploiement qui réussit, pas celui qui échoue.
« Le 11 septembre, savez-vous produire le dossier ? »
À compter du 11 septembre 2026, un fabricant de produit comportant des éléments numériques dispose de 24 heures pour adresser une alerte précoce à l'ENISA et à son CSIRT coordinateur après avoir eu connaissance d'une vulnérabilité activement exploitée, de 72 heures pour la notification circonstanciée, et de 14 jours après la mise à disposition d'un correctif pour le rapport final. L'application pleine du règlement suit le 11 décembre 2027.
Vingt-quatre heures n'est pas un problème de sécurité. C'est un problème d'inventaire, un problème de tri et un problème d'horloge, et la plupart des organisations découvrent lequel des trois elles ont manqué aux environs de la dix-neuvième heure.
La chaîne du règlement sur la cyberrésilience, de bout en bout et hors ligne : SBOM, VEX, recherche de vulnérabilités, déclaration au titre de l'article 14, mise à jour signée, dossier de l'annexe VII.
SBOM 9 components, 88.9% matchable
scan 6 raw match(es) → 3 actionable → 1 with an Article 14 deadline
VEX audit 1 stale 'under_investigation' statement
Article 14 case CASE-2026-004
early_warning due 2026-09-16T07:20:00.000Z filed
notification due 2026-09-18T07:20:00.000Z filed
final_report due 2026-10-03T06:40:00.000Z filed
update 2.3.1 accepted: True
rollback to 2.2.1 : False ← security_version 6 is below the device's 8
Annex VII pack: 4 gap(s), retain until 2036-03-01
Le retour arrière est refusé parce qu'il ramènerait la machine sous son plancher de version de sécurité. Un dossier de conformité qui ne sait pas dire non n'est pas un dossier, c'est une archive.
Ces travaux sont honnêtes sur ce qu'ils ne font pas, et cette honnêteté est le positionnement. Une page qui l'effacerait abîmerait l'actif qu'elle décrit.
Si l'un de ces maillons correspond à une question ouverte chez vous, la conversation commence par le code.