Développer avec l’IA : garder une fonctionnalité modifiable
Un filtre par statut puis par propriétaire montre comment conserver les règles métier et les tests à côté du code généré.
Écrire la règle avant la première génération
Le besoin de démonstration est limité : filtrer des demandes par statut, avec tous les résultats lorsque le filtre est absent. Les données sont fictives. Le code des deux étapes a été produit par Codex lors de la préparation des 19 et 20 octobre 2026 ; aucun autre agent ni compte commercial n’a été utilisé.
La version précise du modèle n’est pas exposée dans le support et les réglages ne constituent pas un protocole comparatif. L’objectif est de conserver un changement que l’on peut rejouer, pas d’évaluer un modèle ni de mesurer un gain de temps.
Un brief court qui fixe les invariants
Ajouter un filtre par statut à une liste de demandes.
Si le statut est absent, retourner toutes les demandes.
Ne pas modifier les lignes d’entrée.
Conserver une fonction pure et les cas de test.
Ne pas ajouter de dépendance.export function filterRequests(rows, status) {
return status === undefined
? rows
: rows.filter(row => row.status === status);
}La première vérification utilise trois demandes, dont deux ouvertes. Les cas statut ouvert et filtre absent ont réussi sous Node.js 24.13.0. Le contrat retient undefined comme absence ; une chaîne vide ne reçoit pas implicitement ce sens.
Ajouter un propriétaire sans perdre la première règle
Ajouter un propriétaire facultatif.
Combiner les deux critères avec ET lorsqu’ils sont présents.
Préserver le comportement du filtre de statut absent.
Vérifier aussi un résultat vide.La seconde version conserve la sélection par statut et combine le propriétaire dans le prédicat. Le support vérifie un propriétaire avec statut, le propriétaire seul, l’absence de correspondance et le comportement existant. Toutes ces assertions ont réussi. Aucune correction manuelle après échec n’a été nécessaire dans ce petit essai.
Lire la règle combinée et ses limites
return rows.filter(row =>
(status === undefined || row.status === status) &&
(owner === undefined || row.owner === owner)
);Le propriétaire et le statut se combinent dans le même prédicat. Une demande ne passe que si elle satisfait chaque critère présent. La vérification d’un résultat vide empêche de remplacer une absence de correspondance par la liste complète.
Conserver ce que le prochain changement doit savoir
- Décision : critères combinés avec ET ; absence exprimée par undefined.
- Frontière : fonction pure, aucun accès réseau, identifiants de propriétaire fictifs.
- Preuves : commandes, données et assertions des deux étapes.
- Limites : aucune pagination, autorisation ni persistance examinée.
Les fichiers stage-1.mjs, stage-2.mjs et run.mjs gardent les deux états dans le laboratoire lié dans les sources. La personne qui reprend le travail peut donc retrouver le besoin sans reconstituer une conversation. Pour un filtre réel, l’autorisation des données se vérifie séparément côté serveur ; une fonction de sélection n’en fournit aucune garantie.