Indépendant et non-SPOF
navy-phone-edge-health.timer lance un oneshot root. Il n’est ni RequiredBy ni PartOf du runtime, ne le démarre pas, n’ouvre aucun listener ni port et ne participe pas au chemin d’appel.
Readiness locale
Timer privé, contrôles critiques, identité du pare-feu, export mTLS borné et bail d’admission Kamailio.
Le collecteur et son consommateur d’admission locale existent en code et en lab. Ils ne sont pas déployés sur une Instance et ne pilotent aucun carrier réel; le contrat A/B reste un modèle fermé séparé.
navy-phone-edge-health.timer lance un oneshot root. Il n’est ni RequiredBy ni PartOf du runtime, ne le démarre pas, n’ouvre aucun listener ni port et ne participe pas au chemin d’appel.
admission.py accepte un snapshot exact âgé de 25 s au plus, renouvelle un bail Kamailio de 30 s, et demande un drain sur non-ready, invalidité ou échec de collecte. La CLI de diagnostic conserve sa fraîcheur 45 s. Le carrier ne consomme pas encore cette preuve.
telemetry.py pousse une enveloppe content-free vers une IPv4 RFC1918 exacte sur le NIC management. Le spool garde trois éléments, les retries sont idempotents et une panne distante n’affecte ni le runtime ni l’admission locale.
Chaque échec rend la cellule non-ready sans tuer la liveness du collecteur.
| Socle | Asterisk | RTPEngine | Kamailio |
|---|---|---|---|
| 5 contrôles runtime target, pare-feu actif, Chrony, attestation, secrets runtime |
3 contrôles unité, conteneur, boot + SIP TLS + ARI TLS |
3 contrôles unité, conteneur, ping NG loopback |
3 contrôles unité, conteneur, process/listener 5061 |
Le contrôle ne se limite pas à « nftables actif ». Il recalcule l’identité du contenu et vérifie les permissions.
SHA-256 de la politique normalisée et fichier root-only 0600.
SHA-256 de /etc/nftables.conf et mode 0644 attendu.
SHA-256 de la sortie nft list table inet navy_phone.
Config, config-mode, rules-file et active-rules sont refusés séparément.
Le timer n’ouvre aucun port et reste hors chemin d’appel. Le lab hermétique n’expose aucun port hôte; la readiness locale n’est consommée par aucun carrier.
Les écritures sont atomiques. La santé vit dans un répertoire root 0700 en 0640; l’export possède un répertoire 0700 séparé et des enveloppes 0600.
| Fichier | Contenu | Cardinalité / vie privée | Consommateur |
|---|---|---|---|
snapshot.json | Cellule, liveness, readiness, 14 checks, redémarrages connus | Aucun identifiant d’appel, adresse réseau, média ou payload | CLI et contrôleur local |
metrics.prom | Timestamp, readiness, checks, redémarrages mesurables | Labels fixes cell/check/component; métrique inconnue omise | Diagnostic local et chaîne Prometheus du runtime-lab 12/12; aucun backend souverain déployé |
last-transition.json | Dernière transition ready/not-ready et checks échoués | Un seul événement borné | Diagnostic local; alerting technique exercé en lab, aucune notification humaine livrée |
admission.json | État demandé/appliqué, motif borné et durée du bail | Aucune sortie de commande, donnée d’appel, adresse, média ou payload | Preuve locale seulement |
export.json | Livré, en file, supprimé et code de résultat borné | Aucun corps distant, identifiant d’appel, média, adresse ou credential | Diagnostic exporter local |
spool/*.json | Au plus trois enveloppes v1 idempotentes | Forme exacte, digest et cellule revérifiés; symlinks refusés | Collecteur candidat en code/lab, non déployé |
Les commandes du health-lab sont simulées pour injecter les fautes. Les processus et protocoles réels sont prouvés séparément par runtime-lab.
| Niveau | Acquis | Non acquis |
|---|---|---|
| Code | Timer/service, collecteur, politique image, IaC et gates | Exécution distante |
| Health-lab | 14 fautes, 4 dérives firewall, snapshot forgé/ancien, admission/drain, échec actionneur et échec d’écriture de preuve | Commandes/processus réels |
| Telemetry-lab | mTLS client, SAN serveur exact, refus TLS/HTTP, retry idempotent, spool borné/hostile, vie privée et absence de listener | Réseau cloud et alerting livré |
| Runtime-lab edge-health | Réception mTLS A/B, chaîne complète 12/12 avec deux collecteurs, deux Prometheus, deux Alertmanager et receiver, pertes, partition, retry et reprise | Déploiement souverain, LB privé, HA/restauration receiver, notification humaine, SLO et carrier réel |
| Runtime-lab exact-edge | Runtimes épinglés; démarrage drainé, OPTIONS disponible, bail RPC réel, appel maintenu jusqu’à expiration puis BYE, nouvel INVITE 503; appel média intégré complet ensuite | Carrier/PSTN, cloud, PKI production, voix humaine, pipeline STT-LLM-TTS, charge, failover carrier et SLO |
| Preuves et IaC | Rapports locaux content-free et gate OpenTofu credential-free | Voir la matrice de preuve et la topologie de déploiement; promotion NO-GO |
| Cloud / production | Rien pour ce lot | Image, Instances, réseau, backend, retrait carrier, alerting, SLO, chaos A/B |