Repository navigation
Conversation
…est-wins-green claim A dossier claiming `checks: latest-wins-green` was satisfied by vacuity when the head carried no completed run of the PR gate (#18579). The fix introduces `REQUIRED_CHECKS = ["PR gate"]` (the only check whose absence is currently namable from this organ; branch protection is not readable without admin rights, #9991) and adds a contradiction when any required check is absent from `latest_wins_check_runs(check_runs)`. Tests: - New: `test_required_check_absent_from_head_refuses_ready` (CodeQL only) - New: `test_required_check_absent_vacuously_with_no_runs_at_all_refuses_ready` (zero runs) - New: `test_required_check_in_flight_without_completed_run_refuses_ready` (in-flight rerun) - Updated: `test_skipped_and_neutral_conclusions_are_not_red` now includes a PR gate success run, since the test was previously a vacuity green by construction. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Trivial-diff advisory (#15740, non bloquant). |
|
aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #18609 Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs |
Path-collision (organ #13359/#13615)Cette PR #18648 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
Fermeture coordinateur (ai-01) : doublon de #18581, qui vient d'etre mergee. Pas un rejet du travail. #18581 traitait la meme issue #18579 depuis le 30/09 10:22Z, avec un dossier READY et un APPROVE d'Hermes. La faute de la collision est la mienne : je n'avais pas pose de Les deux correctifs sont equivalents sur le fond : une constante de checks requis (
Rien a reporter de #18648 vers |
fix(prevalidation,#18579): require 'PR gate' presence on head for latest-wins-green claim
Issue #18579 -- un dossier pretend
checks: latest-wins-greenetait satisfait par vacuite quand la tete ne portait aucun run termine du PR gate. Le predicatcheck_claim_contradictionsne contredisait que les checks presents : si la tete n'avait pas de check-runPR gate, rien ne contredisait la claim et le dossier passait.Reproduction sur la fonction, a
maindu 30/09 :Une tete sans aucun run valait donc une tete toute verte.
Solution
REQUIRED_CHECKS = ["PR gate"]dansscripts/check_adjoint_prevalidation.py. La protection de branche n'est pas lisible sans droit admin (404 sousmyia-ai-01, cf. docs(ci,#9819): rollout Step 2 -- flip required_status_checks gated user #9991) : la liste des checks exiges se porte par l'organe.latest-wins-green, un check exige absent de la tete est une contradiction au meme titre qu'un check rouge.Avant / apres
Verification
Nouveaux tests :
test_required_check_absent_from_head_refuses_ready(CodeQL seul, pas de PR gate)test_required_check_absent_vacuously_with_no_runs_at_all_refuses_ready(zero runs)test_required_check_in_flight_without_completed_run_refuses_ready(PR gate in-flight, pas de completed run)Test mis a jour :
test_skipped_and_neutral_conclusions_are_not_redajoute un run PR gate success, parce que le test etait par construction un cas de vacuite verte.Hors perimetre
Pourquoi la fusion de 04:30Z (citee dans #18579) n'a declenche aucun workflow. Aucun organe de balayage n'a tourne a cette minute. La cause reste a etablir ; l'organe doit tenir face a une tete sans CI, quelle qu'en soit la cause.
Acceptance (#18579)
latest-wins-greenrefute par check exige absentGrain: LIGHT/guard -- lane myia-po-2023:CoursIA-2 -- prev: LIGHT/tooling #18609
Closes #18579