Skip to content

fix(search-09b): aligner la prose du zoom sur les sorties committées - #15231

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/astra-search09b-burer-monteiro
Sep 9, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/astra-search09b-burer-monteiro

Conversation

@jsboige

@jsboige jsboige commented Sep 8, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2025:CoursIA-2 — prev: MED/tooling #15212

Discovered and verified by corrective-auditor: CONFIRMED_PEDAGOGY

Résumé

Audit Astra DISCOVERY (issue #15227) du notebook Search-09b. La question d'audit principale — le seuil Burer–Monteiro emploie-t-il n=sommets au lieu de m=contraintes affines (soupçonné être le nombre d'arêtes pour Max-Cut SDP) — s'est résolue en FALSE_POSITIVE : le notebook est correct. Cette PR ne porte que l'unique défaut adjacent confirmé, une incohérence prose/sortie dans la cellule « Lecture du zoom ».

See #15227

Question principale : m = n — FALSE_POSITIVE (aucune correction)

Vérifié contre les sources primaires :

  • Boumal–Voroninski–Bandeira (2018), The non-convex Burer–Monteiro approach works on smooth SDPs (ar5iv full text) : le SDP est max ⟨C,Y⟩ s.t. 𝒜(Y)=b, Y ⪰ 0 avec 𝒜: 𝕊^{n×n} → ℝ^m ; la condition de rang est p(p+1)/2 > m. Pour Max-Cut, 𝒜 est la carte diagonale diag(Y)=1, b = 𝟙 ∈ ℝ^n → m = n, pas le nombre d'arêtes. La forme factorisée est diag(YY^T)=1 c'est-à-dire des lignes sur des sphères unité — exactement (BM_r) du notebook.
  • Burer–Monteiro (2005) (reformulé dans l'intro BVB) : « we need only p(p+1)/2 > m », où m compte les contraintes d'égalité. La note Barvinok–Pataki du notebook est cohérente avec cette lecture.

Le nombre d'arêtes |E| vit dans l'objectif W, pas dans les contraintes : le soupçon « arêtes » est réfuté par la source, pas seulement par l'expérience.

Contre-exemple demandé (n ≠ |E|) — les deux lectures de m divergent exactement quand n ≠ |E| :

Instance n |E| r*(n) (notebook) r*(|E|) (lecture réfutée)
C6 6 6 4 4 (coïncidence)
K8 8 28 4 8
G(10,0.5) 10 19 5 6
Petersen (exercice) 10 15 5 6

La source primaire tranche : m = n. La table du notebook (4/4/5) est la bonne.

Question secondaire : « trois régimes identiques » — CONFIRMÉ

Ré-exécution fraîche sur python3 (Python 3.13.14, cvxpy 1.9.2, numpy 2.4.4, CLARABEL) : les 7 sorties de cellules code sont byte-identiques aux sorties committées (execution_count 1–7, zéro erreur). Le recensement est déterministe sous graines fixes. Les trois régimes (r=1 universellement fallacieux 39/40·40/40·40/40 ; rangs intermédiaires en décroissance 5/40·0·12/40 ; zéro à r ≥ r*) correspondent exactement au tableau, et la nuance « propreté commençant avant r* » (C6 et G10 dès r=3, K8 dès r=2) est la bonne.

Défaut corrigé — CONFIRMED_PEDAGOGY

Cellule « Lecture du zoom » (section D), deux nombres de prose contredits par la sortie committée et par la ré-exécution fraîche :

Prose (avant) Sortie committée = fraîche OBSERVATION / INFERENCE
déficit de $0{,}5550$ deficit 0.5551 (pleine précision 0.55507) OBSERVATION : 0.5550 = 14.3249 − 13.7699 (soustraction des deux valeurs affichées arrondies). INFERENCE : cohérent avec une prose dérivée des valeurs affichées ; la provenance textuelle n'est pas établie par la section D.
gradient « de l'ordre de $10^{-5}$ » 9.91e-08 (ordre 10⁻⁸) OBSERVATION : sortie committée = fraîche = 9.91e-08 ≈ 10⁻⁸, contre prose 10⁻⁵. INFERENCE : peut refléter des paramètres antérieurs — la section D documente un ancien réglage (600 itér. / seuil 10⁻⁵) — mais la provenance textuelle n'est pas établie.

Diagnostic dérive (défaut corrigé)

  • OBSERVATION : les valeurs de la sortie committée (byte-identiques à la ré-exécution fraîche) diffèrent de la prose — déficit 0.5551 vs 0.5550, gradient 9.91e-08 vs 10⁻⁵.
  • INFERENCE : la prose ne reflète pas la sortie actuelle ; elle peut dater d'un état antérieur du notebook (paramètres antérieurs documentés en section D) ou d'une dérivation à partir des valeurs affichées. La provenance exacte n'est pas établie par le contenu du notebook ; ce qui justifie la correction est la reproductibilité de la valeur actuelle (ré-exécution fraîche byte-identique), pas la démonstration de l'origine de l'écart.
  • Verdict : CAUSE_FIXED — la prose cite désormais les valeurs réelles de la sortie committée. Les valeurs étant byte-identiques sous ré-exécution fraîche, il n'y a pas de valeur « qui changera au prochain passage kernel » : la ré-alignement vient d'une exécution réelle, pas d'un alignement byte-surgical.

Exécution et preuves

  • jupyter nbconvert --execute (kernel python3, hors repo vers scratchpad) : toutes les cellules exécutées, sorties byte-identiques aux committées.
  • scripts/notebook_tools/validate_pr_notebooks.py origin/main : 1/1 PASS (7 cellules code).
  • scripts/notebook_tools/check_papermill_ratchet.py origin/main : 0 changed / 0 regressions (markdown-only ; aucun output, execution_count ni metadata touché).
  • scripts/notebook_tools/detect_markdown_rendering.py --check <target> : OK, aucune nouvelle violation.
  • Pre-commit local (H.3 refus-notebook-non-exécuté, source-list-newlines, oversized markdown-rendering, syntaxe source) : Passed.
  • C.1 (raise NotImplementedError / assert False / 1/0) : propre — stubs d'exercice = return None # TODO etudiant.
  • Scan secrets / littéraux inline : propre.
  • Jumeau & traduction : ce notebook n'est ni dans twin_pairs.d ni dans translations/.

Périmètre

  • 1 fichier : MyIA.AI.Notebooks/Search/Part1-Foundations/Search-09b-SpuriousMinima.ipynb.
  • Diff = 1 ligne / 2 jetons ($0{,}5550$→$0{,}5551$, $10^{-5}$→$10^{-8}$), byte-minimal : aucune cellule code, aucun output, execution_count ni metadata modifiés.
  • Aucun autre défaut trouvé dans le notebook. Le pont SOS SIAM 2023 reste bibliographique (déjà noté honnêtement en section E).

Déconfliction

Limites / résidualité

  • Je n'ai pas falsifié la non-dégénérescence (condition du théorème) — le notebook le note honnêtement en section E. Le recensement n'est pas une preuve, mais la question d'audit portait sur la définition de m, pas sur la dégénérescence.
  • Aucun claim GPU/vision : les sorties sont des tableaux numériques, la vérification visuelle n'ajoute rien.

Co-Authored-By: Claude Code noreply@anthropic.com

…(deficit 0.5551, gradient ~1e-8)

La cellule "Lecture du zoom" citait un deficit de 0,5550 (soustraction des
valeurs arrondies affichees) et un gradient riemannien de l'ordre de 10^-5,
alors que la sortie committees et une re-execution fraiche donnent 0.5551
et 9.91e-08. Correction de la prose uniquement : aucune cellule code, aucun
output ni execution_count modifies.

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

github-actions Bot commented Sep 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 Sep 9, 2026

Copy link
Copy Markdown
Contributor

prev: genre mots-clé fermant -- bloquant (#10093).

prev: reference(s) fail invariant(s) (prev-not-pr -> [15227]) -> point prev: at a MERGED PR of the same lane, distinct from the current PR. See #13475.

Une prev: dont le genre est fix/close/resolve (ou une inflexion) fait que GitHub interprète <genre> #N comme un ordre de fermeture automatique dès que le texte atterrit dans un message de commit -- c'est exactement ce qui a fermé #10067 (sans la merger) au squash-merge de #10063. Les 14 genres canoniques ne contiennent AUCUN mot-clé fermant : utilisez refactor, guard, ou tooling à la place.

Pour passer ce gate, réécrivez le champ prev: (dans le body ET dans chaque commit concerné) avec un genre non-fermant :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<refactor|guard|tooling|...> #<PR>

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 2.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.0s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 16.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 8.4s

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

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

@myia-ai-01
myia-ai-01 merged commit e6ddf58 into main Sep 9, 2026
67 of 71 checks passed
@jsboige
jsboige deleted the fix/astra-search09b-burer-monteiro branch October 16, 2026 12:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants