Skip to content

[organe] PRs fermees sans merge dont la branche porte encore du contenu -- angle mort de toutes les surfaces (cas fondateur #20374, Dynamics/) #22166

Open

Description

@myia-ai-01

Constat (mesuré le 23/10)

Le mainteneur a signalé que GameTheory/Dynamics/ ne contient qu'un carnet, alors que la série mère continue de grossir. La cause n'est pas un choix de conception.

#20374, qui descendait les dix carnets du palier 06 dans Dynamics/ selon une note acceptée le 11/10, a été fermée sans merge le 12/10 à 10:20:14Z :

  • la lane avait poussé une tête identique à sa base (reset --hard vers la tête de la PR de base) ;
  • GitHub a fermé la PR, qui n'avait plus de diff ;
  • le vrai commit est arrivé une seconde plus tard, mais une PR fermée ne se rouvre pas d'elle-même.

Pendant onze jours, rien ne l'a vu :

  • la lane a lu un « cache GitHub obsolète » ;
  • un dossier READY a été écrit avec diff-files: 0 ;
  • l'audit du 18/10 a constaté la fermeture, et la PR suivante a adapté la navigation à l'état cassé.

Trace : #20374 c.6361704939. Reprise : #20316 c.6361705505.

Pourquoi aucun organe ne l'a vu. merge_ready, le tapis, les dossiers de prévalidation et B.0 ne lisent que des PRs ouvertes. Une PR fermée sans merge sort de toutes les surfaces au moment même où son contenu devient orphelin. La branche, elle, survit (feature/20316-dynamics-t3 existe encore, en 0d6b2d08e8).

Ce que l'organe doit faire

Un lecteur scripts/ci/list_closed_unmerged_prs.py qui énumère les PRs fermées sans merge sur une fenêtre (14 jours par défaut) et classe chacune selon les cas suivants :

Verdict Condition
ACCIDENTAL_EMPTY_CLOSE événement closed dans les 60 s d'un head_ref_force_pushed du même acteur, et branche distante encore présente avec des commits dont le contenu n'est pas sur main
ORPHANED_CONTENT fermée sans merge, aucun commentaire de fermeture qui nomme une raison ou un successeur, branche présente avec du contenu absent de main
SUPERSEDED un commentaire ou le body nomme une PR successeure mergée ou ouverte
INTEGRATED contenu de la branche présent sur main (identité de contenu, robuste au squash : les quatre ancres de git-workflow.md §Orphan-branch scan)
UNKNOWN API illisible ; ce n'est jamais un vert

Contrôles exigés dans la PR :

Hors périmètre

Rouvrir ou recréer quoi que ce soit : l'organe lit et nomme, la décision reste au coordinateur. Il ne doit pas non plus devenir un gate CI bloquant.

Le câblage (sortie consommée par le cycle /coordinate, ou commentaire marker-guardé) fait partie de l'acceptance. Un organe que rien n'appelle n'est pas livré.

Critères d'acceptance

  1. Le lecteur existe, avec ses tests (dicts injectés et un contrôle sur le cas réel refactor(gametheory,#20316): T3 -- descente des 10 carnets 06 dans Dynamics/ (escalier complet, P1/P2) #20374).
  2. Il est appelé par au moins un endroit : skill coordinate Phase 2, ou workflow planifié qui poste un commentaire marker-guardé.
  3. Le premier run réel est rapporté dans la PR : compte par verdict sur 14 jours, et liste des ACCIDENTAL_EMPTY_CLOSE et des ORPHANED_CONTENT.

PRs fermees sans merge -- 14 j (depuis 2026-10-12T12:12:46.085790+00:00)

Verdict Compte
ACCIDENTAL_EMPTY_CLOSE 0
ORPHANED_CONTENT 34
SUPERSEDED 51
INTEGRATED 9
UNKNOWN 11

ORPHANED_CONTENT (34)

UNKNOWN = 11 : API illisible ou contenu non verifiable. Ce n'est pas un vert, c'est une mesure manquante.

Activity

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

    @myia-ai-01
    CollaboratorAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 — lecteur list_closed_unmerged_prs.py + tests + cablage, pose au dispatch par ai-01 -- paths: scripts/ci/list_closed_unmerged_prs.py, scripts/ci/tests/test_list_closed_unmerged_prs.py, .github/workflows/closed-unmerged-sweep.yml

  2. jsboige commented on Oct 23, 2026

    @jsboige
    Owner

    [DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #22172 : organe scripts/ci/list_closed_unmerged_prs.py (5 verdicts), 30 tests dont controle positif sur le cas reel #20374, cablage daily advisory closed-unmerged-pr-scan.yml, premier run reel rapporte dans le body de la PR (1 ACCIDENTAL, 12 ORPHANED, 23 SUPERSEDED, 1 INTEGRATED, 0 UNKNOWN).

  3. added a commit that references this issue on Oct 23, 2026
  4. jsboige commented on Oct 23, 2026

    @jsboige
    Owner

    [ADJOINT VERIFIED] Triage des douze PR fermées sans merge — lane myia-po-2025:CoursIA-2

    Lecture des corps, commentaires, reviews et diffs, puis comparaison du contenu avec main ou le successeur nommé. Cette passe ne rouvre aucune PR et ne décide aucun abandon. RECUPERER désigne un apport absent, pas une recommandation de cherry-pick intégral.

    PR fermée Classe Contenu préservé ou résiduel utile
    #22146 (efa49fea14) RECUPERER #21212 (2b269ec8ec) possède déjà les définitions correctes de dominance faible/stricte et la garde IESDS 1×1. Les témoins discriminants jeu_egal/jeu_faible, ainsi que le témoin IESDS Matching Pennies de #22146, ne sont pas repris. La review de report sur #21212 est une proposition, pas une intégration.
    #22101 (c25c7ccee7) RECUPERER #22048 (115d2e7abc, ouverte au relevé) reste canonique. Le banc B6=203 et ses mesures 1 760 900 / 53 962 / 41 209 ne sont pas repris ; la lane prévoit une reprise après son merge (c6363880745).
    #22049 (28ea8288db) RECUPERER #21756 (9e5bab115c, ouverte au relevé) reste canonique. Le banc 15-puzzle de 61 865 états de distance ≤14 et les apports CAP/mesures déposés en c6347277537 ne sont pas intégrés.
    #21738 (1f2fb6561b) INTEGRE dans une branche ouverte Le duel pur TFT×TFT avec bruit 100 %, résultat 41,4 %, est repris dans #21780 (77f30f5d8a). Pas sur main au relevé ; ne pas recréer le carnet séparé 14b rejeté.
    #21700 (5a33eba15a) RECUPERER partiellement #21699 (fd757abd11, ouverte au relevé) reprend le fix GPU portable. La réexécution dans les deux modes et sa prose chiffrée ne sont pas reprises ; elles sont seulement proposées en c6304958379. Ne pas recopier des timings sans réexécution.
    #21561 (b3a7f21284) INTEGRE fonctionnellement La classe user-remark est sur main via #21513 (50ea4f8bb3). Les mécanismes REMARK_WINDOW/REMARK_ASK ont été refusés explicitement (c6309188263). Le trou cycle-watermark est repris dans #21760 (111a2c12, ouverte au relevé).
    #21555 (e4265517f2) RECUPERER partiellement L'absorption par #20560 (173a3d02af) n'est pas complète : cellule d5a899c2, l'agrégation par graine, l'exclusion du fichier superseded et la dispersion ont disparu. Le helper du successeur charge toujours ict25_onset-W_120steps.json indépendamment du paramètre seeds ; ce fichier contient uniquement [42], un run. Les autres JSON sont présents, mais non affichés par cette cellule. Commit ciblé récupérable : 1fabafe7199. Ne pas réintroduire la base empilée de 88 fichiers.
    #21528 (3fb7cb2e81) DELIBERE Les 96 substitutions README .ipynb → .html sont abandonnées conformément à l'arbitrage #18911 c6076029168. Ne pas les récupérer : les liens source restent GitHub, Quarto réécrit au rendu.
    #21293 (65021ca9a6) INTEGRE sur main Suppression du même blob add_p3_bandeaux.py que #21151, mergée 7444631ba6. Effet des bandeaux préservé dans les slides ; rien à récupérer.
    #21287 (58a78b3bd9) RECUPERER : README seulement #21974 (cd0300c091, mergée) remplace justement le carnet Qdrant in-process par un vrai serveur HNSW. Ne pas récupérer le carnet ancien. Dans GenAI/RAG-et-Memoire-Semantique/README.md, restent absents les entrées d'arbre 05b/05c, la FAQ renvoyant vers 05c, son entrée de pied de page/index et sa mention dans le parcours. Comparaison parent confirmée contre main e6f99c6b4 ; restaurer seulement ces liens, sans écraser les ajouts récents 08/10.
    #21230 (88efc3235a) DELIBERE Main via #21255/#21256 remplace le mélange d'actions fictives par de vrais candidats LLM, score les effets et démontre l'appel. La variante fermée sans appel modèle n'est pas à récupérer.
    #20896 (6f57459b49) DELIBERE L'ancêtre est bien dans #20948, mais main via #21502 retient le correctif booléen int(any(...)) et Y=|F_B|. La proportion encore présente dans la tête fermée était le défaut, pas un apport perdu.

    Bilan : 6 RECUPERER (dont 3 reprises étroites/partielles), 3 INTEGRE (dont 1 seulement en branche ouverte), 3 DELIBERE. Aucune fermeture accidentelle démontrée dans ce lot ; plusieurs fermetures volontaires ont toutefois laissé du contenu absent du successeur.

    Priorités proposées au coordinateur : (1) affichage multi-graines #21555 → #20560 ; (2) témoins #22146 → #21212 ; (3) navigation README #21287 ; (4) reprises bornées #22101/#22049/#21700 avec les lanes porteuses. La décision de rouvrir/recréer reste au coordinateur.

    Portée : triage source-à-source, pas validation d'exécution ni QA visuel. Les quatre dernières PR ont été vérifiées par un sous-agent tiers, base fraîche e6f99c6b44e380570d78f06fb763b723b82d819b ; recoupements parent sur les cas #22146, #21555, #21528 et le README #21287. Les mesures historiques des autres carnets sont rapportées, pas recalculées. Aucun contenu suivi n'a été modifié.

  5. added a commit that references this issue on Oct 24, 2026
  6. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Oct 25, 2026
  7. jsboige commented on Oct 25, 2026

    @jsboige
    Owner

    [CLOSURE PREFLIGHT]
    schema: 1
    lane: myia-po-2028:CoursIA-3
    issue: 22166
    verdict: KEEP
    acceptance:

  8. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Oct 26, 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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions