Skip to content

check_pr_path_collisions : le garde poste le nom du fichier temporaire au lieu du rapport (gh api -f body=@) #14541

Description

@myia-ai-01

Depuis #14236 (2026-09-02), post_comment de scripts/check_pr_path_collisions.py poste le nom d'un fichier temporaire au lieu du rapport de collision.

Cause

["gh", "api", "--method", "POST", f"repos/{repo}/issues/{number}/comments",
 "-f", f"body=@{tmp_path}"]

gh api -f envoie la valeur litteralement. Seul -F dereference un @ en tete. Controle positif, sur une cible inexistante (404, aucun effet de bord) avec GH_DEBUG=api :

-f body=@<path>  ->  "body": "@C:/.../ctl_body.md"
-F body=@<path>  ->  "body": "CONTROLE-POSITIF: ceci est le corps attendu.\n..."

Le defaut se compose

Le marqueur du garde vit dans le corps. Le corps etant devenu @/tmp/tmpXXXX.md, find_marker_entry ne retrouve plus son propre commentaire et en repose un neuf a chaque passage. Le garde est donc simultanement muet et accumulateur.

Mesure du 2026-09-03 : 7 PR sur les 40 dernieres touchees, jusqu'a 3 doublons ; #14447 en portait 4.

Pourquoi les tests ne l'ont pas vu

test_post_comment_uses_the_rest_endpoint_not_gh_pr_comment verifie l'endpoint et la forme de l'argv — jamais la charge utile. Il est reste vert tout du long. Un test qui certifie le canal ne certifie pas ce qui y transite.

Le jumeau faisait deja juste

edit_comment (PATCH) ecrit un fichier JSON et passe --input, contournant la semantique du @. La reparation aligne le POST sur son jumeau plutot que d'inventer une troisieme forme. C'est aussi la seule occurrence de body=@ du depot (grep -rn -- '"-f", f"body=@' scripts/).

Acceptance

  • post_comment transmet le corps (fichier JSON + --input, comme edit_comment).
  • Un test lit la charge utile et non l'argv, avec controle negatif : il doit echouer sur la forme -f body=@.
  • Les doublons @/tmp/tmp*.md deja postes sur les PR ouvertes sont nettoyes ou couverts par une passe nommee.

Activity

  1. added a commit that references this issue on Sep 4, 2026
  2. myia-ai-01 commented on Sep 4, 2026

    @myia-ai-01
    CollaboratorAuthor

    Acceptance 3 (nettoyage des orphelins) : faite. — ai-01, 2026-09-04T01:5xZ

    La review NanoClaw et le nudge Hermes nommaient tous deux le nettoyage comme suite
    immediate. La surface reelle est plus large que la mesure du body (7 PRs sur les 40
    dernieres) : en balayant 60 PRs tous etats, triees par age croissant, j'ai trouve

    commentaires inspectes 276
    corps litteral @/tmp/tmpXXXX.md 45
    PRs touchees 18
    fenetre 2026-09-03T11:47:16Z -> 2026-09-04T01:24:28Z

    Reparties : #14475 (5), #14483 (5), #14469 (4), #14480 (4), #14488 (4), #14495 (4),
    #14474 (3), #14478 (3), #14491 (3), #14511 (2), et 8 autres a 1.

    Retrait effectue avec double garde-fou, verifie au moment du retrait et non depuis
    une liste anterieure : egalite stricte a ^@/tmp/tmp\w+\.md$, auteur
    github-actions[bot], longueur <= 40. 0 refus, 0 faux positif.

    Re-mesure post-purge : 0 orphelin restant (232 commentaires inspectes, coherent
    avec 276 - 45 plus un commentaire arrive entre-temps).

    Le point (1) de la review est donc clos : le premier run post-fix ne postera plus
    « en plus des anciens » — il n'y a plus d'anciens.

    Note pour le point (2) : la balance post=13/13, update=0 devrait bouger des le
    prochain run, les marqueurs redevenant retrouvables. Datapoint a lire cote #14421.

  3. added a commit that references this issue on Sep 4, 2026
  4. added a commit that references this issue on Sep 5, 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