Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .github/workflows/lean-axiom.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,24 @@ jobs:
axiom-check:
name: "Proof integrity (${{ inputs.display-name }})"
runs-on: ubuntu-latest
# BACKSTOP DE LIBERATION DE RUNNER -- PAS UN SEUIL DE SANTE (#15698).
#
# Sans borne, un `lake exe env lean` ou un `LeanVerifier.check_axioms`
# enlise retient le runner les 6 h du defaut GH Actions et le check ne
# conclut jamais -- le PR gate reste BLOCKED sur un verdict qui n'atterrit
# pas. La borne convertit l'enlisement en check ROUGE, que le merge-gate
# peut voir.
#
# 300 et pas 60. Maximum LEGITIME mesure de `proof-integrity` = 177 min,
# conclusion `success` (job 102677021168, step `lean-axiom` de 2 h 55) ;
# 1 succes sur 20 depasse 60 min, mediane 8 min (30 runs, 2026-09-12). La
# fenetre de 12 runs qui justifiait « 60 = 2x le pire observe » ratait la
# queue de distribution : le pire observe n'etait pas le pire legitime.
#
# NE PAS RESSERRER sur l'intuition : le maximum legitime et la pathologie
# vivent dans la meme plage de temps de mur. 300 laisse 1,7x de marge et
# rend le runner 3 h avant le defaut GH.
timeout-minutes: 300
steps:
- uses: actions/checkout@v4

Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/lean-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,25 @@ jobs:
ci:
name: "Lean CI (${{ inputs.display-name }})"
runs-on: ubuntu-latest
# BACKSTOP DE LIBERATION DE RUNNER -- PAS UN SEUIL DE SANTE (#15698).
#
# Sans borne, un process Lean enlise retient le runner les 6 h du defaut GH
# Actions et le check ne conclut jamais : la PR reste BLOCKED sur un verdict
# qui n'atterrit pas. La borne convertit l'enlisement en check ROUGE, que le
# merge-gate peut voir.
#
# 300 et pas 60. Mesure sur 30 runs de `lean-knot.yml` (2026-09-12, durees
# calculees depuis started_at/completed_at) : le job `ci` a un maximum
# LEGITIME -- conclusion `success` -- de 215 min, et 3 succes depassent
# 60 min. La mediane a 7 min est ce qui rend le piege : sur presque tous
# les runs, 60 parait genereux. C'est le cache Mathlib froid qui produit la
# queue, et il ne se voit pas dans une fenetre de douze runs.
#
# NE PAS RESSERRER sur l'intuition. Le maximum legitime (215 min) et la
# pathologie visee vivent dans la MEME plage de temps de mur : aucun seuil
# ne les separe. Cette valeur libere le runner 3 h avant le defaut GH ;
# elle ne detecte rien. Resserrer a 60 tuerait 3 succes mesures.
timeout-minutes: 300
steps:
- uses: actions/checkout@v4

Expand Down
27 changes: 27 additions & 0 deletions .github/workflows/lean-knot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,17 @@ jobs:
name: "Lean CI (knot_lean)"
runs-on: [self-hosted, coursia-ephemeral, coursia-lean]
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
# BACKSTOP DE LIBERATION DE RUNNER -- PAS UN SEUIL DE SANTE (#15698).
#
# L'enlisement d'origine (knot_lean proof-integrity, run 103451688746) a
# retenu la moitie du pool coursia-lean 3 h 17 sans jamais conclure. La
# borne convertit l'enlisement en check ROUGE, visible du merge-gate.
#
# 300 et pas 60 : maximum LEGITIME mesure du job `ci` = 215 min (succes),
# 3 succes au-dessus de 60 min sur 23, mediane 7 min (30 runs, 2026-09-12).
# Le maximum legitime et la pathologie vivent dans la meme plage : aucun
# seuil de temps de mur ne les separe. NE PAS RESSERRER.
timeout-minutes: 300
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/lean-build
Expand Down Expand Up @@ -184,6 +195,18 @@ jobs:
needs: ci
runs-on: [self-hosted, coursia-ephemeral, coursia-lean]
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
# BACKSTOP DE LIBERATION DE RUNNER -- PAS UN SEUIL DE SANTE (#15698).
#
# C'est CE job qui s'est enlise 3 h 17 dans l'incident d'origine. La borne
# convertit l'enlisement en check ROUGE, sur lequel le merge-gate peut agir.
#
# 300 et pas 60 : maximum LEGITIME mesure de `proof-integrity` = 177 min,
# conclusion `success` (job 102677021168, branche
# feature/2874-conway-trivial-alexander, step `lean-axiom` 22:58:13Z ->
# 01:53:13Z = 2 h 55). Un `timeout-minutes: 60` l'aurait TUE -- exactement
# le faux positif que ce fichier cherche a eviter. Mediane 8 min sur
# 20 succes : la queue vient du cache Mathlib froid. NE PAS RESSERRER.
timeout-minutes: 300
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/lean-axiom
Expand Down Expand Up @@ -227,6 +250,10 @@ jobs:
# Retour arriere = remettre `runs-on: ubuntu-latest` + retrait de l'allowlist.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
if: (github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository) && always()
# Bound at 30 minutes (See #15698): this is a lightweight Python scan,
# not a Lean build -- a wedge here is much cheaper than on `ci`/`proof-
# integrity`, but still must not pin a runner forever.
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/lean-planning.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ jobs:
name: planning target-coverage
runs-on: ubuntu-latest
if: always()
# Bound at 30 minutes (See #15698): lightweight Python scan, not a Lean
# build -- a wedge here is much cheaper than on `ci`/`proof-integrity`,
# but still must not pin a runner forever.
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/lean-social-choice.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ jobs:
# Retour arriere = remettre `runs-on: ubuntu-latest` + retrait de l'allowlist.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
# Bound at 30 minutes (See #15698): this is a cheap text-level grep gate,
# not a Lean build -- a wedge here is much cheaper than on `build`/`proof-
# integrity`, but still must not pin a runner forever.
timeout-minutes: 30

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -147,6 +151,11 @@ jobs:
build:
name: "Lake build"
runs-on: ubuntu-latest
# Bound at 60 minutes (See #15698): a full Lake build on game_theory_lean
# (Mathlib + SocialChoice modules) routinely takes 20-30 minutes; a wedge
# here must not pin a runner forever. The bound converts a wedge into a
# red check that the merge-gate can act on.
timeout-minutes: 60
# Serialized behind the CHEAP text-level gate (fail fast before spending a
# Mathlib build). proof-integrity now depends on THIS job (c.327) so the two
# full compiles run in series instead of in parallel.
Expand Down
Loading