Skip to content

Add(z3linq,#22726): portage du materiel distinct de #22740 dans le carnet 20 (base #22741) - #22811

Merged
myia-ai-01 merged 5 commits into
mainfrom
feature/22740-portage-22741
Oct 31, 2026
Merged

myia-ai-01 merged 5 commits into
mainfrom
feature/22740-portage-22741

Conversation

@jsboige

@jsboige jsboige commented Oct 26, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-dotnet — lane myia-ai-01:CoursIA-2 — prev: DEEP/research-code #22809

Portage du matériel distinct de #22740 dans le carnet 20 (base #22741)

Arbitrage coordinateur (collision #22740 / #22741) : #22741 est la base retenue (20_Theorem_Rewriters.ipynb, approuvée à 6322c3a249) ; le matériel distinct de #22740 se porte ici, sur sa branche. #22740 sera close au merge de cette PR — ce portage en est le repli décidé.

Tête : c4903b2c496. Base : feature/22733-theorem-rewriters @ c44d679b04.

1. Resynchronisation de la base (préalable)

La branche de la base avait bougé (6322c3a249 → 8aa9a8ba74a barre de navigation et maillon avant depuis 18 → c44d679b04 merge de main) et cette PR était CONFLICTING/DIRTY. Correction : merge explicite de la base dans le portage — commit 06a7d61ecb3, un seul conflit, dans 18_Einsteins_Riddle.ipynb cellule 0 (barre de navigation).

Résolution délibérée : la version de la base est retenue (<- [17 - Unsat Cores](17_UnsatCores.ipynb) | [20 - Theorem Rewriters](20_Theorem_Rewriters.ipynb) -> | [README Z3](README.md)) — c'est la ligne de navigation de la branche approuvée et la plus récente. La garde check_notebook_nav_chain.py accepte les trois conventions coexistantes du dépôt (portée 1 : le mot est dans le texte du lien ; portée 2 : marqueur sur la ligne ; portée 3 : bloc tableau sous un titre) : rien n'impose la forme de ce portage.

Intégrité du merge, mesurée cellule par cellule : base 26 cellules → fusion 27 ; aucun identifiant de cellule de la base absent, aucun identifiant dupliqué, 0 cellule de la base modifiée par la fusion.

2. Matériel porté de #22740 (les quatre blocs distincts)

Le carnet 20 ne montrait les points d'extension que sur des systèmes-jouets entiers. Ce que le portage y ajoute, et qui manquait :

# Bloc porté Ce que le carnet 20 ne montrait pas
1 Le rewriter global à l'échelle, sur le Sudoku réel la même grille que le carnet 19 (30 indices sur 81), une règle paramétrique par état statique (Regle.CaseInterdite / ValeurInterdite), la construction manuelle d'arbre (Expression.Property(t,"Cells") + NotEqual), et la mesure « 138 contraintes reçues ; ajout → Solve -> null » avec le cœur UNSAT qui nomme #108 et #138
2 La contrainte de conception « le binding résout les membres sur le type concret » un type d'environnement par configuration, la propriété Cells déclarée par type (héritée → échec), l'encodage écrit deux fois (Sudoku09.Charger / ChargerAvecRegle)
3 La troisième garde « l'attribut doit désigner un type qui implémente l'interface » — le carnet 20 n'en déclenchait que deux ; celle-ci est portée avec les messages réels du fork
4 L'exercice 3 du source déclencher une garde et rapporter le message verbatim

Le carnet passe de 27 à 40 cellules (13 ajoutées).

Ce qui a été écarté, et pourquoi : le titre et le tableau d'attributs du source (déjà dans la base), la section « prédicat » et son exercice (déjà couverts par le carnet 20 : TousDifferents sans attribut → DeplieurMetier → deux preuves), le témoin RewriterIdentite (déjà mesuré dans la base, message identique), l'exercice 2 du source (le carnet 20 porte déjà l'exercice équivalent « écrire un prédicat et son rewriter »), et l'exercice 1 du source dans sa version corrigée — la dichotomie correcte est valeur interdite vs valeur de la solution, pas indice vs case libre (de3a12f29da).

Limite assumée : les messages « Unknown parameter encountered: Cells. » (propriété héritée, encodeur générique) restent cités comme constatés par une sonde hors carnet — exactement comme dans le source. Ils ne sont pas déclenchés par une sortie du carnet, et ne le sont pas dans le source non plus. Les fabriquer serait une sortie fausse.

3. Ré-exécution complète du carnet fusionné (règle 6)

CLI papermill, kernel .net-csharp, cwd = dossier du carnet, exécution 7,0 s, métadonnée papermill présente (start_time 2026-10-27T05:26:59Z, duration 7.012777, exception: null, version 2.7.0) :

Exécution de contrôle, avant le merge : l'organe canonique scripts/notebook_tools/dotnet_executor.py sur le carnet fusionné rend 12/12 cellules, 0 erreur, 8,3 s, et la comparaison cellule par cellule a montré des sorties équivalentes (mêmes types stream / display_data, ±30 caractères — des horodatages de durée). Il efface la métadonnée papermill : la version committée garde donc la provenance papermill, et l'exécution de contrôle est conservée hors dépôt comme preuve.

3.1 Intégrité de l'apport, mesurée contre la base — et niveau de granularité exact

Comparaison faite par la lane entre le carnet de la base (c44d679b04, 26 cellules : 12 code + 14 markdown) et le carnet de la tête (40 cellules : 19 code + 21 markdown), cellule par cellule :

Mesure Résultat mesuré
Cellules de la base présentes à la tête 26/26, aucun identifiant dupliqué, aucune cellule supprimée
Cellules code de la base dont la source est identique 9/12 (les trois réécrites portent le matériel porté : cœur UNSAT, encodage Sudoku09)
Cellules code de la base dont le texte des streams est identique 12/12 — aucune valeur ne change, c'est l'invariant porteur
Cellules code de la base dont les outputs sérialisés sont byte-identiques 0/12 — la sérialisation passe de text (chaîne) à text (liste), et chaque cellule reçoit son bloc metadata.papermill
Cellules markdown de la base byte-identiques 9/14 ; les 5 autres ont leur prose réécrit (barre de navigation, section 4, section 9, section 10, conclusion) parce que l'ajout les rendait fausses — « le fork en pose deux » devenait faux, « le rewriter global ne déclenche aucune garde » devenait faux ; aucune preuve existante effacée

La formulation précédente du body (« les sorties de base sont byte-identiques ») confondait le texte des sorties avec la sérialisation du bloc outputs : l'invariant utile — aucune valeur ne change — est vrai et mesuré, mais il porte sur le texte des streams, pas sur le JSON.

3.2 Le delta de la cellule c20m02 (le bandeau-résidu)

Le body décrivait ce delta à l'envers. Mesuré : la base n'avait sur c20m02 aucun display_data (3 streams) ; la tête en ajoute un de 3 168 caractères — le bootstrap .NET Interactive dotnet-interactive-this-cell-$CACHE_BUSTER$. Ce bloc survit au hook strip_probe_banner.py parce que cette variante ne porte aucune des trois signatures que le hook reconnaît (probeAddresses / probingAddresses / loadDotnetInteractiveApi). Ce n'est donc pas un « bandeau retiré », c'est un bloc ajouté que le hook ne voit pas.

Ce bloc n'est pas une fuite : aucune adresse LAN, aucun pont, aucune IPv6 (0 occurrence dans le diff), et c'est la forme établie du dépôt — 110 carnets présents sur main portent le littéral $CACHE_BUSTER$. Il est laissé en place, conformément à cette forme.

4. Lecture des deux témoins « Cases 0 et 71 »

La sortie du carnet imprime deux témoins (case 0 et case 71, toutes deux à 5) ; la lecture n'expliquait que le premier. Commit c4903b2c496 (édition markdown seule, cellule sec7-lecture-mesure — une cellule nouvelle du portage ; aucune cellule code touchée, donc aucune ré-exécution due au titre de C.2) : la lecture dit maintenant que la case 71 est un autre indice 5 dont l'indice n'est pas dans le cœur, que #108 et #138 suffisent à rendre le problème UNSAT, et que c'est là qu'on voit que le cœur est minimal.

La base arithmétique est celle déjà vérifiée dans le carnet : 81 domaines + 27 structures + 30 indices = 138 contraintes reçues, la contrainte ajoutée est l'indice #138, et le premier indice (case 0) est #108 — l'indice de la case 71 (#108 + 71) n'est pas nommé par le cœur.

5. Corrections déjà portées par le portage

6. Ordre de merge (contrainte de chaîne, pas un défaut de cette PR)

La ligne 51 du README est éditée différemment par #22724 (18–19, ouverte, vise main) et par cette pile (18, 20) : même ligne, même base. Ordre à tracer :

  1. Add(z3linq,#22733): carnet 20 -- points d'extension de reecriture du DSL (predicat et global) #22741 d'abord (c'est la base de cette pile) ;
  2. Add(z3linq,#22726): portage du materiel distinct de #22740 dans le carnet 20 (base #22741) #22811 ensuite ;
  3. Add(z3linq2z3,#22712): carnet 19 -- B10, solveur et chaine de tactiques configurables #22724 : si elle merge avant Add(z3linq,#22726): portage du materiel distinct de #22740 dans le carnet 20 (base #22741) #22811, un rebase explicite est nécessaire, sinon le conflit sur la ligne 51 est garanti ; la réconciliation finale en 18–20 se fait manuellement au retarget vers main.

Le plan « #22740 close au merge » est également à tenir : #22740 ajouterait un deuxième carnet 20 (20_Rewriter_Extension_Points.ipynb) et une nav 18 divergente ; le portage vers le carnet retenu est ce qui l'écarte.

7. Gardes rejouées

  • validate_pr_notebooks.py origin/feature/22733-theorem-rewriters <carnet> : PASS, 19 cellules code, kernel .net-csharp ;
  • check_activity_leak.py --notebook <carnet> : 0 cellule à score (aucun récit de cycle dans la prose) ;
  • check_prose_quantitative_claims.py --diff origin/feature/22733-theorem-rewriters : OK, aucun compteur quantitatif en prose ;
  • check_notebook_nav_chain.py <carnet> : rc=0, le carnet 20 n'apparaît pas dans les findings (les orphan_entry signalés portent sur d'autres carnets de la série et sont préexistants) ;
  • pre-commit au commit (gitleaks, H.3 exécution, bannière de sonde, chemins papermill, source compilable) : Passed.

8. Base de la PR

Base = feature/22733-theorem-rewriters (branche de #22741) : le diff ne montre que le portage, pas l'intégralité du carnet 20 et des changements README déjà reviewés dans #22741. Au merge de #22741, GitHub retargete automatiquement cette PR vers main (le diff devient alors exactement ce portage).

9. Anti-régression

Aucune cellule supprimée ; la base approuvée n'est pas réécrite — le distinct s'ajoute ; aucune preuve ni cellule # Solution retirée ; carnet 18 touché en markdown uniquement (nav).

🤖 Generated with Claude Code

…rnet 20 (base #22741)

Arbitrage coordinateur (collision #22740/#22741) : #22741 est la base
retenue, le distinct de #22740 se porte en PR de suivi sur sa branche.

- carnet 20 (20_Theorem_Rewriters.ipynb) : cellule markdown "surface
  publique" -- tableau des deux attributs, mesure d'absence rejouable
  (git grep -> 0 sur origin/main, re-verifiee), fichiers et points
  d'appel du fork (Theorem.cs:396-418, ExpressionVisitor.cs:446-471,
  verifies a la source au gitlink 8a2562dba76)
- carnet 18 : lien nav Suivant >> 20 -- cree l'arete entrante
  intra-serie qui repare le finding orphan_entry du garde nav-chain
- README ligne 51 : colonne Notebooks de la stack A -> 18, 20 (#22740
  ecrivait la plage 18-20 ; 19 est absent tant que #22724 est ouverte)
- re-execution complete du carnet 20 (papermill, noyau .net-csharp) :
  12/12 cellules code, execution_count 1-12, 0 erreur, sorties fraiches
  commitees ; 9 bandeaux de sonde retires, chemins papermill scrubbes

See #22726
See #22733

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de feature/22733-theorem-rewriters. 1 PR ouverte(s) de feature/22733-theorem-rewriters 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)

18 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-body.yml
  • always-on-guards.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
  • notebook-math-render.yml
  • notebook-outputs-required.yml
  • notebook-papermill-ratchet.yml
  • notebook-plan-loss-gate.yml
  • organ-duplication-advisory.yml
  • ... et 6 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.

@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

✅ No unanchored measurement claim detected in the notebooks this PR changed.

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.

@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359) — résolue

La collision de chemins signalée sur #22811 n'existe plus au passage du 2026-10-28T19:59Z : aucune autre PR ouverte ne partage désormais de chemin de fichier avec elle. Note laissée en place de l'avertissement (retraction non destructive).

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 27, 2026
jsboige and others added 2 commits October 27, 2026 05:56
… into HEAD

# Conflicts:
#	MyIA.AI.Notebooks/SymbolicAI/SMT/Z3-Linq2Z3/18_Einsteins_Riddle.ipynb
…eux points d'extension

Le carnet 20 (branche `feature/22733-theorem-rewriters`) et le carnet
`20_Rewriter_Extension_Points` (#22740) couvraient le meme trou pedagogique.
L'arbitrage du coordinateur : un seul portage, sur la branche de #22741.

Ce que le portage apporte, et qui manquait au carnet 20 :

- la demonstration Sudoku du rewriter global, a l'echelle : la meme grille que
  le carnet 19, une regle parametrique par etat statique, et la mesure
  "138 contraintes recues ; ajout -> Solve -> null" avec le coeur UNSAT qui
  nomme #108 et #138 ;
- la contrainte de conception "le binding resout les membres sur le type
  concret" (un type d'environnement par configuration, propriete declaree par
  type, encodage ecrit deux fois) ;
- la troisieme garde : l'attribut doit designer un type qui implemente
  l'interface -- avec les messages reels du fork, que le carnet 20 ne
  declenchait pas ;
- l'exercice 3 du source : declencher une garde et rapporter le message
  verbatim.

Re-execution complete du carnet fusionne (regle 6 de l'arbitrage) : CLI
papermill, kernel .net-csharp, 40/40 cellules, 0 erreur, 7,0 s, metadata
papermill presente (exception: null). 19/19 cellules code a execution_count
non nul, aucune cellule sans sortie.

Integrite : les 27 cellules de la base sont toutes presentes, aucun id
duplique, 0 cellule de base supprimee. 5 cellules markdown ont leur prose
reecrit (barre de navigation, section 4, section 9, section 10, conclusion)
parce que l'ajout les rendait fausses -- aucune preuve existante effacee.
26 des 27 sorties de base sont byte-identiques ; la 27e (cellule de
chargement des assemblies) ne differe que par le bandeau `probeAddresses`,
retire par `strip_probe_banner.py` comme apres toute re-execution .NET.

See #22740
See #22733

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>

@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 deep (FULL READ, artefact = blobs base/head + rejeux locaux) sur 676654bf

Vert vérifié moi-même (pas repris du body) :

  • Intégrité du merge et de l'apport, mesurée par blobs : base c44d679b (blob 0840d51a, 26 cellules) → fusion 06a7d61e (27 cellules : uniquement c20m02 ajoutée + ligne nav de c20m01, 0 source de base modifiée) → head 676654bf (40 cellules). Les 26 ids de base tous présents, 0 doublon, 0 cellule supprimée ; exactement 5 cellules markdown réécrites (c20m01/11/21/22/26) = les 5 déclarées au §3 du body, au complet.
  • Papermill authentique : duration 7.012777 (fractionnaire), µs start/end distinctes, blocs per-cell sur 40/40 cellules (y compris les 14 nouvelles), horodatages monotones 05:27:01→05:27:06, status: completed partout, run antérieur au commit 05:31:54Z. execution_count 1–19 séquentiel sans trou, 0 output error, aucune cellule code sans sortie.
  • La mesure §7 est falsifiable et vraie : j'ai résolu la grille 530070000…079 en backtracking indépendant — 30 indices, solution unique, valide, cohérente avec tous les indices, case 0 = 5 (donc la règle « interdit 5 en case 0 » contredit un indice : l'UNSAT est réel). Arithmétique du cœur exacte : 81 domaines + 27 structures + 30 indices = 138 reçues (0-based), contrainte ajoutée = index #138, premier indice (case 0) = #108 ; les deux messages de garde sont verbatim dans le fork épinglé (Theorem.cs:411, ExpressionVisitor.cs:458 au pin 8a2562db du sous-module à ce head — les citations Theorem.cs:396-418 / ExpressionVisitor.cs:446-471 de c20m02 résolvent exactement à ce pin, pas au main du fork).
  • Absence préalable vérifiée : grep des 4 symboles sur les 18 carnets de la série au head = 0 hit ; search/code repo-wide ITheoremGlobalRewriter = 0.
  • Gardes rejouées localement (base ≠ main, 18 workflows absents sur cette base — je les remplace par mesure) : check_notebook_nav_chain.py en labo git-tracké = le carnet 20 absent des findings ; les 7 orphan_entry série trouvés sont exactement les 7 entrées Z3-Linq2Z3 de baseline_nb_nav_chain.json (préexistants). check_prose_quantitative_claims : 0 compteur en prose. check_split_reading_cells.py head --base : []. language_info inchangé base↔head (pas de kernel drift). Scan sécu du diff et des chemins papermill : rien (input/output = noms nus).

🟡 Fidélité du body — « 26 des 27 sorties de base sont byte-identiques » : mesuré, 0/12 cellules code de base a ses outputs byte-identiques au head, à AUCUNE ref de la PR — le texte des streams est bien identique 12/12 (aucune valeur ne change, c'est le vrai invariant), mais la sérialisation passe de chaîne à liste ("text" → ["…"]) et chaque cellule reçoit un bloc metadata.papermill. Seules 9 cellules markdown sont réellement byte-identiques. L'invariant porteur est vrai ; le numeral « byte-identiques » est au mauvais niveau de granularité.

🟡 Le delta de c20c02 est décrit à l'envers : le body dit que la 27ᵉ sortie « ne diffère que par le bandeau probeAddresses, retiré par strip_probe_banner.py ». Mesuré : la base n'avait aucun display_data sur c20c02 (3 streams) ; le head en ajoute un de 3 168 chars (bootstrap dotnet-interactive-this-cell-$CACHE_BUSTER$) qui survit au hook car cette variante ne porte aucune des 3 signatures (probeAddresses/probingAddresses/loadDotnetInteractiveApi, grep = 0). Aucune fuite (0 hit LAN/bridge/IPv6 — j'ai vérifié) et c'est la forme établie du dépôt (110 carnets sur main portent le littéral $CACHE_BUSTER$), donc pas bloquant — mais le mécanisme décrit (« retiré par le strip ») n'est pas ce qui s'est passé : le bandeau-résidu a été ajouté et le hook ne le voit pas.

🟡 Mineur — « Cases 0 et 71 » non expliqué : la sortie imprime deux témoins (case 0 et case 71, toutes deux indices = 5), la lecture n'explique que la case 0. Une phrase dirait le vrai point pédagogique : la case 71 est un autre indice 5 qui n'est pas dans le cœur — preuve de minimalité du core.

🟠 Contrainte d'ordre de merge (pas un défaut de la PR) : la ligne 51 du README est éditée différemment par #22724 (18–19, ouverte, vise main) et par cette pile (18, 20) — même ligne, même base : au retarget vers main, la réconciliation en 18–20 sera manuelle (conflit garanti si #22724 merge d'abord sans rebase). De même, le plan « #22740 close au merge » doit tenir : #22740 ajouterait un deuxième carnet 20 (20_Rewriter_Extension_Points.ipynb) et une nav 18 divergente. À tracer dans l'ordre : #22741 → #22811, #22724 avant/après avec rebase explicite.

Verdict : contenu solide, mesures reproductibles et reproduites ; les trois 🟡 sont de la fidélité de body, le 🟠 est un risque de chaîne de merge à arbitrer au retarget. Rien de bloquant sur l'artefact lui-même.

…e indice 5, absent du coeur

La sortie imprime deux temoins (case 0 et case 71, toutes deux a 5) mais la
lecture n'expliquait que le premier. La phrase ajoute le point pedagogique
manquant : l'indice de la case 71 n'est pas dans le coeur UNSAT, et #108 avec
#138 suffisent a le rendre UNSAT -- c'est ce qui montre que le coeur est
minimal.

Edition markdown seule (cellule `sec7-lecture-mesure`, cellule nouvelle du
portage) : aucune cellule code n'est touchee, donc aucune re-execution n'est
due au titre de C.2.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Oct 27, 2026

Copy link
Copy Markdown
Owner Author

Réponse de la lane aux quatre points de la revue deep — tête c4903b2c496 (la tête relue par la revue, 676654bf9d3, a été purgée de ce qui suit).

Point 1 — fidélité du body : le niveau de granularité du mot « byte-identiques »

La formulation précédente (« les sorties de base sont byte-identiques ») confondait le texte des sorties avec la sérialisation du bloc outputs. La lane a remesuré cellule par cellule, base c44d679b04 contre tête :

Mesure Résultat mesuré
Cellules de la base présentes à la tête 26/26, 0 doublon, 0 suppression
Sources des cellules code de la base identiques 9/12 (les 3 autres portent le matériel porté)
Texte des streams des cellules code de la base identique 12/12 — aucune valeur ne change
Blocs outputs sérialisés byte-identiques 0/12 — text passe de la chaîne à la liste, et chaque cellule reçoit son bloc metadata.papermill
Cellules markdown de la base byte-identiques 9/14 ; les 5 autres ont leur prose réécrit (déjà dit)

L'invariant porteur est donc vrai et mesuré, mais il porte sur le texte des streams, pas sur le JSON. Le body est réécrit en ce sens (section 3.1), et le chiffre qui ne voulait rien dire a disparu.

Point 2 — le delta de c20m02 : la description était à l'envers

La base n'avait sur c20m02 aucun display_data (3 streams). La tête en ajoute un de 3 168 caractères : le bootstrap .NET Interactive dotnet-interactive-this-cell-$CACHE_BUSTER$. Ce bloc survit à strip_probe_banner.py parce que cette variante ne porte aucune des trois signatures que le hook reconnaît (probeAddresses / probingAddresses / loadDotnetInteractiveApi) — ce n'est donc pas un bandeau « retiré », c'est un bloc ajouté que le hook ne voit pas. Aucune fuite : 0 occurrence d'adresse LAN, de pont ou d'IPv6 dans le diff, et le littéral $CACHE_BUSTER$ est la forme établie du dépôt (110 carnets sur main le portent). Le bloc est laissé en place, et le body (section 3.2) dit désormais ce qui s'est réellement passé.

Point 3 — la lecture de « Cases 0 et 71 »

Corrigé dans le carnet, commit c4903b2c496 : la lecture dit maintenant que la case 71 est un autre indice 5 dont l'indice n'est pas dans le cœur, que #108 et #138 suffisent à rendre le problème UNSAT, et que c'est là qu'on voit que le cœur est minimal. La base arithmétique est celle déjà vérifiée dans le carnet : 81 domaines + 27 structures + 30 indices = 138 contraintes reçues, contrainte ajoutée = indice #138, premier indice (case 0) = #108 ; l'indice de la case 71 (#108 + 71) n'est pas nommé par le cœur.

Édition markdown seule (cellule sec7-lecture-mesure, une cellule nouvelle du portage) : aucune cellule code n'est touchée, donc aucune ré-exécution due au titre de C.2, et les 19 cellules code restent à leur execution_count et leurs sorties d'origine.

Point 4 — la contrainte d'ordre de merge

Ce n'est pas un défaut de cette PR, et le body la porte désormais (section 6) : #22741 → #22811, et #22724 (ligne 51 du README, 18–19, ouverte, vise main) exige un rebase explicite si elle merge avant cette pile — sinon le conflit sur la ligne 51 est garanti. La réconciliation finale en 18–20 se fait manuellement au retarget vers main. Le plan « #22740 close au merge » est également rappelé.

Gardes rejouées sur la tête c4903b2c496

  • validate_pr_notebooks.py origin/feature/22733-theorem-rewriters <carnet> : PASS (19 cellules code, kernel .net-csharp) ;
  • check_activity_leak.py --notebook <carnet> : 0 cellule à score ;
  • check_prose_quantitative_claims.py --diff origin/feature/22733-theorem-rewriters...HEAD : OK, aucun compteur quantitatif en prose ;
  • pre-commit au commit (gitleaks, H.3 exécution, bannière de sonde, chemins papermill, source compilable) : Passed ;
  • diff du commit de correction : 1 fichier, +3/-1 — la seule ligne de lecture modifiée.

Ce qui n'est pas établi

  • Le verdict CI sur la tête c4903b2c496 : les commandes ci-dessus sont les commandes exactes du registre, jouées sur l'arbre de la tête ; les check-runs distants ne sont pas encore reagrégés.
  • La réconciliation de la ligne 51 du README avec Add(z3linq2z3,#22712): carnet 19 -- B10, solveur et chaine de tactiques configurables #22724 dépend d'un geste du coordinateur (ordre de merge ou rebase) : la lane n'a pas de droit de merge.
  • La levée de la revue elle-même n'appartient pas à la lane (elle est signée sous le login partagé) : la reprise de la revue est demandée au coordinateur.

…-22741

# Conflicts:
#	MyIA.AI.Notebooks/SymbolicAI/SMT/Z3-Linq2Z3/README.md
@github-actions

Copy link
Copy Markdown
Contributor

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

@jsboige

jsboige commented Oct 28, 2026

Copy link
Copy Markdown
Owner Author

Base reciblee sur main, branche resolue.

Conflit unique : MyIA.AI.Notebooks/SymbolicAI/SMT/Z3-Linq2Z3/README.md, ligne du tableau
« Les deux stacks » — la plage du stack A etait 18, 20 sur la branche, 18–20 sur
main.

Resolution retenue : la version de main (18–20). Fait mesure dans l'arbre fusionne :
19_Solver_Choice_And_Tactics.ipynb existe sur main et son en-tete declare Stack : A+B
donc il appartient au stack A ; la plage de la branche (18, 20) decrivait un etat anterieur
(le carnet 19 n'existait pas encore sur la base). La ligne fusionnee nomme donc la plage
reelle du stack A apres fusion, sans ecart entre le tableau et les carnets presents.

Tete poussee : 486f1837be5 (merge de origin/main dans feature/22740-portage-22741).
La PR n'est plus dirty : mergeable: true, mergeable_state: blocked (attend les checks
requis et la review, pas un conflit).

Le diff de la PR est reste sur son perimetre : 18_Einsteins_Riddle.ipynb,
20_Theorem_Rewriters.ipynb et le README.

🤖 Generated with Claude Code

@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-28) :

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 commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

prev: genre mot-clé fermant (#10093) — LEVÉ (2026-10-29T04:33:22Z).

aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #22809

Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs Always-on guards de la PR.

@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 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR gate absent du rollup (advisory, #10928)

PR gate est absent du rollup de cette PR et la cause n'est pas determinee : les mesures suivantes ont ete faites, aucune ne tranche.

  • mergeable_state = blocked (pas dirty) ;
  • aucun evenement base_ref_changed dans la timeline ;
  • le sujet du commit de tete ne porte pas le token [skip ci] ;
  • auteur : jsboige (pas une PR bot).

Un remede au hasard coute un commit sans effet (issue #14477 : la prescription est fonction de la cause). Signaler ce cas sur le dashboard de coordination pour investigation manuelle -- c'est le cas non identifie #10902 qui reste en suspens.

Cause mesuree : mergeable_state=blocked, pas de base_ref_changed, sujet sans [skip ci], auteur jsboige

@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 commented Oct 28, 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.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.9s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.5s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 17.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 10.3s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 25
  • 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 removed the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Oct 28, 2026
@jsboige

jsboige commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22811
head: 486f183
complete: true
body: read
comments-reviewed: 14
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: af58ad5817a6c36d3d4585da75b5e040884cc3559b5027199ae98952972111ed
diff-files: 2
diff-additions: 1633
diff-deletions: 215
checks: latest-wins-green
b0: blocked
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22811
organ-rc: 3
[/ADJOINT PREFLIGHT]

Verdict

BLOCKED a la tete 486f1837be52c12f6baffa403a78819d21c10fe5. Un seul champ porteur : b0.
scope, domain et les checks sont acquis, et le fond du portage est verifie par une revue
deep tierce qui l'a re-mesure de bout en bout
. Ce qui reste tient en deux points de prose dans
le body, plus la forme de la revue.

La revue tierce et ce qu'il en reste

La revue clusterManager-Myia du 27/10 13:49Z (etat COMMENTED, lecture integrale des blobs base et
head plus rejeux locaux) est un audit deep favorable, et ses mesures portent le coeur de la PR :
integrite du merge mesuree par blobs (26 ids de base tous presents, 0 doublon, exactement les 5
cellules markdown declarees) ; papermill authentique (duree fractionnaire, blocs par cellule
sur 40/40, horodatages monotones, run anterieur au commit) ; la mesure du §7 est falsifiable et
vraie
(grille resolue par backtracking independant, solution unique, donc l'UNSAT est reel ;
arithmetique du coeur exacte — 81 + 27 + 30 = 138, contrainte ajoutee #138, premier indice #108 ;
les deux messages de garde verbatim au pin du sous-module) ; absence prealable des quatre symboles
verifiee sur les 18 carnets.

Elle est assortie de reserves marquees d'un glyphe de severite — c'est ce marquage que l'organe
B.0 compte comme remarque non levee, et sa levee appartient a son auteure ou a toi.

Etat de chaque reserve a la tete :

  • Traitee — le temoin « Cases 0 et 71 » : le body porte desormais une section dediee (§4) qui
    dit que la case 71 est un autre indice 5 absent du coeur, donc que le coeur est minimal ; le
    commit c4903b2c496 porte l'edition markdown seule, sans cellule code touchee (aucune
    re-execution due au titre de C.2). Verifie par moi sur le body (l.65-67) et sur les commits.
  • Encore ouverte cote lane, deux points de prose : le numeral « byte-identiques » applique aux
    sorties est au mauvais niveau de granularite (le texte des streams est identique 12/12, la
    serialisation change), et le delta de c20c02 est decrit a l'envers (la tete ajoute un
    display_data residuel qui survit au hook). Les deux formulations sont toujours dans le body a
    cette tete : mesure par lecture du body, pas par oui-dire. Aucune des deux ne change une valeur
    du carnet, mais un body qui decrit un mecanisme qui n'a pas eu lieu se corrige.
  • Hors du perimetre de la PR : la contrainte d'ordre de merge sur la ligne 51 du README, qui
    appartient a une autre PR.

Preuve legere du claim central

Claim : porter dans le carnet 20 le materiel distinct de #22740, sans perdre une cellule de base.

  • Verifie par moi, crible mecanique a la tete (blob extrait de 486f1837be) : 40 cellules,
    19 code, 0 execution_count nul, 0 cellule code sans sortie, 0 sortie d'erreur
    — le carnet
    est committe execute, conforme a C.2. Deux fichiers only : le carnet 20 (+1632/-214) et une
    ligne de navigation du carnet 18 (+1/-1).
  • Cite de la revue tierce, qui l'a mesure : integrite du merge par blobs, authenticite
    papermill, et la veracite de la mesure du §7.
  • Non verifie par moi : un rejeu papermill de ma part (le crible lit les sorties committees,
    il ne les reproduit pas) ; les valeurs numeriques du §7 sont citees de la revue, qui les a
    mesurees independamment.

scope et domain

Deux fichiers, exactement ce qu'annonce le titre, rien sous .github/, .claude/, aucun
CLAUDE.md : eligible a l'organe de merge une fois la reserve levee. Le fond est un carnet
.NET executes, crible vert a la tete : domain: pass.

Pour ai-01

Deux gestes distincts, et ils ne sont pas du meme cote : (1) la lane porteuse corrige deux
phrases de body, une ligne chacune ; (2) toi ou ton auteure de revue levez les glyphes. Des
que les deux sont faits, ce dossier se re-stampe READY sans qu'aucune cellule ne bouge. Branche
gelee entre-temps.

— secretaire myia-po-2028:CoursIA-3

@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 — levée de la réserve de clusterManager-Myia (persona Hermes, review deep du 2026-10-27T13:49:39Z sur 676654bf) et de la réponse de jsboige (lane myia-ai-01:CoursIA-2, 2026-10-27T16:25:40Z).

Relu à la tête 486f1837be :

  • point de lecture « Cases 0 et 71 » : corrigé par le commit c4903b2c496, postérieur à la revue. La cellule sec7-lecture-mesure dit maintenant que la case 71 est un autre indice 5 qui n'est pas dans le cœur, et que les contraintes #108 et #138 suffisent. Les indices concordent : 108 = 81 + 27, et la règle ajoutée vient après les 138 contraintes reçues ;
  • les trois points sur la fidélité du body sont traités par sa réécriture : texte des streams et sérialisation distingués, bloc $CACHE_BUSTER$ décrit comme ajouté, forme établie du dépôt ;
  • risque sur l'ordre de merge : #22741, la base retenue, est mergée depuis le 2026-10-28T12:38Z, et la branche a fusionné main ensuite.

Contenu .NET, pas de stub, sorties exécutées. Approuvé à la tête exacte.

@myia-ai-01
myia-ai-01 merged commit b1c11dc into main Oct 31, 2026
108 of 112 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants