Repository navigation
feat(ci,#13751): pilote matrice lean-ci — 6 dispatchers fondus dans lean-ci-matrix.yml - #16709
Conversation
…ean-ci-matrix.yml - lean-build.yml gagne un mode matrice (input lake-set, job ci-matrix, fromJSON(strategy)) ; job `ci` historique garde par if sentinel 'none' — les callers mono-lake restants ne changent pas. - lean-ci-matrix.yml (nouveau) : detecteur de chemins changes (API REST, sparse-checkout scripts/lean) -> lake-set ; union on.paths push+pr ; ref LOCALE ./ pour resolution per-PR. - scripts/lean/ci_lakes.json : manifeste source unique (lake, project-path, display-name, sorry-baseline bidirectionnel, sorry-filter-mode, paths). - scripts/lean/lake_matrix_dispatch.py : fnmatch pur + self-cover GATE_SELF_COVER -> tous les lakes (lecon #8712). - scripts/ci/check_lake_matrix_paths.py : garde fail-CLOSED (manifeste couvert par push ET pull_request, pas de double declencheur, self-cover vivant sur disque). - 6 dispatchers supprimes : lean-{sudoku,kelly,minimax,search,assignment, discrepancy}.yml — baselines "0"/real et chemins de declenchement verifies identiques contre le depot avant suppression. - 16 tests : selection fnmatch, ordre manifeste, dedup, self-cover par entree, format outputs-file, garde vert sur depot / rouge sur chaque classe de drift. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
… pilote
Le run 35362544806 montre le job ci garde comme check-run SKIPPED
("Lean CI (${{ inputs.display-name }})"), pas absent : un job dont le if
est faux cree BIEN un check-run (inactif, jamais bloquant). Les deux
commentaires qui affirmaient "aucun check-run cree" sont corriges sur
cette mesure — un caller mono-lake verra une ligne ci-matrix SKIPPED par
run, bruit cosmetique assumé.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #16709 (
|
|
PR gate STARVED — diagnostic et auto-guérison (pas un défaut de la PR) Le gate a expiré en attendant Cause : la modification du composite État au diagnostic (18:40Z) : le run knot 35365873849 est Plan de reprise (lane po-2027) : quand le run 35365873849 conclut, relance du gate via Rouge non reparable par un geste plus rapide de la lane : c'est une attente de durée réelle de build, d'où le |
jsboige
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
Pilote matrice lean-ci relu en profondeur : architecture, dispatch, garde anti-drift, tests, et preuve d'exécution réelle sur le head SHA.
Vérifications réelles (head 04d1ed1) :
- Architecture du contournement : un job appelant (
uses:) ne peut pas porterstrategy:— la matrice vit donc dans le jobci-matrixdu reusable, le dispatcher ne fait que détecter + passerlake-set. Contrainte GitHub Actions réelle, solution minimale et correcte ; le corps du build n'est pas dupliqué (composite jumeau). - Dispatch (
lake_matrix_dispatch.py) : pur (zéro réseau, zéro gh), fnmatch, ordre stable du manifeste, self-cover GATE_SELF_COVER → tous les lakes. Le ref./local (pas@main) est la condition de livrabilité — bien vu et documenté en tête de job. - Garde fail-CLOSED (
check_lake_matrix_paths.py) : manifeste ↔ union des DEUX blocs push/pr, détection de double déclencheur (dispatcher legacy encore présent), et self-covers morts. Les 6 lakes du manifeste matchent exactement les 6 dispatchers supprimés (sudoku, kelly, minimax, search, assignment, discrepancy) — aucun orphan des deux côtés. - Preuve-vive sur ce SHA :
lean-matrix / Lean CIa réellement tourné et réussi pour les 6 lakes migrés ; le job mono-lake facade apparaît SKIPPED (non-bloquant) exactement comme documenté ; Scripts Tests (success) couvre les nouveaux fichiers viascripts/**+.github/workflows/**, et ses tests exécutent la garde contre les vrais fichiers du dépôt (test_guard_green_on_repo_files) + 3 tests rouges vérifiant le fail-closed. - Security scan : rien (grep secrets sur le diff, Gitleaks vert).
Notes mineures (non bloquantes) :
- Le check-run SKIPPED affiche
Lean CI (${{ inputs.display-name }})non-résolu — cosmétique, déjà identifié dans le commentaire du code ; un nom fixe (« facade ») l'éliminerait si le bruit gêne. proof-integrity (knot_lean)encorein_progressau review : self-cover légitime du composite sur knot (non migré), run actif diagnosticqué à 18:14Z — pas un défaut de cette PR, à surveiller au merge.
Cap #15511 : verdict en COMMENT (event formel réservé à roo-extensions). Relais siège qualifiant si merge voulu : myia-ai-01:CoursIA.
[Hermes hermes-pr-review, cycle :18 18/09, host c92df397a786]
|
Le gate État vérifié à l'instant ( La candidate n'a plus aucun rouge côté lane — prête pour review/merge ai-01. |
argumentation, calibration, conway-cgt, erc20, finiteness, game-defs, game-defs-ext, learning-theory migres vers lean-ci-matrix.yml via le gabarit du pilote (manifeste ci_lakes.json + union on.paths, parametres recopies des dispatchers par script avec assertions dures — baselines "0"/real verifiees avant ecriture, paths dedupliques push/pull_request, variations preservees : conway-cgt porte lake-manifest.json, game-defs et game-defs-ext sans lakefile.lean). Stack sur le pilote #16709 (base feature/13751-lean-ci-matrix) — a retargeter sur main apres son merge. Garde : 14 lakes couverts, fail-CLOSED vert. 16/16 tests. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: MED/refactor — lane myia-po-2027:CoursIA — prev: DEEP/lean #16075
See #13751 (partial — pilote 6 lakes du sous-item « workflows lean → matrice paramétrée »)
Summary
Périmètre effectif : 12 fichiers — 6 dispatchers supprimés,
lean-build.ymlmodifié, 5 fichiers créés (lean-ci-matrix.yml,ci_lakes.json,lake_matrix_dispatch.py,check_lake_matrix_paths.py,test_lake_matrix_dispatch.py).Première vague de migration des dispatchers lean vers une matrice paramétrée : 6 dispatchers mono-lake fondus en 1 dispatcher matriciel (
lean-{sudoku,kelly,minimax,search,assignment,discrepancy}.yml→.github/workflows/lean-ci-matrix.yml). Mesure au claim : 32 dispatchers sur main (le body de l'issue en annonçait 23) — ce pilote porte 6, les ~26 restants migrent par vagues ultérieures sur le même gabarit.La contrainte qui avait produit un fichier par lake
Un job qui appelle un workflow réutilisable (
uses:) ne peut pas porterstrategy:— limite GitHub Actions. D'où la prolifération d'un dispatcher quasi-identique par lake. La matrice vit donc dans le workflow appelé :lean-build.ymlgagne un inputlake-set(JSON d'include) et un jobci-matrixqui l'étale en une entrée par lake. Le jobcihistorique est gardé parif: inputs.lake-set == 'none'(sentinelle) — les ~26 callers mono-lake restants ne changent d'aucun octet.Anatomie
scripts/lean/ci_lakes.jsonlake,project-path,display-name,sorry-baseline(contrat bidirectionnel inchangé),sorry-filter-mode,pathsscripts/lean/lake_matrix_dispatch.pyinclude; self-cover → TOUS les lakes (leçon #8712).github/workflows/lean-ci-matrix.ymlchanges(fichiers changés via API REST, sparse-checkoutscripts/lean) →lean-matrix(caller du reusable, ref locale./= résolution per-PR)scripts/ci/check_lake_matrix_paths.pyon.pathspush ET pull_request ; aucun dispatcher historique résiduel (double déclencheur = double build) ; self-cover vivant sur disqueChoix de conception notables
./(pas@main) : sur une PR,@mainappellerait lelean-build.ymlde main qui n'a pas encore l'inputlake-set→ échec unknown input. Résolution per-PR = condition de livrabilité de cette PR (même pattern que le job proof-integrity delean-knot.yml)..github/actions/lean-build(same étapes, same sémantique sorry, same clés de cache — continuité du cache Mathlib assurée pardisplay-nameinchangé).lean-matrix-<lake>-<ref>), cancel sur PR uniquement — reprend le contrat des anciens dispatchers.'none'et pas== '{"include": []}': un two-points dans un plain scalar YAML casse le parse (mesuré).Validation
scripts/tests/test_lake_matrix_dispatch.py) : sélection fnmatch (fichier simple, imbriqué,lakefile.toml, multi-lakes en ordre manifeste, dédup), self-cover par CHAQUE entrée deGATE_SELF_COVER, format--outputs-file(clésany/lake-set, les 5 clés matricielles par entrée), garde verte sur l'état livré + rouge sur chaque classe de drift (chemin absent du push, absent du pull_request, dispatcher historique résiduel, self-cover mort).lake-matrix OK : 6 lake(s) couvert(s), rc=0.sorry-baseline: "0",sorry-filter-mode: real, jobciunique (aucun job proof-integrity/axiom perdu), et leurs 4 chemins de déclenchement par lake sont repris à l'identique dans l'union (24 + 6 self-cover par bloc).grepdes 6 noms de fichiers et des 6 display-names dansscripts/et.github/→ 0 hit (registres CI, allowlist runner-policy non concernés).yaml.safe_load(jobsci/ci-matrixcôté reusable,changes/lean-matrixcôté dispatcher).lean-build.yml(self-cover) → le détecteur rend les 6 lakes → la matrice complète tourne sur la PR elle-même, preuve vivante du fan-out.Migration d'un lake suivant (gabarit, 3 gestes)
lean-<lake>.yml;ci_lakes.json(baseline + mode recopiés du dispatcher supprimé) ;on.pathsdelean-ci-matrix.yml.Le garde
check_lake_matrix_paths.pyrouge empêche l'étape 2 sans l'étape 3 (fail-CLOSED) ; sa présence dans le self-cover fait qu'un changement du manifeste lance toute la matrice.Reste sur #13751
~26 dispatchers à migrer par vagues ; sous-items root README ≤12 et consolidation hubs déjà livrés par ailleurs. Pas de
Closes: l'issue reste ouverte.🤖 Generated with Claude Code