Skip to content

fix(test,#13534): epingler la cohorte de baseline du cliquet quant (le corpus grandit, le test ne le savait pas) - #13538

Merged
jsboige merged 1 commit into
mainfrom
fix/13534-cohort-pin-quant-ratchet
Aug 29, 2026
Merged

jsboige merged 1 commit into
mainfrom
fix/13534-cohort-pin-quant-ratchet

Conversation

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Grain: MED/test — lane myia-ai-01:CoursIA — prev: MED/tooling #13503

Le rouge

test_c1301_23_ml_dfA_post_cablage_drainable_below_pre_cablage rougit sur toute
PR touchant scripts/ : drainable=210 >= 209. Il bloque en ce moment la file de
merge (constate sur #13513, run 33266667833) et trois lanes ont brule des cycles
dessus (#12737, #13062, #13067) — aucune ne pouvait le reparer, le defaut n'etant
dans aucune d'elles.

Ce n'est pas une regression — c'est une comparaison invalide

La borne 209 a ete mesuree le 2026-08-08 (origin/main @ a0c5d142f) sur les
28 notebooks que ML/DataScienceWithAgents portait a cette date. Le test la
comparait au compte du corpus entier d'aujourd'hui — 49 notebooks. Les deux
nombres ne comptent pas le meme ensemble.

Mesure firsthand, avec l'instrument du test lui-meme (_aggregate_drainable) :

ensemble n drainable
cohorte de la baseline 28 93 → 68 (−27 %)
arrivants depuis 21 142 (6.8/nb, ~2.8× le taux draine)
total 49 210

68 + 142 = 210 — exactement le nombre que le test rapporte. Le cablage v4 n'a
rien perdu : il a ameliore de 27 % le corpus qu'il avait mesure.
Ce qui monte, ce
sont les notebooks neufs, qui n'ont jamais ete draines.

Le correctif

Epingler la cohorte : l'assertion porte sur les notebooks que la baseline a
effectivement comptes. Ce que le test affirme — « le cablage v4 a retire des
FP » — redevient falsifiable, et le reste quand le corpus grandit.

Ce qui a ete refuse : monter la borne a 211. Cela aurait fait taire le rouge en
effacant la seule chose que le test mesurait, et le meme rouge serait revenu au
notebook suivant.

Le sibling est corrige aussi. Search/Part1 (borne 378, cohorte 29 nb) porte le
meme defaut, encore latent : 2 arrivants pour 13 drainables, la borne n'est
pas franchie. Corrige avant qu'il ne rougisse.

Controles positifs

Une assertion verte ne prouve rien tant qu'on n'a pas montre qu'elle mord encore.

control resultat
borne 209 → 60 FAIL assert 68 < 60 — la borne mord toujours
cohorte pointant un chemin inexistant FAIL drainable=0 == 0 : le cablage a elimine TOUT — fail-CLOSED

Le second est le plus important : si les chemins de la cohorte cessaient de matcher
(renommage, deplacement), le test ne passerait pas en silence sur un ensemble
vide — il rougit sur la borne basse deja presente.

Sortie du test — les deux nombres desormais visibles

[ML/DfA]       cohorte n=28 drainable=68  (pre-cablage=209, delta=67.5%)
               | hors-cohorte n=21 drainable=142 (non gatant)
[Search/Part1] cohorte n=29 drainable=176 (pre-cablage=378, delta=53.4%)
               | hors-cohorte n=2 drainable=13 (non gatant)

101 passed sur le fichier entier.

Non touche : ..._drainable_breakdown_minimum_mach_dep (borne basse >= 1)
— une borne basse est insensible a la croissance du corpus.

Note de lane (honnetete de variete)

Mes 6 derniers grains sont tooling, notebook-python, guard, guard, tooling, tooling :
META-lourds. Ce grain-ci est test, donc META lui aussi. Il se justifie par
l'urgence — il debloque la file de merge de toute la flotte — mais il ne tient pas
le plancher G-VAR-1 de mon cycle. Mon prochain grain doit etre du CONTENU.

Closes #13534

…e corpus grandit, le test ne le savait pas)

Le test `test_c1301_23_ml_dfA_post_cablage_drainable_below_pre_cablage`
rougissait sur TOUTE PR touchant `scripts/` : drainable=210 >= 209.

Ce n'est pas une regression du cablage v4. C'est une comparaison invalide.

La borne 209 a ete mesuree le 2026-08-08 (origin/main @ a0c5d14) sur les
28 notebooks que ML/DataScienceWithAgents portait A CETTE DATE. Le test la
comparait au compte du corpus ENTIER d'aujourd'hui -- 49 notebooks. Les deux
nombres ne comptent pas le meme ensemble : la serie est en expansion active,
et chaque notebook ajoute pousse le total, sans qu'aucun faux positif ne soit
revenu.

Mesure firsthand (instrument = `_aggregate_drainable`, celui du test) :

  cohorte de la baseline (28 nb) :  93 -> 68    le cablage TIENT (-27 %)
  arrivants               (21 nb) :        142   6.8/nb, ~2.8x le taux draine
  total                           :        210   au-dessus de la borne 209

68 + 142 = 210, exactement le nombre que le test rapporte. Le cablage v4 n'a
rien perdu : il a ameliore de 27 % le corpus qu'il avait mesure.

Correctif : epingler la cohorte. L'assertion porte sur les notebooks que la
baseline a effectivement comptes. Ce que le test AFFIRME -- << le cablage v4
a retire des FP >> -- redevient falsifiable, et le reste quand le corpus grandit.

Ce qui a ete refuse : monter la borne a 211. Cela aurait fait taire le rouge
en effacant la seule chose que le test mesurait, et le meme rouge serait
revenu au notebook suivant.

Le meme defaut est corrige sur Search/Part1 (borne 378, cohorte 29 nb) : il y
est LATENT -- 2 arrivants pour 13 drainables, la borne n'est pas encore
franchie. Corrige avant qu'il ne rougisse plutot qu'apres.

Controles positifs (une assertion verte ne prouve rien tant qu'on n'a pas
montre qu'elle mord encore) :

  1. borne 209 -> 60  =>  FAIL `assert 68 < 60`         la borne mord
  2. cohorte pointant un chemin inexistant  =>  FAIL
     `drainable=0 == 0 : le cablage a elimine TOUT`     fail-CLOSED

Le second controle est le plus important : si les chemins de la cohorte
cessaient de matcher (renommage, deplacement), le test ne passerait pas en
silence sur un ensemble vide -- il rougit sur la borne basse existante.

Sortie du test, les deux nombres desormais visibles :

  [ML/DfA]      cohorte n=28 drainable=68  (pre-cablage=209, delta=67.5%)
                | hors-cohorte n=21 drainable=142 (non gatant)
  [Search/Part1] cohorte n=29 drainable=176 (pre-cablage=378, delta=53.4%)
                | hors-cohorte n=2 drainable=13 (non gatant)

101 passed sur le fichier entier.

Non touche : `test_c1301_23_ml_dfA_drainable_breakdown_minimum_mach_dep`
(borne BASSE `>= 1`) -- une borne basse est insensible a la croissance.

Closes #13534
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-08-29) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=0 genre=3 cap=4)
  • GENRE-RUN : run consecutif d'un genre LIGHT (voir signals.runs dans le log du job)

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions github-actions Bot added the lane-claim-absent Closing issue carries no claim at all (#10223) label Aug 29, 2026
@jsboige
jsboige merged commit a72ce1b into main Aug 29, 2026
16 checks passed

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] — APPROVE motivé (checklist passée, artefacts ci-dessous).

Issue-First (#13534) : la méthode du PR est exactement celle que l'issue documente. L'issue établit avec l'instrument du test lui-même (_aggregate_drainable) que la cohorte des 28 notebooks drainés est passée de 93 à 68 (-27 %) et que les 210 venaient des 21 arrivants (68+142=210 = la valeur que le test produisait sur le corpus entier). Le PR épingle cette cohorte au lieu de monter la borne à 211 — et l'alternative rejetée est écrite noir sur blanc dans le commentaire du code, dans le bon sens (préserver le caractère falsifiable plutôt qu'effacer la mesure).

Vérifications faites :

  • Comptes de cohortes recomptés depuis le diff : _COHORT_ML_DFA = 28 entrées, _COHORT_SEARCH_PART1 = 29 entrées — conformes aux commentaires et à l'issue.
  • Application symétrique : les DEUX bornes (ML/DfA 209, Search/Part1 378) reçoivent le même traitement ; Search/Part1 est corrigé avant rougissement (défaut latent documenté : +2 notebooks / 13 drainables) — fix complet, pas juste le chemin de l'incident.
  • Source externe : from pathlib import Path déjà présent au head (ligne 13) — le nouveau helper n'introduit pas d'import manquant.
  • Sémantique _split_cohort : notebook supprimé → disparaît des deux listes, borne haute reste valide (documenté) ; hors-cohorte affichés mais non gâtants — le test redevient insensible à la croissance du corpus sans devenir aveugle aux arrivants.
  • Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=).

Note mineure (non bloquante) : Path(str(r.path)).resolve() résout contre le CWD — si r.path était relatif avec CWD ≠ racine du corpus, le notebook glisserait vers « hors-cohorte » et l'assertion porterait sur moins de notebooks sans crier. Le contrôle 68+142=210 de l'issue prouve que les chemins sont absolus en pratique ; une garde len(cohort) == attendu durcirait pour l'avenir.

jsboige added a commit that referenced this pull request Aug 30, 2026
… une mesure (#13540)

#13538 a regle le rouge du cliquet en epinglant la cohorte de baseline -- le
corpus grandissait, le test ne le savait pas. Ce diagnostic-la est le bon et
n'est pas remis en cause ici.

Reste, en dessous, un defaut distinct du SCANNER lui-meme : un renvoi
inter-notebooks comme `[2.6 clustering & acp](2.6-clustering-kmeans-pca.ipynb)`
porte un numero de SECTION, pas une grandeur susceptible de deriver d'une
machine a l'autre. La classe (c) section-number du cablage v4 reconnait deja
ces numeros HORS lien ; elle n'atteint pas l'interieur de la syntaxe [..](..),
ou le meme numero apparait DEUX fois (label et cible).

Mesure firsthand sur origin/main @ a72ce1b :

  corpus entier ML/DfA        (49 nb) : 210 -> 183   (27 FP retires)
  corpus entier Search/Part1  (31 nb) : 189 -> 182   ( 7 FP retires)
  cohorte epinglee ML/DfA     (28 nb) :  68 ->  63
  cohorte epinglee Search     (29 nb) : 176 -> 169

Les quatre assertions de cliquet restent vertes, bornes inchangees.

DEUX regles voisines ont ete mesurees puis ECARTEES, et le commentaire du code
les consigne pour qu'on ne les rajoute pas sans mesure :

  - masquer les blocs ``` fermes : 183 aussi, exactement +0 finding.
  - masquer les spans de code inline : descend a 157, mais supprime de VRAIES
    mesures que le scanner existe pour trouver -- p.ex. la divergence
    numpy/torch de 3.3-Regularisation, "fraction de zeros : 0.4014 (numpy) et
    0.4007 (torch)", ou les backticks sont de la TYPOGRAPHIE, pas du code.

Cette variante-la avait ete ecrite en premier ; c'est l'echantillonnage des 69
findings qu'elle masquait qui l'a refutee. D'ou les deux tests de controle
positif : sans eux, elargir le masque jusqu'a tout supprimer passerait le test
principal et viderait le scanner de sa fonction.

Co-authored-by: jsboige <jsboige@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jsboige
jsboige deleted the fix/13534-cohort-pin-quant-ratchet branch September 2, 2026 13:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

2 participants