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__s42après le fix thread-caps (ADR-0096, PR #1097). Deux runs : (1) un smokenum_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_OVERFIT5/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_OVERFIT(« refuting 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_leavesest le levier de capacité primaire, donc le signal est fort, mais le verdict status-B complet du plan (envelope sur les 5 axesnum_leaves/learning_rate/min_child_samples/lambda_l2/min_gain_to_split+ Bonferroni inter-axes) demande le run 5-axes complet. Ce run-ci tranchenum_leaves. - Phase A anchor
s18_status=FAILsur 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=trueinutilisable 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 estskip_phase_a=false+use_pin=true. (Run précédentmanual__…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 aussis42 smoke readiness. - Verdict scientifique S04 (à l'issue du smoke) : pas encore clos — ce run smoke
num_leavesne couvrait pas les 5 axes pré-enregistrés. → levé par le run 5-axes complet, §7 (verdict définitifB_SYSTEMATIC_OVERFIT5/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. |