Repository navigation
Fix(lean,#19653): section 6.1 SnapPy 3.3.2 -- 5/5 PD-codes + float(vol) + is_achievable retrait + 3 contre-verites - #19666
Conversation
…) + is_achievable retrait + 3 contre-verites Section 6.1 du carnet Lean-17b compagnon KNOTS-02 — corrections de la figure SnapPy (encodee par la session cloud d'agnosticisme du mainteneur, hors flotte #17713) : 1. **5/5 PD-codes KNOT_ATLAS (cellule 1) regeneres par snappy.Link(name).PD_code()** - Format X[] = list[list[int]] (l'ancien format tuple echouait a snappy.Link(pd) parse avec 'Link isn't planar' ou 'PD code isn't consistent') - 3_1 (Trefoil), 4_1 (Figure-eight), K11n34 (Conway), K11n42 (Kinoshita-Terasaka), K11n102 (Lidman) : tous valides - **K11n34 et K11n42 ont maintenant des PD-codes DIFFERENTS** (l'ancien body du carnet stockait le MEME PD pour les deux mutants -- verifie par KNOT_ATLAS['K11n34']['pd'] == KNOT_ATLAS['K11n42']['pd'] == True en main, contre la realite topologique) 2. **Cellule 16 (Diagrammes 2D)** : retrait du bloc `is_achievable` (n'existe pas dans SnapPy 3.x, verifie par hasattr(link, 'is_achievable') == False) qui affichait "Achievable: N/A" via try/except nu -- un `except:` muet est interdite par la regle secrets-hygiene.md. Remplace par un commentaire explicatif. 3. **Cellule 16 : `f"Volume: {vol:.5f}"` -> `f"Volume: {float(vol):.5f}"`** - `link.exterior().volume()` rend un type `Number` (cypari) qui ne supporte pas le format `:.5f` directement -- TypeError: unsupported format string - `float(vol)` convertit en float natif Python, format fonctionne - Mesure firsthand : K11n34 volume = 11.219117725 4. **Cellule 17 (Interpretation)** : 3 contre-verites corrigees - "Conway = ~2.8" -> "Conway (K11n34) = 11.21912 (= K-T K11n42)" (le 2.8 etait une erreur -- le volume reel de Conway est 11.22, mesure firsthand) - "tous alternes pour les noeuds consideres ici" -> "3_1 et 4_1 alternes ; K11n34 et K11n42 ne le sont pas (le `n` de la notation KnotInfo signale cette non-alternance)" (verifie par is_alternating() : True, True, False, False, False) - "Les mutants (Conway/K-T) ont le meme PD-code" -> "memes Alexander et volume, mais PD-codes differents" (les PD regeneres le confirment -- c'est ce que la sliceness lisse tranche via Fox-Milnor + Piccirillo 2020) **Re-execution** : 20/20 cellules code executees sous snappy 3.3.2 (install fresh, regle F -- reparer l'env, pas contourner), 0 erreur, 0 NotImplementedError. Outputs committes (C.2). **Hors perimetre reserve cloud** : cellule 42 (section 7 chemin ICT code en dur) est la portee de la session d'agnosticisme du mainteneur (#17713), applique apres merge #19572. Non touchee dans cette PR. Grain: DEEP/notebook-python -- lane myia-po-2023:CoursIA-2 -- prev: LIGHT/docs #19538 See #19653
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ 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 |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Section 6.1 carnet Lean-17b-Knots-Invariants-Companion : - 5/5 PD-codes KNOT_ATLAS regeneres en format X[] via snappy.Link(name).PD_code() - Cellule 16 : retrait is_achievable (n'existe pas en SnapPy 3.x) - Cellule 16 : f-string Volume avec float(vol) pour type cypari Number - Cellule 17 : 3 contre-verites (Conway ~2.8, tous alternes, meme PD-code mutants) Re-execution papermill 20/20 OK, outputs committes (C.2). Verification firsthand sous SnapPy 3.3.2. Cellule 42 (path ICT hardcode) hors perimetre -- portee session cloud. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
…code D:/Dev/CoursIA-19352 Suite au static-validation FAIL sur PR #19666 (8 checks FAILING dont "cell 42: has error output -- ModuleNotFoundError: No module named 'ict'"), le carnet Lean-17b etait casse sur Linux CI : la cellule 42 du pont cusp <-> trefle faisait ICT = Path(r'D:/Dev/CoursIA-19352/MyIA.AI.Notebooks/IIT/ICT-Series') sys.path.insert(0, str(ICT)) from ict.catastrophe import (...) ce path n'existe que sur le worktree local Windows. Cause mesuree firsthand : - Cell 42 = section 7 "pont geometrique", utilise `ict.catastrophe` (Epic #19333-G, bridge cusp <-> trefle). - Path hardcode `D:/Dev/CoursIA-19352/...` -- sur le runner Linux CI, ce path n'existe pas, `ModuleNotFoundError`. - Cell 44 = papermill error marker (artefact de l'echec anterieur). - Cell 45 (verification du pont) reference `cusp_discriminant` (sans underscore) -- les noms dans cell 42 doivent etre identiques a ceux de `ict.catastrophe` pour eviter un autre FAIL. Fix : - Cell 42 (apres merge ff, le contenu est en cell 43) : remplace `sys.path.insert` + `from ict.catastrophe import ...` par 5 fonctions inline self-contained (torus_points, torus_knot, torus_knot_winding, alexander_roots_torus_knot, cusp_discriminant). Signatures alignees sur `ict.catastrophe` (notamment `torus_knot(n=3)` -- theta wraps 2x, phi wraps 3x, soit (w_lon, w_mer) = (2, 3)) pour rester substituable. Side fix : titre f-string `{{w_lon}}` (litteral) devient `{w_lon:.1f}` (valeur interpolee), et commentaire corrige "noeud" -> "KNOT" (terme mathematique). - Cell 44 (papermill error marker) : cleared, retiree de la structure (45 cellules finales vs 47 avant). - Cell 42 (markdown intro) : narrative mise a jour pour mentionner la reimplementation inline (au lieu de "reutilise les fonctions de `ict.catastrophe`"). Verification : - Papermill python3, kernel `python3`, 20/20 cellules code, 45/45 cellules total, 0 erreur. - Cell 43 output : "Treffle T(2, 3) trace : 2.0 tours longitudinaux, 3.0 tours meridiens / Discriminant min/max le long du KNOT : -2.79e-09 / 2.79e-09 / Racines Alexander trefle : 2 racine(s), module = 1.0000". - Cell 44 output : "Pont verifie : residu discriminant = 2.79e-09, enroulement = (2.0, 3.0), racines = 2". - Validation statique (validate_pr_notebooks.py) : 1/1 passed, 20/20 cellules. Lecon c.1146 : - **N1 ★★★** (path hardcode = anti-pattern cross-plateforme) : un `sys.path.insert(0, Path(r'Windows-only/...'))` casse silencieusement sur Linux CI (le path n'existe pas, ModuleNotFoundError, le cell leve une erreur, papermill colle un marker rouge, static-validation FAIL). Anti-pattern mort : tout path absolu `D:/...` ou `C:\...` dans un carnet -- utiliser (a) chemin relatif depuis le carnet (`Path(__file__).parent / ".." / "..."`), (b) inline si l'import est non-essentiel, (c) try/except avec degradation gracieuse. Cas fondateur : PR #19666 cell 42. - **N2 ★★** (substituabilite des signatures) : si on reimplemente inline une fonction d'un module externe, garder **la meme signature** (memes noms, memes parametres, meme convention). Ici `ict.catastrophe.torus_knot(n=3)` produit theta wraps 2x et phi wraps 3x, soit (w_lon, w_mer) = (2, 3). Une reimplementation `torus_knot(p, q)` -- ou on swappe p et q -- donne (3, 2) et casse l'assertion `assert (w_lon, w_mer) == (2, 3)` dans cell 44 (devenue cell 43 apres ff). Geste : lire le module de reference d'abord, et matcher exactement. - **N3 ★** (papermill error marker : artefact a supprimer) : quand papermill rencontre une exception, il ajoute une cellule rouge `<span id="papermill-error-cell">Execution using papermill encountered an exception here and stopped</span>`. Si le fix reussit, le marker devient un residu -- il faut le supprimer explicitement (la cellule ne se nettoie pas automatiquement). Geste : `nb['cells'][i] = {cell_type: 'markdown', source: [], outputs: [], execution_count: None}` puis supprimer la cellule (`del nb['cells'][i]`). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] Motif BLOCKED (un seul, horaire) :
** Lecture pour ai-01** : la candidate est READY a partir de 20:07Z (levee DWELL par le balayage) — ce dossier reste valable a tete exacte, aucun geste de lane requis, merge possible des l'ecoulement ou par merge_ready si le balayage a valide. Le diff-additions/diff-deletions 308/301 est coherent avec une correction de section (retrait is_achievable + 5/5 PD-codes + contre-verites), pas d'une suppression de contenu. |
|
Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine. Le label Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans Seuil, historique et exceptions : cf. |
Path-collision (organ #13359/#13615)Cette PR #19666 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
…ean17b-snappy61 # Conflicts: # MyIA.AI.Notebooks/SymbolicAI/Lean/KNOTS/KNOTS-02-Invariants-Python.ipynb
|
[INFO] R0 c.1206 -- conflit de base resolu par union cellulaire (tete La PR etait
Aucune cellule code touche -> pas de re-exec due (C.2 ; le contenu SnapPy et ses outputs frais sont inchanges). DWELL re-arme par la resolution manuelle (120 min, minuteur seul). CI re-agrege sur la nouvelle tete. |
|
[INFO] Diagnostic du rouge
Note d'honnêteté : j'ai relancé le gate avant de lire que le plancher DWELL courait — geste inutile (le message du gate prescrit de relancer l'enfant, pas le gate) ; conséquence nulle sur la tête, mais je le signale. |
|
[ADJOINT PREFLIGHT] Dossier de domaine -- 4 points juges, verifies a l'execution sous le meme SnapPy que le PR revendique (mesure locale : Sequence. Le dossier existant sur cette PR (commentaire 12, 1. Les trois corrections annoncees sont reelles, chacune prouvee par un contre-test
Les trois sont donc des corrections reelles, pas des preferences de style, et la troisieme explique la premiere : sans 2. Les 5 PD-codes de la tete sont justes -- 5/5
Note d'instrument, pour que la mesure soit lisible : sur 3. Les trois contre-verites corrigees en sont bien
4. Deux lignes de prose que le PR laisse derriere lui (non bloquantes)4a. La puce « Achievabilite » survit dans le markdown. La cellule d'interpretation conserve « Achievabilite : certains diagrammes sont "achievable" (peuvent etre realises geometriquement) », alors que ce PR vient de retirer du code le seul appel qui s'y rapportait -- et que 4b. L'introduction annonce un import que le code a justement supprime. Le markdown Ni l'une ni l'autre ne touche une affirmation mathematique, et aucune ne demande de re-execution : ce sont deux lignes de markdown. Je les rapporte ; je ne les compte pas dans Note de perimetreLe titre annonce la section 6.1 SnapPy. Le diff porte 4 cellules de Verdict
Deux lignes de prose restent en decalage avec le code (§4) -- dont une dont ce PR est l'auteur du decalage. Elles ne font pas tomber le domaine et ne bloquent pas le merge.
|
…tats confirmes (s, sections, ancrage) (#20139) * Fix(lean,#17357): KNOTS-02 -- l'invariant s ne separe pas Conway de K-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 * Fix(notebooks,#17357): KNOTS-02 -- le separateur orphelin de la §7 masquait 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> --------- Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Fix Lean-17b KNOTS-02 section 6.1 SnapPy 3.3.2 + cell 42 inline cusp↔trefoil (5+1 fixes, 1 commit)
Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA-2 — prev: LIGHT/docs #19538
Carnet
Lean-17b-Knots-Invariants-Companion.ipynb(à renommerKNOTS/KNOTS-02-Invariants-Python.ipynbaprès #19572). PR cumul deux passes :float(vol)/ contre-vérités.D:/Dev/CoursIA-19352/...cassait le carnet sur Linux CI (ModuleNotFoundError surict.catastrophe).passe 1 — 5/5 PD-codes KNOT_ATLAS sous SnapPy 3.3.2
snappy.Link(name).PD_code()au format X[] =list[list[int]]. Ancienne forme (tuple de tuples) :snappy.Link(pd)rejette 5/5. Nouvelle forme : 5/5 parsent, alternating/volume vérifiés.is_achievablequi n'existe pas en SnapPy 3.x.except:nu banni.f"Volume: {vol:.5f}"→f"Volume: {float(vol):.5f}"—link.exterior().volume()rendcypari.Number.passe 2 c.1146 — cellule 42 inline (cusp↔trèfle cross-platform)
Source du constat : session cloud d'agnosticisme du mainteneur, #17713, hors flotte, qui a rejoué le carnet sur clone vierge Linux sous
main.ICT = Path(r'D:/Dev/CoursIA-19352/MyIA.AI.Notebooks/IIT/ICT-Series'); sys.path.insert(0, str(ICT)); from ict.catastrophe import (...). Sur Linux CI, ce path n'existe pas →ModuleNotFoundError→ papermill error marker → static-validation FAIL.ict.catastrophepour rester substituable (torus_knot(n=3)→ (w_lon, w_mer) = (2, 3)).{{w_lon}}→{w_lon:.1f}(interpolation effective), commentaire "noeud" → "KNOT".Re-exécution (règle F + C.2)
pip install snappy(3.3.2) sur le worker, puispapermill Lean-17b-Knots-Invariants-Companion.ipynb. 20/20 cellules code exécutées, 0 erreur, 0 NotImplementedError. Outputs committées (C.2).validate_pr_notebooks.py) : 1/1 passed, 20/20 cellules.Diagnostic dérive (C.4)
La transition de kernel
python33.11.9 → 3.13.3 et le drift de signature float sur cellule 43 sont des transitions canoniques acceptées parcheck_kernel_drift.py:language_info.version: 3.11.9 → 3.13.3,kernelspec.name: 'python3'identique) : tableCANONICAL_LANGUAGE_TRANSITIONSdu guard inclut explicitement("python3", "3.11", "3.13")avec libellé "convergence vers le canon d'exécution 3.13 ([QC] QuantConnect/Python : version d'interpreteur canonique de la serie et transitions du cliquet kernel-drift #19181)". La direction est respectée (3.11 → 3.13, pas l'inverse).check_cusp_bridge) : la sortie "Pont verifie : residu discriminant = 2.79e-09" dépend de la précisionnp.float64lors de l'évaluation de4(-3t²)³ + 27(2t³)². NumPy 1.x vs 2.x peuvent diverger de 1 ULP sur ce calcul en cancellation error. Mathématiquement équivalent (assertionresidue < 1e-8toujours satisfaite : 2.79e-09 ≪ 1e-8), seul lerepr()textuel change. La cellule de vérification downstream (cusp_discriminant=4a³ + 27b²) est préservée bit-pour-bit fonctionnellement, et le test reste vert.Les deux dérives sont conformes à la règle C.4 (l'écart résiduel est documenté ici dans
## Diagnostic dérive).Hors périmètre (réservé cloud)
La descente KNOTS (#19572) qui renommera le carnet et le déplacera d'un niveau est le geste de la session cloud d'agnosticisme post-merge.
PR gate / B.0 readiness
Grain:ligne 1 du body ✓ (DEEP/notebook-python, lane, prev: LIGHT/docs docs(vibe-coding,#14529): voix de myia-po-2025:CoursIA dans la photo de famille #19538)CHANGES_REQUESTEDposé, aucun thread inline ouvert# Solution/# Exemple résolu#13326: cellule source parse OK (pre-commit PASSED)## Diagnostic dérive: kernel transition + float-format drift documenté (c.1147)Vérifications firsthand (toutes via
gh api /commits/<SHA>+ Python direct)🤖 Generated with Claude Code
Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com