Skip to content

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 ​

💬 Vous demandez à l’agent

« Quelles normes s'appliquent à la tâche que tu vas faire dans codebase/api/ ? »

→ L’agent appelleeffortless_ndd_resolve
  • path = codebase/api/
💬 Vous demandez à l’agent

« Liste-moi toutes les règles Rust, avec leur texte. »

→ L’agent appelleeffortless_ndd_resolve
  • include_body = true
💬 Vous demandez à l’agent

« Importe la norme Rust du module api depuis mon dépôt de normes. »

→ L’agent appelleeffortless_ndd_import
  • stack_id = api
  • techno = rust
💬 Vous demandez à l’agent

« Utilise ce dépôt de normes pour tous mes projets : git@exemple.org:moi/normes.git. »

→ L’agent appelleeffortless_ndd_source
  • source = git@exemple.org:moi/normes.git
💬 Vous demandez à l’agent

« Mets à jour les normes de ce projet depuis le dépôt partagé. »

→ L’agent appelleeffortless_ndd_sync
💬 Vous demandez à l’agent

« 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. » »

→ L’agent appelleeffortless_ndd_amendment_propose
  • family = rust
  • target_id = RUST-12
  • proposed_id = RUST-12
  • level = OBLIGATOIRE
  • title = Propager les erreurs
  • why = Les erreurs avalées nous ont coûté cher
  • body = Toute erreur est propagée ou journalisée.
💬 Vous demandez à l’agent

« J'accepte l'amendement AMD-03 que tu viens de proposer. »

→ L’agent appelleeffortless_ndd_amendment_accept
  • proposal_id = AMD-03
💬 Vous demandez à l’agent

« Rejette l'amendement AMD-03 : on ne veut pas de cette règle pour l'instant. »

→ L’agent appelleeffortless_ndd_amendment_reject
  • proposal_id = AMD-03
  • reason = On ne veut pas de cette règle pour l’instant

Ce que fait l'agent ​

Savoir quelles normes s'appliquent ​

  1. effortless_ndd_resolve : lecture seule. L'agent passe stack (les familles à résoudre, nommées comme les dossiers de .ai/ndd/) ou path (un chemin du projet dont il dérive les familles). Sans l'un ni l'autre, il obtient tout le corpus connu.
  2. Chaque règle revient qualifiée : identifiant, niveau (OBLIGATOIRE, RECOMMANDÉ ou INTERDIT), titre, pourquoi, famille, origine, fichier et ligne. Le texte complet n'est servi que si l'agent passe include_body: true.

Importer une norme depuis un dépôt partagé ​

  1. 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 avec effortless_stack_declare_languages (voir Code et stacks).
  2. effortless_ndd_import avec stack_id et techno (le langage, qui donne aussi le nom de la famille). Le verbe lit le fichier dans le dépôt par git 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).
  3. Si la référence git est introuvable, l'import ne casse rien : la réponse porte available: false avec la raison, et aucun fichier n'est posé.

Suivre un dépôt de normes partagé ​

  1. effortless_ndd_source déclare la source globale : un dossier local ou une URL git, avec reference pour une branche ou un tag. Sans source, il lit la source actuelle ; avec une chaîne vide, il la retire. Un projet peut la surcharger par settings.ndd_source dans son effortless.json.
  2. effortless_ndd_sync met à jour les normes héritées du projet pour chaque langage présent (stacks déclarées, familles déjà là, et la famille agnostic). 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 ​

  1. effortless_ndd_amendment_propose avec family, proposed_id, level, title, why, body, et target_id si l'amendement modifie une règle existante (absent : règle neuve). Le texte est analysé comme le fait effortless_ndd_resolve. Seul le registre .effortless/ndd_amendments.json est écrit (statut Proposé) ; aucun fichier de norme n'est touché.
  2. effortless_ndd_amendment_accept avec proposal_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.
  3. effortless_ndd_amendment_reject avec proposal_id et reason. 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é ​

SituationCe que dit le refusCe qu'il faut faire
Aucune norme dans le projetndd:aucuneNormeImporter ou synchroniser une norme (effortless_ndd_import, effortless_ndd_sync).
Famille demandée inconnuendd:familleInconnue (la réponse liste les familles disponibles)Reprendre stack ou family parmi les familles listées.
Niveau de règle hors normendd:niveauInconnu (fichier et ligne nommés)Corriger la ligne : le niveau doit être OBLIGATOIRE, RECOMMANDÉ ou INTERDIT.
Règle sans « Pourquoi »ndd:pourquoiAbsentAjouter la ligne « Pourquoi : » à la règle nommée, ou passer why à une proposition.
Deux règles avec le même identifiantndd:identifiantEnDouble (les deux emplacements sont nommés)Renommer l'un des deux identifiants.
Stack inconnue à l'importndd:stackInconnueLister les stacks avec effortless_stack_list.
Langage absent de la stackndd:languageInconnuDéclarer les langages avec effortless_stack_declare_languages.
Source de la norme non gitndd:sourceNonGitDéclarer la source en git pour ce langage ; l'import n'accepte que celle-là.
Source de normes introuvable ou injoignablendd:sourceIntrouvable, ndd:sourceInjoignableCorriger l'adresse avec effortless_ndd_source (dossier existant ou URL git) et vérifier vos accès git.
Certificat d'entreprise non reconnu par gitndd:certificatNonReconnuInstaller le certificat racine de l'entreprise, ou le déclarer à git, puis relancer effortless_ndd_sync.
Amendement : identifiant visé introuvablendd:identifiantViseInconnuChercher l'identifiant avec effortless_ndd_resolve.
Amendement : proposition inconnuendd:propositionInconnueReprendre l'identifiant rendu par effortless_ndd_amendment_propose.
Amendement : déjà accepté ou rejeténdd:amendementDejaArbitreAucun acte ne le rouvre ; une nouvelle proposition ouvre un nouvel amendement.
Rejet sans motifndd:amendementRejectReasonRequiredDonner reason.

Effortless — ArboRithm