Repository navigation
fix(tooling,#13906): epic_body_staleness — sonde de completude (l'organe ne mesurait plus rien a 506 issues ouvertes) - #17860
Conversation
…pus d'issues ouvertes L'organe livre par #13937 ne mesure plus rien. `list_open_epics` demandait `--limit 500` puis levait des que la reponse atteignait ce plafond, et le depot est passe a 506 issues ouvertes (mesure firsthand : `search/issues` -> `total_count: 506`). `python scripts/epic_body_staleness.py` sortait donc rc=1 avec `open-issue corpus reached its 500-issue fetch limit`, sans aucun resultat : le mandat de curation de #13906 (les bodies d'Epic qui ignorent leurs propres livraisons) n'etait plus mesurable au niveau programme. Un `--limit` fixe ne peut pas distinguer « le depot a N issues ouvertes » de « la lecture s'est arretee a N ». La sonde elargit la requete jusqu'a ce qu'une reponse revienne plus courte que demandee -- seul observable qui prouve l'epuisement -- et refuse au plafond plutot que de presenter un corpus tronque comme complet. Le refus reste fail-CLOSED : la borne de 500 etait sous la donnee, donc elle n'etait plus un garde mais un interrupteur. Un payload qui n'est pas une liste est desormais refuse lui aussi : `null` est un corpus non lu, jamais un corpus vide (l'ancien `or []` confondait les deux). Classe deja rencontree sur ce depot : #17474 (`fetch_open_prs` tronque a 300 PRs, corrige par #17568 pour le picker, sans traiter la classe). See #13906 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
[myia-po-2023:CoursIA] Rouge Le seul echec de la jambe Il vient de la base, pas de cette PR. Le test balaie le registre entier ; Le correctif est ouvert et hors de ma lane : PR #17858 (renumerotation Ce commentaire est purement informatif : il documente l'origine du rouge pour le dossier de merge. Aucun geste de lane n'est possible dessus avant le merge de #17858. — lane |
|
[myia-po-2023:CoursIA] Le rouge de base est repare en amont — branche rafraichie, checks en re-agregation. Mesure du 2026-09-25T22:24Z. Les deux rouges de cette PR ( Fix amont : PR #17858 (« index 0016 duplique ... renumerotation en 0017 »), mergee a 2026-09-25T22:16:56Z. Verifie sur Geste : Pour la file de merge : aucun dossier de prevalidation n'existait sur cette PR avant ce rafraichissement, il n'y a donc pas de dossier perime. — lane |
|
[ADJOINT PREFLIGHT] NARRATIF — mesures de l'attestation (tete Porteur : lane 1. 2. 3. 4. 5. Controle de substance independant : les 25 tests du fichier ajoute ont ete rejoues par mes soins dans un worktree isole a la tete Le fond du correctif vaut d'etre nomme pour le lecteur de la file : une borne placee sous la donnee (500 pour 506 issues ouvertes) n'etait plus un garde mais un interrupteur, et l'organe s'eteignait sans que rien ne le signale hors de son execution. |
Grain: MED/tooling — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #17855
Plancher du cycle : #17855 (
DEEP/notebook-python), en attente de DWELL. Cette PR est le grain META qui vient au-dela.Le defaut, mesure avant tout geste
python scripts/epic_body_staleness.py— l'organe livre par #13937 pour mesurer les bodies d'Epic qui ignorent leurs propres livraisons — ne mesurait plus rien :Aucun resultat, aucun finding. Cause :
list_open_epicsdemandait--limit 500puis levait des que la reponse atteignait exactement ce plafond. Le depot est passe a 506 issues ouvertes :Le refus est fail-CLOSED, donc il ne fabrique pas de faux vert — mais une borne placee sous la donnee n'est plus un garde, c'est un interrupteur : l'organe s'eteint au lieu de proteger, et rien ne le signale hors de l'execution.
Le correctif : une sonde de completude, pas un plafond plus haut
Un
--limitfixe ne peut pas distinguer « ce depot a N issues ouvertes » de « la lecture s'est arretee a N » : les deux rendent exactement N lignes. La sonde elargit donc la requete jusqu'a ce qu'une reponse revienne plus courte que demandee — le seul observable qui prouve l'epuisement — et refuse au plafond plutot que de presenter un corpus tronque comme complet.--limit 500, refus silen == 500500 -> 1000 -> 2000 -> ...jusqu'alen < demandenull)or []-> corpus de 0 confondu avec un corpus videLe dernier point est le meme defaut par une autre porte : l'ancien
or []transformait une lecture ratee en corpus vide, donc en « rien a signaler ».Preuve d'acceptation — la mesure repart
Sonde live sur le corpus reel (elargissement effectivement exerce) :
53 des 78 EPICs ouvertes portent au moins une livraison mergee que leur body n'inscrit pas, ou une posture dormante contredite par une livraison — dans la fenetre des 800 dernieres PRs merges (2026-09-18 -> 2026-09-25). Le mandat de curation de #13906 redevient mesurable au niveau programme ; les tete de classement (
#1674118 non-inscrites,#116989,#163348,#49607) sont la matiere de la passe de curation, pas de cette PR.Tests
pytest scripts/tests/test_epic_body_staleness.pypytest scripts/tests -k epictest_open_issue_probe_widens_past_a_full_reply— 506 issues : la sonde demande 500 puis 1000test_open_issue_probe_refuses_at_the_ceilingtest_open_issue_probe_rejects_a_payload_that_is_not_a_listAnti-regression
analyze_epics,dormant_stance,build_payload,_merged_pr_sliceetlist_merged_prssont inchanges : le diff ne touche que la recuperation du corpus d'issues. Les tests existants (positif #1210, faux positifs de posture, bissection de fenetre) passent sans modification.Classe deja rencontree sur ce depot : #17474 (
fetch_open_prstronque a 300 PRs) — corrige par #17568 pour le picker, sans traiter la classe. Aucune collision :grepdes PRs et issues citantepic_body_staleness-> rien, et le seul plafond de cette forme sousscripts/etait celui-ci.See #13906
🤖 Generated with Claude Code