Règle:code ≠ labpreuve reproductiblesource dépôtNO-GO production
Matrice de preuve
Le niveau le plus élevé acquis est indiqué sans extrapolation.
| Domaine | Acquis | Niveau | Absent | Source dépôt |
|---|---|---|---|---|
| Gate CI telephony-security | Run autoritatif GREEN: 84 fichiers et 974 tests contractuels verts; structure fail-closed et sources verrouillées. | Code et CI: 128 sources au digest gate c8255d26…31c0217, 19 sources média au digest fc741f14…d74641. | Attestation externe, déploiement, cloud, carrier/PSTN, exploitation et SLO. Production NO-GO. | Fiche dédiée, telephony-security-contracts.json et telephony-security-gate-source-lock.json |
| Snapshot recovery et reaper provider | PROUVÉ sur snapshot 126 sources au digest c25ee67a0a9302cf532a546a33c895a3b27dfc6a7121efa1c3ef5ad8b2a27e6f et au digest d’entrées 5c64e87449a54a644cb8cf26c12fc65999c81ab2b3ebee8a01be832153d05902; 48/48 tests telephony-backup-restore, dont 42 scénarios hostiles internes, et 81/81 sur quatre suites ciblées. Tous les NAVY_SCALEWAY_TEST_* sont refusés avant provider hors harnais hermétique exact; trois SIGKILL sont causalement prouvés. | Contrats locaux avec CLI Scaleway factice: canari expiré, trois absences, serveur sans cascade, UUID exacts, course de rattachement et GET direct. Inventaire vide limité à quatre familles dans le Project et la zone. Coût compute jusqu’à serverDeletedAt; IPv4 et volume jusqu’à billableAttachmentsAbsentAt. Workspace créé après readiness/armement, supprimé après finalisation. Deux pages synthétiques traversent le parseur. Contre-revue sans P0/P1: essai payant borné GO sous Node 22.23.2, Project/profil dédiés et opérateur local de confiance. | NON PROUVÉ exclusivité IAM, autres zones/familles, API publique réelle, vrai Job/provider cloud, perte complète du contrôleur, archive production, PITR, RPO/RTO, processus et appel. P2: vérificateur statique lexical et TOCTOU local théorique même UID entre hash et exécution. Budget 0,10 EUR hors Job partagé. Production NO-GO. | Fiche recovery, Fiche admission et reaper, infra/deploy/backup/source-lock.json |
| Admission systemd et reboot recovery | PROUVÉ local historique PID 1 systemd, deux coupures forcées, installation root-owned, verrou persistant, adoption stale, ancien token révoqué, finalizer positif, reprise synthétique, puis reçu corrompu refusé avec verrou conservé | Rapport brut v6 local non signé, vérifiable avec son source-lock archivé. VM QEMU x86_64 émulée et jetable, profil supprimé et environnement Docker initial préservé. Le nouveau snapshot recovery complète ce rapport sans modifier sa provenance historique. | NON PROUVÉ hôte amd64 candidat, vraie image Navy Phone, perte électrique physique, release signée, SBOM/CVE, restore représentatif, média et appel. | Fiche dédiée, rapport brut v6, source-lock v3 archivé |
| Bundle d’image de reprise | PROUVÉ local validation OCI fermée, source digest, publication atomique, keeper durci, persistance après reboot et zéro tag temporaire après réparation de résidus | Code et observation locale. Corruption refusée fail-closed; staging stale réparé. | PARTIEL remplacement du bundle durable corrompu et inventaire des images orphelines. NON PROUVÉ signature, SBOM, policy CVE, build offline et distribution production. | Fiche dédiée, installateur et helper OCI recovery |
| Asterisk Media WebSocket et barge-in | Asterisk 22.9.0, WSS/slin16, 56 frames; queue 46 avant FLUSH puis 0, aucun MARK annulé brut, mark post-flush reçu, durée 7,6 s | Runtime Docker local réel et borné | PSTN, cloud, voix humaine, audition, VAD, STT-LLM-TTS, reconnexion, charge et SLO | Fiche dédiée, media-websocket-lab/ |
| Edge supply chain | Versions/digests, attestation locale, policy image | Code + lab | Signature, SBOM, CVE, image cloud | infra/telephony/edge-cell-image |
| Runtimes edge intégrés | Kamailio 6.0.7, RTPEngine 26.0.1.13 et Asterisk 22.9.0; appel local fermé complet. Admission locale: drain par défaut, OPTIONS disponible, bail 30 s via RPC réel, dialogue établi survivant à l’expiration, nouvel INVITE 503. Un lab SBC séparé borne aussi 4/4 sessions simultanées | Runtime-lab exact-edge local + labs ciblés | Retrait/failover carrier, PSTN, cloud, PKI production, voix humaine, pipeline IA, charge et SLO. Les paquets relayés sont supérieurs à zéro, mais ce total volatil ne prouve ni seuil de performance ni débit; 4 sessions ne dimensionnent pas le service | runtime-lab/run.mjs, admission-runner.ts, integrated-media-runner.ts |
| Sockets et corrélation exact-edge | mTLS 8.8.8.9:5061 → 8.8.8.8:5061 → TLS 127.0.0.1:5062; NG 127.0.0.1:22222; SDP 8.8.8.8:10000-11000; canal PJSIP corrélé au Call-ID, bridge ARI à deux membres exacts, WSS 8089; double Record-Route et BYE retour | Runtime-lab local, réseaux fermés sans port hôte | Identités externes, appel carrier/PSTN, cloud et action externe | runtime-lab/functional-runner.ts, integrated-media-runner.ts, runtime-lab/run.mjs |
| Robustesse SIP ciblée | np_oa_lock dédié au Call-ID couvre contrôle et mutation RTPEngine. Admission CSeq typée, current_invite/current_update, active et media_owner empêchent collision, chevauchement et rollback ancien. BYE pose une tombstone globale avant destruction. Le lab observe une fois chacun: 491 offre chevauchante, 500 INVITE 103 après UPDATE 106, 500 collision INVITE/UPDATE au CSeq 106, 481 rejeu initial après BYE. UPDATE 302 réussit avant le final INVITE 300. La campagne garde 8 PRACK dont 2 ack-only, reset early unanswered=1, unexpectedAckSdpObserved=1, 4/4 sessions et drainage à zéro. Un UAS mTLS séparé, piloté par barrières JSON-lines internes sans port hôte, retient puis libère les mêmes octets vérifiés par SHA-256: le 200 PRACK bodyless passe pendant qu’UPDATE 502 possède active, prack_ack_while_update_active=1; après le 200 BYE 504, le 200 UPDATE 503 retenu est supprimé sur tombstone, terminated_update_answer_dropped=1, média drainé. | Runtime-lab et SBC lab locaux verts, 29 août 2026; configuration chargée et scénarios ciblés exercés | La suppression du 2xx UPDATE tardif est un hardening fail-closed non transparent, pas une preuve de conformité RFC proxy; son interop carrier/UAS externe reste ouverte. Glare bidirectionnel, forks, plusieurs 1xx fiables séquentiels, injection exhaustive des branches t_drop() et continuité RTP après chaque renégociation manquent encore. Aucun pcap ou événement PBX indépendant ne prouve le corps ACK reçu. PRACK unmatched conserve un risque de contournement aval; teardown ACK late-offer, rotation/refresher, expiration réelle et carrier/cloud restent ouverts. | kamailio.cfg.tpl, runner.ts, race-uas.ts, controller/run.mjs |
| Admission et panne média | Pair sans certificat, tentative outbound et service inconnu refusés; perte RTPEngine refuse un nouvel appel | Lab SBC local | Attaque externe, carrier réel, failover A/B et appel actif | controller/run.mjs, runner.ts |
| Pare-feu | Interfaces, identités et dérives actives | Lab local | Instance réelle et scan externe | lab/run.mjs, health-lab/run.py |
| Santé, admission et chaîne d’alerting | 14 checks, timer 15 s, bail 30 s et exporter sans listener. Le lab edge-health fermé passe 12/12 avec deux collecteurs, deux Prometheus 3.14.0, deux Alertmanager 0.33.1 et le receiver réel: 7 endpoints mTLS, 2 scrapes par Prometheus, gossip bilatéral, nominal sans faux incident, 4 rôles croisés refusés, pertes et reprises, retry receiver, partition fail-open avec doublons dédupliqués, firing vers resolved et deadman à 180 s. Il n’ouvre aucun port hôte, nettoie ressources et credentials temporaires et vérifie ses sources inchangées. Le lab receiver isolé reste vert 23/23. | Code/config + labs runtime locaux fermés et synthétiques + runtime Kamailio réel + systemd-analyze | Déploiement souverain, LB privé, HA et restauration receiver, livraison/acquittement/escalade humaine, SLO, retrait carrier, cloud et PSTN | health.py, admission.py, telemetry.py, collector.py, edge-health-receiver/receiver.py et labs |
| Failovers et partition Alertmanager vers les opérations | Deux exécutions indépendantes et identiques sont GREEN. passes=2 couvre seulement l’arrêt contrôlé exit 0 puis le crash SIGKILL exit 137 du sender. Une passe runtime isolée supplémentaire porte totalRuntimePasses=3 et isolatedGossipPartitionScenarios=1. Dans cette partition, les deux Alertmanager 0.33.1 restent vivants mais perdent uniquement le gossip. Chacun voit seulement lui-même, expose cluster_members=1 et notifie firing puis resolved. Le receiver observe les doublons physiques; receiver, outbox, Operations et sink ne gardent qu’une transition durable firing et une resolved. B rejoint ensuite avec la même IP; chaque pair voit exactement deux membres et cluster_members=2. | Chaque run verrouille 47 fichiers au digest 3a4d23bd20c1db25149babbe555f04baf959a4304cc4d200cc81df71cc671eb8; vérificateur 3/3, mutations 81/81, 1 425 contrôles exécutés, 846 uniques, 579 répétés et 31 scénarios. Les compteurs alertmanager_notifications_total de A et B avancent pour firing et resolved. Deux signaux et un échec enfant laissent zéro résidu. | La preuve locale couvre deux failovers bornés et une partition gossip isolée avec déduplication durable. Alertmanager reste at-least-once et fail-open. Elle ne prouve ni les répétitions, ni les autres partitions, ni une garantie générale de notification unique. Prometheus réel dans ce parcours, HA de production, systemd, récupération DLQ, PostgreSQL HA, humain, restauration, charge, SLO, cloud, carrier, PSTN et appel téléphonique restent absents. | infra/telephony/edge-health-alerting, edge-health-operations, edge-health-receiver/receiver.py, edge-health-receiver/operations-bridge, edge-health-operator-dispatcher, edge-health-operator-sink, edge-health-operator-chain et fiche Alertmanager |
| Garde d’accès et contexte VoiceBot | Les 11 routes gardent les contrôles de session et les allowlists. interrupted_previous_assistant traverse bridge, SDK, API, runtime et moteur; la readiness exige interruption_context=true. | Preuves ciblées locales; gate sécurité courante: 84 fichiers et 974 tests verts, sources verrouillées. | Endpoint déployé, identité machine opérée, rotation, réseau privé, intégration E2E, audit de production, charge, SLO, PSTN et dialogue humain. | lib/voicebot-navy-crisis/proxy.ts, bridge, SDK et fiche API VoiceBot |
| Barge-in produit et settlement | Une annulation confirmée ne ferme plus 1011. Le settlement distingue committed, cancelled et failed; cancelled+replayed adopte la révision récente sans valider l’ancien tour. ACK indéterminé fail-closed; requestAck() false ou throw devient failed immédiatement. Prepare abortable 6 s par défaut, borne 0,5 à 15 s; ACK 3 s par défaut, borne 0,25 à 10 s. | Produit séparé: 31 pass + 1 skipped, puis 344 pass + 3 skipped sur 347 tests, typecheck vert. Navy Phone: 398 fichiers/4 147 tests et typecheck verts. | Arrêt acoustique, voix humaine, téléphone, cloud, PSTN, reprise déployée, charge et SLO. | turn-settlement.ts, twilio-crisis-bridge.ts, adaptateurs média et fiche barge-in |
| Attente et danger annoncé | « Attendez », « Wacht » et « Hold on » répondent sans question. Pendant heatwave-outreach, gas/flood/seveso/fire annoncé interrompt le questionnaire; hazard+vital choisit le protocole hazard univoque ou une guidance générique fail-safe. | Code et tests du produit séparé, typecheck vert. | Évaluation humaine multilingue, accents, bruit, émotions, longues pauses, pilote de crise et SLO. | fiche orchestrateur et vue produit |
| Admission signée et failover carrier (Failover carrier des nouveaux appels) | Contrôle interne v1: reçu canonique lié au tenant, au carrier, au provider et au digest de configuration; 20 contrôles non compensatoires; signatures RSA distinctes de l’opérateur et du reviewer; fenêtre de 30 jours au plus; vérification sans mutation puis commit atomique qualification, preuve, activation et audit. Le modèle A puis B conserve 503, timeout 4 s, hold-down 30 s et refus après deux échecs. | Logiciel présent et modèle local fermé content-free. La migration 0039 bloque preuve active et activation sans qualification courante; le runtime referme sur dérive, expiration ou rejeu. | Zéro qualification terrain, carrier cible non contracté configuré, IP publiques, appel PSTN, TLS/SRTP terrain, failover et récupération opérateur. realCarrierCalled=false; émission anticipée refusée, hold-down non raccourci par résultats concurrents et 302 terminal sans nouvelle cible. Production NO-GO. | carrier-ingress-qualification.ts, son store, migration 0039, carrier-new-call-failover.ts et documentation téléphonie |
| OpenTofu Scaleway | 39 tests natifs credential-free répartis sur six modules: 9 compute, 4 données, 5 IAM, 4 pilote, 15 edge HA et 2 coffre audio. Le test ajouté refuse un collecteur télémétrie RFC1918 valide mais non routé. Chaque module possède son lock Scaleway 2.79.0; le package du provider est authentifié et vérifié contre les six locks. Après ce bootstrap réseau borné au miroir, init -backend=false, format, validation et tests mockés tournent avec --network=none. Les sources copiées sont limitées au HCL revu; aucun credential hôte, plan, state, environnement ou stdout brut n’est persisté. | Gate locale reproductible après bootstrap fournisseur authentifié | Aucun plan/apply contre l’API, ressource Scaleway, state distant, rollback, carrier ou PSTN. PASS fonctionnel de la gate ne change jamais la promotion NO-GO. | verify-scaleway-opentofu-runtime.ts, schéma scaleway-opentofu-runtime-gate.v1, six .terraform.lock.hcl |
| Média applicatif | Sur le même appel exact-edge, motifs synthétiques distincts détectés dans les deux directions avec marge, 133 frames envoyées et 48 reçues, DTMF exact, MARK annulé effectivement enfilé puis invalidé, file 75 → 0, arrêt FLUSH local mesuré à 12 ms, MARK post-flush reçu et ressources gouvernées nettoyées | Lab local fermé intégré | La mesure porte sur FLUSH jusqu’au STATUS de file vide, pas sur l’arrêt acoustique chez un humain. Aucun VAD, audition humaine, ACK acoustique, pipeline STT-LLM-TTS, perte/jitter, charge ou téléphone cloud E2E | integrated-media-runner.ts, integrated-media-signature.ts, serveur Media WS |
| Enveloppe exact-edge | Schéma v1, 13 checks et 9 métriques canoniques, digest SHA-256, versions et références de corrélation opaques; aucune donnée audio/SIP brute dans le rapport; dernier run avec sourceTreeClean=false, donc preuve non promouvable | Preuve éphémère locale; décision fonctionnelle PASS ciblée | Registre immuable, signature et attestation externe; décision de promotion NO-GO avec blockers local/carrier/attestation | edge-integrated-media-evidence.ts, runtime-lab/run.mjs |
| Voix IA | Contrats STT/TTS/LLM et scénarios séparés | Code/expériences | Endpoint souverain qualifié et SLO | lib/ai, expériences voix |
| Carrier / PSTN | Une barrière interne empêche l’activation sans qualification signée courante; un contrat et un modèle local décrivent le failover attendu. Aucun appel PSTN et aucune action externe ne sont effectués. | Contrôle interne présent; externe non prouvé | Qualification terrain, DID, trunk, appel, SRTP, failover réel et support | Aucune preuve opérateur réelle |