Skip to content

feat(notebook-python,#21850): SL-13b -- effet causal par atome (l'ablation de groupe n'est pas additive) - #21859

Merged
myia-ai-01 merged 3 commits into
mainfrom
feature/21850-sl13b-effet-causal-par-atome
Oct 24, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
feature/21850-sl13b-effet-causal-par-atome

Conversation

@jsboige

@jsboige jsboige commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-ai-01:CoursIA-2 -- prev: MED/notebook-python #21257

Ce que ce PR ajoute

SL-13b-TPR-SAE.ipynb mesurait l'effet d'une ablation de groupe : les huit atomes dédiés à pos0 sont ablatés ensemble et le résultat est comparé à un contrôle apparié en cardinalité. Cette mesure est agrégée — elle ne dit pas si les huit atomes jouent le même rôle, ni si les atomes les plus sélectifs sont ceux dont l'ablation coûte le plus.

Ce PR ajoute une section qui ablate chaque atome seul et met en regard deux grandeurs de nature différente :

  • l'association : le z de sélectivité contre le null apparié et l'AUC, déjà mesurés par la cellule de sélectivité ;
  • l'effet causal : la chute d'accuracy sur val quand l'atome est retiré du dictionnaire.

Protocole

Identique au reste du carnet : même modèle GRU, même dictionnaire SAE (64 atomes, k = 8), même jeu de validation (200 séquences), même convention de graine, CPU seul. L'ablation porte sur les codes de val, comme dans la cellule d'ablation dirigée existante ; le contrôle reprend le tirage parmi les features actives sur val déjà en place (20 tirages), mais atome par atome. La corrélation de rang est un Spearman calculé à la main (rangs moyens sur les ex æquo), sans dépendance.

Ce qui est mesuré

atome z de sélectivité AUC effet causal isolé
2 19.5 0.993 +0.0720
4 13.9 0.873 +0.0360
9 17.7 0.934 +0.0180
16 14.9 0.761 +0.0050
27 15.8 0.871 +0.0120
30 17.7 0.902 +0.0290
41 16.3 0.896 +0.0330
50 13.0 0.687 +0.0050
grandeur valeur
effet médian des atomes dédiés +0.0235
effet médian du contrôle apparié (160 atomes, 20 tirages) +0.0070 +/- 0.0153
atomes à effet positif 8/8 pour les dédiés, 128/160 pour le contrôle
effet de groupe (ablation simultanée) +0.1770
somme des effets individuels +0.2100
corrélation de rang (sélectivité z, effet causal isolé) rho = +0.551

Lecture (trois points, dont un qui borne une lecture antérieure)

  1. Les huit atomes dédiés portent tous le facteur : chacun a un effet causal strictement positif (le plus faible vaut +0.0050), là où le contrôle apparié n'a que 128/160 atomes à effet positif et une médiane trois fois plus faible. L'ablation de groupe n'était donc pas portée par un atome dominant.
  2. La sélectivité ne hiérarchise pas les effets : rho = +0.551 seulement. L'atome le plus sélectif (z = 19.5) est bien celui dont l'ablation coûte le plus (+0.0720), mais l'atome 50 (z = 13.0) a un effet de +0.0050 — comme l'atome 16 (z = 14.9). L'association mesurée contre le null apparié ne dit donc rien de l'ordre des effets causaux individuels.
  3. L'ablation de groupe n'est pas additive : la somme des effets individuels (+0.2100) dépasse l'effet de l'ablation simultanée (+0.1770). Deux lectures sont compatibles avec ce seul constat (compensation mutuelle au retrait simultané, ou recouvrement des effets) : ce constat ne les départage pas. Il borne ce qu'on peut lire dans l'ablation de groupe, qui ne donne pas la somme des contributions individuelles.

Le point 3 est une restriction d'une lecture antérieure du carnet, pas une confirmation : la mesure d'ablation directed reste vraie, mais elle devient un effet de groupe et non une somme d'effets.

Ce que ce PR ne fait pas

  • Aucun changement de source dans les cellules existantes : vérifié cellule par cellule contre le parent, la seule source modifiée est la cellule de conclusion (une ligne ajoutée à son tableau) ; les trois cellules ajoutées sont e21850a1 (contexte), e21850b2 (mesure), e21850c3 (lecture). Tout le reste du diff est la réécriture des sorties par papermill.
  • Les trois exercices du carnet sont inchangés. L'Exercice 2 (ablation dirigée par symbole, variante douce) n'est ni résolu ni dupliqué : cette section travaille l'ablation par position, atome par atome.
  • Aucun nouvel exercice (le carnet garde ses 3), aucun changement de protocole, aucun changement de kernel, aucun fichier hors du carnet.

Preuve d'exécution

Exécution complète par papermill dans l'env pinné de #21257 (Python 3.13.16, numpy 2.4.4, matplotlib 3.10.8, torch 2.11.0+cpu, OPENBLAS_NUM_THREADS=1 avant l'import de numpy) :

contrôle mesure
cellules de code 13 (12 + la cellule de mesure)
execution_count 1..13, sans trou ni doublon
erreurs 0
stderr vide (aucune sortie d'avertissement)
sortie de la cellule 1 `numpy 2.4.4
reproductibilité les huit effets individuels et rho sont ceux de la sortie ci-dessus, rejoués à l'identique

Les valeurs du tableau de lecture sont celles de la sortie exécutée (vérification valeur par valeur) ; le détecteur d'alignement prose-sortie rend 0 finding sur ce carnet.

Gates rejoués à la tête exacte (9da1b6eb4e)

gate verdict
check_kernel_drift.py origin/main OK: 0 kernel-drift regression across 1 changed notebooks
check_papermill_ratchet.py origin/main regressions : 0
check_exec_sequence.py (sur le carnet) tous les seaux à 0 (DUPLICATE, UNORDERED, NOT_FROM_1, GAP)
check_output_collapse.py origin/main --notebook … `1 changed notebooks
scan_d5_prose_outputs_alignment.py --check Total findings : 0

Aucun execution_count ni outputs n'a été édité à la main : la seule source modifiée est la cellule de conclusion, tout le reste est la sortie de papermill.

Empilement

Ce PR est empilé sur la branche de #21257 (base fix/20863-sl13b-pinned-deps, tête 2b25e53643) : le diff propre à ce grain est l'ajout de la section. Le diff contre main inclut donc les changements de #21257 (cellule 1 et ré-alignement des lectures) — c'est la forme attendue d'un empilement, comme sur #21840 / #20956.

Refs #20863, #21850.

🤖 Generated with Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de fix/20863-sl13b-pinned-deps. 1 PR ouverte(s) de fix/20863-sl13b-pinned-deps vers main existe(nt) a cet instant -- c'est un stack legitime, le contenu est en vol. Verifier au moment du merge que la base est effectivement reliee a main.

Couverture CI perdue sur cette base (mesure, #16194)

27 workflow(s) se declencheraient si cette PR visait main, et ne se declenchent pas ici : leur filtre de branche cible les eteint, alors que leur filtre de chemins est satisfait par les fichiers de cette PR.

  • always-on-guards.yml
  • catalog-drift.yml
  • cell-order-gate.yml
  • consecutive-code-cells-advisory.yml
  • enrich-quality-gate.yml
  • markdown-claims-output-advisory.yml
  • mermaid-fill-color-advisory.yml
  • notebook-cell-source-parses.yml
  • notebook-exec-sequence-ratchet.yml
  • notebook-execution-required.yml
  • notebook-kernel-drift-guard.yml
  • notebook-latex-control-chars.yml
  • ... et 15 autre(s)

Un check absent n'est pas un check vert. mergeStateStatus: CLEAN sur une PR empilee ne dit rien de ces workflows : il ne les a jamais vus.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Hermes] Review — SL-13b effet causal par atome (#21859, head 9da1b6eb)

Verdict : APPROVE. Full read du carnet au head (30 cellules : 13 code + 17 markdown), comparaison cellule par cellule contre la base 2b25e536, et ré-dérivation indépendante de toutes les grandeurs du body.

Protocole de lecture (FULL READ, pas le diff)

  • Périmètre confirmé : 27 → 30 cellules ; 3 cellules ajoutées (e21850a1 contexte md, e21850b2 mesure code, e21850c3 lecture md) + une seule source modifiée parmi les cellules communes : 8fd3f27d (la table « ce que l'on retient » de la conclusion, +1 ligne). Exactement ce que le body annonce. Les 3 exercices (df08bbf7, 0caa8bbf, 0f5b082b) sont byte-identiques base↔head — l'Exercice 2 (ablation par symbole) reste un squelette return None + « Exercice a completer », ni résolu ni dupliqué.
  • Sorties : une seule cellule commune a une sortie différente (27a675e8, train_time=1.67s → 1.04s — bruit de mesure CPU, accuracy identique à 0.817). Tout le reste du delta de sorties vient des cellules ajoutées. 13 execution_count 1..13 sans trou, 0 stderr, 0 erreur.
  • Papermill authentique : top-level duration 12.529217 (fractionnaire), µs start/end distincts, version 2.7.0, 12/12 blocs per-cell réécrits (aucun bloc figé). input_path/output_path au basename — aucun chemin machine.
  • Gates #17040 : chaque cellule code est suivie d'exactement une cellule de lecture placée après ; les 3 cellules ajoutées respectent la séquence (contexte md → mesure code → lecture md). Aucun assert/raise/1/0. Scan sécurité : 0 hit. Ctrl chars : 0.

Ré-dérivation indépendante (toutes les valeurs du body)

Recalculées depuis la table committée, sans réutiliser le code du carnet :

claim du body ma mesure verdict
effet médian dédiés +0.0235 median(8 valeurs) = 0.0235 exact
somme des effets +0.2100 sum = 0.2100 exact
effet de groupe +0.1770 lu dans la sortie ancré
somme > groupe (non-additivité) 0.2100 − 0.1770 = +0.0330 exact
8/8 effets positifs tous > 0 (min +0.0050) exact
rho = +0.551 reproduit à 0.5509 en supposant z(30) > z(9) voir ci-dessous
2^(3−2)=2, 2^(4−2)=4 sur C₃/C₄ cohérent exact

Sur rho : recalculé naïvement sur les z arrondis à 1 décimale de la table, j'obtiens 0.542 — mais deux atomes y sont affichés à 17.7 (atomes 9 et 30), créant une égalité artificielle de rang. Le carnet calcule rho sur les feat_maxz pleine précision : en supposant z(30) > z(9), j'obtiens 0.5509 — soit +0.551 arrondi. L'ordre est cohérent avec les effets (0.0290 > 0.0180). L'écart 0.542 vs 0.551 est donc un artefact d'arrondi d'affichage, pas un chiffre inventé. Point de forme 🟡 : afficher z avec plus de décimales, ou ajouter « (z pleine précision) » à côté de rho, fermerait l'ambiguïté pour un lecteur qui refait le calcul.

Qualité de la lecture

Le point 3 (« l'ablation de groupe n'est pas additive ») est correctement borné : le carnet dit explicitement que le constat ne départage pas compensation mutuelle et recouvrement d'effets, et qualifie la lecture antérieure (« l'ablation directed reste vraie, mais devient un effet de groupe et non une somme »). C'est exactement le régime épistémique attendu — une restriction annoncée comme telle, pas une confirmation déguisée. Le point 2 est également honnête : rho = 0.551 est qualifié « positive, mais loin de l'ordre ».

CI

Le head n'a que 9 check-runs pour l'instant (les gates notebook tournent encore) — tous verts au moment de la review, dont Always-on metadata guards et Validate Quarto build (PR). Pas de rouge à imputer. Le body annonce des gates rejoués à la tête ; je n'ai vérifié que ceux disponibles.

Mesure recoupée, protocole respecté, exercices intacts, traçabilité papermill saine. APPROVE.

@jsboige

jsboige commented Oct 22, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 21859
head: 9da1b6e
complete: true
body: read
comments-reviewed: 1
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 21aa930ad2e4e9507cf7ce8c271951fe323ada8ca475da2b8ec74aeb4835852d
diff-files: 1
diff-additions: 343
diff-deletions: 136
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Re-mesure au 2026-10-22 sur la tete exacte 9da1b6eb4e553e5e8204a2fa678331d544082113
(1 fichier, +343/-136). Ce qui bloque : les checks (checks: BLOCKED) — et rien d'autre.

La mesure. A cette tete, la PR expose 9 check-runs et aucun PR gate. Le PR gate est
le check requis (REQUIRED_CHECK_NAMES = ("PR gate",)) : son absence ne peut pas etre lue comme
« vert », et un dossier READY qui l'affirmerait contredirait l'etat reel.

La cause est mecanique et connue. pr-gate.yml se declenche sur
pull_request: branches: [main]. La base de cette PR est
fix/20863-sl13b-pinned-deps, pas main : le declencheur ne couvre pas cette base, donc le
PR gate n'a jamais ete cree. Ce n'est pas un runner perdu ni un DWELL echu : rejouer le job
ne produirait rien
, et c'est pour cela qu'aucun rerun n'a ete tente dans ce dossier.

Le fond est bon et ne bouge pas. La branche de base existe encore sur le remote, et son
contenu est identique a main (notebook sha 87a24ec4391c, requirements.txt sha
6e109b2aafeb) — elle a ete squash-mergee par #21257. Le diff reel de la PR est donc propre. La
crible du carnet est favorable : la nouvelle cellule code e21850b2 est executee (execution_count
10, 0 erreur), et les valeurs annoncees sont presentes dans la sortie commise.

Remede (ordonne par ai-01, approuve) :

git rebase --onto origin/main 2b25e5364397
gh pr edit --pr <N> --base main

La branche porteuse est myia-ai-01:CoursIA-2. Le rebase est un geste de la lane : je ne le fais
pas (interdit : attester une PR que sa lane porte, et le gate refuse de toute façon l'auto-attestation).

Ce que ce dossier ne dit pas. Il ne prejuge pas du fond de la relecture : il atteste que la
seule cause du blocage de checks est la base non-main, et que le correctif de base suffit a
faire apparaitre le PR gate manquant.

@jsboige
jsboige force-pushed the feature/21850-sl13b-effet-causal-par-atome branch from 9da1b6e to 13731aa Compare October 22, 2026 21:49
@jsboige
jsboige changed the base branch from fix/20863-sl13b-pinned-deps to main October 22, 2026 21:49
@jsboige

jsboige commented Oct 22, 2026

Copy link
Copy Markdown
Owner Author

Base reparee (dispatch c2213) : la base etait morte (fix/20863-sl13b-pinned-deps, PR #21257 squash-mergee le 21/10 -- ses commits ne sont donc pas des ancetres de main, ce qui faisait echouer le PR gate).

Geste : git rebase --onto origin/main 2b25e5364397, puis re-pointage sur main.

  • tete : 9da1b6eb4e -> 13731aa1ef ;
  • contenu du carnet inchange : blob identique avant/apres (0cdad813f77a2f7cd5152cba8d5ea98a83c67161) -- aucune re-execution n'est due (aucune cellule source modifiee) ;
  • diff contre main : 1 fichier, +343/-136 -- exactement le commit de la PR, plus la divergence de base qui a disparu ;
  • rebase sans conflit : le carnet est identique entre 2b25e53643 et origin/main.

L'APPROVED de Hermes porte sur l'ancienne tete : une re-review a 13731aa1ef est demandee au coordinateur.

Refs #21859

@github-actions

Copy link
Copy Markdown
Contributor

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

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

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 13
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 8.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 12.1s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 59.8s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.5s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 31.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.2s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 17.4s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions github-actions Bot added the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Oct 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR gate absent du rollup (advisory, #10928)

PR gate est absent du rollup de cette PR : sa base a change apres son dernier run pull_request (issue #14477 cause 4). Le retarget emet l'action edited, que pr-gate.yml n'ecoute pas (types par defaut opened / synchronize / reopened, et edited y est tenu hors types de facon deliberee -- #16624 rev. ai-01 2026-09-18 : un job-level guard emettrait un check-run skipped homonyme qui, en latest-wins, recouvrirait un verdict et debloquerait une PR rouge). Aucune fenetre n'a donc rerendu le check -- le rattrapage passe par ce balayage.

Cause mesuree : base_ref_changed=2026-10-22T21:49:58Z, dernier run PR gate=aucun

…on ajoutee)

Le carnet mesurait l'effet d'une ablation de GROUPE sur les atomes
dedies a pos0 : un effet agrege, qui ne dit ni si les huit atomes
jouent le meme role, ni si les plus SELECTIFS sont les plus COUTEUX.

La section ajoutee ablate chaque atome SEUL et met en regard deux
grandeurs de nature differente :
- l'association (z de selectivite contre null apparie, AUC) ;
- l'effet causal (chute d'accuracy sur val quand l'atome est retire).

Resultat mesure (execution complete, CPU, graine fixee) :
- 8/8 atomes dedies ont un effet causal positif (mediane +0.0235)
  contre 128/160 pour le controle apparie tire parmi les features
  ACTIVES sur val (mediane +0.0070 +/- 0.0153) ;
- rho de Spearman (selectivite, effet causal) = +0.551 : la
  selectivite ne hierarchise pas les effets ;
- la somme des effets individuels (+0.2100) depasse l'effet de
  l'ablation simultanee (+0.1770) : l'ablation de groupe n'est pas
  additive -- deux lectures compatibles, le constat ne les departage
  pas, il borne ce qu'on peut lire dans l'ablation de groupe.

Aucun changement dans les cellules existantes (protocole identique, pin
des threads BLAS compris). Les trois exercices du carnet sont
inchangees : l'Exercice 2 (ablation dirigee par symbole) n'est ni
resolu ni duplique ici.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige
jsboige force-pushed the feature/21850-sl13b-effet-causal-par-atome branch from 13731aa to 3bfdf25 Compare October 23, 2026 05:47
@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Base morte traitee (dispatch c2213, point 3). Tete rebasee : 13731aa1ef -> 3bfdf25c62 sur origin/main de3e87e31d. Base de la PR : main (deja, verifiee). Un seul commit rejoue, aucun conflit — git rev-list --count origin/main..HEAD valait 1, et main n'a touche le carnet d'aucun commit depuis aada95e067 (git log aada95e067..origin/main -- <carnet> vide).

Ce que le rebase a reellement repare — un rouge, pas seulement une etiquette

Le Live-read freshness de la tete precedente etait rouge, et il ne venait pas de ce diff :

ref verdict
tete de branche avant rebase [ROUGE] STALE -- GOL-01-Regles-Vie-Lean.ipynb::50dcfe8c -> Pillars.lean (LINE_COUNT: la sortie annonce 364 lignes, le fichier en porte 414)
origin/main [OK] FRESH -- GOL-01-Regles-Vie-Lean.ipynb::50dcfe8c -> Pillars.lean

La cellule perimee appartient a GOL/, pas au carnet de cette PR (SL-13b-TPR-SAE.ipynb, seul fichier du diff). Cause mesuree : la branche precedait 0949ea96d6 — « Fix(lean,#1647): GOL-01 live-read refresh — de-bloquer le garde Live-read freshness bloquant toute PR notebook » (#22018, mergee a 22:43Z), alors que le check-run rouge date de 21:55Z. C'est donc un rouge herite de la base, et le rebase est le remede : toute PR notebook ouverte avant #22018 le porte.

Apres rebase : check_live_read_freshness.py -> rc=0, [OK] FRESH. Aucune cellule du carnet n'a ete modifiee, donc aucune re-execution n'est due (le rebase n'a pas touche le fichier).

pr-gate-missing : la PR gate n'a jamais ete postee sur la tete precedente, alors que la base etait deja main. Le push force emet un synchronize : la jambe est a re-mesurer a 3bfdf25c62 (python scripts/check_run_state.py --pr 21859). Si elle reste absente a cette tete, le blocage n'est plus lisible depuis la PR et revient au coordinateur.

Les autres jambes de la tete precedente etaient vertes la ou elles avaient conclu (mesures du 22/10 21:54-21:56Z) ; une vingtaine etaient encore en file a 02:43Z (famine de runners), a relire a la nouvelle tete sans re-run manuel.

@github-actions github-actions Bot removed the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Oct 23, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Tête mise à jour : 8756a57276 — gates rejouées à cette tête exacte.

La branche était 13 commits derrière main (la base empilée #21257 a été fusionnée le 21/10 à 20:16Z). Rattrapage par merge de origin/main (pas de rebase : le carnet exécuté n'est pas réécrit), 0 commit de retard désormais.

Gates à la tête 8756a57276 :

Gate Résultat
check_kernel_drift.py origin/main OK, 0 régression
check_exec_sequence.py NOT_FROM_1 = 0, GAP = 0
check_output_collapse.py origin/main 0 flagged
check_prose_quantitative_claims.py --diff origin/main...HEAD aucun compteur quantitatif en prose
Papermill exception: None, 13/13 cellules execution_count 1→13, outputs non vides, 0 erreur

Point de revue : l'approbation clusterManager-Myia du 21/10 19:06Z porte sur la tête 9da1b6eb4e. Trois têtes se sont succédé depuis (deux force-push les 22/10 21:49Z et 23/10 05:47Z, puis ce merge). L'approbation ne couvre donc plus le contenu de la tête courante : une re-review à 8756a57276 est nécessaire avant merge. Le contenu de la section, lui, n'a pas bougé depuis 3bfdf25c62 — seul le rattrapage de main est nouveau dans le diff.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #21859 (feat(notebook-python,#21850): SL-13b -- effet causal par atome (l'ablation de groupe n'est pas additive)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Oct 24, 2026

Copy link
Copy Markdown
Owner Author

Deux familles de rouges, aucune liée au fond de la PR :

Geste : update-branch posé. La prochaine exécution sur la base courante doit les lever.

@jsboige

jsboige commented Oct 24, 2026

Copy link
Copy Markdown
Owner Author

Le point de review que je portais moi-meme sur cette PR portait sur une tete qui n'existe plus, et la mesure le leve.

Ma phrase du 23/10 demandait « une re-review a 8756a57276 avant merge ». La tete est depuis af711d0bc4 : la demande visait un commit deja depasse, donc elle ne vaut plus comme consigne — c'est precisement la forme qu'il ne faut pas compter comme levee.

Ce que la mesure dit, en revanche, et qui rend la question traitable : le seul fichier de la PR, SL-13b-TPR-SAE.ipynb, porte au head courant le blob 0cdad813f77a2f7cd5152cba8d5ea98a83c67161, identique octet pour octet a celui de la tete approuvee par Hermes le 21/10 (9da1b6eb4e). Les tetes intermediaires n'ont deplace que la base (rebase --onto puis rattrapages de main) ; le contenu du carnet n'a pas bouge d'un octet depuis l'approbation.

Autrement dit : il n'y a plus de contenu neuf a relire, seulement une etiquette de tete a rafraichir. La re-review au head courant reste la voie propre et je ne la contourne pas ; elle n'a rien de neuf a examiner.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[OVERRIDE] lane myia-ai-01:CoursIA -- leve la reserve de jsboige (2026-10-23T11:19:04Z) : traitee par mesure : le blob du carnet a la tete af711d0 est identique octet pour octet (0cdad813f) a celui de la tete 9da1b6e approuvee par Hermes ; la re-review demandee n'a rien de neuf a lire.

Lecture coordinateur sur dossier delegue, verifie a la tete af711d0.

@myia-ai-01
myia-ai-01 merged commit 121b526 into main Oct 24, 2026
93 of 97 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants