Skip to content

refactor(notebooks,#17416): renumerotation d'ensemble Causal-Bridges CausalBridges-01..08 - #17421

Merged
myia-ai-01 merged 4 commits into
mainfrom
feature/17416-causalbridges-renum
Sep 23, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
feature/17416-causalbridges-renum

Conversation

@jsboige

@jsboige jsboige commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/refactor -- lane myia-po-2027:CoursIA -- prev: MED/refactor #17363

Objectif

Numérotation d'ensemble de la série Causal-Bridges (directive user 2026-09-22 : « les séries comme Causal Bridges qui n'ont pas une numérotation d'ensemble sont plus difficiles à lire »). Règle .claude/rules/notebook-accretion-numbering.md : canon <Prefixe>-<num><lettre?>-<Titre>, protocole §5 (mapping + argument pédagogique dans l'issue AVANT la PR, git mv seul, sweep §6 requis).

See #17416 (mapping complet + argument pédagogique par slot : l'ordre du README série, du pont do-calculus au capstone fairness). Issue fille pour le résiduel : #17420.

Mapping (8 git mv, similarité 99 %)

Avant Après Slot
Do-Calculus-Bridge.ipynb CausalBridges-01-Do-Calculus.ipynb pont d'entrée (échelle de Pearl)
DoWhy-1-Estimand-et-Intervention.ipynb CausalBridges-02-Dowhy-Estimand-Intervention.ipynb identification nommée
DoWhy-2-Contrefactuel-Individuel.ipynb CausalBridges-03-Dowhy-Contrefactuel-Individuel.ipynb 3e échelon Pearl
DoWhy-3-Decouverte-de-Structure.ipynb CausalBridges-04-Dowhy-Decouverte-Structure.ipynb graphe inconnu
DoWhy-4-Sensibilite-Confounder-Cache.ipynb CausalBridges-05-Dowhy-Sensibilite-Confounder.ipynb confondeur caché
DoWhy-5-Instrument-Faible.ipynb CausalBridges-06-Dowhy-Instrument-Faible.ipynb instrument faible
Quasi-Experimental.ipynb CausalBridges-07-Quasi-Experimental.ipynb quasi-expérimental
Causal-Fairness.ipynb CausalBridges-08-Causal-Fairness.ipynb capstone fairness

Contenu du diff — 44 fichiers changés, +118/−113, dont 3 conversions LF committées (a08b3bd + e5fcec3, la 44e = attestation twin parity #8057)

  • 8 renommages purs (git mv ; 2-12 lignes internes changées par notebook = liens inter-siblings + metadata papermill, le sweep §6 requis) ;
  • sweep mécanique des référents vivants (~30 fichiers) : READMEs (série, Probas, DecisionTheory), _quarto.yml, docs/curriculum/{recherche,trading}.md, organs (causal_organs.py, dowhy_*.py), 3 tests série, notebooks consommateurs cross-série (ICT-05/06/24, Infer-5, PyMC-05, Tweety-11 ×2, DSA 2.14/2.14b), protocole Argument_Analysis, ict/bridges/*.py + test, baselines (md_hierarchy_baseline.json, pedagogy_density_baseline.json) ;
  • labels numérotés (30 occurrences) : [DoWhy-1 — …] → [CausalBridges-02 — …] etc. dans READMEs + curriculum — c'est la lisibilité visée par la directive ;
  • zero_pad_series.json : entrée candidate DoWhy -- Probas/DecisionTheory/Causal-Bridges (2) retirée (la famille non-paddée n'existe plus ; la série est désormais pad 2 chiffres par construction, Remise d'aplomb de la nomenclature des notebooks — suffixe noyau, sans-numero, profondeur d'accretion #16231) ;
  • ledgers, archives, COURSE_CATALOG.generated.* : non touchés (byte-identiques à main).

Validation (organes du §6, relancés APRÈS le commit a08b3bd)

Organe Résultat
check_notebook_navlinks.py (8 notebooks) OK 0 lien cassé ×8
scripts/check_docs_links.py (repo) 751 fichiers, 7416 liens, 0 cassé
check_link_label_agreement.py (repo) 2223 fichiers, 0 désaccord libellé/cible
check_notebook_link_render.py (8 notebooks) 0 MANQUE ×8
detect_link_target_regression.py (4 consommateurs : DSA 2.14b, Tweety-11, ICT-05, Infer-5) regressions=0 ×4

Tests série : 92 passed / 3 failed — les 3 échecs sont base-inherited (vérifiés identiques sur main propre avec les anciens noms, 0.52-0.95 s, mêmes assertions ; issue #17420 ouverte avec repro). 92 autres verts APRÈS renommage.

Traductions (override #10332)

[TRANSLATION-OVERRIDE] Les 4 CSV touchés (translations/iit/, translations/probas-infer/, translations/probas-pymc/, translations/tweety/tweety.csv) ne changent que la colonne chemin des notebooks renommés (fichiers dérivés régénérés depuis la source) — aucun changement de contenu de traduction. Motif : renommage mécanique #17416, dual-key conforme.

Non-livrés

  • Catalogue : laissé byte-identique à main (règle catalog-pr-hygiene — régénération par l'automatisation).
  • Passe de labels dans la prose interne des notebooks consommateurs (hors tables README/curriculum) : volontairement pas touchée (§5 — aucun changement de contenu notebook au-delà du sweep de liens).

🤖 Generated with Claude Code

@jsboige jsboige added the translation-override Dual-key override for translation-guard (#10332): label + [TRANSLATION-OVERRIDE] comment required label Sep 22, 2026
@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.1s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.1s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 15.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.6s

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

@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

⚠️ 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

Notebook PR Validation: PASS

  • Notebooks checked: 9
  • Code cells validated: 110
  • 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)

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

[TRANSLATION-OVERRIDE] Renommage mecanique #17416 : les 4 CSV touches (iit, probas-infer, probas-pymc, tweety) ne changent QUE la colonne chemin des notebooks renumerotes (CausalBridges-01..08) - fichiers derives regeneres depuis la source, aucun changement de contenu de traduction. Dual-key #10332 : label translation-override pose a la creation.

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17421 (refactor(notebooks,#17416): renumerotation d'ensemble Causal-Bridges CausalBridges-01..08) 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.

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

Point infra — les 2 checks restants sont des défauts de runner, pas de la PR (preuves)

Etat à la tête e5fcec323649 : 87 pass (dont Scripts Tests au rerun de la tête précédente, translation guard + twin parity réparés via dual-key #10332 + attestation #8057). Restent 2 fails, tous deux reproductibles comme défauts d'environnement des runners coursia-ephemeral (incident flotte documenté sur le dashboard global, fix gh en cours par po-2026) :

  1. Exec-sequence ratchet (base vs PR) — étape « Organ unit tests » : /home/jesse/CoursIA-runners-p0/slot-2/_work/_tool/Python/3.12.14/x64/bin/python: No module named pytest (exit 1, 2 reruns, 2 fails identiques). Le tool-cache du slot n'a pas pytest.
  2. Scripts Tests (CPU) — test_guard_gauntlet.py : stderr=[BASELINE_FAILED] fault=none exit=127 — exit 127 = binaire gh absent du runner (mesuré sur slot-2 puis slot-1 au rerun).

Les exécutions qui ont réellement tourné sur ces organes sont vertes ; aucun des deux échecs ne lit le diff de la PR. Je ne re-rerun pas en boucle — ils reverdiront quand l'infra sera réparée (rerun à poser alors).

Residuel local (base-inherited, pas CI) : les mêmes tests organ unit tests échouent sur main propre sous Windows via un crash decode cp1252 (stderr=None, em-dash 0x97) — issue #17427 ouverte avec repro (PYTHONIOENCODING=utf-8 les fait passer).

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

[Rouge non réparable par la lane — justification écrite --ignore-red, rappel 2026-09-22T17:00Z]

Les 3 rouges (Exec-sequence ratchet, Scripts Tests (CPU), PR gate agrégé) sont base-imputés/infra, documentés avec preuves au commentaire du 2026-09-22T13:0xZ : ratchet corroboré flotte-wide (#17338/#17410/#17421 même signature), Scripts Tests = défaut runner po-2026 (No module named pytest / gh absent des slots — fixes #17414/#17415 en attente merge chez po-2026). Le diff de la PR (8 renames + sweep) est inchangé ; un update-branch ne réparerait rien et tuerait le dossier éventuel.

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

Attribution des rouges Scripts Tests (CPU) / Exec-sequence ratchet : BASE-INHERITED, preuves firsthand :

Rejouer ces jobs maintenant les ferait échouer sur les mêmes défauts de base ; la correction n'est pas committable sur cette branche (aucun de ces chemins n'y est touché). Les deux PRs réparatrices sont en file de merge — c'est la seule dépendance.

🤖 Generated with Claude Code

@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 github-actions Bot added paragraph-length Paragraph > 2000 chars (wall-of-text, #15405). Resorb before merge. consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) labels Sep 22, 2026
myia-ai-01 pushed a commit that referenced this pull request Sep 23, 2026
…ndependant de l'ACP) (#17432)

* fix(#17427): check_exec_ratchet emet en UTF-8 deterministe — le verdict ne depend plus de l'ACP

Sur Windows ACP 1252, l'organe lance en subprocess encodait ses pipes en
cp1252 : l'em-dash des annotations ::error partait en byte 0x97, le lecteur
(tests TestCli, encoding="utf-8") levait UnicodeDecodeError dans le reader
thread -> stderr=None -> 2 faux rouges sur main Windows (verdict masque).

Correctif : reconfigure stdout/stderr en UTF-8 a l'entree de main() —
sibling pattern #12811/#13191/#14154/#15185/#15668, hasattr pour Python<3.7
et flux captes.

Falsification (test nouveau, machine ACP 65001 simulant l'enfant 1252 via
PYTHONIOENCODING) : pre-fix FAILED 'utf-8' codec can't decode byte 0x97 in
position 111 (signature EXACTE de l'issue) ; post-fix 21 passed, et 21
passed aussi sans PYTHONIOENCODING/PYTHONUTF8. Fichier frere
test_check_exec_sequence.py : 23 passed.

Note forensic : le rouge CI Organ unit tests de la PR #17421 qui a revele
ce bug est d'une AUTRE cause (No module named pytest, tool-cache Python du
slot natif po-2026 — famille #17407) ; ce fix corrige le defaut de contenu,
pas ce rouge d'infra.

Closes #17427

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(#17432): re-trigger CI after Scripts Tests flaky failure

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

Rouge base-inherited (fenetre quota GitHub / runner partage), pas un defaut de contenu de la PR -- corroborre sur plusieurs PRs de lanes distinctes la meme fenetre. Rerun emis sur les runs concernes ; les verdicts de contenu (organes qui ont pu tourner) sont verts. Detail sur demande.

jsboige and others added 2 commits September 23, 2026 03:57
…1..08

8 git mv (canon <Prefixe>-<num>-<Titre>, pad 2 chiffres) + sweep mecanique
des referents vivants (44 fichiers) + labels numerotes READMEs/curriculum +
entree candidate DoWhy retiree de zero_pad_series.json.

Renommages: Do-Calculus-Bridge -> CausalBridges-01, DoWhy-1..5 ->
CausalBridges-02..06, Quasi-Experimental -> 07, Causal-Fairness -> 08.
Mapping complet + argument pedagogique par slot: issue #17416.

Organes: navlinks 8/8 OK, docs_links 7416 liens 0 casse, label_agreement
2223 fichiers 0 desaccord, link_render 8/8 0 MANQUE. Tests serie: 92 passed,
3 failed base-inherited (verifies identiques sur main, issue dediee a venir).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…wins portent le sweep des liens CausalBridges renommes (drift symetrique par construction, #8057)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

Etat CI a 02:55Z (lane myia-po-2027:CoursIA) :

Aucun geste d'edition sur cette branche : les rouges restants sont portees par la base ou par l'infra.

@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17421
head: 78ec5ee
complete: true
body: read
comments-reviewed: 12
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3cdd4dce426c9fd7426ea8ba63990703ad0608b92c741eac3968114d4da4a54d
diff-files: 44
diff-additions: 826
diff-deletions: 821
checks: latest-wins-green
b0: clear
scope: pass
domain: fail
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Au head 78ec5ee (fusion de main au-dessus du rebase e838b85+c80c7ea7fc) : 97 check-runs dédupliqués latest-wins, tous verts ; b0 rc=0. L'APPROVE de Hermes porte sur e5fcec3, avant le rebase ; j'ai vérifié que le contenu est identique, à la fin de ligne près (diff --ignore-cr-at-eol du tête-à-base e5fcec3 et du tête-à-base actuel : mêmes lignes +/-).
Le domaine ne passe pas, pour une seule raison mesurée : trois fichiers passent en bloc de LF à CRLF (git cat-file blob, compte des octets). Ce sont docs/curriculum/recherche.md (main 0 CRLF sur 331 lignes, tête 331 sur 331), docs/curriculum/trading.md (0 sur 303, puis 303 sur 303) et scripts/notebook_tools/zero_pad_series.json (0 sur 83, puis 82 sur 82). Le changement voulu y fait 4+4+1 lignes ; le diff en porte 331+303+83. C'est ce qui gonfle la PR à +826/-821, alors que le renommage réel fait +118/-113. docs/** et ce JSON ne sont couverts par aucune règle eol=lf de .gitattributes, d'où le passage silencieux. Le cron de catalogue régénère les pages docs/curriculum en LF sur Linux : il re-basculerait les 634 lignes au passage suivant, et le JSON resterait en CRLF sur main.
Geste pour la lane porteuse myia-po-2027:CoursIA : repasser ces trois fichiers en LF (réécriture binaire, par exemple python -c avec open(...,'rb') et replace(b'\r\n', b'\n')), commiter, puis vérifier que git diff --stat origin/main...HEAD retombe à environ +118/-113 et corriger le compte du body. Un commit de contenu ré-arme le plancher DWELL, c'est attendu. Les pages curriculum restent éditées à la main malgré leur en-tête « FICHIER GENERE » ; je n'en fais pas un motif, parce que les liens vers les anciens noms casseraient jusqu'au prochain cron et que le contenu anticipe exactement ce qu'il produira.

…ing.md, zero_pad_series.json)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

Rouge Gitleaks secret scanner sur la tête 8a184b2a : runner mort à l'exécution, pas un finding de secret. Annotation du check-run (id 107092312280) : "The self-hosted runner lost communication with the server". Fenêtre corrobore : 3 nouveaux runs Secret Scan (07:57-08:00Z) tous restés queued, #17493 vert au même moment, #17503 en attente de runner. Aucun secret dans le diff (44 fichiers, +118/−113 après conversion LF). Jambe relancée (gh run rerun 35833784681 --job 107092312280) — un rerun ne ré-arme pas le plancher DWELL (pas de push).

@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[INFO] Rouge impute a la base — rien a reparer dans cette PR.

Mesure firsthand : les seuls rouges non verts de la tete sont Scripts Tests (CPU) et son agregat PR gate.

  • Scripts Tests (CPU) : le runner meurt en plein step (signature « runner lost mid-step at "Run tests" », tache d'infra ci: Scripts Tests (CPU) -- un worker xdist mort bloque la jambe jusqu'au plafond (14-17 min de silence apres [99%]) #16288) — le code n'est jamais mesure. Le gate le dit lui-meme dans l'annotation de PR gate : « the code was never measured: rerun the CHILD run that owns the job, not the gate ».
  • Corrobore sur main : le run scripts-tests.yml du 2026-09-23T11:30:45Z (branche main) est lui aussi en echec — la cause est sur main, pas dans cette branche.
  • PR gate est un agregat : il ne rougit que parce que Scripts Tests (CPU) l'est. Aucun autre rouge n'est propre a cette PR.

Consequence : aucun test de cette PR n'a tourne, il n'y a donc pas de defaut a corriger ici. Le rouge reste route au coordinateur (unique reparateur possible de la jambe enfant sur main).

@jsboige

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17421
head: 8a184b2
complete: true
body: read
comments-reviewed: 15
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 30fcb56776116dccdbaf59b9d3dec03faa4bc62e104ad36bd11fe31a31aaff4b
diff-files: 44
diff-additions: 118
diff-deletions: 113
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 10fb507 into main Sep 23, 2026
102 of 111 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 26, 2026
… (2) et index.qmd (7) (#17710)

* fix(docs,#17416): deux liens de la lecture grothendieckienne vers le notebook renumerote

La renumerotation Causal-Bridges (#17421) a renomme Do-Calculus-Bridge.ipynb en
CausalBridges-01-Do-Calculus.ipynb ; docs/grothendieckian-lens.md:93 et :97 pointaient
encore l'ancien nom. check_docs_links.py --check : 2 liens rompus -> 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(docs,#17416): sept liens relatifs de docs/index.qmd pointaient un cran trop haut

Le projet Quarto est a la racine du depot : depuis docs/index.qmd,
`../curriculum/...` et `../../README.md` sortent de docs/ ou du depot.
Quatre liens vises par la review NanoClaw 5310328866, plus trois de la
section « Pour commencer » trouves par le meme balayage.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 2, 2026
…nte (#17421) (#18720)

Titres md[0] des carnets 02-06 (ex-DoWhy-1..5) + erratum de renumerotation,
renvois prose et labels de liens repoints sur les numeros courants.
Markdown-only (exception C.2), editions textuelles chirurgicales dans le JSON
brut (lecon notebook-edit-rawtext), diff 25 lignes sur 7 fichiers.

See #18718

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) paragraph-length Paragraph > 2000 chars (wall-of-text, #15405). Resorb before merge. translation-override Dual-key override for translation-guard (#10332): label + [TRANSLATION-OVERRIDE] comment required

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants