Agent OS
Reference

Structurer un contenu

Decoupe, ordonne, versionne et deprecie un contenu pour une architecture documentaire solide.

Bien ecrire ne suffit pas. Un bon contenu mal structure reste illisible. Voici comment organiser — avant, pendant et apres l'ecriture.

Avant d'ecrire : les 4 questions

Reponds a ces questions AVANT d'ouvrir l'editeur.

#QuestionSi tu ne sais pas
1Pour QUI ?Debutant, intermediaire, expert, decision-maker ?
2Pour QUOI FAIRE ?Apprendre, faire, comprendre, consulter ?
3COMBIEN de pages ?1 page si moins de 1500 mots. Split si plus.
4Quel FORMAT ?Voir Formats de contenu

Adapter au public

PublicTonProfondeurExemples
DebutantAccueillant, pas de jargonSurface → conceptBeaucoup, simples
IntermediaireDirect, jargon definiConcept → pratiquePratiques, reels
ExpertConcis, jargon assumeDetails, edge casesAvances, complexes
Decision-makerBusiness, pas techniqueResume, tradeoffsROI, comparaisons

Si tu ne connais pas ton public, ecris pour un intermediaire. C'est le compromis le plus sur.


Decouper : quand et comment split

Signaux qu'il faut split

SignalAction
La page depasse 2000 motsSplit en 2-3 pages
Tu as besoin de H5 ou H6Chaque H2 devient sa propre page
Le lecteur doit scroller plus de 3 ecransSplit
La page melange 2+ types Diataxis1 type = 1 page
Tu dis "et aussi" ou "par ailleurs"C'est un autre sujet → autre page

Comment split

AVANT (1 page de 3000 mots) :

  # Deploiement
  ## Concepts
  ## Configuration
  ## Deployer en staging
  ## Deployer en production
  ## Troubleshooting
  ## Rollback

APRES (3 pages) :

  deploiement/
  ├── index.mdx      → Vue d'ensemble + liens (Explication)
  ├── deployer.mdx    → Staging + prod (Guide pratique)
  └── problemes.mdx   → Troubleshooting + rollback (Troubleshooting)

Chaque page apres split doit fonctionner seule. Pas de "voir page precedente pour le contexte".


Ordonner : dans quel ordre presenter

Ordre par defaut (fonctionne dans 80% des cas)

1. QUOI     → Ce que c'est (1-2 phrases)
2. POURQUOI → Quel probleme ca resout
3. COMMENT  → Les etapes ou le mecanisme
4. EXEMPLES → Concret, copiable
5. LIMITES  → Ce que ca ne fait pas
6. LIENS    → Lecture liee

Ordres alternatifs par format

FormatOrdre
TutorielResultat → Prerequis → Etapes 1-2-3 → Resultat → Suite
Guide pratiqueAction → Code → Verification → Troubleshooting
ExplicationProbleme → Solution → Justification → Exemples → Resume
ReferenceIndex → Categories → Tableaux exhaustifs
TroubleshootingSymptome → Cause → Fix (repete pour chaque probleme)
CoursOverview → Module 1 → ... → Module N → Cheatsheet

Choisir le bon format visuel

Table vs Liste vs Prose vs Code

ContenuFormatPourquoi
Donnees structurees (options, params, comparaisons)TableScannable, alignable
Etapes ordonneesListe numeroteeOrdre visible
Elements sans ordreListe a pucesPas de hierarchie fausse
Concept a expliquerProse (max 3 phrases/paragraphe)Contexte et nuance
Commande ou configCode blockCopiable, executable
Architecture ou fluxDiagramme ASCII ou SVGSpatial, visuel
Regle ou principeBlockquote >Distinction visuelle
Avertissement critiqueCallout (max 2/page)Attention forcee
Info secondaireTexte grasPas de callout, pas de bruit

Regle du "scan test"

Apres avoir ecrit une section, demande-toi : un lecteur presse qui scanne en 5 secondes, trouve-t-il l'info qu'il cherche ?

  • Si l'info est enterree dans un paragraphe → extraire en table ou liste
  • Si une table a 2 colonnes et 2 lignes → remplacer par une phrase
  • Si un code block n'a qu'une ligne → le mettre inline avec backticks

Longueur par type de contenu

TypeLongueur idealeMax absolu
Fiche200-500 mots800
Guide pratique300-800 mots1500
Tutoriel500-1200 mots2000
Explication500-1500 mots2000
ReferenceVariable (exhaustif)Pas de max
Troubleshooting100-300 mots par probleme1500 total
Comparaison300-800 mots1200
Module de cours500-1000 mots1500
Cours (total)3 a 8 modulesAu-dela de 8, decouper en 2 cours
Changelog50-200 mots par versionPas de max

Si tu depasses le max, c'est un signal de split, pas un probleme de concision.


Lier les pages entre elles

Regle du triangle

Chaque page doit etre accessible depuis au moins 3 chemins :

1. Sidebar (meta.json)
2. Lien inline depuis une autre page
3. Section "Lecture liee" d'une page parente

Types de liens

TypeOuExemple
InlineDans le texte, en contexte"Configure le fichier .env."
Lecture lieeEn fin de page"- Stack technique — pour les details serveur"
CardSur les pages indexComposant Card avec href et title

Un lien inline dit "approfondir ici". Un lien en fin de page dit "lire ensuite".

La section de liens en fin de page s'appelle toujours "Lecture liee". Pas "Pour aller plus loin", pas "Voir aussi", pas "Liens utiles".


Nommer les fichiers et dossiers

Les conventions de nommage sont centralisees dans le Guide de redaction.


Depreciation et archivage

Chaque page a un cycle de vie. Gere-le explicitement.

Cycle de vie d'une page

draft → review → published → deprecated → archived
StatutSignificationAction requise
draftEn cours de redactionPas visible en production
reviewPrete pour relectureFeedback en attente
publishedActive et a jourRien
deprecatedObsolete, bientot archiveeCallout + redirect + mise a jour des liens entrants
archivedSupprimee de la navigationDeplacee dans archive/, retiree de meta.json

Qui decide de deprecier

Le mainteneur de la section ou l'auteur de la page. En cas de doute, le mainteneur a le dernier mot.

Frontmatter d'une page deprecated

---
title: "Titre de la page"
description: "..."
status: "deprecated"
deprecated_since: "2026-04-01"
deprecated_redirect: "/docs/reference/nouvelle-page"
---

Le champ deprecated_redirect est lu par le framework pour generer la redirection automatiquement. Pas besoin de configurer un redirect manuel.

Callout de depreciation

Ajoute un composant Callout en haut de chaque page deprecated :

<Callout type="warn">
  Page deprecated. Ce contenu est obsolete.
  Utilise [la nouvelle page](/docs/reference/nouvelle-page) a la place.
</Callout>

Liens entrants

Quand tu deprecies une page, mets a jour les liens inline qui pointent vers elle dans les autres pages. Le redirect via deprecated_redirect est un filet de securite, pas une excuse pour laisser des liens obsoletes.

Regle des 90 jours

90 jours apres la depreciation, la page est archivee sauf decision contraire du mainteneur. Pas de mesure de trafic complexe : le delai de 90 jours suffit.

Checklist pre-archivage

  • 90 jours ecoules depuis la depreciation
  • Tous les liens internes vers cette page mis a jour
  • Le deprecated_redirect pointe vers une page active
  • Le mainteneur a valide l'archivage
  • Le meta.json parent sera mis a jour
  • Le changelog sera mis a jour

Archivage

Quand une page passe en archived :

  1. Deplacer le fichier dans archive/[dossier-original]/[fichier].mdx
  2. Retirer la page de meta.json (au moment de l'archivage, pas de la depreciation)
  3. Le redirect reste actif via le frontmatter deprecated_redirect

Versioning de la documentation

Quand la doc couvre plusieurs versions majeures d'un produit, utilise une strategie par dossiers.

Strategie dossiers

docs/
├── v1/
│   ├── getting-started.mdx
│   └── api-reference.mdx
├── v2/
│   ├── getting-started.mdx
│   └── api-reference.mdx
└── latest/ → symlink vers v2/

Regles de versioning

RegleDetail
1 dossier par version majeurev1/, v2/, pas v1.1/
latest/ pointe vers la version couranteSymlink ou redirect
Chaque version est autonomePas de liens cross-version
Changelog fait le pontLe changelog reference les pages impactees par version
Max 2 versions maintenuesLes anciennes passent en deprecated

Internationalisation (i18n)

Quand le contenu doit exister en plusieurs langues, suis ce workflow.

Convention de fichiers

docs/
├── fr/
│   ├── getting-started.mdx
│   └── api-reference.mdx
├── en/
│   ├── getting-started.mdx
│   └── api-reference.mdx

Workflow de traduction

EtapeAction
1Ecrire le contenu dans la langue principale (fr)
2Marquer comme i18n_status: source dans le frontmatter
3Traduire (humain ou IA) dans le dossier cible
4Marquer la traduction comme i18n_status: translated
5Quand la source change, marquer les traductions comme i18n_status: outdated

Glossaire partage

Maintiens un fichier glossary.yaml a la racine. Il contient les traductions officielles des termes techniques pour garantir la coherence.

# glossary.yaml
terms:
  agent:
    fr: "agent"
    en: "agent"
  workflow:
    fr: "workflow"
    en: "workflow"
  pipeline:
    fr: "pipeline"
    en: "pipeline"
  deploy:
    fr: "deployer"
    en: "deploy"
  build:
    fr: "build"
    en: "build"
  cache:
    fr: "cache"
    en: "cache"
  rollback:
    fr: "rollback"
    en: "rollback"
  token:
    fr: "token"
    en: "token"
  framework:
    fr: "framework"
    en: "framework"
  skill:
    fr: "skill"
    en: "skill"
  proc:
    fr: "proc"
    en: "proc"
  template:
    fr: "template"
    en: "template"
  callout:
    fr: "callout"
    en: "callout"
  frontmatter:
    fr: "frontmatter"
    en: "frontmatter"
  slug:
    fr: "slug"
    en: "slug"
  troubleshooting:
    fr: "depannage"
    en: "troubleshooting"

Frontmatter i18n

---
title: "Guide de demarrage"
i18n_status: "source"       # source | translated | outdated
i18n_source: "fr/getting-started.mdx"
---

Contribution externe

Quand des contributeurs externes participent a la documentation, suis ce workflow.

Workflow fork/PR

EtapeAction
1Le contributeur fork le repo
2Cree une branche docs/[sujet]
3Ecrit ou modifie le contenu en suivant ce guide
4Ouvre une PR avec le template ci-dessous
5Review par un maintainer (checklist du guide de review)
6Merge apres approbation

Template de PR

## Type de changement
- [ ] Nouvelle page
- [ ] Modification de page existante
- [ ] Correction (typo, lien mort, erreur factuelle)

## Pages impactees
- [liste des fichiers modifies]

## Checklist
- [ ] Frontmatter complet (title + description)
- [ ] Type Diataxis identifie
- [ ] Min 2 liens internes
- [ ] Section "Lecture liee" presente
- [ ] Build local passe sans erreur

Regles pour les contributeurs

RegleDetail
Branche nommee docs/[sujet]Pas de fix-typo-3 ou update
1 PR = 1 sujetPas de PR fourre-tout
Build local requisnpm run build avant de soumettre
Suivre les 38 reglesLe guide de redaction s'applique a tous
Feature PR = doc PRBloquer le merge d'une feature si la doc n'est pas incluse ou liee dans une PR separee

Automatiser les regles

Deux outils recommandes pour appliquer les regles automatiquement :

OutilRoleVerifie
ValeLinter de proseLongueur de phrase, filler words, voix passive, jargon, acronymes
markdownlintLinter de structureNiveaux de titres, listes, code blocks, frontmatter

Configure-les dans le CI (Continuous Integration) pour bloquer les PRs qui violent les regles. Les fichiers de config vivent a la racine du repo (.vale.ini, .markdownlint.json).


Checklist structurelle

Avant de publier, verifie :

  • Le type de contenu est identifie (tuto, guide, explication, reference, cours, troubleshooting, comparaison, fiche, changelog)
  • Le public est identifie (debutant, intermediaire, expert, decision-maker)
  • La page fait moins de 2000 mots (sinon split)
  • L'ordre suit le pattern du format (QUOI → POURQUOI → COMMENT → EXEMPLES)
  • Les donnees structurees sont en tables, pas en prose
  • Chaque section fait moins de 3 ecrans de scroll
  • Au moins 2 liens internes (inline + lecture liee)
  • Le fichier a un index.mdx dans son dossier parent
  • Le fichier est liste dans le meta.json parent

Lecture liee

On this page