Repository navigation
fix(tooling,#13906): epic body staleness -- exposer citation_breadth - #20113
Conversation
L'organe attribue une PR mergee a un EPIC des que son corps cite le numero de l'EPIC. Une PR qui cite plusieurs numeros a la fois (dump de tapis, liste de dispatch) se trouve donc attribuee a chacun d'eux : mesure sur le corpus courant, 9 PRs (6 %) portent 56 des 216 paires (PR, EPIC), et une seule PR est attribuee a 23 EPICs. Le champ additif citation_breadth expose la breadth maximale des PRs citees par un finding, sans changer la semantique ni aucun champ existant : 31 findings restent a breadth 1 (citations 1:1) tandis que 22 passent a 23. Un lecteur peut ainsi separer une livraison d'une simple liste de citations avant toute reecriture de corps. Controles : 4 tests ajoutes (positif liste de citations, negatif 1:1, breadth nul, serialisation) ; 34/34 passent. 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: |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
|
Ce que l'organe dit lui-meme. L'annotation du check-run
Le gate n'a pas trouve de faute : il a expire en attendant ses enfants. Sa conclusion est Ce que la PR touche. Cinq fichiers, tous sous Ce qui reste. Aucune reparation de substance n'est disponible ici : les enfants sont soit verts, soit en file sur un pool de runners partage ( Ce constat est ecrit ici parce qu'un rouge non reparable par sa lane se declare par ecrit, jamais en silence. |
|
[ADJOINT PREFLIGHT] |
rm -rf sur variable -- exposition latente, refus des formes neuves
#20209
Grain: MED/tooling — lane myia-ai-01:CoursIA-2 — prev: MED/docs #20073
Contexte
scripts/epic_body_staleness.py(organe d'acceptance de #13906) attribue une PRmergee a un EPIC des que son corps cite le numero de l'EPIC. Le docstring
l'assume deja (« A citation is only a signal ») et l'organe n'edite jamais de
corps — mais le signal n'est pas triable : une PR qui cite plusieurs numeros a
la fois se trouve attribuee a chacun.
Mesure (corpus de l'organe, 2026-10-09)
python scripts/epic_body_staleness.pysur le corpus courant (101 EPICsouverts, 800 PRs mergees) :
fix(picker,#18832), ne touche quescripts/) attribuee a 7 EPICs de contenu, dont #10355L'organe avertit lui-meme qu'« une citation n'est pas une preuve de livraison ».
Sur ces findings, une lane qui reecrirait un corps d'EPIC fabriquerait de
l'historique — le geste exactement inverse de l'intention de #13906.
Changement
Champ additif
citation_breadthsur chaque finding : le plus grand nombred'EPICs examines qui citent une meme PR du finding. Aucun champ existant ne
change, aucune semantique ne change, l'organe reste read-only.
Repartition obtenue sur le corpus courant :
Un consommateur dispose donc d'un axe de tri : les 31 findings de breadth 1
sont des citations propres ; les 22 de breadth 23 trahissent la meme PR.
Controles
python -m pytest scripts/tests/test_epic_body_staleness.py -q-> 34 passed(30 existants inchanges + 4 ajoutes : liste de citations, 1:1, breadth nul,
serialisation).
Validation bout-en-bout sur le vrai corpus :
finding_countinchange a 87, lechamp present sur les 87 findings.
Limites declarees
de breadth elevee reste a lire a la main, jamais a rejeter automatiquement.
un EPIC ferme ne compte pas.
🤖 Generated with Claude Code