Skip to content

Expérience s42 — defi_top5 fold-3 (2026-06-03) : validation no-hang + verdict 5-axes status-B

Artefact de run de la Story CVN-N001-EI-S04. Runs diagnostic__s42 après le fix thread-caps (ADR-0096, PR #1097). Deux runs : (1) un smoke num_leaves (no-hang + signal axe primaire, §2-§3) puis (2) le run 5-axes complet pré-enregistré (verdict définitif, §7).

Portée en une ligne : thread-caps CLOS · S04 status-B CLOS — run 5-axes complet = B_SYSTEMATIC_OVERFIT 5/5 (§7). Le smoke (§2-§5) reste documenté comme première validation no-hang + l'historique du scoping.

1. Configuration du run

Champ Valeur
run_id manual__2026-06-03T06:56:02+00:00
Durée 06:57:01 → 07:07:05 UTC (~10 min, 5 cellules)
Image / DAG champollion 7cea82d (entrypoint thread-caps WARN actif)
crypto_group defi_top5 (UNIUSDC, OPUSDC, ARBUSDC, AAVEUSDC, LDOUSDC) — 1 cellule/crypto
fold_id 3
skip_phase_a false (capture Phase A in-pod — true échoue sur /tmp éphémère, cf. §4)
axes_subset num_leaves (smoke 1 axe)
points_subset_per_axis {"num_leaves": [31, 8]} (DEFAULT_POINT=31 + DECISION_TEST_POINT=8)
seed_list 1337–1341 (5 seeds → n_eff=5/cellule)
n_fit_rounds 300

2. Résultat A — validation du fix thread-caps (no-hang) ✅

Le mode de défaillance du RCA (busy-wait livelock 16 h, 0 fit) est fermé empiriquement :

  • Cap appliqué sur les pods compute : event=pod_thread_caps_applied cpu_limit=4 cores=4 omp=4 blas=4 loky=4 wait_policy=passive (Downward API → entrypoint → caps, bout-en-bout).
  • Les fits défilent en secondes : event=s42_fit_progress fit=1/10 … 5/10 à ~2-4 s/fit (07:03:17 → 07:03:29). Sous threads non-cappés, ces mêmes fits busy-waitaient des heures.
  • 5/5 cellules conclusives, 0 INCONCLUSIVE_TOOLING — toutes ont fait tourner leurs 10 fits + bootstrap + synthèse. Le run complet a pris ~10 min (vs 16 h figé).

3. Résultat B — verdict scientifique (axe num_leaves)

event=s42_group_outcome group=defi_top5 status=B_SYSTEMATIC_OVERFIT
  systematic_outcome=True  conclusive=5/5  triggering_axis=num_leaves
  counts={'B_DEFAULTS_OVERFIT': 4, 'B_CAPACITY_OK': 1}
Crypto Verdict n_eff ci_half_width (primary) Note
UNIUSDC B_DEFAULTS_OVERFIT 5 0.0060 refute primary axis
OPUSDC B_DEFAULTS_OVERFIT 5 0.0151 refute primary axis
AAVEUSDC B_DEFAULTS_OVERFIT 5 0.0050 refute primary axis
LDOUSDC B_DEFAULTS_OVERFIT 5 0.0075 refute primary axis
ARBUSDC B_CAPACITY_OK 5 0.0061 TOST equivalence + no exploratory refute (cd_confirmed=True)

Lecture : sur l'axe num_leaves, 4/5 cryptos montrent qu'une config plus douce (31 → 8 feuilles) bat matériellement l'AUC val des défauts → les défauts HPO prod sur-ajustent (seuil SYSTEMATIC_FRAC_CUT=0.80 atteint exactement : 4/5 = 0.80). 1/5 (ARBUSDC) est équivalent (B_CAPACITY_OK).

Terminologie (importante) : ce résultat = H₀(B) RÉFUTÉ → verdict B_DEFAULTS_OVERFITrefuting B » dans le plan L16 = les défauts sur-ajustent). À ne pas appeler « statut B confirmé » — le plan réserve « Status B confirmed » au verdict opposé B_CAPACITY_OK (L29). Le verdict S04 complet reste pending le run 5-axes (§7).

4. Nuances & portée (honnêteté méthodo)

  • Scope = smoke num_leaves (2 points), PAS les 5 axes pré-enregistrés. num_leaves est le levier de capacité primaire, donc le signal est fort, mais le verdict status-B complet du plan (envelope sur les 5 axes num_leaves/learning_rate/min_child_samples/lambda_l2/min_gain_to_split + Bonferroni inter-axes) demande le run 5-axes complet. Ce run-ci tranche num_leaves.
  • Phase A anchor s18_status=FAIL sur les 5 cellules (observed_f1 0.36–0.47) : c'est une divergence replay (territoire A6 du RCA, détection indépendante prévue séparément). Cette divergence n'invalide pas le contraste intra-run 31→8 sur le fold capturé, mais elle limite la portée du claim « prod defaults » jusqu'au traitement A6 : le signal capacité est réel dans le replay capturé ; la fidélité exacte au baseline prod reste à traiter ailleurs.
  • skip_phase_a=true inutilisable sur pod neuf : il vérifie le parquet sur /tmp (éphémère) et ne consulte pas le pin store (consulté seulement en Phase A) → captured_parquet_missing. Le warm path est skip_phase_a=false + use_pin=true. (Run précédent manual__…18:24 = INCONCLUSIVE pour cette raison.)

5. Conséquences

  • Bug fix thread-caps (ADR-0096 / PR #1097) : CLOS — mergé 7cea82d, déployé, cap prouvé, no-hang prouvé. Ferme aussi s42 smoke readiness.
  • Verdict scientifique S04 (à l'issue du smoke) : pas encore clos — ce run smoke num_leaves ne couvrait pas les 5 axes pré-enregistrés. → levé par le run 5-axes complet, §7 (verdict définitif B_SYSTEMATIC_OVERFIT 5/5).

6. Provenance (events Loki, {namespace="cvntrade"} line-filter)

s42_cells_resolved · s42_phase_a_evidence (×5, s18_status=FAIL) · pod_thread_caps_applied · s42_fit_progress (×N, ~2-4 s) · s42_cell_outcome (×5) · s42_group_outcome (B_SYSTEMATIC_OVERFIT). Fenêtre 2026-06-03 06:57–07:07 UTC.

7. Run 5-axes complet — VERDICT DÉFINITIF S04

run_id=manual__2026-06-03T08:02:10 · 08:06:40 → 08:24:56 UTC (~18 min) · axes_subset = 5 axes (num_leaves,learning_rate,min_child_samples,lambda_l2,min_gain_to_split) · points_subset_per_axis="{}" (grids complets) · 25 points × 5 seeds = 125 fits/cellule · même base (skip_phase_a=false, use_pin=true, defi_top5, fold-3).

s42_group_outcome group=defi_top5 status=B_SYSTEMATIC_OVERFIT
  systematic_outcome=True  conclusive=5/5  counts={'B_DEFAULTS_OVERFIT': 5}
Crypto Verdict Axe déclencheur Lecture
UNIUSDC B_DEFAULTS_OVERFIT num_leaves primary refute
OPUSDC B_DEFAULTS_OVERFIT num_leaves primary refute
AAVEUSDC B_DEFAULTS_OVERFIT num_leaves primary refute
LDOUSDC B_DEFAULTS_OVERFIT num_leaves primary refute
ARBUSDC B_DEFAULTS_OVERFIT learning_rate exploratory refute (Bonferroni)

Pourquoi le 5-axes complet comptait : ARBUSDC était B_CAPACITY_OK au smoke (num_leaves seul) → il ne sur-ajuste pas sur num_leaves, mais le balayage complet a trouvé qu'il sur-ajuste sur learning_rate (axe exploratoire, refute Bonferroni-corrigé). Le smoke l'aurait classé à tort capacity-OK. → 5/5 (vs 4/5 au smoke). C'est exactement la valeur de l'envelope multi-axes + Bonferroni du plan pré-enregistré.

Conclusion : H₀(B) RÉFUTÉ systématiquement, 5/5 axes complets → verdict B_SYSTEMATIC_OVERFIT. Une config plus douce bat les défauts sur chacune des 5 cellules (num_leaves pour 4, learning_rate pour ARBUSDC) → les défauts HPO prod sur-ajustent par round sur defi_top5 fold-3. No-hang tient à l'échelle (125 fits/cellule × 5, 18 min, 0 INCONCLUSIVE). Diagnostic S04 = COMPLET (≠ « statut B confirmé », cf. §3). Caveat A6 (s18_status=FAIL, §4) = volet séparé qui borne le claim « fidélité baseline prod », pas le contraste de capacité intra-run.

8. Routing & suite (ce n'est pas une fin de chaîne)

Ce run est un diagnostic, pas une action prod. Le verdict B_DEFAULTS_OVERFIT route (plan S04 L16, Epic §4 routing) :

Fil Statut Suite
Deliverable HP swap OUVERT — deliverable de clôture S04 (option a, décision opérateur 2026-06-03) Le verdict = « le grid HPO prod sur-ajuste → remplacement par une config plus douce » (plan L16). S04 ne ferme PAS avant. Action restante : (1) analyser la trajectoire par axe (les 4 points non-décisionnels/axe = localisation d'optimum, plan §2) pour dériver la config plus douce recommandée ; (2) la valider OOS. Axes déclencheurs déjà identifiés : num_leaves (dominant), learning_rate (ARBUSDC). Tant que ce pas n'est pas fait, S04 est Tested au mieux, pas Closed.
A6 — divergence replay CVN-N001-EI-S09 (GH #1099, wp#237, New) s18_status=FAIL sur 5/5 → détection indépendante (determinism + canonical-divergence, fix-plan §2.E). Borne le claim « fidélité prod » jusqu'à traitement.
Gate S04 satisfait verdict pré-enregistré intégral rendu → In testing → Tested ; /story-advance 227 = geste opérateur.