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
9 changes: 8 additions & 1 deletion .github/workflows/notebook-exec-sequence-ratchet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,14 @@ jobs:
# 2026-09-01) : garde Python pur, sans secret ni usage du GITHUB_TOKEN. La garde
# same-repo ci-dessous saute les PRs de fork (pr_gate.py compte `skipped` comme
# OK) : aucun code de fork n'atteint le runner. Retour arriere = revert de la PR.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
timeout-minutes: 10
steps:
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/notebook-kernel-drift-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,14 @@ jobs:
name: Kernel drift guard (base vs PR)
# Same routing as notebook-papermill-ratchet.yml (#13378 tranche 1):
# Linux auto-hosted runner, no GITHUB_TOKEN, fork PRs skipped.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
timeout-minutes: 5
steps:
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/notebook-link-render-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,14 @@ jobs:
# pull_request_target en un seul predicat, et les forks PR se font
# skipper proprement par le checker avant d'atteindre le runner.
if: ${{ github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
permissions:
pull-requests: write
timeout-minutes: 10
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/notebook-math-render.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,14 @@ jobs:
math-render:
# Route vers la jambe Linux auto-hebergee (cf notebook-latex-control-chars
# #14859) : garde Python pur + jambe KaTeX npm, sans secret ni GITHUB_TOKEN.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
timeout-minutes: 10

Expand Down
10 changes: 8 additions & 2 deletions .github/workflows/organ-duplication-advisory.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,14 @@ jobs:
# Routage #14283 tranche 3 : jambe Linux auto-hebergee, runs-on STATIQUE
# (garde auditable de check_self_hosted_runner_policy.py). Les PRs de
# fork sautent le job -- pr_gate.py compte skipped comme OK.
# Retour arriere = remettre runs-on: ubuntu-latest + retrait allowlist.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
# Same-repo PRs only (agents/staff). Fork = etudiants ( benevolent review).
if: github.event.pull_request.head.repo.full_name == github.repository
timeout-minutes: 10
Expand Down
10 changes: 8 additions & 2 deletions .github/workflows/orphaned-delivery-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,14 @@ jobs:
# scripts/ci/check_self_hosted_runner_policy.py ; un `runs-on` STATIQUE la
# rend auditable (une expression dynamique leve DYNAMIC_RUNS_ON).
# Les PRs de fork sautent le job -- pr_gate.py compte `skipped` comme OK.
# Retour arriere = remettre `runs-on: ubuntu-latest` + retrait de l'allowlist.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
# On [closed], restrict to same-repo PRs: fork PRs cannot create an
# internal base != main orphan and their limited token/fetch access would
# only produce spurious failures on an advisory job.
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/owui-playwright-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,14 @@ jobs:
# 2026-09-02) : garde Python pur, sans secret. La garde same-repo ci-dessous
# saute les PRs de fork (pr_gate.py compte `skipped` comme OK) : aucun code de
# fork n'atteint le runner. Retour arriere = revert de la PR.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
timeout-minutes: 10

Expand Down
10 changes: 8 additions & 2 deletions .github/workflows/scan-md-hierarchy-drift.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,14 @@ jobs:
# scripts/ci/check_self_hosted_runner_policy.py ; un `runs-on` STATIQUE la
# rend auditable (une expression dynamique leve DYNAMIC_RUNS_ON).
# Les PRs de fork sautent le job -- pr_gate.py compte `skipped` comme OK.
# Retour arriere = remettre `runs-on: ubuntu-latest` + retrait de l'allowlist.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
steps:
- uses: actions/checkout@v4
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/solution-leak-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,14 @@ jobs:
# 2026-09-01) : garde Python pur, sans secret ni usage du GITHUB_TOKEN. La garde
# same-repo ci-dessous saute les PRs de fork (pr_gate.py compte `skipped` comme
# OK) : aucun code de fork n'atteint le runner. Retour arriere = revert de la PR.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository
timeout-minutes: 15

Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/translation-drift.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,14 @@ jobs:
# 2026-09-02) : garde Python pur, sans secret. La garde same-repo ci-dessous
# saute les PRs de fork (pr_gate.py compte `skipped` comme OK) : aucun code de
# fork n'atteint le runner. Retour arriere = revert de la PR.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository

steps:
Expand Down
13 changes: 9 additions & 4 deletions .github/workflows/twin-parity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,14 @@ jobs:
# Routage #14283 tranche 3c (ai-01 2026-09-02) : jambe Linux auto-hebergee.
# Garde anti-fork au niveau job + runs-on STATIQUE (une expression leverait
# DYNAMIC_RUNS_ON dans check_self_hosted_runner_policy.py).
# Retour arriere = remettre `runs-on: ubuntu-latest` + retrait de l'allowlist.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
# 2026-10-27 (mesure ai-01) : migration vers `ubuntu-latest` par Q35 etape 2
# (#17397) -- `scripts/ci/audit_self_hosted_needs.py` certifie ce workflow
# comme n'ayant besoin de RIEN qui n'existe que sur le parc local, et le parc
# local etait sature PAR SES CHECKOUTS (mesure 00:45Z : 11 des 12 slots
# occupes dans `actions/checkout`, 614 runs en file). La garde anti-fork
# ci-dessous est CONSERVEE : aucun code de fork ne change de surface.
# Retour arriere = revert du commit (et remise de l'entree d'allowlist).
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository

steps:
Expand Down Expand Up @@ -208,8 +214,7 @@ jobs:
# Routage #14283 tranche 3c (ai-01 2026-09-02) : jambe Linux auto-hebergee.
# Garde anti-fork au niveau job + runs-on STATIQUE (une expression leverait
# DYNAMIC_RUNS_ON dans check_self_hosted_runner_policy.py).
# Retour arriere = remettre `runs-on: ubuntu-latest` + retrait de l'allowlist.
runs-on: [self-hosted, coursia-ephemeral, coursia-linux]
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == null || github.event.pull_request.head.repo.full_name == github.repository

steps:
Expand Down
19 changes: 8 additions & 11 deletions scripts/ci/check_self_hosted_runner_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,21 +96,25 @@
"windows-self-hosted-tests.yml",
"linux-self-hosted-tests.yml",
"banner-guard.yml",
"solution-leak-guard.yml",
"prose-counts-guard.yml",
"notebook-interp-positioning.yml",
"cell-order-gate.yml",
"pip-leak-guard.yml",
"hooks-parity.yml",
"notebook-exec-sequence-ratchet.yml",
# 2026-10-27 (lane myia-ai-01:CoursIA, lot 2 de l'extension Q35 etape 2) :
# ces 11 workflows MIGRENT vers ubuntu-latest -- l'organe
# `scripts/ci/audit_self_hosted_needs.py` les certifie sans aucun besoin
# local, et le parc local etait sature PAR SES CHECKOUTS (mesure 00:45Z :
# 11 des 12 slots occupes dans `actions/checkout`, 614 runs en file). La
# garde anti-fork est conservee dans chaque fichier. Sortis de
# SELF_HOSTED_WORKFLOW_ALLOWLIST dans le meme commit. Precedent :
# repeated-prose-advisory.yml (#17443).
"notebook-navlink-check.yml",
"notebook-nav-chain-guard.yml",
# tranche 3b (#14283, meme decision, meme owner) : suite des gardes PR
# pure-Python. Fondue dans la meme PR que 3a -- les scinder aurait produit
# un conflit sur cette meme ancre pour zero benefice de relecture.
"markdown-claims-output-advisory.yml",
"orphaned-delivery-scan.yml",
"scan-md-hierarchy-drift.yml",
"slides-composition-pr-relay.yml",
"source-output-ratchet.yml",
"translation-guard.yml",
Expand Down Expand Up @@ -158,7 +162,6 @@
# workflow_dispatch seulement). Son jumeau always-on-guards.yml ne l'est
# PAS -- il porte pull_request_review, classe FORK_REACHABLE (#14294).
"always-on-metadata-guards.yml",
"twin-parity.yml",
# tranche 4 (#14283, meme decision, meme owner) : balayages cron pur-Python.
# Declencheur `schedule` seul -- pas de contexte pull_request, donc aucune
# garde same-repo requise. 33 creneaux distincts, au plus 2 simultanes
Expand Down Expand Up @@ -320,7 +323,6 @@
# Rollback = revert de la PR (l'entree disparait de l'allowlist).
"notebook-output-collapse-ratchet.yml",
"notebook-validation.yml",
"owui-playwright-check.yml",
"perimeter-review-guard.yml",
"regression-guard.yml",
"render-volume-delta-advisory.yml",
Expand Down Expand Up @@ -365,7 +367,6 @@
# (#17397, PR dediee myia-ai-01:CoursIA-2 c.206, 5 workflows
# agregateurs, 2026-10-06). Sorti de SELF_HOSTED_WORKFLOW_ALLOWLIST
# dans le meme commit. Precedent : #17443 (po-2023, 4 agregateurs).
"translation-drift.yml",
"translation-sync.yml",
"variation-light-genre.yml",
# tranche 6 (c.903, owner myia-po-2026:CoursIA-2) : garde advisory pur-Python
Expand All @@ -377,7 +378,6 @@
# seee (cf. test_universal_guard_with_combined_target_is_accepted, #13874)
# pour les forks PRs qui se font skipper proprement par pr_gate.
# Rollback = revert de cette PR (l'entree disparait de l'allowlist).
"notebook-link-render-check.yml",
# tranche 7 (acceptance 3 #11703, owner myia-po-2027:CoursIA) : garde
# advisory pur-Python declenchee sur pull_request filtrant les
# `**/*_lean/**/*.lean`, mode --pr-base de l'organe canonique
Expand Down Expand Up @@ -433,7 +433,6 @@
# Runner = jambe Linux containerisee (LINUX_RUNNER_LABELS, meme
# profil que notebook-latex-control-chars). Rollback = revert de la
# PR (l'entree disparait de l'allowlist).
"notebook-math-render.yml",
# #14532 item 1 (owner myia-po-2026:CoursIA-2) : garde PR pure-Python sur
# les disparitions de section au plan des notebooks pedagogiques.
# workflow_dispatch-only ce cycle (anti-panic-deploiement, idem
Expand Down Expand Up @@ -499,7 +498,6 @@
# Concurrency cancel-in-progress (le balayage de kernel sur N notebooks
# peut etre rejoue sans frais). Pas de label pose. Rollback = revert
# de la PR (l'entree disparait de l'allowlist).
"notebook-kernel-drift-guard.yml",
# #16776 (owner myia-po-2023:CoursIA, PR #16801) : organ-duplication
# advisory -- signale les symboles ajoutes qui collident avec l'organ
# API d'une autre serie (scripts/audit/organ_api_index.yaml, regle
Expand All @@ -511,7 +509,6 @@
# Entree ajoutee par le repair du rouge WORKFLOW_NOT_ALLOWED signale
# par Hermes (CONCERNS 19/09) : la PR routait le job self-hosted sans
# toucher cette allowlist fail-closed. Rollback = revert de la PR.
"organ-duplication-advisory.yml",
# #14623 (owner myia-po-2024:CoursIA, PR #18595) : docs-transients
# guard -- detecteur de fichiers transients (rapports/coordination)
# qui doivent vivre sur le dashboard, pas dans le repo (regle
Expand Down
Loading