Repository navigation
Fix(picker,#22636): le veto « PR fusionnee < 90 j » ne masque plus une consolidation au-dela de 48 h - #22861
Conversation
…e consolidation au-dela de 48 h Le veto de la surface « PR MERGEE » (90 j) neutralisait la regle des 48 h pour la classe `consolidation` : une tranche mergee depuis plus de 48 h continuait de rendre la consolidation invisible pour 90 jours. - `delivered_signal_reason()` : nouveau parametre `skip_merged_pr`, le court-circuit est place AVANT l'appel de la sonde -- ni requete `gh`, ni consommation du budget de sonde, ni repli `UNPROBED`. - Boucle du tapis : pour la seule classe `consolidation`, l'age de la derniere livraison par PR est lu sur `last_delivery_stamp` (deja calcule en amont par le corpus `fetch_merged` partage, zero appel reseau supplementaire) ; au-dela de `CONSOLIDATION_LAG_H`, la sonde PR n'est plus appelee. Age inconnu -> comportement anterieur conserve (fail-closed). - Le LABEL `candidate-delivered` reste intact ; les grains ordinaires et les EPICs ordinaires sont inchanges. - 4 tests dans `scripts/tests/test_pick_idle_grain_22500_passe2.py` : consolidation 72 h servie (sonde PR NON appelee), consolidation 2 h retenue, grain ordinaire 72 h toujours retenu par la regle des 90 j, label retenu quel que soit l'age. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
myia-ai-01
left a comment
There was a problem hiding this comment.
[APPROVE myia-ai-01] Approbation couvrant la tete exacte 75d8838
Lu : le body, le diff complet (2 fichiers, +126/-13), le commentaire du detecteur d'organes, B.0 rc=0.
Le correctif est le bon : pour la seule classe consolidation, la surface « PR MERGEE < 90 j » cesse d'ecarter l'issue quand la derniere livraison par PR est datee et depasse CONSOLIDATION_LAG_H. La date vient de last_delivery_stamp, deja calcule, et le court-circuit est place avant la sonde : aucune requete ni consommation du budget. Une date inconnue garde le comportement anterieur. Le label candidate-delivered et les grains ordinaires sont inchanges, chacun avec son test temoin.
Le test retire (test_le_marqueur_neutralise_ne_touche_pas_la_pr_mergee) ancrait exactement le comportement que #22500 veut supprimer : son remplacement par le test inverse est le correctif, pas une perte de couverture.
Verification a cette tete, dans un worktree detache sur ai-01 :
pytest scripts/tests/test_pick_idle_grain_22500_passe2.py scripts/tests/test_pick_idle_grain_belt.py: 136 passed ;- controle negatif : avec
scripts/pick_idle_grain.pydef30081943b3en place,1 failed, 16 passedsur le fichier 22500, puis source restauree.
Arbitrage du residuel (voie a) : oui. Une consolidation sans aucune livraison declaree dans la fenetre ne doit pas rester invisible 90 jours sur une simple mention en prose. Ce sera une PR de suivi, apres le merge de celle-ci, pour ne pas re-armer son plancher. Elle distinguera « corpus disponible, aucune livraison declaree » de « corpus indisponible », comme le body le note.
Path-collision (organ #13359/#13615)Cette PR #22861 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
Grain: MED/tooling — lane myia-ai-01:CoursIA-2 — prev: DEEP/notebook-python #22818
Objet
Le veto de la surface « PR MERGEE » (90 jours) neutralisait la règle des 48 h pour la seule classe
consolidation: une tranche fusionnée depuis plus de 48 h continuait de rendre la consolidation invisible pendant 90 jours. C'est la classe de défaut que #22500 veut supprimer (« les consolidations reviennent en tête plusieurs fois par semaine ») — le veto la rendait structurellement invisible.Ce PR est séparé de #22636 (désormais mergée,
5eb2b91f426) et rebâti sur unmainfrais (f30081943b3), comme demandé : la collision three-dot disparaît avec le merge de la base.Ce qui change
delivered_signal_reason()— nouveau paramètreskip_merged_pr. Le court-circuit est placé avant l'appel de la sonde : ni requêtegh, ni consommation du budget de sonde, ni repliUNPROBEDqui renverrait le candidat sur le tapis sans le servir.consolidation, l'âge de la dernière livraison par PR est lu surlast_delivery_stamp, déjà calculé en amont par le corpusfetch_mergedpartagé (zéro appel réseau supplémentaire). Au-delà deCONSOLIDATION_LAG_H(48 h), la sonde « PR MERGEE » n'est plus appelée. Âge inconnu → comportement antérieur conservé (fail-closed).candidate-deliveredreste intact : il continue d'écarter, quel que soit l'âge. Les grains ordinaires et les EPICs ordinaires sont inchangés.Acceptance, une par une
test_consolidation_pr_mergee_72h_est_servie— la sonde PR est assertée non appeléetest_consolidation_pr_mergee_2h_est_retenuetest_grain_ordinaire_pr_mergee_72h_est_retenucandidate-deliveredretient quel que soit l'âgetest_label_candidate_delivered_retenuContrôle négatif (le test mord). La source est revertie seule (
git show <commit> -- scripts/pick_idle_grain.py | git apply -R), les tests sont rejoués :test_consolidation_pr_mergee_72h_est_servieéchoue exactement sur le cas corrigé (withheld=["LIVRAISON : SIGNAL LIVRAISON (PR MERGEE <90j) …"]), 16 autres passent. La source est restaurée et les 17 repassent.Tests rejoués à la tête exacte
Écart mesuré — déclaré, pas appliqué en silence
Le correctif laisse un résiduel mesuré : 3 consolidations sur 10 divergent (
#22396,#22056,#20522) n'ont aucune livraison déclarée dans la fenêtre de 90 j — doncdelivery_age_h is None, la sonde PR tourne quand même, et le veto repose alors sur une mention en prose (une PR fusionnée qui cite l'issue sans vocabulaire de déclaration). Ces trois restent invisibles jusqu'à 90 jours.Deux voies existaient : (a) élargir — une consolidation sans aucune livraison déclarée dans la fenêtre n'est pas vetoée par la surface PR ; (b) ne pas élargir et déclarer la limite.
La voie (a) n'est pas appliquée ici : elle sort du périmètre des 4 points ci-dessus, et le commit de la voie (b) était déjà écrit et vérifié. Le choix relève de l'arbitrage du coordinateur, pas d'une initiative de lane. La limite est donc exprimée ici plutôt que passée sous silence.
Note de périmètre : le correctif livré conserve le fail-closed sur l'âge inconnu, qui couvre aussi le cas « corpus indisponible » (pas de réseau) — l'élargissement (a) devrait distinguer les deux cas, ce qui suppose de traiter la provenance de
last_delivery_stamp(corpus disponible mais aucune livraison déclarée) et non l'absence de l'horodatage.See #22636
🤖 Generated with Claude Code