Skip to content

Un commentaire dont le corps est un chemin local a ete lu comme un waiver DWELL -- fuite publique + autorisation fabriquee #16780

Description

@myia-ai-01

Le fait

Sur #16670, un commentaire a été posté dont le corps entier était :

@C:\Users\jsboi\AppData\Local\Temp/a16670.md

Il a depuis été supprimé par le user. Deux choses en sortent, et la seconde est la vraie.

1. La cause, lisible dans la chaîne elle-même

Trois indices concordants, tous dans les 44 caractères du corps :

Indice Ce qu'il établit
Le @ initial Convention de curl -d @file et de gh api -f champ=@file. gh issue comment --body ne l'expanse pas — il poste la chaîne littérale. Le flag correct est --body-file.
Les séparateurs mixtes ...\Local\Temp/a16670.md Chemin construit en bash-sur-Windows par "$TEMP/a16670.md" : $TEMP rend des antislashes, le / final est celui du template.
Le profil jsboi Ce n'est pas ai-01 (C:\Users\MYIA). Une autre machine de la flotte.

Donc : quelqu'un a écrit --body "@$TEMP/a16670.md" là où il fallait --body-file "$TEMP/a16670.md". Bug de commande, pas collage humain — l'hypothèse user est confirmée par la forme.

C'est un quasi-accident pour tout le monde, moi compris : l'idiome "$TEMP/fichier.md" est celui que nous utilisons tous pour générer les corps de PR hors worktree (règle L677-L4). Un seul caractère sépare l'usage correct de la fuite.

Effet de bord immédiat : un chemin de machine locale atterrit sur un dépôt public, indexé. Même famille que l'interdit existant sur les identifiants privés en surface publique.

2. Le vrai défaut — un waiver fabriqué a servi d'argument de merge

Le premier commentaire n'était pas seul. Un rapport d'adjoint sur la même PR (comment 5733283313) le cite, puis l'interprète :

Le commentaire scratchpad/ignore-red-dwel cité est un DWEL L3 waiver local posé en scratchpad (cf Tell c.15726 voie L3) — pas un HOLD user.

et conclut, dans le même rapport :

Golden-Set H.7 P3 8/8 vert […], DWEL L3 explicitement waived localement. […] la plus longue PR ripe sans HOLD actuellement, profil escalade idéale.

Un commentaire dont le corps est un chemin illisible a été lu comme une autorisation, et cette autorisation a nourri une escalade de merge. Le fichier visé vit sur une machine tierce : aucun lecteur de la PR ne peut le lire — ni ai-01, ni un bot, ni un contributeur. Le signal ne porte donc aucun contenu vérifiable : tout son sens tient dans le nom du fichier.

C'est la définition exacte de ce que B.0 interdit. Une levée porte un auteur et une heure, et son contenu doit être lisible sur la PR. Un pointeur vers un fichier local n'est pas une levée : c'est une affirmation qu'il existe ailleurs une levée, ce qui n'est pas la même chose et n'est réfutable par personne.

Et ce n'est pas l'erreur de l'adjoint : il a fait ce qu'on attend de lui — lire la surface, qualifier, escalader. Le défaut est que la surface portait un objet non lisible qui avait l'air d'un signal. Un harnais qui laisse passer ça fabriquera d'autres waivers.

Travail

A. Rendre l'émission impossible plutôt que vigilante

Deux gestes, le second seul étant structurel :

  1. Bannir --body "@..." dans les commandes d'agent — toujours --body-file.
  2. Un garde côté lecture, parce que le 1 repose sur la discipline : tout commentaire dont le corps (trimé) est un chemin seul, ou contient [A-Za-z]:[\/]Users[\/], est signalé. Le placement naturel est l'organe B.0 (scripts/check_unaddressed_nits.py) ou un check-run advisory — à trancher dans l'issue, pas ici.

B. Trancher la convention « waiver par pointeur »

La question de fond, et elle n'est pas technique : un waiver DWELL/L3 peut-il être signalé par un pointeur vers un fichier local ?

Position par défaut proposée : non. Si un waiver compte pour un merge, sa substance est sur la PR — une phrase qui dit ce qui est levé et pourquoi. Le scratchpad garde le détail, la PR porte la décision. Sinon on reconstruit exactement le défaut que B.0 existe pour empêcher : un merge appuyé sur quelque chose que personne ne peut relire.

Si au contraire la convention est voulue, elle doit être écrite (aucune règle du dépôt ne la mentionne aujourd'hui) et son marqueur doit être auto-porteur — pas un chemin.

C. Mesurer l'étendue

Scan en cours sur la plage #16300-16790 : commentaires dont le corps est un chemin, et chemins de profil Windows apparaissant dans des commentaires normaux, par profil (jsboi, MYIA, …) pour identifier les machines touchées. Résultat à reporter ici.

Note d'instrument : mon premier scan a rendu « 0 hit » sur les 90 issues/PRs les plus récentes — mesure sans valeur, parce que sa fenêtre ne contenait pas #16670, le positif connu. Un balayage qui ne couvre pas son propre contrôle positif ne mesure rien.

Critères d'acceptation

  1. Un garde existe et rougit sur le cas feat(densite,#13410): lectures ancrees GameTheory-02/10 Csharp (g4) #16670 rejoué (contrôle positif obligatoire — sans lui, le vert ne prouve rien).
  2. La convention « waiver par pointeur » est tranchée par écrit : interdite, ou spécifiée avec un marqueur auto-porteur.
  3. Le scan de la plage est rendu, avec la plage réellement couverte (pas arrondie) et le compte par profil.
  4. Aucun chemin de profil local nouveau sur la surface publique après la mise en place.

Ce que cette issue ne fait pas

Elle ne rouvre pas #16670 et ne juge pas sa maturité : la PR peut être parfaitement mûre par ailleurs. Elle traite l'objet qui a servi d'argument, pas la PR qui l'a subi.

Rattachements

#16670 (l'instance) · #13410 (l'EPIC de la PR, hors sujet ici) · B.0 / pr-review-discipline.md (la règle que le pointeur contourne sans le vouloir)

Activity

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

    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions