CVN-N001-EI-S09 — Détection indépendante de la divergence replay (déterminisme s18) · hub Story¶
Hub documentaire de la Story S09 (garde de validité du substrat diagnostique). Partie du programme CVN-N001-EI. État live = OpenProject (wp#237, GH #1099, ADR-76).
En une phrase¶
Quand nos diagnostics « rejouent » un entraînement prod (le replay s18), est-ce déterministe, et fidèle au baseline prod ? — détection indépendante (hors run) du non-déterminisme et de la divergence canonique (action item A6 du RCA s42).
Pourquoi ça compte¶
diagnostic__s42 (S04) est sorti s18_status=FAIL sur 5/5 cellules (observed_f1 0.36–0.47). Tant que
cette divergence n'est pas détectée indépendamment et expliquée, elle borne le claim « fidèle au
baseline prod » de tout diagnostic basé s18 — dont le s43 de S05, en run en ce moment. S09 livre le
check + classe la cause (instable vs gap de fidélité), et conditionne le droit de faire de
skip_phase_a=true un défaut.
Les documents (dans l'ordre de lecture)¶
| # | Document | Quoi | Pour qui | État |
|---|---|---|---|---|
| 1 | Plan dossier (r4, EN) | le quoi & pourquoi — problem statement, user stories, hypotheses (H1 déterminisme cross-process / H2 fidélité), state of the art, règle de décision pré-enregistrée (config déterministe ADR-0096, P0 parité env, epsilon gelé, truth table), §0-§7 | décideur, quant, relecteur | ✅ plan_review PASSED·OK (Meeting 268) |
| 2 | Architecture (r2) | le comment c'est construit — Hamilton-native 2-couches, graphe nommé (H1 canonical-independent), P0 tri-state + gate INFEASIBLE-until-schema, D0/ε_prod cadence séparée (SHA-keyed), §3.C spawn-time/worker-time, vues déploiement + séquence, schéma Verdict auto-auditable |
ingénieur, archi | ✅ pour revue (r2) |
| 3 | Runbook opérateur (r1) | déclencher (2 DAGs : D0 ε_prod + verdict job), lire le verdict + désambiguïsation cause, troubleshooting | opérateur | ✅ pour revue |
| 4 | Stratégie de tests (r1) | table de décision exhaustive 5-voies (H1×P0×H2×canonical×ε_prod → un verdict), invariants I1–I8, 3 niveaux, validation système | dev, QA | ✅ pour revue |
| 5 | MLOps readiness | à remplir au merge (ADR-70) | DRI | ⏳ |
État¶
Specified (OP wp#237) — committee plan_review ✅ PASSED·OK (session f5fdbf8d, Meeting 268,
5 experts, strong consensus, 0 blocker/0 dissent ; 3 recos cheap foldées en r4, reste = follow-ups).
Transition New → Specified faite 2026-06-09 (forcée, plan dossier + plan_review remplis — CLAUDE.md §0).
Les 4 artefacts de conception sont prêts pour revue (plan r4 + archi r2 + runbook r1 + test-strategy r1) ;
la branche feat/CVN-N001-EI-S09-replay-divergence-detection existe.
Prochaine étape : revue des docs → impl (Specified → In progress au démarrage, single-WIP à vérifier ;
scaffold /diagnostic-scaffold). MLOps readiness (artefact 5) au merge (ADR-70).
Travail parallélisé : dev1 sur S09 (substrat s18) pendant que dev2 avance sur l'Epic CVN-N001-EK (protocole de décision de tradabilité). S09 est un feeder de la pré-étude D2 d'EK (« substrat à fidélité validée »).
Règle de décision (pré-enregistrée — résumé)¶
Ordre parité env (P0) → déterminisme (H1) → divergence (H2). H1 = cross-process sous config
déterministe épinglée (threads cappés ADR-0096 + LightGBM deterministic). La prod tourne non-cappée
→ ε = max(0.005, ε_prod), ε_prod = enveloppe de reproductibilité du chemin prod mesurée sous la
config réelle prod (borne de tolérance conservatrice, N≥10, gatée). P0 = parité image SHA + instance
(ADR-92) : sans elle, FIDELITY_OK non posable et la divergence est classée env/version gap, pas
fidelity gap :
| Verdict | Condition | Action aval |
|---|---|---|
FIDELITY_OK |
P0 parité + H1 PASS (bit-identique cross-process) + \|replay−canonique\| ≤ ε |
lever A6 pour la surface couverte ; autoriser skip_phase_a=true par défaut seulement sur cette surface |
NON_DETERMINISTIC |
H1 FAIL (replay diverge entre process) — cause routée : numeric_residue vs real_instability |
corriger seed/ordre/fenêtre/threads avant tout claim de fidélité |
CANONICAL_DIVERGENCE |
H1 PASS + \|replay−canonique\| > ε — cause logic_fidelity_gap (P0 OK) ou env_parity_gap (P0 KO) |
si logic : diagnostiquer la cause, borne les verdicts s18 (dont S05) ; si env : re-générer le canonique sous image parité |
INCONCLUSIVE_TOOLING |
erreur / NaN / canonique absent / ε_prod non mesuré / parité non vérifiée |
corriger + relancer (no-crash, ADR-25) |
Carte de traçabilité¶
problématisation (plan §1) → user stories (§2) → hypothèses H1/H2 (§3) → état de l'art (§4) → consolidation + decision routing (§5) → sections techniques §0-§7. Matrice complète : plan §5.