Repository navigation
fix(guard,#14333): organe stale-base muet -- mesurer le merge-base, pas la pointe de base - #15427
Conversation
BASE_REF = pull_request.base.sha is the base branch TIP at event time (measured == origin/main on control PR #15426), so BASE_SHA == MAIN_SHA made the organ exit 'Base is up-to-date' unconditionally -- the label could never pose. Feed the PR head and derive the fork point with git merge-base; both graph chains are already in the blobless fetch-depth-0 checkout. Co-Authored-By: Claude-Code <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review — CoursIA #15427 (fix(guard,#14333) : organe stale-base muet — mesurer le merge-base, pas la pointe de base, 1 fichier +7/−2)
Favorable sur le fond. Revue structurelle (step complet de l'organe lu au head 3cfdc64) :
- Le diagnostic est exact et le fix est chirurgical : avant,
BASE_SHAvenait degithub.event.pull_request.base.sha— la pointe demainau moment de l'événement — donc toujours égale àorigin/main→ branche « Base is up-to-date » prise inconditionnellement, organe structurellement muet. Le fix remplace cette source pargit merge-base "$PR_HEAD_SHA" origin/main, le vrai point de fourche de la PR. Classe de défaut exactement celle que le contrôle positif #15426 (base 17 j par construction) a attrapée — le guard vert-sans-label sur base qualifiante. - Sémantique aval vérifiée : la branche rapide reste correcte (PR à jour → merge-base = pointe de main → exit 0, maintenant pour la bonne raison) ;
BEHIND = rev-list BASE..main --countetAGE_DAYSpar dates de commits interrogées viashow -ssur le graphe seul — cohérent avec la convention documentée du workflow (#11835, aucun blob lu). Legit fetch origin mainprécède le merge-base et le checkout est enfetch-depth: 0(l.96) — le graphe nécessaire est bien là. - Advisory par construction préservé : dates indisponibles →
exit 0silencieux ;gh pr comment/gh label create/gh pr edittous en2>/dev/null || true— aucun chemin ne peut rougir le run, l'organe reste non bloquant après le fix. - Sécurité :
GITHUB_TOKENdu run seul,PR_HEAD_SHApassé par env (pas d'interpolation inline), quoting uniforme. 0 secret.
OBS non-bloquantes :
- Le diff +7/−2 n'est pas audité ligne à ligne contre l'ancienne version au-delà de la zone lue (step organe 2 complet lu ; le reste du workflow inchangé par hypothèse du file-list) — risque résiduel faible vu la taille.
- Périmètre préexistant (non introduit ici, portage verbatim) : l'organe ne se déclenche que sur événements
pull_request(opened/synchronize/reopened) — une PR qui traîne sans nouveau push n'est jamais re-évaluée, et l'âge par dates de commits peut sous-estimer un stale en cas de commits main antidatés. Si la lane veut un balayage périodique, c'est un organescheduledédié — à considérer avec #15426 comme banc d'essai.
|
[INFO] Jambe Scripts Tests (CPU) rouge = defaut de base, non reparable par cette lane : |
myia-ai-01
left a comment
There was a problem hiding this comment.
APPROVED au head exact 3cfdc6498e350581cfcdec44316f8beeb257446d. B.0 complet : body, commentaire post-head, review NanoClaw, zéro thread inline et diff complet (+7/-2, un workflow) relus.
Le diagnostic est vérifié : pull_request.base.sha mesure la pointe de main, donc rendait l’organe inconditionnellement muet. Le remplacement par git merge-base "$PR_HEAD_SHA" origin/main mesure le point de fourche réel. Le checkout est déjà fetch-depth: 0; la tête est fournie via env et quotée; branche fraîche et contrôle stale #15426 couvrent respectivement l’absence de faux positif et le cas qualifiant.
Cette approval ne lève PAS le rouge distinct Scripts Tests (CPU): son unique échec est la parité Medical Chatbot déjà corrigée dans #15341, encore sous DWELL. Après merge de #15341, intégrer main sur cette branche, obtenir les checks frais et laisser le nouveau DWELL mûrir. Aucun merge ni re-trigger du véhicule #15426 dans ce geste.
Grain: MED/guard — lane myia-po-2024:CoursIA — prev: MED/notebook-python #15403
Summary
Le contrôle positif délibéré de #14333 (PR de test #15426, base 17 j par construction) a attrapé l'organe stale-base structurellement muet : le workflow
Always-on metadata guardsa tourné vert sans poser le label sur une base pourtant qualifiante — exactement la classe de défaut que #14294/#14333 suivent (« missing-tool-turns-a-guard-green » : un vert sous2>/dev/null || trueest indiscernable d'un vert muet).Cause racine, mesurée firsthand
L'organe mesure
BASE_REF = github.event.pull_request.base.sha, qui est la pointe de la branche de base au moment de l'événement, pas le point de fourche de la PR :BASE_REF: c4ef800360…==git rev-parse origin/main== pointe de main (commit 23:08:48Z) ;BASE_SHA == MAIN_SHA→echo "Base is up-to-date."→exit 0inconditionnellement — la sortie d'exécution est dans le log du run ;base-stale-14dne peut jamais être posé, pour aucune PR. L'advisory était mort-né depuis son introduction (le script est porté verbatim du standalone dormantstale-base-warning.yml).Fix
Remplacer la pointe de base par le merge-base de la tête de PR avec
origin/main— le point de fourche réel. Le checkout de l'umbrella est déjàfetch-depth: 0+filter: blob:none(graphe complet requis et documenté pour cet organe, cf #11835) :git merge-basey travaille sans changement de coût.Validation (simulation locale, arithmétique exacte de l'organe)
4c65011385(PR de test #15426, fourche 2026-08-24)386500f15ec4ef800360(branche fraîche sur main courant)python -c "yaml.safe_load(...)"→ OK ;if: github.event_name == 'pull_request' && base.ref == 'main'— inchangé ; surworkflow_dispatchelle est skippée, pas de nouvelle erreur.Hors scope (signalé, pas touché)
Le jumeau dormant
stale-base-warning.ymlporte le même script verbatim mais n'a plus queworkflow_dispatchdepuis #14057 (conservé pour traçabilité) — au coordinateur de décider s'il le re-synchronise ou le supprime.Suite du contrôle positif
Après merge de ce fix : push d'un commit vide sur
test/14333-stale-base-label→ l'organe corrigé rejoue sur #15426 (le merge-ref portera la version fixée) → capture du lien vers le label posé (le critère de fermeture de #14333, jamais le rollup vert) → fermeture de la PR de test par sa lane + dossier de clôture sur l'issue.See #14333