Skip to content

CVN-N001-EI-S12 — Economic observability : keyed-config + cost-validated ground-truth substrate · hub Story

Hub documentaire de la Story S12 — le prérequis-gate de toute la direction Tier-2 économique. Partie du programme CVN-N001-EI. État live = OpenProject (wp#246, GH #1109, ADR-76).

En une phrase

Le programme mesure son éco (table finetune_results) mais ces nombres sont inutilisables comme vérité-terrain : découplés de la config déployée (clés de join mortes) et calculés sous coûts assumés non-validés. S12 construit le substrat keyé ET coût-validé.

D'où ça vient (la reconnaissance)

Une sonde PG read-only (2026-06-05) sur finetune_results (9216 lignes) a trouvé :

Critère §0bis Verdict
1. Peuplé ✅ distributions éco réelles — mais 99,7 % pré-S19 (fiable ≈ 27 lignes)
2. Keyé-config model_hyperparams 0/9216, optuna_trial_id 0/9216, feature_hash constant → aucune jointure vers la config déployée
3. Deux côtés ⚠️ fenêtres train/val/test présentes, mais pas de paires val↔OOS stockées
4. Coût-validé ❌ éco backtestée sous coûts assumés (sweep ≠ validation) — existe + joignable ≠ vrai

Les documents (ordre de lecture)

# Document Quoi
1 Fiche de décision (S11 §8) le pourquoi — sonde, 4 critères, Option C tranchée, garde intérimaire, raffinement coût-validité. Comité Meeting #250.
2 Plan dossier (incréments 1a-4) le quoi & comment — root cause localisé, décomposition incrémentale, risques, critères de succès, questions résiduelles.

Périmètre (keyé ET coût-validé — deux prérequis co-égaux constitutifs)

# Incrément Statut
1a model_hyperparams (identité de config) propagé caller→writer fait (branche feat/CVN-N001-EI-S12-economic-observability, 7/7 tests)
1b optuna_trial_id à faire
1c vrai feature_hash (remplace "unknown") à faire
2 peupler finetune_baselines (ADR-29) à faire
3 paires val/OOS (critère 3) design
4 coût-validité : ancrer sur fills réalisés ou étiqueter cost_basis='backtested_assumed' — jamais certifier l'hypothèse design

État

In progress (impl démarrée). Incrément 1a livré sur branche : la colonne model_hyperparams était totalement absente de l'INSERT (NULL pour 9216 lignes) → maintenant propagée depuis VariantResult.hpo_params, JSON-sérialisée, NULL (jamais {}) quand absente (ADR-25). Test de contrat : parité 68 colonnes + valeur JSON au bon index + NULL-si-absent.

RCA

  • RCA — run de validation cost_scenario vide (no_data) : le run de validation de l'incrément 2 (2026-06-07) est revenu vide. Cause = bug de code pré-existant (#491) dans la récupération du base-model runtime, dormant (facteurs runtime = Phase 6). #1117 exonéré ; Story reste In testing. Cause GH #1133 · observabilité GH #1134.
  • Plan de fix — runtime base-model (#1133/#1134) : dossier de plan (pour plan_review) — Option 1 (exposer le modèle sur VariantResult) + suppression du fallback mort + test d'intégration ADR-58 ; fix observabilité #1134 ; analyse d'impact + critères de succès.

Blocked-by

  • CVN-N001-EI-S13 (OP wp#257, GH #1133) — fix du chemin runtime base-model. La validation système de S12 (re-run cost_scenario → preuve per-cost) ne peut aboutir qu'une fois S13 livrée. S12 reste In testing d'ici là. (Le dossier de fix est lié dans cette nav S12 — analyse-de-record — mais l'implémentation est l'entité EI-S13.)

Liens connexes

  • Garde intérimaire (faible-regret, hedge sans croire l'anti-corrélation f1_buy↔éco) : tracker GH #1112.
  • Écart MLflow wf_oos_net_expectancy=0.0 (côté registre, séparé) : GH #1111.
  • S11 (diagnostic overfit HPO) : On hold, bloquée par S12 — GH #1101.