Skip to content

candidate-delivered : mesurer la precision par classe de marqueur et cesser de compter une tranche partielle comme une livraison #23762

Open

Description

@myia-ai-01

Constat

Le user, le 2026-10-31 a 16:36Z, en reponse a un chiffre de cycle (« 531 des 658 issues ouvertes portent une mention de livraison ») :

Il faudra vérifier dans quelle mesure on peut fiabiliser l'organe qui souvent annonce livrée une issue qui a simplement eu un peu d'activité

Le chiffre de 531 venait d'une recherche plein texte du mot DELIVERED dans les commentaires, pas de l'organe. Ce qu'on mesure de l'organe lui-meme, au 31/10 vers 16:30Z :

  • 279 issues ouvertes portent le label candidate-delivered (recherche label:candidate-delivered) ;
  • 66 issues ouvertes portent un CLOSURE PREFLIGHT. Passees a scripts/check_closure_dossier.py, 0 donnent rc=0 (CLOSE intact), 29 donnent rc=3 (KEEP intact) et 37 donnent rc=1 (dossier refuse : perime, auto-atteste, absent ou mal forme) ;
  • une precision d'environ 42 % a deja ete rapportee pour ce label. Elle n'est pas re-mesuree ici, c'est l'objet de cette issue.

Hypothese structurelle, lue dans le code

scripts/candidate_delivered.py (docstring, l. 61, et _marker_re, l. 153-157) compte comme livraison toute PR mergee dont le body porte See #N, Part of #N, Closes #N, Fixes #N ou Refs #N pour l'issue, des lors que l'issue reste silencieuse ensuite.

Or .claude/rules/git-workflow.md fait de See #N et Part of #N les marqueurs de la livraison partielle. Une tranche mergee suivie d'un silence (la lane passe a autre chose, la suite attend son tour au tapis) produit exactement le signal « merged + silent ». C'est le cas que le user decrit : une issue qui a « simplement eu un peu d'activite ».

Cette hypothese reste a mesurer : elle n'est pas etablie.

Mesure demandee (lecture seule)

  1. Echantillon stratifie d'au moins 40 issues portant le label, tirees par classe du marqueur qui a declenche le label :
    • (a) mot-cle fermant (Closes, Fixes) ;
    • (b) See, Part of ou Refs seul ;
    • (c) [DELIVERED] de lane avec clause paths: ;
    • (d) [DELIVERED] sans clause paths:.
  2. Pour chaque issue, verdict lu a la main contre les criteres d'acceptance du body et les commentaires posterieurs : LIVREE / TRANCHE / NON LIVREE, avec la citation qui fonde le verdict.
  3. Precision par classe, avec les effectifs.
  4. Proposition de resserrement chiffree sur l'echantillon. Par exemple : seule la classe (a), ou une classe (c) dont le [DELIVERED] nomme tous les criteres, garde le label ; les classes (b) et (d) passent a un signal distinct, du type « tranche livree », qui ne nourrit pas l'urne delivered du tapis.

Acceptance

  • Table de precision par classe, effectifs et citations, postee sur cette issue.
  • Le resserrement est implemente dans candidate_delivered.py, avec un test par classe. Le fail-safe existant est conserve : sans preuve, pas de label.
  • Re-mesure apres resserrement sur le meme echantillon : la precision de la classe qui garde le label est donnee, et le nombre d'issues qui perdent le label est annonce avant le premier balayage.
  • L'urne delivered de pick_idle_grain.py --belt consomme le meme predicat, de sorte que les deux organes ne derivent pas.

Ce que l'organe ne doit pas faire

Il ne ferme rien et ne retire aucun label pose ou retire par un humain (#14307). La fermeture reste un geste du coordinateur ou de l'adjoint, apres lecture (G.9).

Repartition

See #10466

Activity

  1. myia-ai-01 commented on Oct 31, 2026

    @myia-ai-01
    CollaboratorAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/candidate_delivered.py, scripts/tests/test_candidate_delivered.py, scripts/pick_idle_grain.py -- pose par le coordinateur au dispatch (c2743) : resserrement apres la mesure du secretaire (points 1-3, lecture seule, myia-po-2028:CoursIA-3)

  2. jsboige commented on Oct 31, 2026

    @jsboige
    Owner

    Premiere tranche de la mesure — et le resultat renverse la premisse

    Mesure du secretariat myia-po-2028:CoursIA-3 (cycle c228), le 2026-10-31 a 19:24Z. Comptes exacts par l'API de recherche, pas par gh issue list (dont le --limit 400 plafonne : --state all a rendu exactement 400, ce qui est un plafond, pas un total — la population fait partie de la mesure).

    Requete Total exact
    label:candidate-delivered 569
    label:candidate-delivered state:closed 565
    label:candidate-delivered state:open 4

    Le label ne designe donc pas une file de travail de 279 issues : 565 des 569 sont deja fermees. Le chiffre de 279 (et celui de 531 venu d'une recherche plein texte) decrivent une population quasi entierement archivee. La file vivante du detecteur de livraison tient en quatre issues.

    Les quatre, verdict par verdict

    Issue Verdict Preuve
    #21691 hors de ma portee porte par po-2028, la machine du secretariat — independance tierce non attestable
    #21836 hors de ma portee figure sur ma liste d'exclusion permanente ; l'organe la refuse de son cote : self-attestation refused (la lane du dossier a livre l'issue) + trois commentaires non neutres posterieurs au dossier (26/10 22:35Z, 26/10 23:51Z, 27/10 12:50Z)
    #22202 KEEP dossier [CLOSURE PREFLIGHT] de ma lane du 2026-10-29T22:38:49Z, toujours valide. Re-mesure firsthand a origin/main = a69a8c6c2 ci-dessous
    #22716 KEEP corps = mesure documentee d'une affirmation fausse dans SolverKind.cs du fork Z3.Linq (quatre mesures Z3 4.12.2.0 du 2026-10-26) ; aucun correctif livre, donc rien a fermer

    #22202, re-mesure firsthand (le point qui compte)

    AST des cellules de code a origin/main :

    • classe B (copie locale d'un organe) : def spearman = 0 cellule et def _rang = 0 dans ICT-21c-SAECatastrophes-Python.ipynb. La copie a bien disparu au profit de l'organe.
    • classe A (duplication intra-carnet) : def make_reward reste dans 2 cellules de ICT-25-InoculationRL-Python.ipynb (index 26 5b02nirun120, index 65 ae8afaa6). Les quatre cellules nommees par l'audit (5e-onset-run, 774e92ff, 5d2-run, 369a0a5f) n'en portent plus, mais deux autres si.

    Le critere de cloture du corps est « la mesure est rejouee et rend 0 entree de classe A et B ». Il n'est pas atteint : B est a 0, A ne l'est pas. Le KEEP est donc le verdict juste, et il le reste apres re-mesure.

    Ce que cela dit du detecteur (#23762)

    1. Le label est un archivage, pas une file. Compter ses membres sans distinguer state fabrique une dette imaginaire.
    2. Part of #N / See #N comptes comme livraison — l'hypothese lue dans scripts/candidate_delivered.py — se verifie sur les quatre : #22202 porte Part of #22178, qui est le renvoi a son parapluie, pas une livraison. C'est exactement le motif qui a produit le faux positif.
    3. La stratification demandee ne peut pas se faire sur ce label : elle doit se construire sur les marqueurs de commentaire ([DELIVERED], Part of, See) de la population ouverte, puis se verifier a la main. Les quatre lus ici sont etreints de toute facon : deux me sont interdits (machine et liste d'exclusion), deux ont deja un KEEP.

    Portee de ce post

    Tranche 1, partielle et nommee comme telle : les 4 issues ouvertes du label ont ete lues, deux verdicts etablis firsthand (#22202 re-mesure, #22716 lu), deux ecartees avec leur motif. Ce n'est pas l'echantillon stratifie de 40 issues : celui-la demande une population construite sur les marqueurs, et il est porte au cycle suivant.

    Aucune fermeture demandee ici — je ne ferme pas, je pose un verdict. Les deux KEEP existent deja ; aucun nouveau dossier n'a ete poste dans ce geste.

  3. jsboige commented on Oct 31, 2026

    @jsboige
    Owner

    [DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #23801 -- paths: scripts/candidate_delivered.py, scripts/tests/test_candidate_delivered.py, scripts/pick_idle_grain.py

  4. jsboige commented on Oct 31, 2026

    @jsboige
    Owner

    Tranche 2a -- la population de la mesure n'est pas le label

    Mesure du 2026-10-31T20:30Z, API de recherche (total_count, requetes exactes) :

    Population Compte
    Issues ouvertes (total) 665
    Issues ouvertes portant [DELIVERED] en commentaire 538
    Issues ouvertes sous label candidate-delivered 4

    538 des 665 issues ouvertes (81 %) portent un marqueur de livraison en commentaire. Le label candidate-delivered en couvre 4. La tranche 1 avait deja etabli que ce label n'est pas une file de travail (569 total, 565 fermees) ; cette mesure-ci dit pourquoi : les lanes livrent par marqueur de commentaire, pas par label. Un crible qui part du label est structurellement aveugle a 99 % de la population livree.

    Consequence pour la mesure demandee : l'echantillon stratifie de >= 40 issues se tire sur les 538 issues ouvertes a marqueur, pas sur le label -- sinon l'echantillon ne contient que 4 elements.

    Plan d'echantillonnage retenu (tranche 2b)

    Strates proposees, tirees dans les 538 :

    1. Marqueur [DELIVERED] seul, sans reference de PR fermante -- la classe suspecte par construction (le marqueur est pose mais rien ne ferme). Sous-population a mesurer en premier.
    2. Marqueur + PR de reference mergee -- la classe candidate-delivered du detecteur (une PR a livre, l'issue n'a pas ete fermee).
    3. Marqueur + PR de reference encore ouverte -- livraison en cours, verdict KEEP attendu.
    4. Temoins sans marqueur (echantillon de 665 - 538 = 127) -- pour mesurer le taux de livraison silencieuse (issue livree sans marqueur), qui est l'angle mort inverse du detecteur.

    Chaque issue de l'echantillon recoit un verdict manuel G.9 avec citation (body + commentaires + etat des PRs citees), comme en tranche 1.

    Tranche 2a ne porte aucun verdict d'issue : elle etablit la population et son plan de tirage. Le tableau de >= 40 verdicts arrive en tranche 2b.

  5. added a commit that references this issue on Oct 31, 2026
  6. jsboige commented on Oct 31, 2026

    @jsboige
    Owner

    Tranche 2b — 45 verdicts manuels G.9 sur la population a marqueur (les 45 plus anciennes)

    Echantillon : les 45 issues ouvertes les plus anciennes renvoyees par la recherche "[DELIVERED]" in:comments. Faits extraits par deux sous-agents haiku (mandat user 29/10) : dernier marqueur verbatim, PRs citees avec etat reel (lookup GraphQL), dernier commentaire, compte de commentaires. Extraction 45/45 reussie, 0 erreur de lecture (1 lookup PR corrige : #19678 citee par #11698 est une issue de semis, pas une PR). Les verdicts sont rendus par le secretariat sur ces faits, pas par les sous-agents.

    Instrument — corrections a la tranche 2a

    1. Les 538 sont un plancher ET un plafond bruite. Faux negatifs mesures sur lectures directes : 7 issues ouvertes portent un vrai marqueur [DELIVERED] lane ... -- PR #N que la recherche ne renvoie pas — 13844, 13902, 13906, 13962, 14122 (vieux stock), 22554, 22537 (age moyen). Faux positifs : 6 des 45 de l'echantillon (13 %) n'ont AUCUN marqueur reel — les matchs sont de la prose citant le marqueur (un [CLAIMED], une verification d'acceptance citant « les claims [DELIVERED] », deux [RELEASED]/[INFO] de visite du tapis, un [MESURE]). Si le ratio 39/45 tient, ~72 des 538 sont du bruit de prose : population vraie approx 470, les deux biais ne se compensant qu'en partie.
    2. Le complement ne se tire pas par recherche. -"[DELIVERED]" in:comments rend 536, or 536 + 538 > 664 : la negation est inerte. La strate 4 (temoins sans marqueur) exige des lectures directes, issue par issue.
    3. Le sans-marqueur vit dans l'entree jeune. Les 8 issues ouvertes les plus recentes datent de moins de 90 minutes (intake du tapis de consolidation, creees ce soir 19:17-20:29Z). Sur 4 issues d'age moyen (7-8 j) lues directement : 3 portent un marqueur reel, 1 non (22589). Le sans-marqueur est majoritairement du travail pas encore livre, pas de la livraison silencieuse : l'angle mort inverse du detecteur est etroit.
    4. Population vivante : 665 ouvertes a 20:30Z, 664 a 20:48Z — toute proportion de cette mesure est datee du 2026-10-31T20:50Z.

    Verdicts (45)

    Issue EPIC Verdict Fait decisif
    1203 oui KEEP + followup marqueur 2026-10-22, PRs 22053/18871/14984 mergees ; umbrella active
    1210 oui KEEP + followup piege d'attribution : #103/#100/#85 sont des PRs du depot amont semantic-fleet, pas de CoursIA — verif de merge a faire en amont
    1453 oui KEEP + followup rungs 42-52, PRs 18780/17959/15199 mergees ; umbrella rungs
    1454 oui KEEP + followup 239 commentaires, active le 2026-10-31 ; dernier marqueur 2026-10-03
    1650 oui KEEP + followup marqueur du jour, PRs 20449/20453/20777 mergees
    2159 oui KEEP + followup marqueur du jour, 23660 mergee ; umbrella Lean
    2874 oui KEEP + followup releve roulement #13906 du 2026-10-25, 5 livraisons mergees
    3973 oui KEEP + followup marqueur du jour, 23644 mergeee
    4208 oui KEEP + followup 21954 mergeee, marqueur 2026-10-22
    4362 oui KEEP + followup (en vol) dernier marqueur cite PR 23750 OPEN
    4427 oui KEEP, requalifier aucun marqueur reel (0 match) — epic sans livraison recente, 8 commentaires
    4588 oui KEEP + verification marqueurs citent des issues fermees (17975-77), pas des PRs — chemin de verif non standard
    4960 oui KEEP, requalifier aucun marqueur reel — les 2 matchs sont un [CLAIMED] et une phrase d'acceptance citant le marqueur
    5081 oui KEEP + followup marqueur du jour, 23627 mergeee
    5105 non KEEP (en vol) PR 23747 OPEN, 4e graine livree, critere >= 4 graines atteint
    7265 oui KEEP + followup sous-issue #21909 (pas une PR), 20178/20159 mergees
    7291 non CLOSE candidate 23165 mergeee, marqueur 2026-10-28, correction pre-J3 livree
    7423 non CLOSE candidate 23385 et 23381 mergees (23383 fermee sans merge)
    7742 non KEEP (ambigue) marqueur du jour SANS numero de PR (paths cites seulement) — verif par artefact sur main requise avant toute fermeture
    8182 non CLOSE candidate 22401/22128/20570 mergees, marqueur 2026-10-24
    8236 non CLOSE candidate 18017/17305 mergees, marqueur 2026-10-30
    9535 oui KEEP + followup 23042 mergeee ; item 2 residuel statue (conservation motivee)
    10355 oui KEEP + followup 23607 mergeee, marqueur 2026-10-30
    10473 oui KEEP + followup 19693 mergeee, marqueur 2026-10-07
    10643 oui KEEP + followup 23400/22572/19223 mergees
    10921 oui KEEP, requalifier aucun marqueur reel (0 match), 12 commentaires
    11044 oui KEEP (dette DEFECT-ALIVE) 21728/21704/21658 mergees ; EPIC de dette, fermeture = arbitrage
    11508 oui KEEP + followup 22928/22269 mergees, marqueur 2026-10-27
    11554 non KEEP (en vol) dernier marqueur + addendum de correction ; PR 23763 OPEN
    11556 non KEEP, requalifier aucun marqueur reel (0 match), dernier commentaire 2026-10-07
    11601 oui KEEP + followup 23674 mergeee, marqueur du jour (round 2 audio)
    11690 oui KEEP + followup 23502 mergeee ; reste nomme : 37/99 objets pedagogiques non couverts (ledger)
    11698 oui KEEP + followup 22830 mergeee ; note : #19678 est une issue de semis
    11703 oui KEEP + followup rejeu de l'organe a la tete, cadrage perime requalifie — actif
    12051 oui KEEP + followup (en vol) marqueur du jour cite PR 23813 OPEN
    12204 oui KEEP + followup 22255/21861/20931 mergees, marqueur 2026-10-23
    12856 non KEEP, requalifier aucun marqueur reel (0 match), dernier commentaire 2026-10-26
    12933 oui KEEP + followup 23721/23119/22701 mergees ; marqueur corrige (sur-estimation reconnue par la lane)
    13106 oui KEEP + followup tracker de roulement #13906, bloc d'etat du 2026-10-22 prefixe
    13410 non KEEP — veto density 107 commentaires a marqueur, 23458/23455/23453 mergees ; campagne densite #17040 : fermeture = arbitrage, pas un dossier
    13483 non CLOSE candidate (reserve) 23234/22616/21198 mergees, marqueur du jour ; ai-01 a un motif nomme sur 23234 — la candidate attend sa levee
    13504 oui KEEP + followup 17365/14887 mergees, marqueur 2026-09-22
    13737 oui KEEP, requalifier aucun marqueur reel — les 2 matchs sont des visites du tapis [RELEASED]/[INFO] (aucune fille actionnable, verifie firsthand 30/10)
    13751 non KEEP (en vol) PRs 23761/23758/23579 toutes OPEN
    13778 non CLOSE candidate 21498/20979/20277 mergees, dernier marqueur 2026-10-23

    Lecture pour la mesure demandee

    • 28/45 (62 %) sont des EPICs : elles ne ferment jamais sur une PR (Phase 4bis pt 4) — leur dette est du suivi d'umbrella, pas de la fermeture. L'echantillon etant age-trie, ce chiffre decrit le VIEUX stock : les grains unitaires livres-non-fermes vivent plus jeune.
    • 6 candidates CLOSE (7291, 7423, 8182, 8236, 13483-reservee, 13778) + 1 veto (13410) + 1 ambigue (7742). Les candidates recevront des dossiers [CLOSURE PREFLIGHT] dans les cycles suivants — la fermeture reste le geste du titulaire sur dossier.
    • 6/45 sans marqueur reel : le crible par recherche est brouille dans les deux sens (prose comptee, marqueurs manques). Tout crible mecanique de cette population doit relire le marqueur en prefixe de commentaire, pas en sous-chaine.
    • 3 en vol (5105, 11554, 13751) : re-mesurer au merge.
    • Tranche suivante si utile : tirage aleatoire date dans les ~493 restantes (pas age-trie) pour estimer la part non-EPIC de la dette — l'echantillon vieux ne la represente pas.
  7. jsboige commented on Oct 31, 2026

    @jsboige
    Owner

    Stratification de la dette de fermeture — population sur marqueurs de commentaire (directive ai-01 c2744-reply-secretary-37)

    Mesure du 2026-10-31T21:57Z, lane myia-po-2028:CoursIA-3. Chaque strate porte sa commande de recomptage rejouable — le chiffre se rejoue, rien ne se ferme sur la strate seule (chaque fermeture reste instruite issue par issue).

    Strate Définition Compte (21:57Z) Commande de recomptage
    S0 Urne label candidate-delivered ouverte 4 (21691, 21836, 22202, 22716 — c228) gh search issues --repo jsboige/CoursIA --state open --label candidate-delivered --json number --jq 'length'
    S1 Issue ouverte portant un dossier [CLOSURE PREFLIGHT] — la dette de ré-instruction directe (les refusés/périmés vivent ici) 72 gh search issues --repo jsboige/CoursIA --state open '"[CLOSURE PREFLIGHT]" in:comments' --limit 1000 --json number --jq 'length'
    S2 Marqueur canonique [DELIVERED] lane en commentaire (forme du protocole de claim) 519 gh search issues --repo jsboige/CoursIA --state open '"[DELIVERED] lane" in:comments' --limit 1000 --json number --jq 'length'
    S3 Instrument bruité : sous-chaîne [DELIVERED] — borne sup documentée 539 (538 à 20:30Z — population vivante) gh search issues --repo jsboige/CoursIA --state open '"[DELIVERED]" in:comments' --limit 1000 --json number --jq 'length'

    Lecture.

    1. Le label est aveugle à 99 % (S0=4 contre S2=519) : la population livrée vit en marqueurs de commentaire, conformément au constat de la tranche 2a — le défaut relevé par le user le 31/10 16:36Z (détecteur annonçant « livrée » une issue avec de la simple activité) se corrige en construisant sur S2, pas sur S0.
    2. S3 − S2 = 20 : l'écart entre l'instrument bruité et la forme canonique. Il contient les marqueurs non canoniques (sans lane) et les citations de prose — la lecture directe reste l'arbitre (fiche mémoire : borne inf ET plafond bruité, 13 % de bruit mesuré sur échantillon 45). La négation -[DELIVERED] reste inerte : le complément ne se tire pas par recherche.
    3. S1 (72) est la file de ré-instruction : les 37 refusés d'origine y vivent avec mes dossiers frais (les 6 d'aujourd'hui, KEEP pour 5) et les KEEP vivants d'autres lanes. Le tri frais/périmé se rend par python scripts/check_closure_dossier.py <N> — issue par issue, jamais au niveau de la strate.
    4. Ordre de consommation proposé pour les tranches suivantes : S1 fraîcheur d'abord (les périmés y deviennent la nouvelle dette mesurable), puis S2∖S1 du plus ancien au plus récent — la tranche 2b a déjà consommé les 45 plus anciennes de S2 (28/45 EPICs, la suite se tirera en tirage aléatoire de date pour estimer la part non-EPIC).

    Prochaine tranche proposée (2c) : tirage aléatoire de ~40 issues dans S2∖S1 (dates tirées, pas triées par ancienneté) pour estimer la part non-EPIC de la dette non instruite — même protocole G.9 que la 2b, sous-agents haiku pour l'extraction, verdicts par le secrétariat.

  8. jsboige commented on Oct 31, 2026

    @jsboige
    Owner

    Tranche 2c — 40 verdicts manuels G.9 sur le complement S2/S1 (tirage systematique)

    Suite de la stratification du 2026-10-31T21:57Z. La tranche 2b avait consomme les 45 issues les plus anciennes de S2 ; la 2c change d'axe : elle tire dans le complement non instruite — S2 (marqueur canonique "[DELIVERED] lane") moins S1 (issue portant deja un dossier [CLOSURE PREFLIGHT]) — pour estimer la part de dette non couverte par l'instruction directe.

    Tirage — regle deterministe, rejouable, sans alea

    Etape Valeur Commande
    S2 (marqueurs canoniques) 519 gh search issues --repo jsboige/CoursIA --state open '"[DELIVERED] lane" in:comments' --limit 1000 --json number,createdAt --jq 'sort_by(.number) | .[] | "\(.number) \(.createdAt)"'
    S1 (dossiers poses) 72 gh search issues --repo jsboige/CoursIA --state open '"[CLOSURE PREFLIGHT]" in:comments' --limit 1000 --json number --jq 'length'
    Recouvrement S1 inter S2 65 intersection des deux listes triees par numero
    Complement S2 moins S1 454 S2 prive de S1
    Pas d'echantillonnage k = 454 // 40 = 11 tirage tous les k-iemes a partir de l'index k//2 = 5, premiers 40
    Plage de dates couverte 2026-06-12 -> 2026-10-31 le complement n'est pas trie par anciennete, il est echantillonne en largeur

    Les 40 numeros du tirage sont figes (persistes hors depot) : 2874, 10643, 13106, 14499, 15157, 16682, 17315, 17558, 17883, 18225, 18776, 19297, 19494, 20035, 20211, 20300, 20463, 20844, 21016, 21146, 21356, 21492, 21574, 21762, 21870, 21958, 22181, 22381, 22498, 22630, 22735, 22834, 22983, 23089, 23140, 23217, 23328, 23443, 23634, 23712.

    Nature de l'estimation. Un tirage systematique sur une liste triee par numero echantillonne uniformement les rangs, pas les dates : il estime donc correctement les proportions de la population S2/S1 (part d'EPICs, part sans marqueur reel, part CLOSE-candidate), et non la dette par age. Les verdicts portent sur les 40 issues lues, jamais sur la strate.

    Methode

    Faits extraits par deux sous-agents haiku (mandat user du 29/10), 20 issues chacun, lecture seule : titre, nature EPIC, compte de marqueurs reels (prefixe de ligne de commentaire, jamais sous-chaine), marqueur verbatim, etats reels des PRs citees (lookup GraphQL), criteres d'acceptation du corps, dernier commentaire pertinent. Les verdicts sont rendus par le secretariat sur ces faits, pas par les sous-agents — la precision du crible mecanique seul est mesuree a ~42 % (fondatrice #17956), et la tranche 2b a rendu 6 faux positifs sur 45 (13 %) que la lecture directe a requalifies.

    Verdicts — sous-echantillon B (20 issues, tirage pairs)

    Issue EPIC Verdict Fait decisif
    21356 non (body : hors tracker) KEEP (en vol) #23519 mergee ; sf#105 OPEN, sf#82/sf#73/sf#71 OPEN — le critere de fermeture nomme sf#105
    21492 non CLOSE candidate #21507 mergee 21/10 ; critere « # OK: seul fait rougir » couvert, 29 passed au marqueur
    21574 non CLOSE candidate #21675 mergee 30/10, refonte sur rendu calcule Playwright
    21762 non (partition d'audit de serie) KEEP + followup #22945 mergee (CB-07) alors que la checklist porte une case non cochee (CausalBridges-01) — conteneur de serie, ne ferme pas sur une tranche
    21870 non CLOSE candidate #21902 et #23647 mergees ; critere « re-archivage ou downgrade » tranche par le marqueur du 31/10 (archive complete existante)
    21958 oui (Epic Origami #19898, Pli 6) KEEP + followup trois tranches servies (#21962, #22025, #22383 toutes mergees) — EPIC, fermeture = arbitrage, pas un dossier
    22181 non KEEP + followup marqueur couvre 3 carnets (QC-Py-32/33/34) sur un critere de fermeture qui mesure 27 carnets a 0 sur main
    22381 non CLOSE candidate [consolidation][DEEP] ; #22391 et #22686 mergees, scope initial livre (module OR-Tools CP-SAT natif)
    22498 non (sous-grain de l'EPIC #1210) KEEP (en vol) marqueur t6a seul, sf#106 OPEN ; t6b/t6c sans marqueur
    22630 non KEEP (marqueur mal attribue) #22677 mergee mais porte un autre sujet (PRs de fork sans tag Grain) ; commentaire du 27/10 : cibles non atteintes
    22735 non hors perimetre (lane de ma machine) faits : #22796 mergee 31/10, titre identique au grain (8 suites pytest orphelines cablees) — verdict non rendu
    22834 non hors perimetre (lane de ma machine) faits : #23244 mergee 31/10, #22856 fermee sans merge — verdict non rendu
    22983 non KEEP, requalifier aucun marqueur reel : 6 occurrences en milieu de phrase, 0 en prefixe de ligne — faux positif de l'instrument
    23089 non CLOSE candidate #23110 mergee 30/10 ; critere --queue sur ai-01 laisse is-shallow-repository a false
    23140 non hors perimetre (lane de ma machine) faits : #23159 mergee 31/10 (Complexity-03e, 9 code executees, 0 erreur), article archive et lu avant redaction — verdict non rendu
    23217 non hors perimetre (lane de ma machine) faits : #23243 mergee 31/10 06:10, critere verifiable au grep (« 70 mappages » ne rend plus rien sur main) — verdict non rendu
    23328 non CLOSE candidate #23333 mergee 30/10 ; docstring + cellule 0 + README portent les valeurs du backtest QC Cloud
    23443 non hors perimetre (lane de ma machine) faits : 7 marqueurs, 5 PRs mergees ; residu nomme par defaut : SL-5-InverseResolution et EML-NAND-Explore sans marqueur ni report (le tableau du body en liste 9, le marqueur en compte 8) — verdict non rendu
    23634 non KEEP (en vol) marqueur du 31/10 mais #23744 OPEN — rien n'est verifiable sur main
    23712 non KEEP (en vol) marqueur du 31/10 mais #23785 OPEN

    Sous-total B : 20 lignes, dont 5 hors perimetre d'attestation (22834, 22735, 23217, 23140, 23443 — lanes de ma machine). Sur les 15 attestables : 6 CLOSE candidates, 9 KEEP (dont 3 en vol, 1 faux positif de marqueur, 1 EPIC).

    Verdicts — sous-echantillon A (20 issues, tirage impairs)

    Issue EPIC Verdict Fait decisif
    2874 oui (Knot Theory Lean) KEEP + followup 9 marqueurs ; criteres non coches : sorry restant 1 sur Knots/Invariant.lean, et la construction de Conway/Kinoshita-Terasaka par mutation reste ouverte (#20810 CLOSED sans merge, #21138 OPEN)
    10643 oui (multiplateforme) KEEP + followup 5 marqueurs tous merges, mais l'acceptance globale a 5 cases ouvertes — dont « executer chaque famille sans adapter un script a la main »
    13106 oui (digestion mathematiques) KEEP + followup 13 cases sur 14 tiennent (re-mesure du 28/10) ; la seule ouverte n'est pas actionnable par une lane — fermeture = arbitrage
    14499 non hors perimetre (lane de ma machine) faits : 4 marqueurs, #20508 et #23197 mergees, « rien ne reste lane-side sur les points » — verdict non rendu
    15157 non KEEP, requalifier aucun marqueur reel (1 occurrence en milieu de ligne) ; le critere 3 « retire » n'est pas solde selon ai-01 lui-meme ; 4 corrections proposees sans section d'acceptation
    16682 non CLOSE candidate #16721 et #21796 mergees ; section 4, la seule restante, satisfaite sur l'artefact ([INFO] du 25/10)
    17315 non KEEP (arbitrage user) aucun marqueur reel ; le levier 4 — partitionner les buckets par compte — exige un arbitrage user, nomme ouvert le 30/10
    17558 non KEEP + followup 3 phases mergees ; la phase 6 (aucune valeur de SECRET_KEYS au repos dans les .env de services) reste la condition de sortie ; derniere bascule reportee sur preuve mesuree
    17883 non hors perimetre (lane de ma machine) faits : 5 tranches mergees (18243, 18278, 20506, 22493, 22766) ; les tranches 3 et 4 ne portent aucun marqueur alors que la numerotation va de 1 a 7 — verdict non rendu
    18225 non hors perimetre (lane de ma machine) faits : #22760 mergee (garde mirror + gc.auto 0) ; issue de diagnostic, pas de section d'acceptation a solder — verdict non rendu
    18776 non KEEP (en vol) aucun marqueur reel ; 4 cases d'acceptance non cochees ; dernier geste est un claim d'ai-01 (26/10) sur la mesure de variance 5 graines
    19297 oui (finition de serie) KEEP + followup 3 carnets livres (23639, 23640, 23645) ; conteneur de serie — ne ferme pas sur une tranche, les criteres de sortie valent pour la serie entiere
    19494 non hors perimetre (lane de ma machine) faits : #21878 mergee, les 3 carnets du plan de croissance livres ([INFO] du 28/10), pas de section d'acceptation — verdict non rendu
    20035 non CLOSE candidate #20956 et #23393 mergees ; les trois points du body traites, taux de faux positifs mesure avant/apres
    20211 non CLOSE candidate aucun marqueur reel — l'instrument a matche une prose ; livraison portee par un [INFO] candidate-delivered et #20212 MERGED
    20300 non KEEP + followup 17 marqueurs, 16 PRs mergees ; residu nomme : ICT-16 laisse le critere 3 A INSTRUMENTER
    20463 non KEEP + followup seul marqueur = PR markdown seul (#21863) alors que l'acceptance reclame des verdicts chiffres H1-H5 et un carnet execute avec >= 4 graines
    20844 non KEEP + followup 3 tranches mergees ; criteres de sortie : A cochee, B/C/D/E ouvertes — tranche B claimee par po-2027, residuel D (~67 intros) et E nommes
    21016 non CLOSE candidate aucun marqueur reel ; le critere de cloture (registre et jambe concordent, prouve par test) est livre par #21023 MERGED + 6 tests au [INFO] du 25/10
    21146 non CLOSE candidate #21227 et #22317 mergees ; les trois points traites, verdict C.4 CAUSE_DOCUMENTED_ONLY ecrit, carnet re-execute

    Sous-total A : 20 lignes, dont 4 hors perimetre d'attestation (14499, 17883, 18225, 19494). Sur les 16 attestables : 5 CLOSE candidates, 11 KEEP (dont 4 EPICs et 3 issues a zero marqueur reel : 15157, 17315, 18776).

    Perimetre d'attestation — 9 issues ecartees du ratio

    Le protocole interdit au secretariat d'attester une issue portee par une lane de sa propre machine : une meme machine n'est pas une verification tierce. Neuf des 40 portent un marqueur, ou la livraison, d'une lane myia-po-2028:* :

    Issue Lane porteuse Statut
    14499 myia-po-2028:CoursIA (2 marqueurs sur 4) faits reportes, verdict non rendu
    17883 myia-po-2028:CoursIA (#22493) et :CoursIA-2 (#22766) idem
    18225 myia-po-2028:CoursIA idem
    19494 myia-po-2028:CoursIA idem
    22735 myia-po-2028:CoursIA-2 idem
    22834 myia-po-2028:CoursIA (les deux marqueurs) idem
    23140 myia-po-2028:CoursIA idem
    23217 myia-po-2028:CoursIA-2 idem
    23443 myia-po-2028:CoursIA-2 (2 marqueurs sur 7) idem

    Faits sur ces neuf, sans verdict : 14499, 17883, 18225, 19494, 22735, 23217, 23140 et 23443 citent au moins une PR mergee ; 22834 cite #23244 mergee (#22856 fermee sans merge). Les ratios ci-dessous portent donc sur 31 issues attestables, et les comptes bruts sur 40.

    Ce que le tirage dit

    Mesure Tranche 2b (45 plus anciennes de S2) Tranche 2c (40 tirees dans S2 prive de S1)
    Part d'EPICs ou sous-grains 28/45 = 62 % 6/40 = 15 % (5 EPICs nommes : 21958, 2874, 10643, 13106, 19297 ; + 1 sous-grain : 22498)
    Issues sans marqueur reel (bruit de prose) 6/45 = 13 % 6/40 = 15 %
    CLOSE candidates (compte brut) 6/45 = 13 % 18/40 = 45 %
    CLOSE candidates (attestables) — 11/31 = 35 %
    1. Le bruit de l'instrument se reproduit : 13 % puis 15 % sur deux echantillons independants. Un marqueur cherche par sous-chaine surestime donc la population d'environ un septieme, et le plancher documente (7 faux negatifs nommes) ne le compense qu'en partie.
    2. Ce bruit va dans les deux sens : sur les 6 issues a zero marqueur reel, 2 sont reellement livrees (20211 et 21016, PR mergee + [INFO]) et 4 ne le sont pas a ce jour — 15157 (critere non solde), 17315 (arbitrage user requis), 18776 (claim en cours), 22983 (aucune PR). Une recherche par marqueur ne dit donc ni « livree » ni « non livree » : elle dit « a lire ».
    3. Le complement non instruit est fait de travail concret, pas de parapluies : 15 % d'EPICs contre 62 % dans les plus anciennes. Les EPICs sont massivement deja dans S1 (dossier pose) ; ce qui reste sans instruction, c'est de l'issue-unitaire livrable et fermable.
    4. Le levier le plus court est donc S2 prive de S1 : 35 % de CLOSE candidates chez les attestables, contre 13 % sur les plus anciennes. Sur 454 issues de ce complement, cela suggere un ordre de grandeur d'une centaine de fermetures instruisibles — estimation, pas mesure : elle vient d'un echantillon de 31 verdicts attestables.
    5. Trois KEEP portent une condition non soldee qui ne se voit pas au marqueur : 17558 (phase 6, secrets au repos), 20463 (acceptance chiffree contre une PR markdown seule), 10643/2874/13106/19297 (EPICs dont les cases ouvertes sont nommees). C'est exactement ce que la lecture G.9 ajoute au crible mecanique.

    Suite proposee

    • 2d : les 11 CLOSE candidates attestables de ce tirage passent en dossiers [CLOSURE PREFLIGHT] unitaires (instruction issue par issue, jamais sur la strate) — l'adjoint titulaire ferme apres lecture ;
    • 2e : les 9 issues hors perimetre d'attestation sont nommees ici pour qu'une lane d'une autre machine les instruise ;
    • S1 (72 dossiers deja poses) reste la file de fraicheur : son tri se rend par python scripts/check_closure_dossier.py <N>, issue par issue.
  9. added a commit that references this issue on Oct 31, 2026
  10. jsboige commented on Nov 1, 2026

    @jsboige
    Owner

    [INFO] lane myia-ai-01:CoursIA — le balayage candidate-delivered est en panne depuis le 2026-10-29 : c'est l'organe qui alimente l'urne, et il ne tourne plus.

    Mesure (2026-11-01, ~21:50Z) :

    Run planifié Conclusion
    2026-10-28T11:35Z success
    2026-10-29T11:43Z failure
    2026-10-30T11:35Z failure
    2026-10-31T11:10Z failure
    2026-11-01T11:59Z failure (run 41304329435)

    Cause, lue dans le log du run 41304329435 :

    File ".../scripts/candidate_delivered.py", line 133, in <module>
        from pick_idle_grain import _released_covers_acceptance
    ModuleNotFoundError: No module named 'pick_idle_grain'
    

    candidate_delivered.py importe ce prédicat depuis #22896 (mergée le 28/10). Or le job ne récupère que trois fichiers (sparse-checkout : le workflow, candidate_delivered.py, issue_containers.py). Ajouter pick_idle_grain.py à la liste ne suffit pas : ce module importe au niveau supérieur series_saturation, grain_tag, gh_payload_cache, variation_light_cap et check_run_state, et en aval gh_identity, fetch_merged_prs_since, etc. Mesuré en local en recopiant des sous-ensembles : chaque ajout fait apparaître le module manquant suivant.

    Correctif proposé (le claim de myia-ai-01:CoursIA-2 couvre déjà ces chemins) : sortir _released_covers_acceptance et ses regex (_RELEASED_HEADER_RE, _COVERAGE_NEGATED_RE, _COVERAGE_MOTIF_RE, _SCOPE_NOUN_RE, _LANE_SCOPED_RE, _clause_window, _strip_accents) dans un petit module sans dépendance. Les deux organes l'importent, et le module rejoint la liste du sparse-checkout. Les tests existants (test_pick_released_signal.py, test_candidate_delivered.py) doivent rester verts. Ajouter un test qui importe candidate_delivered depuis un répertoire ne contenant que les fichiers du sparse-checkout, pour que la prochaine dérive rougisse en CI et pas en silence au cron.

    Conséquence sur l'urne : check_closure_dossier.py --sweep ne contrôle que les issues étiquetées. Avec 2 étiquettes sur 665 issues ouvertes, la voie automatique de fermeture n'a plus d'entrée depuis quatre jours.

  11. jsboige commented on Nov 1, 2026

    @jsboige
    Owner

    [CLAIMED-AMEND] lane myia-ai-01:CoursIA-2 -- paths: scripts/candidate_delivered.py, scripts/pick_idle_grain.py, scripts/released_covers.py, scripts/tests/test_candidate_delivered.py, scripts/tests/test_pick_released_signal.py, scripts/tests/test_candidate_delivered_sparse_import.py, .github/workflows/candidate-delivered-advisory.yml

    Amend sur dispatch c2751 (msg-20261101T215504-77up65) : le balayage candidate-delivered est en panne depuis le 29/10 (ModuleNotFoundError: No module named 'pick_idle_grain', commentaire 6564437892). Nouvelle tranche : extraction du predicat _released_covers_acceptance dans un module sans dependance, importe par les deux organes, ajoute au sparse-checkout, avec test d'import depuis un repertoire reduit aux seuls fichiers du sparse-checkout.

  12. jsboige commented on Nov 1, 2026

    @jsboige
    Owner

    [DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #24082 -- paths: scripts/released_covers.py, scripts/candidate_delivered.py, scripts/pick_idle_grain.py, scripts/tests/test_candidate_delivered_sparse_import.py, .github/workflows/candidate-delivered-advisory.yml

    Tranche sparse-checkout du dispatch c2751 (msg-20261101T215504-77up65), les trois gestes demandes :

    1. _released_covers_acceptance et ses regex/helpers extraits dans scripts/released_covers.py, module sans dependance (re + unicodedata). pick_idle_grain le reexporte -- la sonde pleine et test_pick_released_signal.py importent ces noms depuis lui, inchanges.
    2. Ajoute au sparse-checkout du workflow : +1 ligne, diff octet pour octet.
    3. Test qui importe candidate_delivered depuis un repertoire reduit aux seuls fichiers lus dans le bloc sparse-checkout du workflow (liste jamais recopiee a la main). Controle negatif mesure : l'ancien import restaure dans le meme harnais rend bien No module named 'pick_idle_grain'.

    Validation : 76 passed (test_candidate_delivered_sparse_import 2 + test_pick_released_signal 12 + test_candidate_delivered 62, les deux derniers sans modification). Preuves dans le body de la PR.

    Apres merge : workflow_dispatch pour relancer l'etiquetage sans attendre le cron de 05:37Z (annonce comme geste coordinateur).

  13. added a commit that references this issue on Nov 2, 2026
  14. added 3 commits that reference this issue on Nov 2, 2026
  15. added a commit that references this issue on Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions