Normes de développement
Les normes de développement (NDD) sont les règles de code de votre projet : une famille par langage, chaque règle avec son niveau et son « pourquoi ». Vous venez à ce parcours pour que l'agent sache quelles règles s'appliquent à une tâche, pour récupérer les normes d'un dépôt partagé, ou pour faire évoluer une règle.
Ce que vous demandez à l'agent
« Quelles normes s'appliquent à la tâche que tu vas faire dans codebase/api/ ? »
« Liste-moi toutes les règles Rust, avec leur texte. »
« Importe la norme Rust du module api depuis mon dépôt de normes. »
« Utilise ce dépôt de normes pour tous mes projets : git@exemple.org:moi/normes.git. »
« Mets à jour les normes de ce projet depuis le dépôt partagé. »
effortless_ndd_sync« Propose de rendre la règle RUST-12 de la norme rust obligatoire, parce que les erreurs avalées nous ont coûté cher : « Propager les erreurs — toute erreur est propagée ou journalisée. » »
effortless_ndd_amendment_proposefamily=rusttarget_id=RUST-12proposed_id=RUST-12level=OBLIGATOIREtitle=Propager les erreurswhy=Les erreurs avalées nous ont coûté cherbody=Toute erreur est propagée ou journalisée.
« J'accepte l'amendement AMD-03 que tu viens de proposer. »
« Rejette l'amendement AMD-03 : on ne veut pas de cette règle pour l'instant. »
effortless_ndd_amendment_rejectproposal_id=AMD-03reason=On ne veut pas de cette règle pour l’instant
Ce que fait l'agent
Savoir quelles normes s'appliquent
effortless_ndd_resolve: lecture seule. L'agent passestack(les familles à résoudre, nommées comme les dossiers de.ai/ndd/) oupath(un chemin du projet dont il dérive les familles). Sans l'un ni l'autre, il obtient tout le corpus connu.- Chaque règle revient qualifiée : identifiant, niveau (
OBLIGATOIRE,RECOMMANDÉouINTERDIT), titre, pourquoi, famille, origine, fichier et ligne. Le texte complet n'est servi que si l'agent passeinclude_body: true.
Importer une norme depuis un dépôt partagé
- L'adresse de la norme se déclare dans la stack, sous
languages[].ndd.source. Si elle manque ou doit changer, l'agent la corrige aveceffortless_stack_declare_languages(voir Code et stacks). effortless_ndd_importavecstack_idettechno(le langage, qui donne aussi le nom de la famille). Le verbe lit le fichier dans le dépôt pargit show, sans cloner ni récupérer le dépôt, et pose la norme héritée dans.ai/ndd/<famille>/<famille>-ndd.v1.heritee.md, avec un fichier de provenance (dépôt, référence, date).- Si la référence git est introuvable, l'import ne casse rien : la réponse porte
available: falseavec la raison, et aucun fichier n'est posé.
Suivre un dépôt de normes partagé
effortless_ndd_sourcedéclare la source globale : un dossier local ou une URL git, avecreferencepour une branche ou un tag. Sanssource, il lit la source actuelle ; avec une chaîne vide, il la retire. Un projet peut la surcharger parsettings.ndd_sourcedans soneffortless.json.effortless_ndd_syncmet à jour les normes héritées du projet pour chaque langage présent (stacks déclarées, familles déjà là, et la familleagnostic). Il rend les familles mises à jour, inchangées, et celles que le dépôt ne porte pas. Il ne touche jamais la norme locale.
Proposer, accepter ou rejeter un amendement
effortless_ndd_amendment_proposeavecfamily,proposed_id,level,title,why,body, ettarget_idsi l'amendement modifie une règle existante (absent : règle neuve). Le texte est analysé comme le faiteffortless_ndd_resolve. Seul le registre.effortless/ndd_amendments.jsonest écrit (statut Proposé) ; aucun fichier de norme n'est touché.effortless_ndd_amendment_acceptavecproposal_id. Le contenu est toujours écrit côté local (.ai/ndd/<famille>/<famille>-ndd.v1.md), jamais dans un fichier hérité : amender une règle héritée, c'est la surcharger localement. Même identifiant que la cible : la section est éditée en place. Identifiant différent : une section neuve s'ajoute, l'ancienne n'est pas touchée.effortless_ndd_amendment_rejectavecproposal_idetreason. Le motif est consigné mot pour mot avec la date ; aucun fichier de norme n'est ouvert en écriture.
L'agent n'accepte ni ne rejette un amendement de lui-même : la décision est la vôtre, il l'exécute après votre accord.
Ce que vous obtenez
- Une liste de règles claire avant le travail, au lieu d'une norme devinée.
- Dans le projet : des fichiers sous
.ai/ndd/(normes locales et héritées, plus la provenance des héritées) et le registre.effortless/ndd_amendments.json. - Dans l'app : l'adresse du dépôt partagé se règle dans Préférences › Normes (voir Profil et préférences), et l'écran Modules montre les Normes présentes pour chaque module.
Quand l'agent est refusé
| Situation | Ce que dit le refus | Ce qu'il faut faire |
|---|---|---|
| Aucune norme dans le projet | ndd:aucuneNorme | Importer ou synchroniser une norme (effortless_ndd_import, effortless_ndd_sync). |
| Famille demandée inconnue | ndd:familleInconnue (la réponse liste les familles disponibles) | Reprendre stack ou family parmi les familles listées. |
| Niveau de règle hors norme | ndd:niveauInconnu (fichier et ligne nommés) | Corriger la ligne : le niveau doit être OBLIGATOIRE, RECOMMANDÉ ou INTERDIT. |
| Règle sans « Pourquoi » | ndd:pourquoiAbsent | Ajouter la ligne « Pourquoi : » à la règle nommée, ou passer why à une proposition. |
| Deux règles avec le même identifiant | ndd:identifiantEnDouble (les deux emplacements sont nommés) | Renommer l'un des deux identifiants. |
| Stack inconnue à l'import | ndd:stackInconnue | Lister les stacks avec effortless_stack_list. |
| Langage absent de la stack | ndd:languageInconnu | Déclarer les langages avec effortless_stack_declare_languages. |
| Source de la norme non git | ndd:sourceNonGit | Déclarer la source en git pour ce langage ; l'import n'accepte que celle-là. |
| Source de normes introuvable ou injoignable | ndd:sourceIntrouvable, ndd:sourceInjoignable | Corriger l'adresse avec effortless_ndd_source (dossier existant ou URL git) et vérifier vos accès git. |
| Certificat d'entreprise non reconnu par git | ndd:certificatNonReconnu | Installer le certificat racine de l'entreprise, ou le déclarer à git, puis relancer effortless_ndd_sync. |
| Amendement : identifiant visé introuvable | ndd:identifiantViseInconnu | Chercher l'identifiant avec effortless_ndd_resolve. |
| Amendement : proposition inconnue | ndd:propositionInconnue | Reprendre l'identifiant rendu par effortless_ndd_amendment_propose. |
| Amendement : déjà accepté ou rejeté | ndd:amendementDejaArbitre | Aucun acte ne le rouvre ; une nouvelle proposition ouvre un nouvel amendement. |
| Rejet sans motif | ndd:amendementRejectReasonRequired | Donner reason. |