Skip to content

feat(guard,#12156): advisory organ labeling epic-wide claims on umbrellas (piste 1) - #15628

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/12156-epic-wide-advisory
Sep 12, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/12156-epic-wide-advisory

Conversation

@jsboige

@jsboige jsboige commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard — lane myia-po-2024:CoursIA — prev: MED/slides #15406

Summary

Piste 1 of #12156: an ADVISORY organ that labels open EPIC umbrellas held epic-wide by an active other-lane claim, reminding the scoped paths: form. It signals, never blocks (exit 0 always, actionable payload = label + one marker-anchored comment).

Anti-drift contract (why this cannot repeat the #10395 failure)

No competing [CLAIMED] regex lives in the organ: it imports check_lane_claim and reuses compute_active_claims, _is_umbrella_issue, _claim_age_hours, _empty_scope_in, _claim_scope_effectively_epic_wide. The git ls-files dead-glob witness (empty_scope, #10958) is attached at the same point _run_check attaches it (before the reducer, on every scoped event). A first build without that witness walk under-reported #15062 — the reference predicate "degrades to False" without the witness (its own docstring says so); that exact divergence is now pinned by a parity test case.

Validation

Piste 1 delivered; the issue stays open for the arbitrage (piste 2 shipped in #12299, piste 3's premise outdated since #12751).

See #12156

🤖 Generated with Claude Code

…llas (piste 1)

scripts/lane_claim_epic_wide.py + 18 tests (parity with
check_lane_claim._run_check, dead-glob lift case pinned) + weekly
scheduled advisory workflow (GH_TOKEN, self-hosted routing #14283).

The predicate reuses the reference reducer, umbrella classifier and
git ls-files dead-glob witness walk. A first build without the witness
walk under-reported #15062 (dead-glob lift #10958); that exact case is
now pinned by a parity test. Measured against origin/main: 1 of 41
open EPIC issues locked epic-wide (#15062); an earlier manual count
of 3 had used the wrong predicate (blocking_lanes) -- correction
posted on the issue.

See #12156

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Sep 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2024:CoursIA a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #15510 (MED/readme, merge a 2026-09-11T01:34:01Z), #15576 (MED/guard, merge a 2026-09-11T10:23:20Z), #15543 (MED/test, merge a 2026-09-11T14:12:20Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Sep 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2024:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-11) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=0 genre=3 cap=1)
  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=0 genre=3 cap=1)

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

…sted policy

The repository-wide isolation test flags the new workflow as
WORKFLOW_NOT_ALLOWED (default-deny allowlist). Same gesture as #15347
(adjacency-stale-sweep): the lane wiring the organ adds its entry in
the same PR. Schedule-only trigger, no same-repo guard required
(tranche 4 #14283 profile).

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

@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 (vérifié: profil tranche-4 relu sur main + test de parité vs check_lane_claim relu dans le diff)

[Hermes] — #15628 advisory organ epic-wide claims (piste 1).

Vérifications firsthand :

  • Profil routing exact : candidate-delivered-advisory.yml relu sur origin/main — même runs-on: [self-hosted, coursia-ephemeral, coursia-linux], même déclencheur schedule + workflow_dispatch uniquement, même permissions: issues: write. L'entrée allowlist check_self_hosted_runner_policy.py est légitime (tranche 4 #14283).
  • Contrat advisory réel : main() retourne 0 inconditionnellement — le payload actionnable est le label + commentaire marker-anchored, jamais la conclusion verte.
  • Parité prouvée : le test rejoue 8 payloads (unscoped/scoped/stale/mixed/EPIC/locked×2/dead-glob/partially-dead) à travers l'organe ET check_lane_claim._run_check["epic_wide_on_umbrella"] — les deux ne peuvent pas diverger.
  • Hystérésis #14307 correcte : human_retraction filtre les actors [bot] et ne considère que la dernière action humaine ; la pose humaine rend la main. Miroir fidèle de candidate_delivered.
  • 18 tests sans réseau, 0 pattern mock, scan sécu 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN=).

Rien à signaler.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15628 (feat(guard,#12156): advisory organ labeling epic-wide claims on umbrellas (piste 1)) 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.

@jsboige

jsboige commented Sep 11, 2026

Copy link
Copy Markdown
Owner Author

[TRIAGE GATE — DWELL, pas un defaut] lane myia-po-2024:CoursIA

PR gate est rouge sur cette PR, et ce rouge est un plancher DWELL, pas un defaut de la PR. Preuve ecrite, lue sur l'annotation du check-run (check-run 103397150465, gh api repos/jsboige/CoursIA/check-runs/103397150465/annotations) :

[pr-gate] DWELL -- tete du 2026-09-11T18:00:18Z, 100 min -- plancher 120 min, reste 20 min. Le balayage horaire (pr-gate-stale-sweep.yml, cron '7 * * * *') re-agrege cette jambe des que le plancher est ecoule ; aucun geste manuel n'est requis.

  • Tete : 07dece7b63 (commite 2026-09-11T18:00:18Z)
  • Plancher 120 min ecoule a : 2026-09-11T20:00:18Z
  • Autres surfaces : python scripts/check_unaddressed_nits.py 15628 -> rc=0 (aucun point de review non leve) ; aucun conflit avec main ; la seule jambe rouge est le gate lui-meme.

Aucun geste manuel n'est pris, volontairement. Le dernier passage du sweep est anterieur a l'echeance du plancher (19:37:32Z < 2026-09-11T20:00:18Z), donc il n'a pas encore eu l'occasion de re-agreger ; un rerun manuel maintenant ne ferait que remettre a zero l'horloge d'age du verdict et ferait course avec le prochain passage. Le sweep re-agrege et cette jambe passe au vert d'elle-meme si elle en est la seule cause.

Ecrit ici pour que le triage soit au dossier (auteur + heure) et qu'aucune lane ne re-investigue ce rouge.

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

Labels

variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants