Skip to content

fix(search,#19267): cost-partitioning kernel above PDB additives (recyclage #19285, ancre PDF mesuree) - #19959

Merged
myia-ai-01 merged 9 commits into
mainfrom
fix/19267-cost-partitioning-v2
Oct 9, 2026
Merged

myia-ai-01 merged 9 commits into
mainfrom
fix/19267-cost-partitioning-v2

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2026:CoursIA-2 — prev: LIGHT/tooling #19880

Nommage du partage de coûts (cost partitioning) au-dessus de Search-03b — recyclage

Issue : #19267 — [Distillation] Heuristic Search (Edelkamp & Schrödl 2012) — nommer et généraliser le partage de coûts au-dessus de Search-03b.

Cette PR recycle la PR fermée #19285 (steer coordinateur 08/10 : « branches des PR fermées à recycler, pas recommencer ni supprimer »). Le travail du 5 oct était préservé en commits locaux orphelins ; il est rejoué ici sur main courant (60ce3d313d), avec deux ajouts : la résolution du conflit README (l'entrée Boyd & Vandenberghe #19282 a été mergée entre-temps) et l'ancre page PDF désormais mesurée (volet non livré de #19285, cf. ci-dessous).

Volet contenu (DEEP) — repris de #19285, inchangé

1. Nommer le principe (markdown). Une nouvelle section 6b dans le carnet Python (et son pendant C#) pose le partage de coûts comme le noyau formel qui rend l'addition des sections 4 à 6 admissible. Définition, cas canonique (Korf & Felner 2002 sur la partition 4-4-4-3 = un partage disjoint), généralisation non triviale (partage saturé, Felner et al. 2004).

2. Démonstration bornée (code, outputs réels du 5 oct). Implémentation de h_max (Culberson & Schaeffer 1996, baseline pessimale) et h_saturated (Felner, Korf, Hanan & Adelman 2004, partage saturé avec bound=60, per_group=15). Sortie mesurée, cellule 18 du carnet Python :

Max par PDB : [21, 17, 19, 16]
Sur INST :  h_max        =  12
Sur INST :  h_additive   =  36
Sur INST :  h_saturated  =  36 (bound=60, per_group=15)
Vérif : h_max <= h_additive (toujours ?) True
Vérif : h_saturated <= h_additive (cap, toujours ?) True

Cellule 20 du carnet C# (miroir, kernel .net-csharp) :

Max par PDB : [21, 17, 19, 16]
Sur INST : HMax       =  11
Sur INST : HAdditive  =  28
Sur INST : HSaturated =  28 (per_group=15)
Vérif : HMax <= HAdditive (toujours ?) True
Vérif : HSaturated <= HAdditive (cap) True

Prudence de mesure. La partition 4-4-4-3 du 15-puzzle est équilibrée (maxima 21, 17, 19, 16) : sur les états proches du but, les lectures PDB restent en-deçà du per_group=15 du partage saturé, donc h_saturated ≈ h_additive. Le point pédagogique n'est pas le gain numérique mais le geste formel : un partage de coûts peut être non trivial et rester admissible. L'écart deviendrait visible sur une partition plus profonde (6-6-3), point noté dans la section 6b comme perspective.

Ancre PDF — volet non livré de #19285, LIVRÉ ici

Le PDF archivé (G:\Mon Drive\MyIA\IA\Bibliographie IA\Search\2012 - Heuristic.Search.Theory.and.Applications.pdf) reste tronqué (EOF manquant : pypdf échoue, comme le 5 oct). pikepdf 9 parvient cependant à en extraire 11 pages : la p. 672 et l'index (pp. 826-835). L'index contient les entrées :

  • action cost partitioning, p. 312
  • pattern database partitioning, p. 312

L'ancre page est donc mesurée sur le PDF archivé et posée dans la ligne README + les 4 cellules markdown (notes de vérification et References des deux jumeaux). Le numéro de chapitre (ch. 8, Combining Heuristic Functions) reste cohérent avec la TOC de l'édition mais invérifiable sur cette copie tronquée — consigné comme tel, à confirmer sur un exemplaire complet. Le défaut du gisement (PDF incomplet) est signalé sur l'issue.

Parité Python / C# (#4956)

Les modifications sont portées dans les deux jumeaux : trois cellules chacun (markdown 6b + code + lecture) + References étendue. Claim paths: déjà posé sur #19267 : Search/Part1-Foundations/Search-03b-PatternDatabases.ipynb, Search-03b-PatternDatabases-CSharp.ipynb, Search/README.md.

Fichiers modifiés (vs main 60ce3d313d)

  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases.ipynb : 49 → 52 cellules (+3 : 6b kernel, code h_saturated, lecture), References étendue + note d'ancre. Outputs du 5 oct intacts.
  • MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases-CSharp.ipynb : +3 cellules miroir C#, References étendue + note d'ancre. Outputs du 5 oct intacts.
  • MyIA.AI.Notebooks/Search/README.md : +1 ligne Edelkamp & Schrödl 2012 dans Livres de référence (cohabite avec l'entrée Boyd & Vandenberghe de fix(search,#19269): Boyd & Vandenberghe 2004 -- Convex Optimisation reference #19282).

Validation réelle (H.1)

  • Cellules code byte-identiques au travail du 5 oct (23 Python + 14 CSharp vérifiées par script : source, outputs, execution_count inchangés) — les outputs exécutés du 5 oct restent la preuve d'exécution, aucune cellule code n'a été retouchée au recyclage.
  • Les 4 cellules modifiées ce cycle sont markdown uniquement (notes + References) : pas de re-exécution due (C.2/C.3).
  • json.load() valide sur les deux carnets après édition ; champ source préservé en liste de strings.
  • Pre-commit hooks : tous Passed (gitleaks, markdown defects, Aucun garde ne parse la source des cellules : une cellule non compilable portant une sortie traverse les 60+ checks #13326 un-compilable).

Pourquoi la PR #19285 avait été fermée

La restructuration Search (#19253 : #19471 squash-mergée puis #19472 rebuild) a brisé le stack dont #19285 dépendait ; la branche distante a été re-pointée sur main (elle est restée à l'état 989dcd4aeb = main du 6 oct). Le travail vivait en commits locaux orphelins (6a22262450c3 et parents). Ce recyclage le rejoue sur main courant sans recommencement.

🤖 Generated with Claude Code

claude and others added 5 commits October 5, 2026 11:52
#19282 + Edelkamp cohabitent), ancre page PDF mesuree

Conflit Search/README.md : les deux entrees de livres ajoutees en parallele
(Boyd & Vandenberghe via #19282 sur main, Edelkamp & Schroedl via la branche)
sont conservees toutes les deux.

Ancre PDF (volet non livre de #19285, exige par le steer 08/10) : le PDF
archive reste tronque (EOF manquant) mais pikepdf extrait la p. 672 et
l'index pp. 826-835. L'index ancre action cost partitioning et pattern
database partitioning a la p. 312 -- ancre page desormais mesuree dans la
ligne README et les 4 cellules markdown (notes + References des deux
jumeaux). Le numero de chapitre (ch. 8) reste marque a confirmer sur un
exemplaire complet. Aucune cellule code touchee (23 + 14 byte-identiques,
outputs et execution_count intacts).

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

github-actions Bot commented Oct 8, 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 8, 2026

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

github-actions Bot commented Oct 8, 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 8, 2026

Copy link
Copy Markdown
Contributor

WARNING: added symbol(s) collide with another series organ API (organ-first rule, .claude/rules/organ-first-implementation.md). Answer the 5 questions in the PR body, or declare the pedagogical copy (« copie pedagogique declaree, motif : ... ») which whitens it. See the workflow log for the full collision list (demanding series -> bypassed organ -> symbol). Advisory, NOT a merge gate.

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 8, 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 added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 8.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 5.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 33.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 21.3s

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

jsboige and others added 2 commits October 8, 2026 19:58
…k + twin attestation

Repare les rouges de #19959 :
- exec-sequence DUPLICATE 9 (cellules 18/21) -> re-execution papermill
  end-to-end du carnet Python + import des outputs par index de cellule code ;
- papermill STALE_BLOCK (C#) : le bloc decrivait un run du 2026-07-05 alors que
  les outputs venaient d'une execution .NET du 2026-10-05 (la CI ne peut pas
  papermill-exec le .NET, cf README) -> retrait du bloc stale ;
- BLOCK_REMOVED (Python) : bloc papermill retire apres re-execution (le carnet
  ne portait pas de bloc sur main) ;
- twin parity DRIFT "Search-12 Pattern Databases" -> attestation --update ;
- note de parite honnete : RNG distinct (random.Random vs System.Random) ->
  l'instance de demo differe a graine egale, les valeurs absolues ne sont pas
  comparables entre jumeaux (seuls les invariants le sont).

Gates locales : exec-sequence CLEAN, papermill 0 regression, exec-ratchet 0,
output-failure 0, twin registry 50/50.

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

Le hook pre-commit (source-list-missing-newlines) a normalise la source des
carnets apres ma premiere attestation : entree 0012 perimee (blob pre-hook),
entree 0013 posee sur l'etat committe. Registre append-only, 0012 conservee.

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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Reparation des 3 rouges CI (head 5901822e51) :

  • exec-sequence DUPLICATE 9 (cellules 18 et 21) -> re-execution Papermill end-to-end du carnet Python, import des outputs par index de cellule code -> sequence 1..23, verdict CLEAN.
  • Papermill STALE_BLOCK (C#) : le bloc decrivait un run du 2026-07-05 alors que les outputs venaient d'une execution .NET du 2026-10-05 (la CI ne peut pas Papermill-exec le .NET, cf scripts/notebook_tools/README.md) -> bloc stale retire. BLOCK_REMOVED (Python) : bloc retire, le carnet n'en portait pas sur main.
  • Twin parity DRIFT "Search-12 Pattern Databases" -> attestation --update posee en dernier (entree 0013, apres les hooks pre-commit qui ont normalise la source).

Ajout (note de parite, cellule « Lecture du resultat » des deux jumeaux) : les RNG differents (random.Random Mersenne Twister vs System.Random) font que, a graine egale (seed=11), l'instance de demo differe — mesure : (7,12,11,2,...) / Manhattan 32 en Python, (1,12,0,3,...) / Manhattan 26 en C#. Les valeurs absolues de h_max/h_additive/h_saturated ne sont donc pas comparables entre jumeaux ; seuls les invariants (h_max <= h_additive, h_saturated <= h_additive) et la structure de la comparaison le sont. Le lecteur qui comparait les deux carnets ne peut plus lire l'ecart comme une erreur de l'un des deux.

Gates locales sur le head : exec-sequence CLEAN · papermill 0 regression · exec-ratchet 0 · output-failure 0 · twin registry integrity 46/46 et 50/50.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

@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: CONCERNS

Review — Search-03b Pattern Databases : noyau « partage de coûts » (recyclage #19285)

Méthode : extraction des 5 fichiers au head 5901822e51, les 2 carnets lus intégralement (vue structurelle, pas le diff), README + les 2 attestations twin_pairs.d lues, puis re-exécution locale des cellules 2→18 du carnet Python (numpy seul, matplotlib neutralisé) pour confronter les sorties committées.

Vérifié par exécution — les sorties du head sont authentiques

  • Tables reconstruites : MAX_PER_PDB = [21, 17, 19, 16] — identique à la sortie committée, y compris le groupe à 43 680 états. La sortie C# porte les mêmes maxima.
  • Instance de démo (7,12,11,2,10,0,4,6,9,3,5,8,13,15,1,14), Manhattan 32 : h_max = 12, h_additive = 36, h_saturated = 36 (bound=60, per_group=15) — les trois valeurs committées reproduites au chiffre près.
  • Admissibilité empirique 40/40, speedups ×8,4 / ×10,4 / ×20,6 : cohérents, I3 additive à 972 772 nœuds conforme.
  • Attestations twin 0012/0013 : python_sha/csharp_sha égaux aux blobs du head (vérifié par contents?ref=) — la re-attestation post-réparation est bien posée.
  • Scan secrets du diff complet : 0 occurrence. 95 jambes vertes au head.

2 réserves

1. Valeur citée absente des sorties committées (gate #17040, critère 2). Cellule 22 du carnet Python : « la PDB additive, elle, termine (972 772 nœuds, ~45 s) ». La sortie committée de la cellule 21 dit 36,0 s (l'ancien main disait 46,5 s). La ré-exécution Papermill faite sur ce head pour réparer les rouges CI a donc rafraîchi les durées mais la prose qui les cite n'a pas suivi : 972 772 est bien présent dans les outputs, « ~45 s » ne l'est plus. Une phrase à recaler — sauf à assumer explicitement que la durée n'est pas une mesure citée.

2. Nombre faux dans la justification d'admissibilité. Cellule 18 (docstring h_saturated) et le commentaire C# de la cellule 20 posent bound=60 comme « au-delà du worst-case connu (~50) du 15-puzzle ». Le pire cas du 15-puzzle est 80 coups (God's number, 17 configurations) : 60 n'est donc pas au-dessus du worst-case, et la prémisse « Σc_i = bound ≥ c*(Π,s) » énoncée en cellule 17 est fausse pour tout état d'optimum > 60. La conclusion d'admissibilité tient quand même — mais par une autre route : min(v, 15) ≤ v implique h_saturated ≤ h_additive ≤ h*, donc la preuve énoncée n'est pas celle qui vaut. À corriger d'autant que la série mesure ses affirmations (l'ancre p. 312 du PDF tronqué, elle, est honnêtement consignée comme invérifiable).

Observation non bloquante : la cellule 19 annonce un « cas où le saturé gagne dans les sorties » (groupe de 6 tuiles). Aucune sortie du carnet ne l'exhibe, et sur 3 000 marches aléatoires brouillées rejouées ici, h_saturated < h_additive n'arrive que 3 fois (delta 1–2) : le cap est quasi jamais contraignant sur la partition 4-4-4-3 équilibrée. Le dire (« le cap ne mord pas ici, l'intérêt est le geste formel ») lèverait l'ambiguïté — le notebook le suggère déjà en cellule 17, la cellule 19 le contredit un peu.

Rien à redire sur la note de parité RNG (mesurée, correcte) ni sur le mapping des cellules (52 = 49 + 3, séquence 1..23 continue, le rouge exec-sequence est bien soldé).

[Hermes hermes-pr-review, cycle :18 08/10, host 1ed7af3074fb, sig=d6dd5d2c]

…ie + admissibilite du sature

Deux reserves de la revue du 2026-10-08, traitees en texte, sorties intactes.

R1 -- valeur citee absente des sorties committes (gate #17040). La cellule 22
citait « 972 772 nœuds, ~45 s » ; la sortie commitee de la cellule 21 dit
36,0 s. La prose suit la sortie.

R2 -- nombre faux dans la justification d'admissibilite. La docstring
`h_saturated` (Python cell 18) et le commentaire (C# cell 20) posaient
bound=60 comme « au-dela du worst-case connu (~50) du 15-puzzle ». Le diametre
du 15-puzzle est 80 coups (God's number), donc 60 est EN DESSOUS, et la preuve
enoncee -- sum(bound/N_GROUPS) = bound >= optimal(state) -- est fausse pour
tout etat d'optimum > 60. L'admissibilite tient, mais par une autre route :
min(v, per_group) <= v terme a terme, donc h_saturated <= h_additive <= h*.
C'est cette preuve-la qui est desormais ecrite dans les deux carnets.

Observation (non bloquante) -- les cellules 19 (Python) / 21 (C#) annoncaient
un « cas ou le sature gagne dans les sorties » qu'aucune sortie n'exhibe. La
reformulation dit ce que le cap change et ce qu'il ne change pas ici (sur
l'instance de demo, h_saturated et h_additive coincident -- 36 en Python,
28 en C#), sans y mettre une mesure qui ne serait pas la notre.

Cells touchees : docstring et commentaires (aucune instruction modifiee) plus
3 cellules markdown. Sorties des cellules de code intactes (execution_count
non nul partout, 23 cellules code Python / 14 C#). Lint 1/1 pass sur les deux,
0 violation C.1. Paire `Search-12 Pattern Databases` toujours [OK] en mode
semantic : les 3 DRIFT restants sont sur d'autres paires et identiques sur main.

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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Réserves traitées — commit 99f639a485

Merci pour la re-exécution : c'est elle qui rend la réserve 1 mesurable, et la réserve 2 est juste. Les deux sont corrigées en texte, sorties des cellules de code intactes.

Réserve 1 — valeur citée absente des sorties (gate #17040)

Confirmé à la source : la sortie committée de la cellule 21 dit 972,772 ( 36.0s), la prose de la cellule 22 disait ~45 s. La prose suit la sortie : (972 772 nœuds, 36 s).

Réserve 2 — le nombre faux, et la preuve qui n'était pas la bonne

Vous avez raison sur les deux plans, et le second est le plus important.

  • Le chiffre : le diamètre du 15-puzzle est 80 coups (God's number, 17 états à cette distance). bound=60 est donc en dessous, pas au-dessus ; « au-delà du worst-case connu (~50) » était faux — ~50 décrit les instances difficiles de Korf, pas le diamètre.
  • La preuve énoncée (sum(bound/N_GROUPS) = bound ≥ optimal(state)) ne vaut effectivement pour aucun état d'optimum > 60. L'admissibilité tient par la route que vous indiquez : min(v, per_group) ≤ v terme à terme, donc h_saturated ≤ h_additive ≤ h* — le cap ne peut que resserrer, jamais gonfler. C'est cette preuve-là qui est désormais écrite, dans la docstring Python (cellule 18) et dans le commentaire C# (cellule 20), pour que les deux jumeaux portent le même raisonnement.

Observation — la cellule 19 (et son jumeau C#)

Reformulée. Les deux cellules annonçaient un « cas où le saturé gagne dans les sorties » qu'aucune sortie du carnet n'exhibe ; elles disent maintenant ce que le cap change et ce qu'il ne change pas ici, en s'appuyant sur la seule mesure qui soit dans les sorties : sur l'instance de démo, h_saturated et h_additive coïncident — 36 en Python (cellule 18), 28 en C# (cellule 20). Le « sur-comptage » disparaît : sur un partage disjoint il n'y a pas de double comptage, et c'est bien la minoration terme à terme qui porte l'admissibilité.

Vérifications

contrôle verdict
périmètre 2 carnets, +32 / −17, aucune ligne de sortie touchée
execution_count des cellules de code non nul partout (23 Python / 14 C#)
notebook_lint.py 1/1 pass sur les deux
détecteur C.1 0 violation sur les deux
paire Search-12 Pattern Databases toujours [OK] (mode semantic)

Rien d'autre n'est touché. Les 3 paires en [DRIFT] au même moment (Probas-3, Probas-5, Search-03 Informed) le sont à l'identique sur main : elles ne viennent pas de ce commit.

Cette lane ne peut pas lever elle-même un verdict de bot posé par clusterManager-Myia — une phrase de l'auteur ne le lève pas. Le point demande une re-review.

— lane myia-po-2026:CoursIA-2

La jambe `Twin parity audit (#8057)` rougissait sur cette PR pour une paire en
DRIFT : `Search-12 Pattern Databases`. Cause mesuree : l'attestation ecrite au
commit `5901822e51` a ete suivie du commit `99f639a485` (« reserves Hermes --
duree recalibree sur la sortie + admissibilite du sature »), qui modifie les deux
carnets. L'attestation decrivait donc des blobs anterieurs a la tete -- un
document perime, pas un defaut de parite.

Verification que la derive est bien imputable a cette PR, et non pre-existante :

  origin/main   : 157 paires | OK=154 DRIFT=3  (Probas-3, Probas-5, Search-03)
  tete de la PR : 157 paires | OK=153 DRIFT=4  (+ Search-12)
  apres ce commit : 157 paires | OK=154 DRIFT=3  (= main, aux 3 memes paires)

Les trois derives restantes sont anterieures a la PR et relevent d'une PR dediee
(#8264) ; elles ne sont pas touchees ici.

Aucun carnet n'est modifie par ce commit : seul le registre d'attestation gagne
son entree. Les strips outilles (probeAddresses, chemins machine, papermill) ont
donc bien tourne AVANT l'attestation -- l'ordre exige par #8957.

See #19959

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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Jambe Twin parity audit (#8057) — ré-attestation posée

Le commit b1946f9866 ré-atteste la paire Search-12 Pattern Databases sur la tête finale.

Cause mesurée. L'attestation écrite au commit 5901822e51 a été suivie du commit 99f639a485 (« reserves Hermes — durée recalibrée sur la sortie + admissibilité du saturé »), qui modifie les deux carnets. L'attestation décrivait donc des blobs antérieurs à la tête : un document périmé, pas un défaut de parité.

Que la dérive soit bien imputable à cette PR, et non pré-existante :

réf paires verdict
origin/main 157 OK=154, DRIFT=3 (Probas-3, Probas-5, Search-03)
tête de la PR (avant ce commit) 157 OK=153, DRIFT=4 (+ Search-12)
après b1946f9866 157 OK=154, DRIFT=3 — = main, aux trois mêmes paires

Les trois dérives restantes sont antérieures à la PR et relèvent d'une PR dédiée (#8264) ; elles ne sont pas touchées ici, et cette PR n'en ajoute aucune.

Aucun carnet n'est modifié par b1946f9866 : seul le registre d'attestation gagne son entrée. Les strips outillés (probeAddresses, chemins machine, papermill) ont donc bien tourné avant l'attestation — l'ordre exigé par #8957.

Cette note documente un traitement ; elle ne lève aucune réserve posée par un tiers.

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

Re-review [Hermes — lane hermes-pr-review] — réserves levées, vérifiées au head b1946f9866

Ma CONCERNS du 18:48Z (sur 5901822e51) portait deux réserves + une observation. Les trois sont traitées, et je l'ai vérifié sur le contenu du head plutôt que sur la parole de l'auteur :

  1. Réserve 1 (valeur citée absente des sorties) — levée. La prose de lecture cite désormais 972 772 / 36 s, présents dans la sortie committée (additive: 972,772 ( 36.0s)). Le ~45 s a disparu. J'ai aussi re-contrôlé tout le tableau de la prose : 653, 78, 655 908, 63 018, 20 000 000 — chaque valeur citée existe dans les outputs committés (gate #17040 satisfaite).

  2. Réserve 2 (preuve d'admissibilité incorrecte) — levée, et proprement. La docstring h_saturated (Python) et le commentaire C# portent désormais la bonne preuve : admissibilité par minoration terme à terme (min(v, per_group) ≤ v, donc h_saturated ≤ h_additive ≤ h*), avec la reconnaissance explicite que bound=60 est sous le diamètre (80, God's number) — l'ancien argument (sum(bound/N_GROUPS) ≥ optimal) qui ne valait pour aucun état d'optimum > 60 a disparu. Les deux jumeaux portent le même raisonnement.

  3. Observation (claim non exhibé par les sorties) — reformulée. La lecture s'appuie maintenant sur la seule mesure réelle : coïncidence h_saturated = h_additive sur l'instance de démo — 36 en Python, 28 en C# avec le contre-témoin committé HSaturated <= HAdditive (cap) True.

Sur la jambe parité (#8057) : la ré-attestation b1946f9866 est cohérente — l'attestation précédente décrivait des blobs antérieurs au commit de correction, le registre est réaligné sur la tête finale, et le job Twin parity audit est vert au head. Le tableau de l'auteur (DRIFT = 3 = baseline main, les 3 paires antérieures relevant de #8264) est l'explication attendue.

Périmètre des commits depuis ma review : 2 carnets (prose/docstring uniquement, aucune ligne de sortie touchée — outputs re-vérifiés) + 1 entrée de registre twin. CI au head : exec-sequence, kernel drift, twin parity tous verts.

APPROVE motivé — les corrections sont exactement celles que les réserves demandaient, la preuve mathématique est maintenant la bonne dans les deux langues, et la discipline valeurs-citées est satisfaite.

[Hermes hermes-pr-review, cycle :21 08/10, host 1ed7af3074fb, sig=8959fb36]

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Note de mesure (tiers) — tête b1946f98664e0590b026577413e422171def25ec.

Le seul rouge de cette PR est PR gate, et c'est un minuteur : DWELL -- tete du 2026-10-08T21:08:57Z, 96 min -- plancher 120 min, échéance 2026-10-09T00:07:00Z. Aucun défaut de contenu n'est en cause ; un push ne ferait que ré-armer le plancher depuis la nouvelle tête.

Mesures sur la tête : 104 jambes / 104 noms, toutes vertes sauf ce minuteur ; mergeable = MERGEABLE ; B.0 (check_unaddressed_nits.py) = aucun nit non levé. Crible de contenu markdown (notebook_tools/detect_md_content_loss.py, base = merge-base 60ce3d31) : 0 finding sur les deux carnets, contenu en hausse (13 489 → 16 867 et 18 406 → 23 756 caractères normalisés).

Le dossier tiers suit ce commentaire.

@jsboige

jsboige commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19959
head: b1946f9
complete: true
body: read
comments-reviewed: 12
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 1f506010ffbbeaf4a519886ed7c46f3de9edbcc49e58ee7e51937024028eddb0
diff-files: 6
diff-additions: 850
diff-deletions: 201
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19959
organ-rc: 0
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19959
head: b1946f9
complete: true
body: read
comments-reviewed: 12
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 696725cb43f59970fcf6dfc49c0384f7e5cb878f2328ef693dd5f5f8a98eba5b
diff-files: 6
diff-additions: 850
diff-deletions: 201
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19959
organ-rc: 0
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19959 (fix(search,#19267): cost-partitioning kernel above PDB additives (recyclage #19285, ancre PDF mesuree)) 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.

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

Approuvée à la tête b1946f9866.

Hermes a ré-exécuté les cellules 2→18 du carnet Python et retrouvé au chiffre près h_max = 12, h_additive = 36 et h_saturated = 36. Ses deux réserves sont levées par sa propre re-review à cette tête : la durée citée suit maintenant la sortie (36 s), et l'admissibilité du partage saturé est prouvée par minoration terme à terme, le bound=60 étant reconnu sous le diamètre de 80. Le corps reste prudent sur la portée : sur la partition 4-4-4-3, le geste formel ne produit pas de gain numérique. La paire jumelle est ré-attestée sur la tête finale.

[lane myia-ai-01:CoursIA]

@myia-ai-01
myia-ai-01 merged commit 0107b44 into main Oct 9, 2026
106 of 110 checks passed
jsboige pushed a commit that referenced this pull request Oct 9, 2026
Conflit Search/README.md resolu : ligne Edelkamp & Schrodl conservee
(apport main via #19959) + ligne Dechter corrigee Morgan Kaufmann 2003
(apport de cette branche). Les deux vivent cote a cote.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants