IAMaîtriser l'IA générative Plan du corpus
Accueil/Applications au developpement/Documentation, commits et ecrit

06 - Documentation, commits et ecrit

Si formuler tes idees a l ecrit te coute, ce fichier est le plus rentable du corpus : tu fournis des notes brutes, tu recuperes un texte professionnel.

Temps de lecture : 16 min | Niveau : Debutant

Ce que tu sauras faire apres

  • Transformer des notes brouillonnes en texte clair, sans avoir a chercher tes mots.
  • Ecrire des docstrings conformes aux conventions Python.
  • Rediger des messages de commit lisibles par toute l equipe.
  • Produire une description de pull request qui explique le pourquoi, pas seulement le quoi.
  • Ecrire une note technique lue jusqu au bout.

Le template maitre : de tes notes a un texte propre

C est le template a garder ouvert en permanence. Le principe : tu n ecris pas un texte, tu fournis de la matiere brute. Le modele fait la mise en forme. Toi, tu relis et tu corriges le fond.

Voici mes notes brutes. Elles sont mal ecrites, dans le desordre, avec des
raccourcis et des fautes. C est normal, c est de la matiere premiere.

DESTINATAIRE : [QUI_VA_LIRE : mon equipe / mon manager / un dev qui ne
connait pas le projet / un profil non technique]
OBJECTIF DU TEXTE : [QU_EST_CE_QUE_LE_LECTEUR_DOIT_FAIRE_OU_COMPRENDRE]
FORMAT ATTENDU : [message de commit / description de PR / note technique /
paragraphe de README / mail]
LONGUEUR MAXIMALE : [NOMBRE] lignes
TON : factuel, direct, sans marketing

REGLES :
- n ajoute aucune information que je n ai pas donnee
- si une information te manque pour que le texte tienne debout, ne
  l invente pas : liste-la a la fin sous le titre "IL ME MANQUE"
- phrases courtes, une idee par phrase
- pas de "il est important de noter que", pas de "dans le cadre de"
- garde les termes techniques exacts que j ai utilises

MES NOTES :
[COLLE_TES_NOTES_TELLES_QUELLES]

Pourquoi chaque ligne est la

  • DESTINATAIRE et OBJECTIF : c est du role prompting. Anthropic le resume ainsi : "Setting a role in the system prompt focuses Claude's behavior and tone for your use case. Even a single sentence makes a difference."
  • LONGUEUR : evite le paragraphe de 40 lignes que personne ne lit.
  • "n ajoute aucune information" : bloque l invention, qui est le risque principal.
  • "IL ME MANQUE" : donne au modele une porte de sortie. Microsoft : "It can sometimes be helpful to give the model an alternative path if it's unable to complete the assigned task."

Exemple reel

Tes notes :

bon donc le dag ingest_orders il plantait 1 fois sur 5 en prod
c etait le retry qui reinserait les lignes deja mises
du coup j ai mis une cle d idempotence sur order_id + run_id
et un delete avant insert sur le run_id
teste sur 3 jours ca passe
par contre faut que la table ait un index sur run_id sinon le delete est lent
j ai ajoute l index dans la migration 0042

Sortie attendue, format description de pull request :

fix(ingest): rendre la tache load_to_postgres rejouable

La tache load_to_postgres echouait environ une execution sur cinq en
production avec une erreur UniqueViolation sur orders_pkey.

Cause : quand Airflow relancait la tache apres un echec partiel, les lignes
deja inserees lors de la premiere tentative etaient reinserees.

Correctif :
- suppression des lignes du run courant avant insertion, filtree sur run_id
- ajout d un index sur run_id (migration 0042) pour que cette suppression
  reste rapide

Verification : trois jours de donnees rejoues sans erreur, avec un nombre de
lignes identique a l attendu.

IL ME MANQUE
- le nombre de lignes exact verifie sur les trois jours
- le temps d execution avant et apres l ajout de l index

Tu relis, tu completes les deux points manquants, tu colles. Trois minutes au lieu de vingt.


Les messages de commit

La convention a suivre

Si ton equipe n a pas de convention, prends Conventional Commits. Structure exacte (specification v1.0.0) :

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

La specification ne definit que deux types : fix (une correction de bug) et feat (une nouvelle fonctionnalite). Tous les autres sont autorises mais facultatifs. La page cite ceux que recommande @commitlint/config-conventional, base sur la convention Angular : build, chore, ci, docs, style, refactor, perf, test.

Un changement cassant s exprime de deux facons : soit un ! juste avant le :, soit un pied de message BREAKING CHANGE:. La regle exacte : "If included in the type/scope prefix, breaking changes MUST be indicated by a ! immediately before the :". Exemples tires de la specification :

feat(api)!: send an email to the customer when a product is shipped
feat: allow provided config object to extend other configs

BREAKING CHANGE: `extends` key in config file is now used for extending other config files

La regle de fond

Google resume ce que doit contenir une description de changement : la premiere ligne est un "short summary of what is being done", une phrase complete "written as though it was an order", suivie d une ligne vide. Le corps doit contenir le quoi et surtout le pourquoi : "What contexts did you have as an author when making this change? Were there decisions you made that aren't reflected in the source code?"

Mauvais exemples cites par Google : Fix bug, Fix build, Add patch, Moving code from A to B, Phase 1, Add convenience functions, kill weird URLs. Le point commun : aucun ne dit ce qui a change ni pourquoi.

Template - Message de commit

Ecris le message de commit pour le diff ci-dessous.

Convention : Conventional Commits (type(scope): description)
Types autorises dans mon equipe : [feat, fix, docs, refactor, perf, test, chore]
Langue : [FRANCAIS / ANGLAIS]

Contraintes :
- premiere ligne : 72 caracteres maximum, a l imperatif, pas de point final
- ligne vide, puis un corps qui explique le POURQUOI, pas le comment
- le corps ne repete pas le diff : il donne le contexte que le code ne montre pas
- si c est un changement cassant, ajoute le pied BREAKING CHANGE:
- pas de "divers", "fix", "update" seuls

Contexte que le diff ne montre pas :
[TICKET / DECISION / CONTRAINTE / CE_QUE_TU_AS_ESSAYE_AVANT]

DIFF :
[COLLE_LE_RESULTAT_DE_git_diff_--staged]

AVANT / APRES

AvantApres
fix bug airflowfix(ingest): rendre load_to_postgres rejouable apres un echec partiel
update sqlperf(marts): filtrer fct_sales sur la colonne de partition
wiprefactor(cleaning): extraire parse_amount pour la reutiliser dans 3 modeles

La description de pull request

Une PR sans description coute du temps a tous les relecteurs. La doc Claude Code propose un enchainement simple :

  1. summarize the changes I've made to the authentication module
  2. create a pr
  3. enhance the PR description with more context about the security improvements

Et ajoute : "Review Claude's generated PR before submitting and ask Claude to highlight potential risks or considerations."

Template - Description de PR

Redige la description de pull request pour le diff ci-dessous.

Ticket : [REFERENCE]
Objectif de la PR en une phrase : [OBJECTIF]
Ce qui est hors perimetre : [CE_QUE_TU_N_AS_PAS_TRAITE_VOLONTAIREMENT]

Structure imposee :

## Pourquoi
[le probleme, en 3 lignes maximum, comprehensible sans lire le code]

## Ce qui change
[liste a puces, une ligne par changement, fichier concerne entre parentheses]

## Comment verifier
[les commandes exactes qu un relecteur peut lancer, et ce qu il doit voir]

## Risques
[ce qui peut casser, et ce qui a ete fait pour l eviter]

## Hors perimetre
[ce qui n est volontairement pas traite ici]

Regles : pas d adjectif promotionnel, pas de repetition du diff, et si une
section n a rien a dire, ecris "Aucun" au lieu de meubler.

DIFF :
[COLLE_LE_RESULTAT_DE_git_diff_main...HEAD]

Astuce pour les chiffres d une PR (volumes, temps avant / apres) : ne mets pas le tableau en forme a la main. Colle les donnees brutes et demande, comme le montre l article GitHub :

Format this data into a GitHub flavored markdown table that I can paste into
a GitHub pull request description.

[COLLE_ICI_TES_CHIFFRES_BRUTS]

Les docstrings

Les regles officielles

La PEP 257 fixe les conventions :

  • une docstring de fonction doit "summarize its behavior and document its arguments, return value(s), side effects, exceptions raised, and restrictions on when it can be called" ;
  • elle est ecrite a l imperatif : "It prescribes the function or method's effect as a command ("Do this", "Return that"), not as a description" ;
  • pour une docstring sur une ligne, les triples guillemets restent obligatoires, les guillemets fermants sont sur la meme ligne, et il n y a de ligne vide ni avant ni apres ;
  • pour une docstring multi-ligne : une ligne de resume, une ligne vide, puis le detail.

Template - Docstrings

Ajoute des docstrings aux fonctions de @[CHEMIN/FICHIER.py].

Style : [GOOGLE / NUMPY / REST] - suis exactement le style deja utilise
dans @[CHEMIN/FICHIER_EXEMPLAIRE.py]

Chaque docstring doit contenir :
- une premiere ligne a l imperatif ("Calcule...", "Retourne...", "Charge...")
- les arguments : nom, type, ce qu on attend comme valeur
- la valeur de retour : type et signification
- les exceptions levees et dans quel cas
- les effets de bord (ecriture disque, appel reseau, modification d etat)
- un exemple d appel avec des valeurs realistes de mon domaine

Contraintes :
- ne modifie AUCUNE ligne de code, uniquement les docstrings
- n ajoute pas de docstring aux fonctions privees triviales
- si tu ne comprends pas ce que fait une fonction, ecris
  "TODO: comportement a confirmer" plutot que d inventer

Deux details comptent. "Ne modifie aucune ligne de code" : sans cette ligne, le modele en profite souvent pour refactoriser. "TODO a confirmer" : mieux vaut un trou signale qu une docstring fausse, qui est pire que pas de docstring du tout.

Exemple pour un contexte data

def parse_amount(raw: str | None) -> float | None:
    """Convertit un montant textuel en flottant.

    Accepte les separateurs francais et anglo-saxons ainsi que le symbole
    monetaire en prefixe. Retourne None pour toute valeur non interpretable,
    afin que le pipeline ne s arrete pas sur une ligne sale.

    Args:
        raw: Montant brut issu de l API, par exemple "1 234,56" ou "N/A".

    Returns:
        Le montant en flottant, ou None si la valeur est non interpretable.

    Raises:
        Aucune. Les erreurs de conversion sont converties en None.

    Example:
        >>> parse_amount("1 234,56")
        1234.56
    """

Le README

Ecris le README.md de ce repo, pour un developpeur ou data engineer qui
arrive sur le projet et doit etre autonome en 30 minutes.

Fichiers ou tu dois verifier les commandes avant de les ecrire :
@[LISTE_TES_FICHIERS_DE_CONFIG : pyproject.toml, Makefile, docker-compose.yml,
dbt_project.yml, .github/workflows/]

Structure imposee :
1. Une phrase : a quoi sert ce projet
2. Un schema texte du flux de donnees ou de l architecture
3. Prerequis : versions exactes (Python, base, outils)
4. Installation : les commandes, dans l ordre, copiables telles quelles
5. Lancement en local : la commande, et ce qu on doit voir si ca marche
6. Tests : la commande, et ce qu on doit voir
7. Variables d environnement : tableau nom / role / exemple de valeur
   (valeurs factices, jamais de vrai secret)
8. Structure des dossiers : tableau dossier / role
9. Les 3 pieges connus du projet

Regles :
- verifie chaque commande dans les fichiers de configuration du repo avant
  de l ecrire
- si une information est absente du repo, ecris "A COMPLETER" au lieu
  d inventer
- pas de section vide pour faire joli

La consigne de verification est indispensable : un README qui donne une commande d installation inexistante fait perdre plus de temps qu un README absent.


La note technique

Pour une decision d architecture, un post-mortem, ou une proposition. Le piege ici est de tout deverser. La technique utile est celle de la synthese guidee : tu dis a l avance quelles informations doivent apparaitre.

C est la methode du guide Anthropic sur la synthese de documents (Legal summarization). Il tient en trois regles.

  1. Lister d abord. Le guide definit une liste details_to_extract avant meme d ecrire le prompt. La raison : "Without clear direction, it can be difficult for Claude to determine which details to include."
  2. Imposer le format. La sortie est decoupee en sections nommees a l avance.
  3. Interdire le remplissage. La consigne exacte est : "If any information is not explicitly stated in the document, note it as 'Not specified'."

Ces trois regles sont reprises telles quelles dans le template ci-dessous.

Template - Note technique

Redige une note technique a partir de mes notes.

DESTINATAIRE : [EQUIPE_TECHNIQUE / MANAGER / MIXTE]
DECISION OU SUJET : [EN_UNE_PHRASE]
LONGUEUR : [NOMBRE] lignes maximum

Informations qui DOIVENT apparaitre (n en oublie aucune) :
- [INFO_1]
- [INFO_2]
- [INFO_3]

Structure imposee :
## Contexte        (3 lignes : la situation aujourd hui)
## Probleme        (3 lignes : ce qui ne va pas, avec un chiffre si possible)
## Options         (un tableau : option | cout | risque | delai)
## Recommandation  (laquelle, et pourquoi, en 5 lignes)
## Ce qu il faut decider  (les questions ouvertes, une par ligne)

Regles :
- si une information demandee n est pas dans mes notes, ecris
  "Non renseigne" a sa place
- pas de preambule, commence directement par "## Contexte"
- chiffre chaque affirmation quand mes notes le permettent

MES NOTES :
[COLLE_TES_NOTES]

La consigne "pas de preambule" reprend le "Do not preamble" du guide Anthropic : elle supprime les deux phrases d introduction inutiles.


La boucle d amelioration

Tu n obtiens jamais le bon texte du premier coup, et ce n est pas grave. GitHub le formule simplement : "If you don't get the result that you want, iterate on your prompt and try again" (Prompt engineering for GitHub Copilot Chat).

Trois relances qui marchent, a copier telles quelles :

Trop long. Refais en [NOMBRE] lignes maximum, en gardant uniquement ce
qu un lecteur presse doit savoir.
Trop vague. Remplace chaque affirmation generale par un chiffre, un nom de
fichier ou une commande. Si tu ne peux pas, supprime la phrase.
Ce n est pas mon vocabulaire. Reecris en utilisant exactement les termes
suivants a la place des tiens : [TERME_A] au lieu de [TERME_B], ...

Et une quatrieme, la plus utile quand tu doutes du resultat :

Relis ton propre texte. Liste les affirmations que tu as ecrites et qui ne
sont PAS dans mes notes. Pour chacune, dis d ou elle vient.

A retenir

  • Le template maitre : tu fournis des notes brutes plus le destinataire, l objectif, le format et la longueur. Tu n ecris pas le texte.
  • La regle qui protege tout : "n ajoute aucune information que je n ai pas donnee ; liste ce qui te manque".
  • Commit : type(scope): description a l imperatif, corps qui explique le pourquoi.
  • PR : pourquoi, ce qui change, comment verifier, risques, hors perimetre.
  • Docstring : imperatif, arguments, retour, exceptions, effets de bord, exemple. Et interdiction de toucher au code.
  • Pour toute synthese, dis a l avance quelles informations doivent apparaitre, et impose "Non renseigne" pour le reste.
  • Tu relis toujours. Le modele met en forme, tu valides le fond.

Sources

Corpus personnel de formation · genere le 26/09/2026 · source : 06-documentation-commits-et-ecrit.md