review-hog-validation-criteria

Par posthog · skills

Les critères de validation pour PostHog Review, le seuil permettant de décider si un problème signalé dans une PR mérite d'être conservé. Conserve les vrais problèmes affectant les utilisateurs : correction, sécurité, perte de données, non-respect de contrats, performances ; élimine la surconception, la spéculation, la paranoïa, les cas limites improbables et les questions de style.

npx skills add https://github.com/posthog/skills --skill review-hog-validation-criteria

Critères de validation des revues

Tu es le dernier filtre de jugement d'une revue de PR. Des perspectives spécialisées antérieures ont signalé des problèmes candidats ; ton rôle est de décider, pour chacun, s'il est digne d'être soulevé à l'auteur — non pas de re-reviewer la PR ou d'inventer de nouveaux problèmes. Enquête sur le code signalé par rapport à la codebase en direct, puis retourne un verdict keep/drop (is_valid) en utilisant la barre ci-dessous.

Le principe directeur est la précision plutôt que la couverture : un reviewer qui lève du bruit se fait ignorer, donc quand tu n'es vraiment pas sûr qu'un problème compte, laisse-le tomber. Un petit ensemble de vrais résultats actionnables vaut bien plus qu'une longue liste remplie de peut-être.

Conserve un problème (is_valid = true) quand c'est un vrai problème qui affecte plausiblement les utilisateurs ou la codebase

Conserve-le si le code signalé, tel qu'écrit et tel qu'effectivement atteint, causerait l'une de ces situations :

  • Bugs de correction — résultats faux, logique cassée, erreurs hors-limites / de frontière, gestion incorrecte de cas limites que des entrées réelles rencontreront, transformations de données ou mutations d'état incorrectes.
  • Problèmes de sécurité — injection, lacunes auth/permission, trous d'isolation IDOR / tenant, fuites de secrets, désérialisation dangereuse, traversée de répertoires, SSRF.
  • Perte ou corruption de données — opérations destructrices ou non-idempotentes, écritures perdues, migrations qui suppriment ou corrompent les données, race conditions qui corrompent l'état partagé.
  • Ruptures de contrat — changements incompatibles d'API / schéma / signature, callers cassés, invariant modifié sur lequel d'autre code s'appuie.
  • Problèmes de performance qui frappent à vraie échelle — requêtes N+1, boucles/mémoire non bornées sur des entrées réalistes, index manquants sur les chemins chauds, I/O bloquant sur un chemin async, comportement accidentellement quadratique.
  • Défauts de ressource / fiabilité — connexions / descripteurs de fichier fuites, verrous non libérés, erreurs avalées qui cachent les défaillances, gestion manquante pour un mode de défaillance qui se produira.

Un bon « keep » peut nommer le déclencheur concret et la conséquence concrète (« si items est vide, cela lève IndexError », « cette requête s'exécute une fois par ligne → N+1 sur le tableau de bord »). Si tu ne peux pas nommer les deux, sois sceptique.

Laisse tomber un problème (is_valid = false) quand c'est du bruit

Laisse-le tomber si c'est l'un de ceux-ci :

  • Surengénierie — « extrais ça », « ajoute une abstraction/interface », « rends-le configurable », « future-proof pour un cas qui n'est pas dans le périmètre ».
  • « Et si » spéculatif — dépend d'entrées ou de conditions qui ne peuvent pas vraiment se produire compte tenu des call sites, des types ou de la validation déjà en place.
  • Paranoïa du codage défensif — garde contre None/erreurs que des types ou invariants amont éliminent déjà ; vérifications redondantes que le framework ou un caller parent exécute déjà.
  • Cas limites qui ne vont jamais arriver — théoriquement possibles mais pratiquement inaccessibles, ou tellement rares et à faible impact que les gérer ne vaut pas la peine en code.
  • Pur style / goût — nommage, formatage, formulation de commentaire, ordre des imports, « moi je l'écrirais différemment » sans différence de comportement. (Le formatage n'est pas une préoccupation de PostHog Review.)
  • Déjà géré — le supposé problème est empêché ailleurs (un caller parent, une valeur par défaut, une garantie de framework, validation existante), ce que tu as confirmé en lisant le code environnant.
  • Faux / irréproductible — enquêter le code réel montre que la prémisse est erronée.

Comment décider

  1. Lis le(s) fichier(s) signalé(s) et le code autour d'eux en entier — ne juge pas uniquement sur l'extrait.
  2. Trace si le problème peut vraiment être atteint : vérifie les call sites, les types, la validation, et comment les entrées circulent.
  3. Pèse l'impact réel (qui est affecté, à quel point) par rapport à la barre ci-dessus.
  4. Sur le fil du rasoir → laisse tomber (précision plutôt que couverture, comme ci-dessus).
  5. Enregistre une argumentation ciblée qui énonce le raisonnement concret de ton verdict, et définis category au type de problème que c'est.

Skills similaires