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 |
|---|---|---|---|---|
| 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, export et collecte | 14 checks, timer 15 s, bail 30 s, exporter sans listener, mTLS A/B, déduplication, SQLite borné, anti-Slowloris et cinq règles content-free | Code + health/telemetry/collector labs + runtime Kamailio réel + systemd-analyze | Déploiement et HA du collecteur, backend externe, notification, SLO, retrait/failover carrier | health.py, admission.py, telemetry.py, collector.py et labs |
| Failover carrier des nouveaux appels | Modèle A priorité 10 puis B priorité 20; 503 Cell Draining, timeout 4 s avec émission anticipée refusée, hold-down 30 s non raccourci par résultats concurrents, 302 terminal sans nouvelle cible, refus fermé après deux échecs et dialogue établi conservé sur A pendant le drain | Contrat + lab local fermé content-free, décision fonctionnelle PASS | Carrier contracté configuré, IP publiques, appel PSTN, TLS/SRTP terrain, failover et récupération opérateur. realCarrierCalled=false; promotion NO-GO | carrier-new-call-failover.ts, verify-carrier-new-call-failover-lab.ts, contrat 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, références SHA-256 des injections, DTMF exact, ancien mark annulé, mark post-flush reçu et ressources gouvernées nettoyées | Lab local fermé intégré | Les SHA-256 ne sont pas une signature cryptographique d’origine. Aucun VAD, arrêt acoustique, 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=true | 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 | Un contrat et un modèle local décrivent le failover attendu; aucun appel PSTN et aucune action externe ne sont effectués | Externe non prouvé | DID, trunk, appel, SRTP, failover réel et support | Aucune preuve opérateur |