Checklist pour reviewer du code généré par IA (OpenCode, Claude Code, Cursor, etc.)
ai-generated sur la PR“Treat AI-generated code like junior developer work—helpful, but needs guidance.” — techdebt.best
Key differences reviewing AI code :
| Code humain | Code IA |
|---|---|
| Incohérences style = signature humaine | Style parfait peut masquer bugs |
| Typos dans comments = normal | Comments “too perfect” = peut être halluciné |
| Approche personnelle | Approche “standard” |
Le code est-il compréhensible ?
Le développeur peut-il expliquer ce code ?
Y a-t-il du code “magique” ?
# RED FLAG: Variable jamais utilisée mais générée
unused_var = get_something() # Hallucination?
# RED FLAG: API trop parfaite
result = api.get_user_posts(user_id) # Cette API existe vraiment?
# RED FLAG: Commentaire trop générique
# Get all users from database
def get_users(): # Quelque soit le projet, ce pattern apparaît
Pas de secrets en clair
# Pattern à détecter
API_KEY = "sk-..."
PASSWORD = "..."
SECRET = "..."
Pas de secrets dans la config
.env.example vs .env.env est dans .gitignoreLes APIs appelées existent vraiment
Pas d’imports suspects
# RED FLAG: Bibliothèque inventée
from magic_auth import validate_token # Ça existe?
Chaque nouvelle dépendance est nécessaire
Vérification sur le registry
npm view package / pip show packageLicense compatible
Pas de vulnérabilités connues
npm audit
pip-audit
cargo audit
// RED FLAG: Package typosquatted
{
"react-native": "^18.0.0", // Correct
"react-nativ": "^1.0.0" // Typosquatting!
}
Tests significatifs
expect(true).toBe(true)Edge cases couverts
Tests d’erreur
Coverage > 70% pour le nouveau code
pytest --cov --cov-report=term-missing
jest --coverage
Branches couvertes
# RED FLAG: Test qui ne teste rien
def test_function():
result = my_function()
assert result is not None # Trop vague
# GOOD: Test explicite
def test_function_returns_sum():
assert my_function(2, 3) == 5
assert my_function(-1, 1) == 0
assert my_function(0, 0) == 0
Pas de N+1 queries
# RED FLAG
for user in users:
posts = get_posts(user.id) # N queries!
# BETTER
posts = get_posts_batch([u.id for u in users])
Pas de boucles inutiles
Ressources libérées
Complexité temporelle acceptable
Complexité spatiale acceptable
Style cohérent avec le projet
Conventions AGENTS.md respectées
Pas de code commenté
# def old_function():
# ... # Supprimer!
Pas de variables inutilisées
Pas d’imports non utilisés
Fonctions complexes documentées
README à jour
Conditions correctes
# RED FLAG: Off-by-one
for i in range(len(items)): # vs range(len(items) - 1)
Types corrects
Mutation vs immutabilité
# HALLUCINATION: API n'existe pas
my_list.sort(reverse=True, key=lambda x: x.id) # OK
my_list.sort_ascending() # N'existe pas!
# HALLUCINATION: Logique incorrecte
if user.is_admin or user.is_moderator: # OK
if user.is_admin == True or user.is_moderator == True: # Redondant
Bash commands validées
rm -rf sans vérificationEdit commands applicées correctement
OBLIGATOIRE :
RECOMMANDÉ :
REJETER SI :
| Catégorie | Items | Critiques |
|---|---|---|
| Compréhension | 3 | ✅ Code compris |
| Sécurité | 5 | ✅ Pas de secrets |
| Dépendances | 4 | ✅ Vérifiées |
| Tests | 6 | ✅ Coverage > 70% |
| Performance | 5 | - |
| Style | 5 | - |
| Documentation | 5 | - |
| Logique | 5 | ✅ Pas d’hallucinations |
| OpenCode | 2 | - |
REVIEW RAPIDE CODE IA
═══════════════════════════════════════
1. COMPRÉHENSION → Demander explication
2. SÉCURITÉ → Pas de secrets
3. DÉPENDANCES → Vérifier existence
4. TESTS → Coverage > 70%
5. APIs → Vérifier documentation
RED FLAGS:
☠️ API non documentée
☠️ Variable jamais utilisée
☠️ Commentaire trop générique
☠️ Test qui ne teste rien
☠️ Dépendance suspecte
Checklist basée sur les retours de news.ycombinator.com et codeintelligently.com