Skip to content

feat(lean,#17845): brique k2.6 — sum_smul_inl générique (assemblage SignedSums + jumeau _en) - #19425

Merged
myia-ai-01 merged 7 commits into
mainfrom
feature/komlos-k26-signedsums
Oct 10, 2026
Merged

myia-ai-01 merged 7 commits into
mainfrom
feature/komlos-k26-signedsums

Conversation

@jsboige

@jsboige jsboige commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/lean — lane myia-po-2025:CoursIA — prev: DEEP/qc #19408

k2.6 brique 1 — sum_smul_inl générique (assemblage Lemme 1.4)

Brique de l'assemblage final de la voie élémentaire (Karingula–Lovett, #17845), empilée sur #19089 (k2.6a, pont de niveau liftUp/pushUp). Nouveau module Komlos/SignedSums.lean + jumeau _en, repris nom pour nom de l'oracle gdahia/Komlos.

Livré : sum_smul_inl générique — (∑ i, ε i • (v i, (0:ℝ))) = (∑ i, ε i • v i, (0:ℝ)) sur {E : Type*} [AddCommGroup E] [Module ℝ E]. C'est l'assistant que l'oracle invoque au pas de l'induction (SignedSums.lean l.53 : rw [mean_split, sum_smul_inl, Prod.mk_add_mk, add_zero] at hmem) pour distribuer une somme de couples sur la première composante.

Preuve : Prod.ext ?_ ?_ <;> simp [Prod.smul_mk, Prod.fst_sum, Prod.snd_sum] — les trois noms vérifiés au pin avant le build : Prod.smul_mk en Mathlib/Algebra/GroupWithZero/Action/Prod.lean, Prod.fst_sum/Prod.snd_sum versions additives (to_additive) de fst_prod/snd_prod en Mathlib/Algebra/BigOperators/Pi.lean l.155 — le même toolkit que Mathlib/Analysis/Convex/Combination.lean l.460 utilise pour la même distribution.

Position vs k2.6a (réconciliation) : la décision de cadre que la carte de généricité documentait comme ouverte est arbitrée par k2.6a (#19089, option (c) : l'espace qui grandit est réalisé Fin (d + k) → ℤ par l'embedding liftUp, sans re-généralisation des organes). Les deux organes sont complémentaires : sum_smul_snoc (k2.6a) est la forme lake côté grille, sum_smul_inl (ce PR) la forme générique ℝ-modulaire, consommable côté transport/hull où les moments vivent dans ℝ.

Carte de généricité (mesurée, en tête du module) : l'induction oracle ré-instancie ses organes à chaque niveau sur ambiant croissant E → E × ℝ → … ; les organes k2.0–k2.5 du lake sont monomorphes (Fin d → ℤ, hauteur Bool). Déjà génériques : segment_repr, add_smul_mem_convexHull, sum_smul_mem_convexHull (Pullback.lean l.150/189/213). sum_smul_inl était le seul organe du pas qui manquait. Voie β (ping-pong deux espaces) close par la mesure : le pas oracle écrit simultanément dans E et ℝ au même niveau d'itération.

Validation

  • lake build local ciblé (WSL, toolchain v4.33.0, Mathlib db584cd6) : deux jumeaux Discrepancy.Komlos.SignedSums + _en EXIT=0, 0 erreur 0 warning — initial (brique) et re-construits après la réconciliation docstring (restack sur k2.6a)

  • python scripts/lean/count_code_sorry.py --json : distinct_code_sorry = 0 (lake discrepancy_lean)

  • python scripts/lean/check_i18n_siblings.py <SignedSums_en.lean> : 1/1 pairs byte-identical

  • FORMAL_STATUS.md : rangée k2.6 (positionnée contre k2.6a) + agrégateur k2 (déps k2.0–k2.6, reste k2.6b/k2.6c)

  • B.3 (proof-integrity) : non applicable — cas (a), écrit tel quel. Le lake est bien dans la matrice CI (le job lean-matrix / Lean CI (discrepancy_lean) tourne et est vert dessus), mais sa jambe d'axiomes n'est pas activée : le step « Proof integrity » du template matriciel est gardé par if: matrix.axiom-target-modules != '', et l'entrée discrepancy de scripts/lean/ci_lakes.json (23 entrées (mesurées sur origin/main au 07/10 : 6 déclarent la clé — sudoku, kelly, gametheory, serre100, percolation, geometry — et discrepancy n'en fait pas partie)) ne porte pas cette clé — la matrice interpole donc '' et saute le step. Aucun autre workflow du dépôt ne couvre ce lake en axiomes (grep -l discrepancy .github/workflows/*.yml ne rend que lean-ci-matrix.yml, seul appelant de ce template). Conséquence assumée : aucun vert CI d'axiomes n'existe sur ce lake, et le build local n'en tient pas lieu.

Pile

k2.5 (#19087) → k2.6a (#19089) → ce PR. La suite : k2.6b (conservation des moments sous contenance), k2.6c (lecture du pas SignedSums.lean l.37-58 nom pour nom).

See #17845

🤖 Generated with Claude Code

@github-actions github-actions Bot added the markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. label Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de feature/komlos-k25-mean. Aucune PR ouverte de feature/komlos-k25-mean vers main a cet instant -- si la base n'est jamais mergee, le livrable (feat(lean,#17845): brique k2.6 — sum_smul_inl générique (assemblage SignedSums + jumeau _en)) devient un orphelin (personne ne le verra jamais, cf. #10918). Remede : ouvrir une PR de feature/komlos-k25-mean vers main, ou rebaser cette PR sur main.

Couverture CI perdue sur cette base (mesure, #16194)

8 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.yml
  • lean-ci-matrix.yml
  • lean-visibility-advisory.yml
  • mermaid-fill-color-advisory.yml
  • notebook-plan-loss-gate.yml
  • paragraph-length-advisory.yml
  • pr-gate.yml
  • secret-scan.yml

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.

@jsboige
jsboige force-pushed the feature/komlos-k26-signedsums branch from 3efab08 to 70cd163 Compare October 6, 2026 04:09
@jsboige
jsboige changed the base branch from feature/komlos-k25-mean to feature/komlos-k26a-lift October 6, 2026 04:09
@jsboige

jsboige commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR] Restack sur k2.6a + réconciliation — lane myia-po-2025:CoursIA, tête 70cd1633c8.

Restack : la brique a été écrite avant que je ne constate que la lane portait déjà #19089 (k2.6a, pont de niveau liftUp/pushUp — ouverte 42 h, worktree au nom trompeur CoursIA-komlos-k23). La pile est maintenant linéaire : k2.5 (#19087, 87b4f35) → k2.6a (#19089, 589ac52, rebasée ce cycle) → ce PR (git rebase --onto 589ac52199 87b4f35871, base passée à feature/komlos-k26a-lift). Conflits FORMAL_STATUS.md résolus en fusion sémantique : les rangées détaillées k2.6a et k2.6 conservées, agrégateur portant les deux segments « Livré », reste = k2.6b/k2.6c, déps k2.0–k2.6.

Réconciliation de fond (commit 70cd1633c8) : la carte de généricité de ce module laissait la décision de cadre « ouverte » — elle est arbitrée par k2.6a (option (c) : Fin (d + k) → ℤ par liftUp). Docstrings FR/EN et rangée FORMAL_STATUS repositionnées : sum_smul_inl (ce PR, générique ℝ-modulaire) est le complément de sum_smul_snoc (k2.6a, forme lake côté grille) — consommable côté transport/hull où les moments vivent dans ℝ. Preuve inchangée (blobs byte-identiques), seules les docstrings ont bougé.

Re-validation post-restack : lake build local deux jumeaux re-exécutés après réconciliation (voir le body), distinct_code_sorry = 0, i18n 1/1 byte-identical.

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19425 (feat(lean,#17845): brique k2.6 — sum_smul_inl générique (assemblage SignedSums + jumeau _en)) 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.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 6, 2026
@jsboige
jsboige force-pushed the feature/komlos-k26a-lift branch 2 times, most recently from 5fd837f to f11bc6e Compare October 7, 2026 05:04
@jsboige
jsboige force-pushed the feature/komlos-k26-signedsums branch from 70cd163 to 27b59d4 Compare October 7, 2026 05:05
jsboige added a commit that referenced this pull request Oct 7, 2026
…a dimension agrandie

- `Komlos/LiftSplit.lean` + jumeau `_en` : sans contrepartie oracle (le `Finsupp`
  transporte son support gratuitement, le cadre `Finset` du lake paie ce transport)
- 5 énoncés : transfert de contenance (`supportContained_pushUp_split`),
  conservation des moments liftée (`coordMoment_pushUp_split_of_support`/`_last`),
  lecture du support (`pushUp_split_ne_zero`), forme `{0, snoc u 0, −snoc u 0}`
  (`supportContained_pushUp_split_three`)
- Consommateur mesuré : k2.6c — l'induction elle-même (`SignedSums.lean` l.44-55)
- FORMAL_STATUS.md : rangée k2.6b + agrégateur (reste k2.6c seul, déps k2.0–k2.6b)
  + dédoublonnage de la rangée k2.6 (artefact du restack #19425)

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

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

Rejeu de pile après absorption de origin/main dans la base k2.2 — nouvelle tête 27b59d46c4 (force-push avec bail explicite : 70cd1633c8 → {NEW}, branche à lane unique).

Cause mesurée. La base feature/komlos-k22-convexhull (#19078) a absorbé origin/main cette nuit (merge bdc37832ba, union délimitée FORMAL_STATUS.md). Toute la ligne k2.3 → k2.6c pendait encore de l'ancien point dd10e15fca (et k2.6 pendait en plus de l'ancien k2.6a 589ac52199) : chaque PR au-dessus de k2.2 est devenue DIRTY contre sa base déplacée.

Geste. Rejeu de la pile entière sur bdc37832ba (recette éprouvée : HEAD détaché + refspec + bail explicite, un commentaire par PR de la pile). Conflit unique et récurrent FORMAL_STATUS.md à chaque brique, résolu en union :

Preuve de préservation. Les fichiers Lean de chaque brique sont byte-identiques avant/après rejeu (vérifié par git rev-parse <sha>:<path>, 14/14 fichiers — paires FR/_en de Transport, Pullback, Distribution, Lift, SignedSums, LiftSplit) : entrées de compilation identiques, la CI déjà passée sur les anciennes têtes reste la preuve de build. git merge-tree --write-tree : auto-merge propre contre le parent direct ET contre origin/main pour les 7 têtes.

See #17845

@github-actions github-actions Bot added the lean-visibility-drift La PR ajoute des declarations lake non citees par AUCUN notebook (borne large) (#11703) label Oct 7, 2026
@jsboige

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19425
head: 27b59d4
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 36c2e68a76878e04eeb74815fda5c3cf8f082e62bd87456cf24ba8bf392563d8
diff-files: 3
diff-additions: 137
diff-deletions: 1
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 19425
organ-rc: 0
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19425
head: 27b59d4
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: aa888d0178a1df837f5c0c1a1a63e13761860da543cb17cf8a26469fe46354ec
diff-files: 3
diff-additions: 137
diff-deletions: 1
checks: latest-wins-green
b0: clear
scope: fail
domain: not-applicable
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19425
organ-rc: 3
[/ADJOINT PREFLIGHT]

jsboige and others added 2 commits October 8, 2026 09:47
… + caracterisations de support + pullback)

Etend les modules Pullback FR/_en (pas de nouveau fichier) : embedding
produit toRealProd (hauteur Bool -> coordonnee reelle), caracterisations
de support de la scission sous P >= 0 (max -> disjonction, min ->
conjonction), et le theoreme pullback lui-meme (Lemme 1.4, transposé de
Komlos/Pullback.lean l.55-92) sur Finset.mem_convexHull' +
Finset.abs_sum_le_sum_abs + les ingredients k2.1/k2.2/k2.3. sum_smul_inl
reporte : aucun consommateur dans le port (decomposition (z, beta) via
Prod.fst_sum/Prod.snd_sum).

See #17845

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit d45cba5)
…stribution + jumeau _en)

Port de Komlos/Distribution.lean l.105 (module repris nom pour nom) : le
barycentre coordonne-par-coordonnee d'une distribution positive de masse 1
sur S appartient a l'enveloppe du support transporte S.map toReal. Le
one-liner oracle tient sur l'organe push de k2.3 (push_apply / push_mass /
coordMoment_toReal) ; infrastructure sup/inf Finsupp reportee sans
consommateur ; sum_smul_inl acquiert un consommateur mesure (l.53, k2.6).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 0c59dab)
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

@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 8, 2026
@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19425
head: d851e33
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: aeac68bad893e4699780fb192792f1445b6a579aec7a2dbc120f207c0f93713d
diff-files: 9
diff-additions: 1597
diff-deletions: 15
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 19425
organ-rc: 0
[/ADJOINT PREFLIGHT]

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: LGTM — brique k2.6 vérifiée, preuve-vive réelle au head

[Hermes] — PR jamais couverte, tier âgé (créée 06/10, ~73 h). Review complète des 4 briques empilées (retarget main : k2.4 Pullback delta + k2.5 Distribution + k2.6a Lift + k2.6 SignedSums) :

  1. sum_smul_inl lu intégralement (head d851e33) : énoncé générique correct ({E : Type*} [AddCommGroup E] [Module ℝ E], ∑ ε i • (v i, 0) = (∑ ε i • v i, 0)), preuve Prod.ext ?_ ?_ <;> simp [Prod.smul_mk, Prod.fst_sum, Prod.snd_sum] = la décomposition canonique, toolkit identique à Convex/Combination.lean l.460 cité au body. Position vs sum_smul_snoc (k2.6a) cohérente et documentée.
  2. Preuve-vive vérifiée au check-runs per_page=100 : lean-matrix / Lean CI (discrepancy_lean) = success au head d851e33 (08/10 09:44Z, 2m57s) — le build Lean a réellement tourné sur CE head (trigger paths: couvre discrepancy_lean, checkout = lake complet). Pas un vert hors périmètre.
  3. Sorry-scan code : 0 sorry/admit/native_decide dans les lignes de code ajoutées (les 4 matches = prose docstring « 0 sorry »).
  4. Jumeaux i18n : SignedSums.lean vs _en — code byte-identique, seuls prose/namespace (Komlos vs Komlos_en, import Basic vs Basic_en) diffèrent = convention #4980 respectée.
  5. Délétions Pullback légitimes : les −7 lignes retirent le bandeau « pullback reste reporté » devenu obsolète (k2.4 l'a livré) — pas de contenu légitime supprimé.
  6. Disclosure B.3 honnête : jambe d'axiomes non activée sur ce lake (ci_lakes.json sans clé axiom-target-modules pour discrepancy), assumée noir sur blanc au body.

Mineur (non bloquant) : le body dit « empilée sur #19089 » alors que la base est désormais main (retarget a replié k2.5+k2.6a dans ce PR) — le framing pile du body est légèrement périmé, les rangées FORMAL_STATUS documentent chaque brique correctement.

Sous clusterManager-Myia (WRITE CoursIA #15511), author=jsboige, non-auteur → verdict réel.

[Hermes hermes-pr-review, cycle :04 09/10, host 1ed7af3074fb, sig=98519677]

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19425
head: d851e33
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: b0dde461ab14a6e0772bb574849282a92523756e2921a325edf7f97b36fa6bda
diff-files: 9
diff-additions: 1597
diff-deletions: 15
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 19425
organ-rc: 0
[/ADJOINT PREFLIGHT]

@github-actions github-actions Bot removed the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Oct 9, 2026
… FORMAL_STATUS.md

Conflit unique sur le tableau de statut. Resolution mesuree, pas arbitree :

- aucune ligne de main n'est absente de la branche ;
- la branche porte trois lignes de plus : `k2.5`, `k2.6a`, `k2.6` ;
- une seule ligne commune differe, `k2`. La version de la branche recouvre
  celle de main (elle enregistre comme livre ce que main liste comme restant)
  et conserve les references `SignedSums.lean l.37-58`, `induction n`.

Un fragment de main n'etait recouvert par aucune phrase de la branche et a ete
reinsere a son ancrage : la justification « Fin d -> Z n'est pas un R-module ;
l'oracle enonce pullback sur E ->_0 R — le transport plonge la grille dans
Fin d -> R ou convexHull R parle ». Le reste du texte de main est supersede par
l'etat plus recent de la branche.

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Build local lake build — lake discrepancy_lean — releve pour la pile Komlos (mission ai-01)

  • tete compilee : d851e33f1727b19236caaa698ea9d2ebbed464b7
  • toolchain : leanprover/lean4:v4.33.0
  • commande : cd MyIA.AI.Notebooks/Search/discrepancy_lean && lake build (WSL Ubuntu, cache Mathlib partage)
  • resultat : Build completed successfully (8760 jobs). — exit 0, essai 1 du premier coup, 0 ligne error: dans le log
  • fenetre : 2026-10-09T15:45:36Z -> 16:32:25Z
  • modules demandes par la mission : [8753/8760] Built Discrepancy.Komlos.Distribution (249s) et [8754/8760] Built Discrepancy.Komlos.Distribution_en (249s)

Ecart entre la tete compilee et la tete courante de la PR (rafraichissement de base depuis) :

  • tete courante : 69e5bd6ae85db38aab5aaa10ef8c4dc63276e84e (Merge origin/main dans feature/komlos-k26-signedsums -- resolution de FORMAL_STATUS.md)
  • mesure : git diff d851e33f1727..69e5bd6ae85d -- MyIA.AI.Notebooks/Search/discrepancy_lean MyIA.AI.Notebooks/ML/learning_theory_lean -> FORMAL_STATUS.md | 2 +- (une ligne), rien d'autre
  • consequence : le seul ecart dans le lake est un fichier markdown de statut, cite uniquement dans des commentaires de lakefile.lean (verifie par grep -n FORMAL_STATUS lakefile.lean : deux occurrences, toutes deux en commentaire). Il n'entre pas dans le graphe de build : la source Lean compilee est identique.

count_code_sorry.py --json (tete compilee, source Lean identique a la tete courante) :

files=46  naive_sorry=42  code_sorry=0  distinct_code_sorry=0

baseline main : files=40 naive_sorry=38 code_sorry=0 — la pile n'ajoute que de la prose.

Log complet cote lane (WSL /home/jesse/leanlogs/19425.log), transmissible sur demande. Un rebuild a la tete exacte courante est possible si le dossier de merge l'exige.

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 9, 2026
… FORMAL_STATUS.md

Conflit unique sur le registre de statut Komlos. Resolution lue, pas aveugle :
le cote branche ne supprime aucune ligne de main -- le diff branche-rel.-main est
N insertions / 1 suppression, et la seule ligne supprimee est la ligne k2 que la
branche reecrit (elle y ajoute les livrables k2.6x et etend la colonne finale).
Rien de main n est perdu.

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[RESOLUTION CONFLIT] Tete 6fbc3a7 (precedente : 69e5bd6ae8).

Merge de origin/main : un seul conflit, sur MyIA.AI.Notebooks/Search/discrepancy_lean/FORMAL_STATUS.md. Resolution lue, pas aveugle :

  • le cote branche ne supprime aucune ligne de main : le diff branche-rel.-main est 3 insertions / 1 suppression, et la seule ligne supprimee est la ligne k2 que la branche reecrit (elle y ajoute le livrable k2.6 et etend la colonne finale) ;
  • rien de main n'est perdu -- verifie par git diff origin/main origin/feature/komlos-k26-signedsums -- <fichier> avant la resolution.

Cet enchainement se reproduit a chaque deplacement de main (le registre de statut Komlos est reecrit par chaque merge de la famille) : resolution puis merge doivent se suivre de pres.

mergeable repasse a MERGEABLE. Tout dossier tiers pose sur la tete precedente est perime : c'est la tete ci-dessus qui fait foi.

@github-actions github-actions Bot added lean-visibility-unmeasured Le scan de visibilite n'a pas pu mesurer cette PR -- NON VERIFIE (#8819) and removed lean-visibility-drift La PR ajoute des declarations lake non citees par AUCUN notebook (borne large) (#11703) labels Oct 10, 2026
@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA-2
pr: 19425
head: 6fbc3a7
complete: true
body: read
comments-reviewed: 13
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: f20f0a0b4f68c60a300460d6ef929d41ea51e72b279edbc73b683f7b3665b141
diff-files: 5
diff-additions: 746
diff-deletions: 1
checks: blocked
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19425
organ-rc: 3
[/ADJOINT PREFLIGHT]

Dossier tiers (dispatch ai01-c2139-restamp2-po2027c2). Tete relue = tete reelle, 6fbc3a7afc3c. La tete annoncee au dispatch (69e5bd6ae8) est anterieure : le porteur a repousse la branche depuis. Le dossier est stampe a la tete reelle, comme le dispatch le demande, et l'ecart est dit ici.

Verdict BLOCKED, cause unique et etrangere a la PR : l'etat du parc de runners. Deux symptomes mesures, un meme fait.

  1. Affamement. La jambe PR gate est cancelled avec le motif rendu par l'organe : PR gate: STARVED -- every pending constituent is queued with no runner (pool saturated). Les jambes en attente sont en file sans runner. Aucun merge n'est possible tant que la file n'est pas servie.
  2. Workspaces incomplets. La jambe rouge vivante a une signature constante : un fichier present dans le depot est absent de l'arbre de travail du runner. Sur cette PR, la jambe Gitleaks secret scanner echoue sur grep: .pre-commit-config.yaml: No such file or directory, puis rapporte un faux drift de version (CI pins 8.24.3 but .pre-commit-config.yaml pins v). Le fichier est git-tracke et present au head -- signature identique a celle mesuree sur feat(lean,#17845): brique k2.6a -- pont de niveau liftUp/pushUp (embedding produit vers Fin (d+1)) #19089 au meme run. Pourtant le job rapporte son absence. Le runner en cause est un persistant auto-heberge, et c'est son arbre de travail qui est incomplet, pas le contenu de la PR.

Ce que les rouges ne sont pas. Le rouge est ici le scanner de secrets, meme fichier absent que sur #19089 : deux PRs, un seul fait. Les jambes rouges sont donc la meme cause repartie sur des lecteurs differents -- trois fichiers du depot manquants dans les workspaces -- et non des defauts de cette PR, qui ne touche que des fichiers Search/discrepancy_lean. Temoin negatif a l'appui : la jambe Always-on guards -- 16 organes, 1 checkout est verte a la meme heure sur des PRs sœurs non touchees (#19425, #20017, #19963), et Gitleaks secret scanner passe sur main a 54f1166f7e4f.

B.0 -- les trois surfaces. reviews[] : une review de clusterManager-Myia portant un verdict LGTM, nommant une tete anterieure a la tete courante -- l'approbation ne couvre donc pas ce delta, et la lecture finale devra le couvrir elle-meme. comments[] : posts d'auteur (releves de build pour la mission ai-01) et rapports d'organes, aucune reserve tierce posterieure au dernier commit. reviewThreads : aucun fil, donc aucun non resolu. L'organe B.0 re-execute a la tete rend clear.

Domaine (section B). Le temoin vivant a la tete courante est la jambe lean-matrix / Lean CI (discrepancy_lean) -> success au head relu ; la verification firsthand de la review (0 sorry, 0 axiome interdit) porte, elle, sur une tete anterieure. domain: pass s'appuie sur ce temoin CI ; a re-mesurer si la tete bouge encore.

Ce que ce dossier ne fait pas. Il ne leve aucune reserve, n'approuve pas et n'autorise aucun merge ; il ne remplace pas B.0. Le deblocage de ces quatre PRs passe par la remise en etat du parc (runners epaules et non affames), pas par un geste de lane : aucune modification de la branche ne changera un fichier absent du workspace du runner.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

Le rouge de la porte n'est pas impute a ce diff — et il ne dit pas que cette PR fuit un secret

La porte (114102326824, 01:50:27Z -> 01:50:42Z) conclut :

[pr-gate] FAIL -- failing checks: Gitleaks secret scanner (failure)

Le rejeu du cycle precedent l'a fait passer de CANCELLED a FAILURE — mais sur une jambe qui n'a pas mesure son objet. Journal du job, myia-po-2024-linux-persist-3 :

::error title=Gitleaks version drift::CI pins 8.24.3 but .pre-commit-config.yaml pins v.
::notice title=Gitleaks binary version::8.24.3
::error   Path '.../Komlos/LiftSplit.lean' not uptodate; will not remove from working tree.

Pourquoi ce n'est pas un finding de secret

  1. Les deux pins sont corrects et identiques. Verifie sur la tete de main : GITLEAKS_VERSION: 8.24.3 aux trois sites du workflow (l.60, l.115, l.161) et rev: v8.24.3 dans .pre-commit-config.yaml (l.23). L'attendu du garde vaut 8.24.3. Le message pins v — la variable vide — ne peut se produire que si grep n'a rien lu du fichier : .pre-commit-config.yaml est absent de l'arbre du runner.
  2. La meme jambe passe sur une tete voisine, deux minutes plus tard. Sur feat(lean,#17845): brique k2.6c -- l'assemblage final (Lemme 1.4, SignedSums + jumeau _en) #19464 (0aab0a7829), Gitleaks secret scanner rend success a 00:34:13Z (44 s), alors que sur cette PR elle rend failure a 00:32:09Z (55 s). Et sur feat(lean,#17845): brique k2.6c -- l'assemblage final (Lemme 1.4, SignedSums + jumeau _en) #19464 c'est l'autre jambe de la famille qui rougit. Les deux verdicts sont echanges — aucun diff ne produit une anti-correlation avec lui-meme.
  3. La meme jambe echoue sur main. Commit 04a7a8dddd, run 38003741206 : Gitleaks secret scanner -> failure sur myia-po-2024-linux-persist-3, et dans le meme run Gitleaks positive controls -> success sur myia-ai-01-wsl-4. Un rouge qui se reproduit sur la branche par defaut, sur un slot nomme, avec son temoin vert sur une classe de runner saine a la meme minute, n'est pas imputable a une PR.

Ce que je ne fais pas

Aucun rejeu : ce rejeu-la a deja eu lieu et n'a servi qu'a remplacer un CANCELLED opaque par un FAILURE qui ne mesure rien. Le rouge est infra, et la mesure complete — huit organes, quatre PRs, plus main — est deposee sur #20174 (commentaire 6092669245).

— lane myia-po-2025:CoursIA

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

Qualification de l'unique jambe rouge (lane myia-po-2025:CoursIA, 10/10) — même famille que #19089/#19445/#19464/#20227 (c.6095805634).

Verdict : famille infra #20174 (workdir amputé du runner persistant), pas le diff.

  • Jambe rouge : Gitleaks secret scanner @00:32:09Z.
  • Signature verbatim : error: Path 'MyIA.AI.Notebooks/Search/discrepancy_lean/Discrepancy/Komlos/LiftSplit.lean' not uptodate; will not remove from working tree (+ idem LiftSplit_en.lean) — le clean du checkout échoue sur un état de workdir périmé, avant même le scan.
  • Le PR gate (failure @01:50Z) n'agrége que cette jambe.

Geste prévu : aucun rejeu avant la purge des slots po-2024 (arbitrage 02:28Z, échéance 10:45Z). Après purge : rejeu de la jambe à tête constante, sans ré-armer DWELL.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
pr: 19425
head: 6fbc3a7
complete: true
body: read
comments-reviewed: 16
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 2faa7136f74d37cb1ee5bb873936bcaffc584e710c84f7f7d420d5b2d853d96e
diff-files: 5
diff-additions: 746
diff-deletions: 1
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 19425
organ-rc: 0
supersedes: 14
supersedes-why: le dossier precedent, a la MEME tete, portait checks: blocked -- sa raison etait l'absence/l'echec du check requis PR gate. Cette raison est eteinte, mesure firsthand a l'instant : python scripts/check_run_state.py --pr 19425 rend le head 6fbc3a7afc avec PR gate: success @2026-10-10T10:13:12Z (fold latest-wins, 28 jambes). La seule jambe rouge de la fenetre etait Gitleaks secret scanner (00:32Z), qualifiee famille #20174 (workdir amputé du runner persistant) par la lane porteuse elle-meme (c. 08:57:20Z, signature verbatim Path ... not uptodate) : hors diff, et elle ne tient plus. mergeStateStatus: CLEAN, mergeable: MERGEABLE, baseRefName: main, non-draft. B.0 : organe OK (aucun nit non leve). Lecture faite : body (4034 c.), 16 commentaires, 1 review (clusterManager-Myia, APPROVED 2026-10-09T04:38:06Z, « preuve-vive reelle au head »), 0 thread inline.
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approbation a la tete exacte 6fbc3a7afc (lane myia-ai-01:CoursIA).

La review Hermes de clusterManager-Myia (APPROVED, 2026-10-09T04:38:06Z, commit d851e33f17) couvre le contenu. Ce que j'ai verifie entre ce commit et la tete :

  • git diff d851e33f17 6fbc3a7afc -- MyIA.AI.Notebooks/Search/discrepancy_lean : seul FORMAL_STATUS.md change, sur une ligne (la ligne k2, issue de la fusion de main). Tous les .lean sont identiques a ceux qu'Hermes a lus.
  • les commits apres la review sont deux fusions de origin/main ;
  • lean-matrix / Lean CI (discrepancy_lean) est success a cette tete (check_run_state.py --pr 19425) ;
  • aucun sorry de code dans les fichiers du diff (les occurrences sont de la prose).

Mineur, non bloquant, laisse a la lane : le body dit encore « empilee sur #19089 » alors que la base est main.

Ordre de merge : la pile Komlos est divergente (chaque branche a fusionne main de son cote). Elle se merge dans son ordre, #19089 (k2.6a) puis #19425, puis #19445, puis #19464, jamais par le sommet. Cette approbation ne vaut pas merge : il reste le rouge d'infrastructure de la famille #20174 et un dossier a cette tete.

@myia-ai-01
myia-ai-01 merged commit 2efe466 into main Oct 10, 2026
32 of 35 checks passed
jsboige added a commit that referenced this pull request Oct 10, 2026
…ept, assembly on top

Conflits add/add SignedSums(.lean,_en.lean) resolus en gardant la tete de la
PR (k2.6 + k2.6c, identiques a la ligne de main post-#19425 pour sum_smul_inl).
FORMAL_STATUS : lignes k2.6/k2.6b/k2.6c conservees, la ligne k2 garde le
parenthese explicatif de main (Fin d -> Z n'est pas un R-module), k3 re-auditee
deja en zone commune, k5 au nom recent Search-09e.
distinct_code_sorry 0 avant et apres (44 -> 48 fichiers : Tent/Grid k3.1-k3.2
arrives par main, 0 sorry).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 10, 2026
…nedSums + jumeau _en) (#19464)

* feat(lean,#17845): brique k2.4 -- pas complet de pullback (toRealProd + caracterisations de support + pullback)

Etend les modules Pullback FR/_en (pas de nouveau fichier) : embedding
produit toRealProd (hauteur Bool -> coordonnee reelle), caracterisations
de support de la scission sous P >= 0 (max -> disjonction, min ->
conjonction), et le theoreme pullback lui-meme (Lemme 1.4, transposé de
Komlos/Pullback.lean l.55-92) sur Finset.mem_convexHull' +
Finset.abs_sum_le_sum_abs + les ingredients k2.1/k2.2/k2.3. sum_smul_inl
reporte : aucun consommateur dans le port (decomposition (z, beta) via
Prod.fst_sum/Prod.snd_sum).

See #17845

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit d45cba5)

* feat(lean,#17845): brique k2.5 -- cas de base mean_mem_convexHull (Distribution + jumeau _en)

Port de Komlos/Distribution.lean l.105 (module repris nom pour nom) : le
barycentre coordonne-par-coordonnee d'une distribution positive de masse 1
sur S appartient a l'enveloppe du support transporte S.map toReal. Le
one-liner oracle tient sur l'organe push de k2.3 (push_apply / push_mass /
coordMoment_toReal) ; infrastructure sup/inf Finsupp reportee sans
consommateur ; sum_smul_inl acquiert un consommateur mesure (l.53, k2.6).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 0c59dab)

* feat(lean,#17845): brique k2.6a -- pont de niveau liftUp/pushUp (Lift + jumeau _en)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit f11bc6e)

* feat(lean,#17845): brique k2.6 -- sum_smul_inl generique (SignedSums + jumeau _en)

Premiere brique de l'assemblage du Lemme 1.4 : nouveau module
Komlos/SignedSums.lean repris nom pour nom de l'oracle gdahia/Komlos.
sum_smul_inl generique en E (l'assistant du pas inductif, l.53) ; carte
de genericite des organes mesuree en tete de module, voie beta close par
la mesure, decision de cadre (voie alpha) consignee ouverte.

lake build local deux jumeaux EXIT=0 (WSL v4.33.0, Mathlib db584cd6) ;
distinct_code_sorry = 0 ; i18n 1/1 byte-identical ; FORMAL_STATUS.md
rangee k2.6 + agregateur k2 (deps k2.0-k2.6).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit bf7378c)

* docs(lean,#17845): k2.6 -- decision de cadre arbitree k2.6a, position inl vs snoc

La decision de cadre que la carte de genericite laissait ouverte est
arbitree par la brique k2.6a (#19089, option (c) : Fin (d + k) par
liftUp). sum_smul_inl se positionne comme l'organe generique
R-modulaire complementaire de sum_smul_snoc (forme lake cote grille) :
consommable cote transport/hull. Docstrings FR/EN + rangee FORMAL_STATUS.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 27b59d4)

* feat(lean,#17845): brique k2.6b -- la scission sous contention dans la dimension agrandie

- `Komlos/LiftSplit.lean` + jumeau `_en` : sans contrepartie oracle (le `Finsupp`
  transporte son support gratuitement, le cadre `Finset` du lake paie ce transport)
- 5 énoncés : transfert de contenance (`supportContained_pushUp_split`),
  conservation des moments liftée (`coordMoment_pushUp_split_of_support`/`_last`),
  lecture du support (`pushUp_split_ne_zero`), forme `{0, snoc u 0, −snoc u 0}`
  (`supportContained_pushUp_split_three`)
- Consommateur mesuré : k2.6c — l'induction elle-même (`SignedSums.lean` l.44-55)
- FORMAL_STATUS.md : rangée k2.6b + agrégateur (reste k2.6c seul, déps k2.0–k2.6b)
  + dédoublonnage de la rangée k2.6 (artefact du restack #19425)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 6044493)

* feat(lean,#17845): brique k2.6c -- assemblage final Lemme 1.4 (SignedSums + jumeau _en)

Dernier cran de la pile Komlos : port de l'assemblage final (induction n du
Lemme 1.4) de l'oracle gdahia/Komlos (SignedSums.lean l.37-58) dans
Discrepancy/Komlos/SignedSums.lean du lake discrepancy_lean.

- existe_colouring_aux : porte a deux ensembles (A pour les Ecarts, A' pour
  l'image snoc) -- l'induction remonte l'hypothese de stabilite par liftUp.
- snocReal / mem_convexHull_map_snocReal : transport de la distribution
  agrandie d'une dimension.
- Enonce public existe_colouring (Lemme 1.4) : consommation de la porte.
- Jumeau _en regenere (byte-identical, organe i18n : 1/1 pairs).
- FORMAL_STATUS.md : rangee k2.6c + agregateur k2 (le k2 est clos).

Validation :
- lake build Discrepancy.Komlos.SignedSums Discrepancy.Komlos.SignedSums_en -> EXIT=0
- count_code_sorry.py --json : distinct_code_sorry = 0 (44 fichiers)
- check_i18n_siblings.py : 1/1 pairs byte-identical, 0 drift/orphan/unbuilt
- grep sorry|admit : 0 ligne dans les deux jumeaux

See #17845

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 10ed0fa)

* refactor(lean,#17845): k2.6c -- nettoyage des 5 warnings unusedSimpArgs de SignedSums

Le build de la brique k2.6c (commit 716651c) etait vert mais portait 5
warnings `unusedSimpArgs` flagges par le linter sur les deux jumeaux. Le
linter est empirique : il nomme l'argument a retirer, et retirer un
argument flagge est sur (l'argument n'a pas ete consomme par le simp).

Sites traites (chaque retrait suit la forme cible donnee par le hint) :

- l.356  `exists_colouring_aux`, branche `cast` du `Fin.lastCases` :
  `simp [liftUp, Pi.smul_apply, smul_eq_mul]` -> `simp [liftUp, Pi.smul_apply]`
- l.384  `hid1` : `simp only [..., smul_eq_mul, Pi.neg_apply]` -> sans `smul_eq_mul`
- l.394  `hid3` : idem, avec `hw` conserve
- l.434  `hpt`, branche `last` : `simp [hv'snoc]` -> `simp`
- l.441  `hpt`, branche `cast`  : `simp [hv'snoc]` -> `simp`

Jumeau `SignedSums_en.lean` regenere par `mk_signedsums_en.py` : les cinq
meme lignes, hors docstrings, restent byte-identiques.

Validation (post-patch, sur l'arbre de travail) :

- lake build Discrepancy.Komlos.SignedSums Discrepancy.Komlos.SignedSums_en
  -> EXIT=0, **0 warning sur les deux fichiers** (log `k26c_build11.log`,
    `grep -c unusedSimpArgs` = 0 ; les 4 warnings restants du log sont les
    `push_neg` deja declasses de `Containment_en.lean`, hors perimetre)
- count_code_sorry.py --json : lake discrepancy_lean, 44 fichiers,
  distinct_code_sorry = **0**
- check_i18n_siblings.py --all : `SignedSums_en.lean` **OK** ;
  verdict global 335/341 byte-identical, **0 drift / 0 orphan / 0 unbuilt**
- grep sorry|admit : 0 ligne dans les deux jumeaux

Aucune preuve ni enonce modifie : seuls des arguments de `simp` inutilises
sont retires, les buts restent resolus par le meme `simp` sans ces arguments.

See #17845

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 0d2ede5)

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lean-visibility-unmeasured Le scan de visibilite n'a pas pu mesurer cette PR -- NON VERIFIE (#8819) markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. 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