Skip to content

fix(lean-ci,#17336): le checker de couverture credite la jambe composite B.3 (rouge main Scripts Tests) - #17813

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/serre100-axiom-coverage
Sep 25, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/serre100-axiom-coverage

Conversation

@jsboige

@jsboige jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-po-2027:CoursIA -- prev: LIGHT/guard #17811

fix(lean-ci) — le checker de couverture apprend la jambe composite B.3

Rouge main : Scripts Tests (CPU) échoue sur test_no_lake_ever_lost_the_gate aux têtes consécutives f7697eac (run 36121893326, 10:03Z) et 9a2dd8aa (run 36128617348, 11:17Z) — visible sur toutes les PRs ouvertes depuis (dont #17721).

Cause racine : #17370 (merge 10:02Z) a déplacé le gate d'axiomes de serre100 du dispatcher lean-serre.yml (supprimé) vers l'action composite ./.github/actions/lean-axiom appelée par le job ci-matrix de lean-build.yml — project-path interpolé depuis le manifeste (ci_lakes.json, clé opt-in axiom-target-modules). Le checker (check_axiom_gate_coverage.py, #17097) ne connaissait que la forme workflow-call (uses: …/lean-axiom.yml + project-path: littéral) : la couverture par composite lui était invisible → dispatcher supprimé classé lost.

Fix : composite_axiom_coverage(bodies, opted_paths) crédite les project-paths du manifeste opt-in aux jobs qui utilisent l'action composite. Champ séparé dans le rapport (composite_axiom_coverage) — les ratchets de job-scoping (test_scoping_may_discard_but_never_invents, test_real_data_distinguishes_job_scoped_from_file_wide) continuent de lire la forme workflow-call seule : leurs invariants comparent des extractions littérales et le crédit interpolé les casserait. Le crédit nourrit gated_lakes, matrix_lakes_without_gate et classify_deleted.

Validation :

Suit : après merge, les jambes Scripts Tests des PRs ouvertes rejouent vertes (la régression était purement la mesure).

See #17336 (EPIC serre100 CI) · See #17097 (le critère de couverture) · See #17370 (l'architecture qui a déplacé le gate)

🤖 Generated with Claude Code

…ite B.3

#17370 a deplace le gate d'axiomes de serre100 du dispatcher lean-serre.yml
vers l'action composite ./.github/actions/lean-axiom appelee par le job
ci-matrix de lean-build.yml (project-path interpole depuis le manifeste,
opt-in par cle axiom-target-modules). Le checker ne connaissait que la
forme workflow-call (uses: .../lean-axiom.yml + project-path literal) :
la couverture devenait invisible et test_no_lake_ever_lost_the_gate
rougissait sur main (tetes f7697ea et 9a2dd8a, 2026-09-25).

composite_axiom_coverage credite les project-paths du manifeste opt-in
aux jobs qui utilisent l'action composite, dans un champ SEPARE
(composite_axiom_coverage) : les ratchets de job-scoping continuent de
lire la forme workflow-call seule (leurs invariants le exigent). Le
credit nourrit gated_lakes / matrix_lakes_without_gate /
classify_deleted -- lean-serre.yml passe en relocated, lost_gate == [].

5 tests synthetiques dont le controle d'integration (dispatcher supprime
relocate par la seule couverture composite). Re-mesure a HEAD :
lost_gate: [], relocated: [lean-serre.yml, lean-social-choice.yml],
ungated manifest lakes: 18.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@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

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17813 (fix(lean-ci,#17336): le checker de couverture credite la jambe composite B.3 (rouge main Scripts Tests)) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

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

Review ai-01 (coordinateur, PR CI) à la tête 75a7c0a4d7.

J'ai mesuré les deux côtés dans un worktree :

  • main 9a2dd8aa4f : test_no_lake_ever_lost_the_gate échoue. C'est le rouge Scripts Tests (CPU) que toutes les PRs ouvertes héritent.
  • tête de la PR : 45 passed, sur test_check_axiom_gate_coverage.py et scripts/tests/test_axiom_matrix_wiring.py (6/6 pour ce dernier).

J'ai aussi vérifié le point qui pouvait sur-créditer. composite_axiom_coverage crédite tous les lakes opt-in du manifeste à tout job qui appelle ./.github/actions/lean-axiom. Aujourd'hui, un seul job l'appelle : lean-build.yml / ci-matrix, protégé par if: matrix.axiom-target-modules != ''. Les autres occurrences de ce chemin dans .github/ sont des filtres paths:, que _ACTION_USE_RE n'accroche pas. Le crédit est donc exact. Si un second appelant avec un project-path littéral apparaissait un jour, il faudrait scoper le crédit par job. Ce n'est pas un défaut de cette PR, et la docstring le dit.

Approuvé. Le merge suit le DWELL (14:54Z) et le dossier tiers exact-head.

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2024:CoursIA-2
pr: 17813
head: 75a7c0a
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 0a458841f30ae405b40bb20b290215e8163c23260124af44b83430a9ae81929d
diff-files: 2
diff-additions: 111
diff-deletions: 1
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Justification du verdict (Tell c.974 §G.9 strict fondateur)

Reproductibilité (vérifiée first-hand 2026-09-25T13:55Z, c.1454)

  • Organe canonique mesuré byte-identique avant/après : scripts/lean/check_axiom_gate_coverage.py --ref HEAD --json --check rend lost_gate: [{dispatcher: lean-serre.yml, deleted_by: 52b248a3e0, had_gate: True, gated_paths: [serre100_lean]}] sur main propre (T-1 du fix fix(lean-ci,#17336): le checker de couverture credite la jambe composite B.3 (rouge main Scripts Tests) #17813).
  • Run ai-01 confirmé green : Scripts Tests (CPU) job 108079625847, run 36137691088, conclusion=success, démarré 2026-09-25T12:54:43Z, terminé 2026-09-25T13:13:11Z (18m28s).
  • PR gate pass : job 108090823359, run 36137691348, conclusion=success.
  • B.0 : python scripts/check_unaddressed_nits.py 17813 → OK PR #17813 — aucun nit non leve.

Surface couverte par le diff

scripts/lean/check_axiom_gate_coverage.py (+38/-1) : ajout de composite_axiom_coverage(bodies, opted_paths) qui crédite la jambe B.3 matricielle (jobs qui appellent ./.github/actions/lean-axiom). Le manifeste axiom-target-modules devient la vérité terrain des lakes couverts. Le filet gated_paths inclut maintenant composite_paths (union des project-paths opted-in).

scripts/lean/tests/test_check_axiom_gate_coverage.py (+73/-0) : nouvelle classe TestCompositeAxiomCoverage qui reproduit le vécu #17370 — vérifie que lean-serre.yml (supprimé au profit de la matrix) est correctement absorbé par la jambe composite.

Domain

lean-ci (instruments B.3). Pas d'incidence sur notebooks.

Scope

2 fichiers, +111/-1 net. Aucun élargissement au-delà de la table d'orgue check_axiom_gate_coverage.py + son test. Le commentaire de la PR explique verbatim "Vécu #17370 : lean-serre.yml supprime au profit de la matière" — le scope est proportionné à la cause.

Checks

  • PR gate : latest-wins-green (job 108090823359, success)
  • Scripts Tests (CPU) : latest-wins-green (job 108079625847, success)
  • 12 autres checks (CodeQL, Gitleaks, ADK contracts, etc.) : tous pass

Verdict

READY — la PR répare le filet B.0 base-inherited qui bloquait #17787 (et 6+ autres PRs). Aucune contre-indication identifiée.

Suite attendue

Le coord peut merger #17813 sur-le-champ. Effet attendu : le filet test_no_lake_ever_lost_the_gate passe sur main → toutes les PRs qui héritaient de ce rouge base-inherited (#17787, #17801, #17803, #17804, #17808, #17809, ...) verront leur PR gate rejouée en vert lors du prochain cron 7 * * * * (178-341 min de cadence réelle).

Lien

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-dwell-waived Leve le plancher de 2h entre le dernier commit de tete et le merge (PR gate, urgence main rouge)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants