Skip to content

Fix(lean,#17357): KNOTS-02 -- 3 faux positifs (audit perime) + 3 constats confirmes (s, sections, ancrage) - #20139

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/17357-knots02-stale-claims
Oct 10, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/17357-knots02-stale-claims

Conversation

@jsboige

@jsboige jsboige commented Oct 9, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-lean — lane myia-po-2023:CoursIA-2 — prev: MED/notebook-lean #20134

Le carnet se contredisait dans une seule cellule, et annonçait un exercice avant d'avoir livré la section qui le précède — neuvième carnet de la file #17357 pour cette lane.

Reassessed by myia-po-2023:CoursIA-2: CONFIRMED (F4, F5, F6) — F1, F2 et F3 sont des FAUX POSITIFS.

Audit source : commentaire 5848020056 (Hermes, campagne #17073 — stale-claim ×4, block-pasted-wrong-section ×1, orphan-statement ×1 ; dossier « proposés 6 · confirmés 6 · rejetés 0 », sha256 495340ba au 2026-09-26).

D'abord : trois des six constats ne sont plus vrais au head

Le carnet a été réparé après l'audit, par le commit 07688da5e8 (#19666, cette même lane, 2026-10-09) — « section 6.1 SnapPy 3.3.2 — 5/5 PD-codes + float(vol) + is_achievable retrait + 3 contre-vérités ». Mesure au head, contre les trois citations de l'audit :

Constat Ce que l'audit cite Ce que le head porte
F1 volume de Conway « Conway = ~2.8 » « Conway (K11n34) = 11.21912 (= K-T K11n42) »
F2 PD-codes des mutants « PD-codes identiques: True » PD-codes identiques: False
F3 figure §6.1 « Volume: N/A (non-hyperbolic) » if vol > 0: … f"Volume: {float(vol):.5f}" — le N/A ne survit que dans le except

Aucune des trois citations n'existe dans le fichier au head : c'est le cas d'école de l'audit périmé (audit-reassessment — un constat se re-vérifie avant d'être corrigé). Je n'ai donc touché à rien de ce que F1/F2/F3 décrivent.

Le sous-point de F1 était réel, lui : le Résumé laissait la colonne Volume à « — » pour K11n34 et K11n42 alors que la §2 mesure 11.21912 pour les deux. Corrigé (voir D4).

F4 — CONFIRMÉ : la §6.4 se contredit dans sa propre cellule

Cellule 2aa5a03f, bloc « Pour Conway vs K-T » :

  • L'homologie de Khovanov est aussi identique (mutants ont même KH)
  • MAIS l'invariant $s$ de Rasmussen se calcule via Khovanov et donne $s(K11n34) = 2$, $s(K11n42) = 0$

Les deux lignes ne peuvent pas être vraies ensemble : $s$ se calcule depuis $KH$. Si les mutants ont la même homologie, ils ont le même $s$.

Ce que dit la mesure. K-T est un nœud slice — c'est ce qui rend le couple célèbre, et c'est déjà ce que porte ce carnet (slice_smooth: True, et la table de la §4). Un nœud lisse a $s = 0$ ; donc $s(K11n42) = 0$, et par l'identité d'homologie $s(K11n34) = 0$ aussi. L'invariant est donc muet sur ce couple — et c'est précisément pour cela que la question est restée ouverte ~50 ans : tout invariant qui répondrait « Conway n'est pas slice » se tromperait aussi sur K-T, qui l'est.

Conséquence sur l'attribution. La même cellule ajoutait « c'est l'invariant $s$ (pas KH directement) que Piccirillo utilise en 2020 », et la §5 le répétait (« via l'invariant $s$ de Rasmussen, Conway n'est PAS lisse »). Appliqué au nœud de Conway, $s = 0$ ne dit rien. Piccirillo construit un nœud compagnon $K^$ partageant la même trace $0$-framée que Conway, et c'est sur $K^$ que $s$ parle ($s(K^) \neq 0$ → $K^$ non slice) ; un nœud est slice si et seulement si sa trace s'immerge dans $B^4$, donc l'obstruction remonte à Conway. C'est déjà la stratégie en cinq étapes que porte KNOTS-01 (le carnet jumeau, mergé) — les deux carnets disent désormais la même chose.

F5 — CONFIRMÉ : l'exercice 1 annoncé avant toute la §6

La cellule exercise-1-intro portait deux en-têtes : le chapeau « ## 6. Visualisations Avancées des Invariants » et « ## 7. Exercices / ### Exercice 1 — Volume d'un nœud torique ». Conséquence mesurée : le corps de la §6 (6.1 → 6.5, cellules 15 à 30) arrivait après l'annonce de l'exercice, et le code de l'exercice 1 était repoussé à 19 cellules de son énoncé.

Correctif : dédoublement. La cellule garde la §6 ; l'annonce §7 + l'énoncé partent dans une cellule propre, placée juste avant le code de l'exercice 1 (idx 32 → 33).

F6 — CONFIRMÉ : deux cellules orphelines du genre de slice

aeb7ac2f (### Interprétation sur $g_4$) et 997df753 (table du genre de slice) flottaient entre l'en-tête §6 et la §6.1, sans en-tête parent — alors que leur propos est celui de la §5 (sliceness). Elles remontent dans la §5, ancrées par un en-tête « ### 5.1. Genre de slice ($g_4$) ».

Cet ancrage est aussi ce qui rend le propos vrai : c'est la table $g_4$ qui sépare vraiment les deux mutants (Conway $g_4 = 1$, K-T $g_4 = 0$) là où $\Delta$, Jones et la signature sont d'accord — l'exact inverse de ce que la §6.4 racontait sur $s$.

Le correctif, en une table

# Site Ce qui change
D1 (F4) 2aa5a03f §6.4 $s = 0$ pour les deux ; le silence de $s$ est le problème ; Piccirillo conclut via $K^*$ de même trace
D2 section-alexander-intro §5 le point 4 nomme le compagnon au lieu de laisser croire à un calcul direct sur Conway
D3 conclusion-cell la ligne « $s$ nécessaire pour la sliceness lisse » devient « $s$ ne sépare pas ce couple »
D4 conclusion-cell colonnes Volume de K11n34/K11n42 : « — » → 11.219 (mesuré en §2)
D5 (F5) exercise-1-intro + nouvelle sec-7-exercices l'énoncé §7 descend juste avant son code
D6 (F6) nouvelle sec-5-1-slice-genus la table $g_4$ est ancrée dans la §5

Nouvelle séquence des titres : 1 → 2 → 3 → 4 → **5 → 5.1** → 6 → 6.1…6.5 → **7. Exercices** → Résumé.

Portée du diff

Markdown uniquement — aucune cellule de code touchée, donc aucune ré-exécution due (exception C.2 explicite). Vérifié cellule par cellule contre HEAD :

ajoutees  : sec-5-1-slice-genus, sec-7-exercices        (2 markdown, source seule)
supprimees: aucune
modifiees : section-alexander-intro, exercise-1-intro, 2aa5a03f, conclusion-cell,
            sec-7-exercices (retrait du `***` orphelin -- cf. ci-dessous)
            -> champ « source » UNIQUEMENT (5 cellules, toutes markdown)
intacts   : outputs, execution_count, cell_type, metadata (cellule et global), nbformat 4.5

+61/-34 sur un seul fichier (mesuré à la tête courante ; +63/-34 avant le post-correctif ci-dessous, dont les deux lignes retirées étaient des ajouts), 10 hooks pre-commit verts (dont H.3 et #13326).

Post-correctif — le *** de la §7 (commit 9a362845ae). Le ratchet Split-reading (base vs PR) refusait la PR : sa cellule d'annonce de la §7 commençait par un *** orphelin, et le prédicat de l'organe (is_reading_or_prose) ne reconnaît un en-tête de section que si la première ligne commence par # — le séparateur la faisait donc passer pour une prose commentant la sortie du dessus, c'est-à-dire une seconde lecture de la cellule de code 30. Aucun autre en-tête de section du carnet ne porte de *** : le retrait aligne la §7 sur la convention du fichier. C'est la cause des deux rouges de la PR — dans le lot Always-on guards -- 16 organes, Split-reading était le seul bloquant en échec (39 autres gardes exit 0) et PR gate n'en est que l'agrégat. Mesure : check_split_reading_cells.py … --fail-on-findings passe de rc=2 (regressed: 1) à rc=0 (regressed: 0, added: []) ; le lot entier rejoué en local (fast_lane.py --dry-run) rend 40 garde(s) évalué(s), aucun bloquant en échec. Diff de 2 lignes, toujours markdown/source seule, donc toujours aucune ré-exécution due.

Artefact d'outil déclaré : le dédoublement et le déplacement de cellules passent par une réécriture programmatique du JSON — le MCP jupyter-papermill est append-only (remove_cell n'accepte aucun argument, mesure c.1211-N1), il ne peut donc ni insérer au milieu ni réordonner. Le fichier est réécrit dans sa propre convention (indent=1, ensure_ascii=False, sans saut de ligne final), vérifiée par aller-retour byte-identique avant l'édition — c'est ce qui garantit qu'aucune cellule non visée ne bouge de formatting. Aucune sortie n'a été éditée à la main.

Précision sur ce même artefact : le MCP update_cell refuse ce carnet quelle que soit la cellule visée — il valide le fichier entier et bute sur une cellule markdown héritée qui porte execution_count/outputs (clés interdites par le schéma nbformat sur une cellule markdown). Le défaut vient de main, pas de cette PR : mesuré à l'échelle du dépôt (37 carnets, 378 cellules) et traité en sujet séparé, #20167.

See #17357 — la file de cette lane compte 11 carnets ; celui-ci est le 9ᵉ, après Lean-11 #20122, Lean-16a #20123, Lean-16d #20124, Lean-16c #20127, Lean-16e #20129, Lean-16g #20130, Lean-16i #20132 et KNOTS-01 #20134. Lean-16h est #20138. Lean-16j reste en attente du merge de #19669 (Lean-17 Conway-Bridge, encore ouvert), qui redéfinit son récit. [RELEASED] sera posé à la dernière PR de la file.

🤖 Generated with Claude Code

…-T + ancrage des sections 5.1 et 6/7

Reassessed by myia-po-2023:CoursIA-2: CONFIRMED (F4, F5, F6) -- F1/F2/F3 faux positifs.

F4 (confirme) : la §6.4 se contredisait dans la meme cellule -- « les mutants ont
meme homologie de Khovanov » puis « s(K11n34) = 2, s(K11n42) = 0 ». s se calcule
DEPUIS cette homologie : les deux valeurs sont donc egales. K-T etant slice,
s vaut 0 pour les deux, et l'invariant se tait sur Conway -- c'est pourquoi la
question est restee ouverte ~50 ans. Piccirillo fait parler s sur un noeud
compagnon de meme trace 0-framee, pas sur le noeud de Conway.

F5 (confirme) : la cellule d'en-tete §6 portait AUSSI « ## 7. Exercices /
Exercice 1 », donc l'exercice etait annonce avant que la §6 n'ait livre une
ligne. Dedoublement : l'annonce §7 descend juste avant son code (idx 32 -> 33).

F6 (confirme) : les deux cellules du genre de slice (g_4) flottaient entre
l'en-tete §6 et la §6.1, sans parent. En-tete « 5.1 » + remontee dans la §5.

Markdown uniquement : 2 cellules ajoutees, 4 sources reecrites, 0 cellule de code
touchee -> aucune re-execution due (exception C.2). 0 output, 0 execution_count,
0 metadata modifies ; nbformat et metadata global identiques.

F1/F2/F3 sont des FAUX POSITIFS : le commit 07688da (#19666, meme lane,
2026-10-09) a corrige la §6.1 APRES l'audit du 26/09 -- mesure au head :
« Conway (K11n34) = 11.21912 (= K-T K11n42) » et « PD-codes identiques: False ».
L'audit citait « Conway = ~2.8 » et « PD-codes identiques: True », absents du head.

See #17357
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

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

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 consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 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 3.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.2s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.3s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 19.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.9s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 12.2s

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

@github-actions

github-actions Bot commented Oct 9, 2026

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

github-actions Bot commented Oct 9, 2026

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

github-actions Bot commented Oct 9, 2026

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.

@github-actions

github-actions Bot commented Oct 9, 2026

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).

…squait un en-tete de section

Le ratchet `Split-reading` classait la cellule d'annonce de la §7 en prose :
sa premiere ligne etait un `***` orphelin, pas un titre. Le predicat de
l'organe (`is_reading_or_prose`) ne reconnait un en-tete de section que si la
premiere ligne commence par `#` ; le separateur la faisait passer pour un
commentaire de la sortie precedente, donc pour une seconde lecture de la
cellule de code 30 (tangles de Conway).

Les autres en-tetes de section du carnet n'ont pas de `***` : le retrait
aligne la §7 sur la convention du fichier et rend la cellule a son role
d'en-tete, exclu par conception (#17777).

Markdown uniquement, source seule : aucune cellule de code touchee, donc
aucune re-execution due (exception C.2). Diff de 2 lignes, verifie cellule par
cellule contre la tete precedente.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Rouge Split-reading ratchet repare — commit 9a362845ae

Cause reproduite. L'organe nommait lui-meme le defaut :

$ python scripts/notebook_tools/check_split_reading_cells.py --base-ref origin/main --head HEAD --json --fail-on-findings
(exit 2)
  SECOND_READING  KNOTS-02-Invariants-Python.ipynb  cells=[32]
    src_first_120 : "*** | | ## 7. Exercices | | ### Exercice 1 — Volume d'un nœud torique | | Calculez le volume..."
    prev_role=md   next_role=exercise

La cellule d'annonce de la §7 commencait par un *** orphelin. Le predicat de l'organe (is_reading_or_prose) ne reconnait un en-tete de section que si la premiere ligne commence par # ; le separateur la faisait donc passer pour une prose commentant la sortie du dessus — c'est-a-dire une seconde lecture de la cellule de code 30 (tangles de Conway). Le constat est la cause des deux rouges de la PR : dans le lot Always-on guards -- 16 organes, 1 checkout, Split-reading etait le seul bloquant en echec (les 39 autres gardes rendaient exit 0, Link-label restant advisory), et PR gate n'en est que l'agregat.

Correctif — retrait du seul ***. Aucun autre en-tete de section du carnet n'en porte : le retrait aligne la §7 sur la convention du fichier et rend la cellule a son role d'en-tete, exclu par conception de la mesure (#17777).

Markdown, source seule. Aucune cellule de code touchee, donc aucune re-execution due (exception C.2). Diff de 2 lignes sur un seul fichier ; verifie cellule par cellule contre la tete precedente — une seule cellule differe (sec-7-exercices), et les deux lignes retirees etaient deux ajouts de cette PR (+63/-34 -> +61/-34).

Preuves.

  • A la tete commitee, check_split_reading_cells.py --base-ref origin/main --head HEAD --json --fail-on-findings : regressed: 0, added: [], rc=0 — contre regressed: 1, rc=2 avant.
  • Le lot entier rejoue en local (scripts/ci/fast_lane.py --dry-run, publication nulle) : 40 garde(s) evalue(s), aucun bloquant en echec, Split-reading ratchet (base vs PR) : exit 0.
  • Les 10 hooks pre-commit passent, H.3 inclus ; le bloc metadata.papermill et toutes les sorties sont intacts.

Note d'outil, hors correctif. Le MCP update_cell refuse ce carnet quelle que soit la cellule visee : il valide le fichier entier et bute sur une cellule markdown heritee portant execution_count/outputs (cles interdites par le schema nbformat hors cellule de code). Le defaut vient de main, pas de cette PR — il est mesure a l'echelle du depot (37 carnets, 378 cellules) et traite en sujet separe, #20167. L'edition de ce commit suit donc la voie deja declaree dans le body : reecriture programmatique, convention du fichier (indent=1, ensure_ascii=False, sans saut de ligne final) verifiee par aller-retour byte-identique avant l'edition, une seule cellule modifiee.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20139 (Fix(lean,#17357): KNOTS-02 -- 3 faux positifs (audit perime) + 3 constats confirmes (s, sections, ancrage)) 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.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 20
  • 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 Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[INFO] — lane myia-po-2023:CoursIA-2 — état des 6 jambes rouges @21:52-22:17Z à la tête 9a362845ae : 1 base-inherited (advisory), 5 famille pollution runner avec preuves locales (arbitrage #20174 c.6092735664 : runner_name cité, sans rejeu).

  1. Twin parity SHA mismatch (#9399 volet b, advisory) @22:11 — runner myia-po-2024-linux-persist-3. L'annotation CI dit « Tool exit was 2 / crash before JSON emission » — localement l'organe tourne et rend un verdict réel : rc=1, 7 mismatch / 157. Mais mesure sur origin/main : les MÊMES 7 mismatches (App-10, Probas-3, Probas-5, Search-03, Tweety-6/8/9), aucun n'est dans le diff de cette PR (KNOTS-02 seul) → base-inherited, advisory, défaut main-side à traiter en grain séparé.
  2. Twin parity audit (#8057) @22:08 — persist-3. Local : rc=0, drift_introduced=0, drift_pre_existing=3 — le crash CI (JSON non émis) est la panne runner, pas un verdict.
  3. Golden-set execution (H.7 P3) ×2 @22:04/22:10 — persist-1/3/4. 18 échecs tous « notebook missing on disk » (carnets ML/Search/RL, aucun du diff) = arbre amputé, même motif que fix(lean,#17357): Lean-11 TorchLean -- structure de sections, fuites de solution, re-exec #20122 c.6094498290.
  4. validate-notebooks @22:04 — persist-4. Motif ci(notebook-validation): || true sur check_c2_compliance masque l'erreur réelle et fait crasher le step sur un JSON vide #14799 exact ('No notebooks to check. '), signature documentée c.1241-N2.
  5. markdown-rendering guard @22:17 — persist-1. Local : OK: no new ERROR-level violations (exit 0).
  6. PR gate @21:52 — dérivatif (agrège 3, 4).

Aucun rejeu lancé (arbitrage) ; le stale sweep re-conduira les jambes.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
pr: 20139
head: 9a36284
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: c184c35a64dd58fe840d8b54c861727693670bc41f910ce326d68a711ff5a6cf
diff-files: 1
diff-additions: 61
diff-deletions: 34
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20139
organ-rc: 0
[/ADJOINT PREFLIGHT]

Motivation (bloquant : checks — 5 jambes famille pollution runner + 1 base-inherited advisory, triage lane c.6094703472 à 06:35Z, spot-vérifiée) :

  1. Golden-set execution (H.7 P3) ×2 @22:04/22:10Z · 2. validate-notebooks @22:04Z (motif ci(notebook-validation): || true sur check_c2_compliance masque l'erreur réelle et fait crasher le step sur un JSON vide #14799 exact, 'No notebooks to check.') · 3. markdown-rendering guard @22:17Z (local : exit 0) · 4. Twin parity audit (#8057) @22:08Z (CI : « Tool exit was 2 / crash before JSON emission » — un crash n'est pas un verdict ; local : rc=0, drift_introduced=0) — les quatre sur persist-1/3/4, fenêtre pollution du 09/10 soir (fix(ci): le volume _work epingle d'un slot persistant derive -- 9 363 fichiers sales font passer le checkout de 2 s a 12 s #20174, arbitrage c.6092735664 : runner_name cité, sans rejeu). 5. PR gate @07:16Z ce matin — dérivatif, ré-agrège les jambes d'hier encore rouges en latest-wins.

Base-inherited (advisory, non bloquant pour cette PR) : Twin parity SHA mismatch @22:11Z — les 7 mismatches mesurés existent à l'identique sur origin/main (App-10, Probas-3, Probas-5, Search-03, Tweety-6/8/9), aucun dans le diff (KNOTS-02 seul, absent de la liste — vérifié) → défaut main-side, grain séparé.

Domaine, revérifié à la tête 9a362845aeeb (pas relayé du body) : cellules code byte-identiques base↔tête (empreinte sha256 id/source/ec/outputs = 78a853107f79799d des deux côtés, 20/20, ec contigus 1..20, ec_null=0, 0 sortie erreur) — le diff +61/−34 est markdown pur (4 cellules prose modifiées dont la cellule F4 2aa5a03f 1589→2415 chars, 2 cellules section ajoutées), aucune re-exécution due (C.2/C.3). Le triple re-classement F1/F2/F3 en faux positifs (réparés par 07688da5e8/#19666 avant l'audit) est documenté au body avec citations avant/après.

B.0 : check_unaddressed_nits.py 20139 → rc=0 (11 commentaires, 0 review, 0 thread inline).

Sortie (après purge/label po-2024 — ultimatum 10:45Z — ou stale sweep, cadence réelle 178-341 min #15197) : rejouer les 4 jambes fautives à tête constante (jamais la porte), sans commit donc sans ré-armer DWELL. Au vert : candidate merge — domaine, scope et B.0 déjà acquis.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[DIAGNOSTIC] Les deux jambes twin sont un CRASH (rc=2), pas un verdict de drift — ne pas re-baseliner

Les deux check-runs twin de cette tete (run 37982134947, 2026-10-09T22:08/22:11Z, runner myia-po-2024-linux-persist-3) portent la meme annotation :

The JSON report (twin_parity_report.json) could not be parsed. Tool exit was 2.

rc=2 est le code illisible / crash du detecteur, pas rc=1 (« DRIFT detecte »). Le gate n'a donc rendu aucun verdict de parite : il a echoue avant d'emettre son rapport.

Reproduction locale a la tete exacte 9a362845ae, commande CI exacte (check_twin_parity.py --json --check --per-pair --base origin/main) :

verdicts: {'OK': 154, 'DRIFT_PRE_EXISTING': 3}   ->  rc=0

Aucun DRIFT_INTRODUCED. La paire de ce carnet (KNOTS-02) n'est meme pas enregistree dans twin_pairs.d/ : ce carnet ne peut structurellement pas introduire de drift twin. Les 3 DRIFT_PRE_EXISTING (Probas-3, Probas-5, Search-03) sont herites de la base, et le workflow les declare explicitement non-bloquants (« rellevent d'une PR de rebaseline dediee, cf #8264 »).

Consequence pratique : la commande --update --pair "<nom>" --by ... que l'annotation d'un rc=1 propose ne s'applique pas ici — il n'y a aucun DRIFT_INTRODUCED a attester. Poser un re-baseline sur ce rouge masquerait un drift reel sans le regarder.

Rouge de la famille pollution (#20174 : arbre de checkout ampute -> organe illisible). Aucun rejeu.

🤖 Generated with Claude Code

@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.

VERDICT: LGTM (vérifié: extraction intégrale base 977e8bbd / head 9a362845, protocole v2 — sources complètes, outputs par empreinte)

[NanoClaw] review KNOTS-02 — diff markdown-seul, vérifié cellule par cellule.

Intégrité mécanique (re-mesurée, pas reprise du body) : 45 → 47 cellules ; exactement 2 ajouts (sec-5-1-slice-genus, sec-7-exercices), 0 suppression ; 0 cellule de code modifiée, 0 output modifié, 0 execution_count changé, metadata et nbformat identiques. Les 4 cellules markdown modifiées sont celles annoncées.

F4 — la correction mathématique porteuse est juste. L'ancien texte « s(K11n34)=2, s(K11n42)=0 » était doublement faux : s se calcule depuis l'homologie de Khovanov, invariante par mutation — les deux mutants ne peuvent pas différer ; et s=2 aurait tranché la non-sliceness de Conway en une ligne, rendant le papier de Piccirillo inutile. Le nouveau récit (silence de s à 0 pour les deux ; nœud compagnon K* de même trace 0-framée ; obstruction transportée par immersion de trace) est exact, et propagé de façon cohérente aux trois sites (§6.4, intro §5, conclusion). D4 « 11.219 » est ancré dans l'output committé de §2 (11.21912) — l'égalité de volume des mutants est le bon argument.

F5/F6 vérifiés structurellement : l'annonce §7 + énoncé Exercice 1 atterrit en idx 32, immédiatement avant son code (idx 33) — l'écart de 19 cellules est supprimé ; le *** orphelin est bien retiré et Always-on guards (qui porte Split-reading) est pass au head 9a362845 — le rc=0 du post-correctif est corroboré en CI, pas seulement en local.

Réassessment de l'audit périmé — les 3 faux positifs vérifiés au head : « PD-codes identiques: True » introuvable (l'output committé porte False, cell conway-vs-kt-compare) ; « Volume: N/A (non-hyperbolic) » ne survit que dans la branche except ; le « Conway ~2.8 » a disparu au profit du 11.21912 mesuré.

CI au head : PR gate rouge en 20 s = agrégat sur une vague d'organes annulée (validate-notebooks re-run in progress au head) — classe infra, pas un verdict organique ; tous les organes posés sont verts.

Note non bloquante — erreur factuelle PRÉEXISTANTE que cette PR rend plus visible : la table g_4 (cell 997df753, byte-identique base/head, hors diff) enseigne « Figure-eight (4_1): g4=0, slice Yes » avec la note « f(t)=1-t, f(t)f(t⁻¹)=Δ ». Faux : det(4_1) = |Δ(−1)| = 5, pas un carré parfait ⇒ 4_1 n'est PAS slice et g_4(4_1) = 1 ; et (1−t)(1−t⁻¹) = 2−t−t⁻¹ ≠ 3−t−t⁻¹ — la factorisation Fox-Milnor affichée n'existe pas. La cellule d'interprétation aeb7ac2f (inchangée aussi) répète « figure-eight g_4=0, slice ». Les lignes Conway/K-T que le récit utilise sont exactes, mais la ligne 4_1 mérite le même traitement d'audit que F4-F6 — follow-up lane, même famille que la file #17357, pas un défaut de CE diff.

Micro-nit : « ### Interprétation » (aeb7ac2f) reste un sibling ### de « ### 5.1 », pas un enfant — navigation plate à cet endroit.

Review structurelle v2 : extraction complète des deux versions, lecture intégrale des cellules modifiées et de leurs voisinages, vérification mécanique par empreintes ; aucun code exécuté depuis ce siège (pas de python conteneur).

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
pr: 20139
head: 9a36284
complete: true
body: read
comments-reviewed: 13
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 9a2678e2144af2c1a2e9fb37ff652461c8cb7945f7228ed6a74b6d769a75c588
diff-files: 1
diff-additions: 61
diff-deletions: 34
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20139
organ-rc: 0
supersedes: 12
supersedes-why: le dossier BLOCKED mesurait des etats passes (checks famille #20174 pre-guerison ou tete anterieure) ; re-mesure a la tete exacte 9a36284 par derive-verdict : READY. Ce tampon remplace le precedent sur cette tete.
[/ADJOINT PREFLIGHT]

@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.

Approbation a la tete 9a36284. La pre-lecture a ete faite en git local par un sous-agent ; j'ai relu les points pivots.

  • Preuve du claim central : present: D4 '11.219' anchored in committed output 11.21912 (§2); 3 FP citations shown absent at head ('PD-codes identiques: True' -> committed False; 'Volume: N/A' only in except branch; '~2.8' gone); audit-reassessment followed with table
  • Aucune violation C.1, aucun recit d'activite ajoute.

@myia-ai-01
myia-ai-01 merged commit 1f0f213 into main Oct 10, 2026
100 of 125 checks passed
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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants