rm unnecessary file
EBO <eric.bouhana@softalys.com> committé le 2026-04-17 17:13
00e3694d8608f304c055f8d40bcd2043ebb89492
1 parent(s)
2 fichiers modifiés
+0
-663
D
.plans/001-scaffold-initial.md
+0
-582
@@ -1,582 +0,0 @@
| 1 | -# Plan — Documentation officielle gitrust (girust_doc) | |
| 2 | - | |
| 3 | -## Contexte | |
| 4 | - | |
| 5 | -Le dépôt `/home/monsieurb/Documents/devel/girust_doc` est actuellement vide (3 dossiers `administration_manual/`, `user_manual/`, `template/` + un README de 9 lignes). Il doit héberger la documentation officielle publique de la plateforme **gitrust** (forge Git self-hosted en Rust, similaire à Gitea, déployée sur `demo.gitrust.eu`). | |
| 6 | - | |
| 7 | -La plateforme cible (explorée dans `/home/monsieurb/Documents/devel/gitrust`) est un **monorepo Rust à 6 crates** (rustwarden-core, gitrust-core, gitrust-git, gitrust-web, gitrust-ssh, gitrust-hooks), fournit un serveur HTTP (:4000) + SSH (:2222), PostgreSQL, CI Dagger intégrée, SBOM + Dependency-Track, i18n (6 langues : fr, en, de, es, pt, it), et vise l'auto-hébergement pour équipes de 3-20 personnes avec conformité ANSSI PA-074. | |
| 8 | - | |
| 9 | -Cette documentation doit être : | |
| 10 | -- **Multilingue** : fr, en, de, es, pt, it (aligné avec les langues de l'UI gitrust) | |
| 11 | -- **Structurée selon Diátaxis** : Tutorials / How-to / Reference / Explanation | |
| 12 | -- **Publiée via mdBook** (natif Rust, cohérent avec la stack), Markdown brut lisible sans build | |
| 13 | -- **Riche en diagrammes Mermaid** et en exemples réutilisables (configs, CI, code) | |
| 14 | - | |
| 15 | -## Objectif | |
| 16 | - | |
| 17 | -Scaffolder un dépôt documentaire complet, prêt à être rempli de contenu, avec : | |
| 18 | -1. Une structure mdBook multilingue (6 langues) sur base FR → EN → autres | |
| 19 | -2. **Quatre manuels** organisés selon Diátaxis : | |
| 20 | - - `user_manual/` — utilisateurs finaux | |
| 21 | - - `administration_manual/` — ops / self-hosters | |
| 22 | - - `developer_manual/` — contributeurs core + utilisateurs API (**nouveau**) | |
| 23 | - - `template/` — exemples copiables (hors Diátaxis par nature) | |
| 24 | -3. Une bibliothèque de templates de configuration réutilisables | |
| 25 | -4. Les outils d'automatisation (CI de build, lint Markdown, validation Mermaid) | |
| 26 | -5. **Réutilisation maximale du contenu existant de `gitrust/docs/`** — 9 fichiers publiables quasi tels quels, 8 fichiers à extraire partiellement (voir § Manuel développeur) | |
| 27 | - | |
| 28 | -## Objectifs par manuel | |
| 29 | - | |
| 30 | -Chaque manuel a un public distinct, un objectif propre, et un périmètre explicitement délimité. Le respect strict de ces périmètres garantit qu'un lecteur trouve ce qu'il cherche sans traverser du contenu qui ne le concerne pas. | |
| 31 | - | |
| 32 | -### `user_manual/` — Manuel utilisateur | |
| 33 | - | |
| 34 | -- **Public** : utilisateurs finaux de gitrust (développeurs qui *utilisent* la forge : push/pull, code review, issues, notifications). | |
| 35 | -- **Objectif** : rendre autonome quelqu'un qui se connecte à une instance gitrust existante pour collaborer sur du code. | |
| 36 | -- **Couvre** : inscription, 2FA, gestion des clés SSH, création/clonage/push de dépôts, pull requests et stratégies de merge, issues et labels hiérarchiques, équipes et permissions, notifications, personal access tokens, usage de la CI intégrée (`.gitrust-ci.yml`), lecture du SBOM. | |
| 37 | -- **Ne couvre pas** : l'installation de la plateforme, l'administration multi-utilisateurs, le code source gitrust, l'API programmatique avancée. | |
| 38 | -- **Prérequis lecteur** : savoir utiliser Git en ligne de commande. | |
| 39 | - | |
| 40 | -### `administration_manual/` — Manuel d'administration | |
| 41 | - | |
| 42 | -- **Public** : ops et self-hosters qui déploient, configurent et maintiennent une instance gitrust en production. | |
| 43 | -- **Objectif** : installer, exploiter et superviser une instance, depuis le premier démarrage jusqu'à la mise à jour et la restauration après incident. | |
| 44 | -- **Couvre** : installation Docker / systemd, reverse-proxy TLS (Nginx/Caddy/Traefik), configuration SMTP et OAuth, CI runner distant, intégration Dependency-Track et Syft (SBOM), durcissement Fail2ban, tuning rate limiting, forçage 2FA global, sauvegarde/restauration (PostgreSQL + dépôts bare + clés SSH), procédure de mise à jour, dépannage SSH/CI, administration via `/admin`, conformité ANSSI PA-074. | |
| 45 | -- **Ne couvre pas** : l'utilisation quotidienne par un développeur, la contribution au code source, le développement de clients API. | |
| 46 | -- **Prérequis lecteur** : administration Linux, notions de réseau et TLS. | |
| 47 | - | |
| 48 | -### `developer_manual/` — Manuel développeur | |
| 49 | - | |
| 50 | -- **Public** : double — (a) contributeurs au code gitrust (core ou via fork rustwarden), (b) développeurs externes qui construisent des intégrations sur l'API publique. | |
| 51 | -- **Objectif** : fournir tout le nécessaire pour comprendre l'architecture, contribuer du code conforme aux standards du projet, ou bâtir un client qui parle à l'API gitrust. | |
| 52 | -- **Couvre** : architecture des 6 crates (rustwarden-core, gitrust-core, gitrust-git, gitrust-web, gitrust-ssh, gitrust-hooks), schéma de la base de données et ERD, modèle RBAC 4 niveaux, diagrammes de séquence (auth SSH, push, merge PR, import repo), patrons de contribution (ajouter une route, un service, une migration, un worker async), stratégie de tests unitaires et E2E (Playwright), règles QA et gates ANSSI, workflow de PR et contribution upstream rustwarden, référence complète de l'API REST v1 (auth, pagination, codes erreur, exemples de clients), fonctionnement interne de features (2FA, labels hiérarchiques, CI Dagger Easy vs Power Mode, décisions UI HTMX). | |
| 53 | -- **Ne couvre pas** : l'installation d'une instance de production, l'usage utilisateur de la forge. | |
| 54 | -- **Prérequis lecteur** : Rust (pour contribuer) ou un langage client (pour l'API) ; familiarité avec HTTP, Git, PostgreSQL. | |
| 55 | - | |
| 56 | -### `template/` — Bibliothèque d'exemples copiables | |
| 57 | - | |
| 58 | -- **Public** : tous les profils précédents, chaque fois qu'ils cherchent un point de départ prêt à l'emploi pour une config ou un script. | |
| 59 | -- **Objectif** : fournir des fichiers **standalone, copiables tels quels**, couvrant les cas d'usage concrets rencontrés par les 3 autres manuels. Un fichier = un cas d'usage, nom explicite, commentaires internes suffisants, mais **pas de prose explicative autour**. | |
| 60 | -- **Couvre** : fichiers `.env` par profil (dev local, production mono-machine, production CI-heavy, tests E2E), variantes `docker-compose.yml` (minimal, production avec Redis+SMTP, avec CI runner), reverse-proxy (Nginx TLS, Caddyfile, Traefik dynamique), unit systemd avec hardening AppArmor/seccomp + timer de sauvegarde, `.gitrust-ci.yml` par langage (Rust, Go, Python, Node) + squelette Dagger Power Mode, scripts de backup/restore, clients API d'exemple (Python, Rust, curl+PAT), scripts de migration depuis Gitea et Forgejo, alternative Podman Quadlet. | |
| 61 | -- **Particularité** : **hors cadre Diátaxis** par nature — c'est un atelier, pas un texte pédagogique. L'unique fichier de prose est `template/index.md` qui sert de catalogue. Les manuels Diátaxis pointent vers ces templates depuis leurs how-to (ex. `administration_manual/how-to/configurer-smtp.md` → « copiez `template/env/production-mono-machine.env` puis... »). | |
| 62 | -- **Ne couvre pas** : toute explication pédagogique (cela appartient aux 3 manuels). | |
| 63 | - | |
| 64 | -### Relations entre les 4 parties | |
| 65 | - | |
| 66 | -```mermaid | |
| 67 | -graph LR | |
| 68 | - U[user_manual] --> API[developer_manual/reference/api] | |
| 69 | - U --> T[template/api-clients/] | |
| 70 | - A[admin_manual] --> T | |
| 71 | - D[developer_manual] --> T | |
| 72 | - T -. référencé depuis .-> U | |
| 73 | - T -. référencé depuis .-> A | |
| 74 | - T -. référencé depuis .-> D | |
| 75 | -``` | |
| 76 | - | |
| 77 | -- Chaque manuel narratif (U/A/D) est lisible seul. | |
| 78 | -- `template/` est la boîte à outils commune — les trois manuels y pointent depuis leurs how-to sans jamais dupliquer le contenu du template dans la prose. | |
| 79 | -- Pas de dépendance circulaire : `template/` ne pointe jamais vers les manuels ; `user_manual` ne référence jamais `administration_manual` (publics distincts). | |
| 80 | - | |
| 81 | -## Principes directeurs | |
| 82 | - | |
| 83 | -- **FR comme langue source** (aligné avec le projet gitrust french-first) ; les autres langues sont des traductions dérivées via `mdbook-i18n-helpers` (patterns `po/xx.po`) — le même workflow que `rust-lang/book`. | |
| 84 | -- **Diátaxis par manuel** : chaque manuel (user / admin) contient ses propres `tutorials/`, `how-to/`, `reference/`, `explanation/`. | |
| 85 | -- **Les templates** sont du code/config copiable, pas de la prose : un fichier = un cas d'usage. | |
| 86 | -- **Mermaid partout où une séquence, un flux ou une topologie clarifie plus que 10 lignes de texte.** | |
| 87 | -- **Documentation autonome** : la doc est **déconnectée** des sources gitrust. Tout exemple (config, extrait de code, schéma, diagramme) est **copié** dans la doc, jamais référencé par lien local ni par chemin relatif sortant de `girust_doc/`. Un lecteur sur `demo.gitrust.eu` doit pouvoir tout trouver sans checkout du repo. Seule exception : lien HTTP vers le dépôt public (pour pointer vers le code de référence), mais le contenu reste dans la doc. Quand gitrust évolue, sync manuelle documentée dans `CONTRIBUTING.md`. | |
| 88 | -- **Exigence pédagogique** : Diátaxis répond à « où placer le contenu », la pédagogie répond à « comment le contenu fait apprendre ». Les deux s'appliquent ensemble dans `tutorials/` et `explanation/` (voir § Principes pédagogiques). | |
| 89 | - | |
| 90 | -## Principes pédagogiques (tutorials + explanation) | |
| 91 | - | |
| 92 | -Les tutoriels et explanations doivent construire une **compétence** chez le lecteur, pas seulement l'informer. Quatre leviers sont imposés : | |
| 93 | - | |
| 94 | -### 1. Objectifs d'apprentissage mesurables (Bloom) | |
| 95 | - | |
| 96 | -Chaque tutoriel déclare en tête ses objectifs en **verbes observables** (lister, exécuter, configurer, diagnostiquer, comparer, concevoir). Interdits : *comprendre, maîtriser, savoir, connaître, se familiariser avec*. | |
| 97 | - | |
| 98 | -```markdown | |
| 99 | -## Objectifs | |
| 100 | -À la fin de ce tutoriel, vous saurez : | |
| 101 | -- O1. [verbe Bloom] [objet concret] | |
| 102 | -- O2. [verbe Bloom] [objet concret] | |
| 103 | -- O3. [verbe Bloom] [objet concret] | |
| 104 | -``` | |
| 105 | - | |
| 106 | -Tutoriels débutants : Bloom niveaux 1-3 (mémoriser, comprendre, appliquer). Explanations : Bloom 2, 4, 5 (comprendre, analyser, évaluer). | |
| 107 | - | |
| 108 | -### 2. Charge cognitive maîtrisée (Sweller) | |
| 109 | - | |
| 110 | -- **≤ 3 concepts nouveaux** par tutoriel débutant. | |
| 111 | -- **≤ 7 étapes séquentielles** sans checkpoint récapitulatif. | |
| 112 | -- Texte et code **côte-à-côte** (pas de bloc de code sans annotation adjacente). | |
| 113 | -- Jargon défini **à sa première apparition**. | |
| 114 | -- Digressions/options/alternatives déportées en `reference/` (charge extrinsèque). | |
| 115 | - | |
| 116 | -### 3. Scaffolding — étayage dégressif entre tutoriels | |
| 117 | - | |
| 118 | -Le niveau d'aide recule d'exactement **un cran** entre deux tutoriels consécutifs : | |
| 119 | - | |
| 120 | -| Niveau | Nature | Position dans le parcours | | |
| 121 | -|---|---|---| | |
| 122 | -| 1 | Copier-coller intégral (100 % fourni) | Tutoriel 01-02 | | |
| 123 | -| 2 | Compléter un trou (80 % fourni) | Tutoriel 03-04 | | |
| 124 | -| 3 | Combiner des recettes existantes (50 %) | Tutoriel capstone | | |
| 125 | -| 4 | Résoudre avec recettes dispo (20 %) | How-to (post-parcours) | | |
| 126 | - | |
| 127 | -Sauter deux crans = décrochage garanti. | |
| 128 | - | |
| 129 | -### 4. Feedback formatif — checkpoints observables | |
| 130 | - | |
| 131 | -Aucun apprenant n'avance **plus de 2 étapes sans feedback observable** : | |
| 132 | -- Sortie console attendue affichée **verbatim** | |
| 133 | -- Capture d'écran UI (ou description textuelle du résultat visible) | |
| 134 | -- Commande de vérification (« pour confirmer, exécutez `git status` — vous devriez voir… ») | |
| 135 | -- Section « **Et si ça ne marche pas** » avec les **3 erreurs les plus probables** et leur correction | |
| 136 | - | |
| 137 | -### 5. Ancrage mental avant la pratique | |
| 138 | - | |
| 139 | -Chaque tutoriel et explanation **commence** par installer le modèle mental **avant** toute commande : | |
| 140 | -- Une analogie avec le connu | |
| 141 | -- Un schéma Mermaid des acteurs et flux | |
| 142 | -- Un contre-exemple le cas échéant | |
| 143 | -- Un exemple prototype mémorable | |
| 144 | - | |
| 145 | -## Parcours d'apprentissage par persona | |
| 146 | - | |
| 147 | -Chaque manuel est un **parcours** explicite, pas un sac de tutoriels isolés. | |
| 148 | - | |
| 149 | -### user_manual — parcours utilisateur (≈ 90 min) | |
| 150 | - | |
| 151 | -```mermaid | |
| 152 | -graph LR | |
| 153 | - A[Compte créé] --> B[01-premier-pas<br/>20 min] | |
| 154 | - B --> C[02-cloner-pousser<br/>25 min] | |
| 155 | - C --> D[03-collaborer<br/>25 min] | |
| 156 | - D --> E[04-automatiser-ci<br/>20 min] | |
| 157 | - E --> F[Utilisateur autonome] | |
| 158 | -``` | |
| 159 | - | |
| 160 | -- **État initial** : a un compte gitrust, Git installé | |
| 161 | -- **État final** : pousse du code, ouvre et review des PR, configure une CI | |
| 162 | -- **Scaffolding** : 01 = copier-coller intégral → 04 = compose à partir de recettes | |
| 163 | - | |
| 164 | -### administration_manual — parcours admin (≈ 3 h) | |
| 165 | - | |
| 166 | -```mermaid | |
| 167 | -graph LR | |
| 168 | - A[VM prête<br/>Docker installé] --> B[01-installation-docker<br/>30 min] | |
| 169 | - B --> C[02-installation-systemd<br/>45 min] | |
| 170 | - C --> D[03-premier-demarrage<br/>20 min] | |
| 171 | - D --> E[04-mise-en-production<br/>90 min] | |
| 172 | - E --> F[Admin opérationnel] | |
| 173 | -``` | |
| 174 | - | |
| 175 | -- **État initial** : Linux admin, DNS prêt, TLS compris | |
| 176 | -- **État final** : instance prod qui tourne, sauvegardée, monitorée | |
| 177 | - | |
| 178 | -### developer_manual — parcours contributeur (≈ 4 h) | |
| 179 | - | |
| 180 | -```mermaid | |
| 181 | -graph LR | |
| 182 | - A[Utilisateur autonome] --> B[01-getting-started<br/>45 min] | |
| 183 | - B --> C[02-premiere-contribution<br/>90 min] | |
| 184 | - C --> D[03-creer-un-worker-async<br/>capstone 120 min] | |
| 185 | - D --> E[Core contributor] | |
| 186 | -``` | |
| 187 | - | |
| 188 | -- **État initial** : Rust ≥ 3 mois, connaît Git/HTTP/PostgreSQL | |
| 189 | -- **État final** : capable d'ajouter une feature gitrust de A à Z avec tests | |
| 190 | -- **Capstone** : tuto 03 (worker async) consolide sans guide pas-à-pas | |
| 191 | - | |
| 192 | -### Checkpoints de parcours | |
| 193 | - | |
| 194 | -Entre deux tutoriels, l'`index.md` du manuel affiche un encart : « Vous devriez maintenant savoir faire X avant de passer au suivant — si ce n'est pas le cas, relisez le tutoriel précédent ». | |
| 195 | - | |
| 196 | -## Templates pédagogiques imposés | |
| 197 | - | |
| 198 | -### Template tutoriel (augmente Diátaxis) | |
| 199 | - | |
| 200 | -```markdown | |
| 201 | -# [Titre promettant une expérience concrète] | |
| 202 | - | |
| 203 | -## Objectifs | |
| 204 | -À la fin de ce tutoriel, vous saurez : | |
| 205 | -- O1. [verbe Bloom 1-3] [objet concret] | |
| 206 | -- O2. [verbe Bloom 1-3] [objet concret] | |
| 207 | -- O3. [verbe Bloom 1-3] [objet concret] | |
| 208 | - | |
| 209 | -## Pré-requis | |
| 210 | -- **Technique** : [outils/versions installés] | |
| 211 | -- **Pédagogique** : tutoriel [précédent] complété | |
| 212 | -- **Temps estimé** : ~N minutes | |
| 213 | - | |
| 214 | -## Vue d'ensemble | |
| 215 | -[1 paragraphe + 1 schéma Mermaid qui installe le modèle mental] | |
| 216 | - | |
| 217 | -## Étape 1 : [action à l'impératif] | |
| 218 | -[1-2 phrases de contexte] | |
| 219 | - | |
| 220 | -```bash | |
| 221 | -[commande exacte] | |
| 222 | -``` | |
| 223 | - | |
| 224 | -Sortie attendue : | |
| 225 | -``` | |
| 226 | -[sortie verbatim] | |
| 227 | -``` | |
| 228 | - | |
| 229 | -**Checkpoint** : [vérification observable par l'apprenant] | |
| 230 | - | |
| 231 | -## Étape 2 : … | |
| 232 | -## Étape N : … | |
| 233 | - | |
| 234 | -## Récapitulatif | |
| 235 | -- ✓ O1 accompli en [faisant X] | |
| 236 | -- ✓ O2 accompli en [faisant Y] | |
| 237 | -- ✓ O3 accompli en [faisant Z] | |
| 238 | - | |
| 239 | -## Et si ça ne marche pas | |
| 240 | - | |
| 241 | -| Symptôme | Cause probable | Correction | | |
| 242 | -|---|---|---| | |
| 243 | -| `erreur 1` | … | … | | |
| 244 | -| `erreur 2` | … | … | | |
| 245 | -| `erreur 3` | … | … | | |
| 246 | - | |
| 247 | -## Prochaine étape | |
| 248 | -→ [tutoriel suivant dans le parcours] | |
| 249 | -``` | |
| 250 | - | |
| 251 | -### Template explanation | |
| 252 | - | |
| 253 | -```markdown | |
| 254 | -# Comprendre [concept] | |
| 255 | - | |
| 256 | -## Ce que vous allez comprendre | |
| 257 | -- [objectif Bloom niveau 2, 4 ou 5] | |
| 258 | - | |
| 259 | -## Le problème concret | |
| 260 | -[Situation réelle observable] | |
| 261 | - | |
| 262 | -## L'analogie | |
| 263 | -[Rapport au connu : « c'est comme… »] | |
| 264 | - | |
| 265 | -## Le modèle | |
| 266 | -[Schéma Mermaid + 2-3 paragraphes] | |
| 267 | - | |
| 268 | -## Alternatives et compromis | |
| 269 | -[Ce qui aurait pu être choisi, pourquoi pas ici] | |
| 270 | - | |
| 271 | -## Vérifier votre compréhension | |
| 272 | -1. [Question ouverte Bloom 2] | |
| 273 | -2. [Question ouverte Bloom 4] | |
| 274 | - | |
| 275 | -## Pour aller plus loin | |
| 276 | -- [Reference des détails techniques] | |
| 277 | -- [How-to qui applique ce concept] | |
| 278 | -``` | |
| 279 | - | |
| 280 | -## Arborescence cible | |
| 281 | - | |
| 282 | -``` | |
| 283 | -girust_doc/ | |
| 284 | -├── README.md # Présentation + lien vers demo.gitrust.eu | |
| 285 | -├── book.toml # Config mdBook globale (FR source) | |
| 286 | -├── theme/ # Thème custom gitrust (logo, couleurs) | |
| 287 | -├── po/ # Traductions gettext (mdbook-i18n-helpers) | |
| 288 | -│ ├── en.po # Anglais (prioritaire) | |
| 289 | -│ ├── de.po es.po pt.po it.po # Autres langues (stubs initiaux) | |
| 290 | -├── src/ # Source mdBook (FR, canonique) | |
| 291 | -│ ├── SUMMARY.md # Sommaire global avec 3 manuels | |
| 292 | -│ ├── introduction.md # Qu'est-ce que gitrust, philosophie, roadmap | |
| 293 | -│ ├── user_manual/ # → monté depuis ../user_manual/ | |
| 294 | -│ ├── administration_manual/ # → monté depuis ../administration_manual/ | |
| 295 | -│ └── template/ # → monté depuis ../template/ | |
| 296 | -├── user_manual/ # MANUEL UTILISATEUR (Diátaxis) | |
| 297 | -│ ├── index.md | |
| 298 | -│ ├── tutorials/ # Apprentissage guidé pas-à-pas | |
| 299 | -│ │ ├── 01-premier-pas.md # Inscription, 2FA, premier dépôt | |
| 300 | -│ │ ├── 02-cloner-pousser.md # SSH keys + git clone/push | |
| 301 | -│ │ ├── 03-collaborer.md # Équipes, issues, pull requests | |
| 302 | -│ │ └── 04-automatiser-ci.md # Premier .gitrust-ci.yml | |
| 303 | -│ ├── how-to/ # Recettes orientées tâche | |
| 304 | -│ │ ├── gerer-cles-ssh.md | |
| 305 | -│ │ ├── configurer-2fa.md | |
| 306 | -│ │ ├── creer-personal-access-token.md | |
| 307 | -│ │ ├── gerer-equipes-permissions.md | |
| 308 | -│ │ ├── ouvrir-pull-request.md | |
| 309 | -│ │ ├── fusionner-strategies.md # ff / squash / merge commit | |
| 310 | -│ │ ├── utiliser-labels-issues.md | |
| 311 | -│ │ ├── importer-depot-externe.md | |
| 312 | -│ │ └── consulter-sbom.md | |
| 313 | -│ ├── reference/ | |
| 314 | -│ │ ├── modele-permissions.md # 4 rôles (Reader/Dev/Maint/Owner) | |
| 315 | -│ │ ├── api-rest-v1.md # Lien Swagger + auth flow + pagination | |
| 316 | -│ │ ├── .gitrust-ci-yml-schema.md # Schéma YAML complet Easy Mode | |
| 317 | -│ │ ├── markdown-et-syntaxe.md # Syntaxe supportée dans README/issues | |
| 318 | -│ │ └── notifications.md # SSE + email + préférences | |
| 319 | -│ └── explanation/ | |
| 320 | -│ ├── modele-collaboration.md # Philosophie code review gitrust | |
| 321 | -│ ├── securite-utilisateur.md # Pourquoi 2FA, hash PAT, audit log | |
| 322 | -│ └── cycle-vie-pull-request.md # Avec diagramme Mermaid | |
| 323 | -├── developer_manual/ # MANUEL DÉVELOPPEUR (Diátaxis) — NOUVEAU | |
| 324 | -│ ├── index.md | |
| 325 | -│ ├── tutorials/ | |
| 326 | -│ │ ├── 01-getting-started.md # ← gitrust/docs/GETTING_STARTED.md (as-is) | |
| 327 | -│ │ ├── 02-premiere-contribution.md # Clone, build, test, première PR | |
| 328 | -│ │ └── 03-creer-un-worker-async.md # TDD pas-à-pas (adapté de plans/import-async-worker.md) | |
| 329 | -│ ├── how-to/ | |
| 330 | -│ │ ├── contribuer-workflow-pr.md # Workflow Git + review + QA | |
| 331 | -│ │ ├── lancer-tests-unitaires.md # ← gitrust/docs/TESTING.md (section unitaires) | |
| 332 | -│ │ ├── lancer-tests-e2e.md # ← gitrust/docs/TESTS_E2E.md (section playwright) | |
| 333 | -│ │ ├── ajouter-route-web.md # Patron rustwarden → axum handler | |
| 334 | -│ │ ├── ajouter-service-metier.md # Patron service + injection + tests | |
| 335 | -│ │ ├── ajouter-migration-db.md # SeaORM, ordre, rollback | |
| 336 | -│ │ ├── implementer-webhooks.md # ← extrait GUIDE_DEVELOPPEMENT_PHASE5.md (LOT 5.1) | |
| 337 | -│ │ ├── implementer-endpoint-api.md # ← extrait GUIDE_DEVELOPPEMENT_PHASE5.md (LOT 5.2) | |
| 338 | -│ │ ├── importer-depot-externe-code.md # ← gitrust/docs/IMPORT_FLOW.md | |
| 339 | -│ │ ├── contribuer-a-rustwarden.md # ← gitrust/docs/UPSTREAM_RUSTWARDEN.md | |
| 340 | -│ │ └── passer-la-qa-avant-merge.md # Checklist pre-merge (extrait QA_RULES.md) | |
| 341 | -│ ├── reference/ | |
| 342 | -│ │ ├── architecture-crates.md # ← gitrust/docs/ARCHITECTURE.md (as-is) | |
| 343 | -│ │ ├── services-api-interne.md # ← gitrust/docs/SERVICES_REFERENCE.md (à compléter) | |
| 344 | -│ │ ├── schema-base-donnees.md # ← gitrust/docs/DATABASE.md (ERD + tables) | |
| 345 | -│ │ ├── regles-qa-anssi.md # ← gitrust/docs/QA_RULES.md (gates, lints, ANSSI) | |
| 346 | -│ │ ├── api-rest-v1.md # Swagger link + auth + pagination + errors | |
| 347 | -│ │ ├── git-hooks-post-receive.md # Référence des hooks exposés | |
| 348 | -│ │ └── rustwarden-core-api.md # Helpers, extracteurs, middleware rustwarden | |
| 349 | -│ └── explanation/ | |
| 350 | -│ ├── vue-ensemble-architecture.md # ← gitrust/docs/ARCHITECTURE.md (partie narrative) | |
| 351 | -│ ├── flux-requetes.md # ← gitrust/docs/SEQUENCES.md (diagrammes Mermaid) | |
| 352 | -│ ├── modele-permissions-rbac.md # 4 rôles × teams × repo scope | |
| 353 | -│ ├── 2fa-fonctionnement.md # ← extrait CHANGELOG_2FA_EMAIL_LOGIN.md | |
| 354 | -│ ├── hierarchie-labels.md # ← extrait REALISE_LOT12.md | |
| 355 | -│ ├── ci-dagger-easy-vs-power.md # ← extrait DAGGER_CI_ANALYSIS.md | |
| 356 | -│ ├── decisions-ui-htmx.md # ← extrait PLAN_UI_TRANSFORMATION.md | |
| 357 | -│ └── patron-worker-async.md # ← extrait plans/import-async-worker.md | |
| 358 | -├── administration_manual/ # MANUEL D'ADMINISTRATION (Diátaxis) | |
| 359 | -│ ├── index.md | |
| 360 | -│ ├── tutorials/ | |
| 361 | -│ │ ├── 01-installation-docker.md # Stack docker-compose complète | |
| 362 | -│ │ ├── 02-installation-systemd.md # Binaire natif + service | |
| 363 | -│ │ ├── 03-premier-demarrage.md # Admin bootstrap, SSH host key, migrations | |
| 364 | -│ │ └── 04-mise-en-production-192-168.md # ← plans/deploiement-local-192-168-1-57.md (as-is, généralisé) | |
| 365 | -│ ├── how-to/ | |
| 366 | -│ │ ├── sauvegarder-restaurer.md # pg_dump + repos bare + SSH keys | |
| 367 | -│ │ ├── mettre-a-jour.md # Upgrade checklist (migrations auto) | |
| 368 | -│ │ ├── configurer-smtp.md | |
| 369 | -│ │ ├── configurer-oauth.md # Google/GitHub providers via rustwarden | |
| 370 | -│ │ ├── configurer-ci-runner-remote.md # ← gitrust/docs/CI_REMOTE_RUNNER.md | |
| 371 | -│ │ ├── integrer-dependency-track.md # ← gitrust/docs/CI_AND_DEPENDENCY_TRACKER.md | |
| 372 | -│ │ ├── durcir-avec-fail2ban.md # ← gitrust/docs/FAIL2BAN_DEPLOYMENT.md (as-is) | |
| 373 | -│ │ ├── tuner-rate-limiting.md | |
| 374 | -│ │ ├── forcer-2fa-globalement.md # ← extrait CHANGELOG_FORCE_2FA.md | |
| 375 | -│ │ ├── depanner-ssh.md # Keys, ports, fingerprints | |
| 376 | -│ │ ├── depanner-ci.md | |
| 377 | -│ │ ├── gerer-utilisateurs-admin.md # Panel /admin | |
| 378 | -│ │ └── auditer-instance.md # Logs journalctl, audit log, métriques | |
| 379 | -│ ├── reference/ | |
| 380 | -│ │ ├── variables-environnement.md # Index thématique du .env (lien vers .env.example) | |
| 381 | -│ │ ├── parametres-dynamiques.md # Table app_settings, /admin/settings | |
| 382 | -│ │ ├── schema-base-de-donnees.md # Résumé + lien vers ../gitrust/docs/DATABASE.md | |
| 383 | -│ │ ├── ports-et-services.md # 4000 HTTP, 2222 SSH, 5432 PG | |
| 384 | -│ │ └── conformite-anssi-pa074.md # Checklist QA_RULES appliquée | |
| 385 | -│ └── explanation/ | |
| 386 | -│ ├── architecture-globale.md # Diagramme composants + flux requête | |
| 387 | -│ ├── modele-deploiement.md # Mono-machine vs HA, limites | |
| 388 | -│ ├── ci-dagger.md # Pourquoi Dagger, Easy vs Power Mode | |
| 389 | -│ └── strategie-sauvegarde.md # Rationale 3-2-1 adapté gitrust | |
| 390 | -├── template/ # EXEMPLES RÉUTILISABLES (code/config pur) | |
| 391 | -│ ├── index.md # Index des templates avec cas d'usage | |
| 392 | -│ ├── env/ | |
| 393 | -│ │ ├── dev-local.env | |
| 394 | -│ │ ├── production-mono-machine.env | |
| 395 | -│ │ ├── production-ci-heavy.env | |
| 396 | -│ │ └── tests-e2e.env | |
| 397 | -│ ├── docker/ | |
| 398 | -│ │ ├── docker-compose.minimal.yml | |
| 399 | -│ │ ├── docker-compose.production.yml # + Redis sessions + SMTP | |
| 400 | -│ │ ├── docker-compose.with-ci-runner.yml | |
| 401 | -│ │ └── podman-quadlet.container # Alternative Docker | |
| 402 | -│ ├── reverse-proxy/ | |
| 403 | -│ │ ├── nginx-tls.conf | |
| 404 | -│ │ ├── caddy-Caddyfile | |
| 405 | -│ │ └── traefik-dynamic.yml | |
| 406 | -│ ├── systemd/ | |
| 407 | -│ │ ├── gitrust.service # + hardening AppArmor/seccomp | |
| 408 | -│ │ └── gitrust-backup.timer | |
| 409 | -│ ├── ci/ | |
| 410 | -│ │ ├── rust.gitrust-ci.yml | |
| 411 | -│ │ ├── go.gitrust-ci.yml | |
| 412 | -│ │ ├── python.gitrust-ci.yml | |
| 413 | -│ │ ├── node.gitrust-ci.yml | |
| 414 | -│ │ └── dagger-power-mode/ # Squelette .dagger/ | |
| 415 | -│ │ ├── dagger.json | |
| 416 | -│ │ └── main.go | |
| 417 | -│ ├── backup/ | |
| 418 | -│ │ ├── backup.sh # pg_dump + rsync repos | |
| 419 | -│ │ └── restore.sh | |
| 420 | -│ ├── api-clients/ | |
| 421 | -│ │ ├── python-create-repo.py | |
| 422 | -│ │ ├── rust-list-repos.rs | |
| 423 | -│ │ └── curl-pat-auth.sh | |
| 424 | -│ └── migration/ | |
| 425 | -│ ├── from-gitea.sh # Import en masse via worker | |
| 426 | -│ └── from-forgejo.sh | |
| 427 | -├── diagrams/ # Sources Mermaid partagées | |
| 428 | -│ ├── architecture-globale.mmd | |
| 429 | -│ ├── flux-auth-ssh.mmd # (adapté de gitrust/docs/SEQUENCES.md) | |
| 430 | -│ ├── cycle-vie-pr.mmd | |
| 431 | -│ ├── pipeline-ci-dagger.mmd | |
| 432 | -│ └── topologie-deploiement.mmd | |
| 433 | -├── .github/workflows/ # Ou .gitrust-ci.yml si hébergé sur gitrust | |
| 434 | -│ └── build-docs.yml # mdBook build + lint + deploy demo.gitrust.eu | |
| 435 | -├── .markdownlint.yaml # Règles lint (longueur ligne, headings, etc.) | |
| 436 | -├── CONTRIBUTING.md # Workflow traduction po, conventions FR | |
| 437 | -├── CLAUDE.md # Directives projet pour Claude Code (voir § Directives projet) | |
| 438 | -└── .plans/ # Plans de travail (tous plans futurs ici, pas dans ~/.claude/plans/) | |
| 439 | - └── 001-scaffold-initial.md # Copie/déplacement du présent plan | |
| 440 | -``` | |
| 441 | - | |
| 442 | -## Directives projet (CLAUDE.md local) | |
| 443 | - | |
| 444 | -Un fichier `CLAUDE.md` est créé à la racine de `girust_doc/` avec au minimum : | |
| 445 | - | |
| 446 | -- **Plans de travail** : tout plan (issu de `/plan`, `ExitPlanMode`, autopilot, etc.) doit être écrit dans `./.plans/` à la racine du projet, jamais dans `~/.claude/plans/`. Numérotation séquentielle `NNN-slug.md`. Les plans restent versionnés avec le dépôt. | |
| 447 | -- **Langue canonique** : FR pour les sources, EN prioritaire en traduction. | |
| 448 | -- **Diátaxis strict** : aucun nouveau fichier de contenu hors des 4 dossiers `tutorials/`, `how-to/`, `reference/`, `explanation/` de chaque manuel. | |
| 449 | -- **Templates = code pur** : pas de prose dans `template/` (sauf `index.md`). | |
| 450 | -- **Mermaid centralisé** : sources `.mmd` dans `diagrams/`, référencées depuis les `.md` via include mdBook. | |
| 451 | - | |
| 452 | -Ce plan lui-même est copié vers `./.plans/001-scaffold-initial.md` dans le premier commit. | |
| 453 | - | |
| 454 | -## Fichiers critiques à créer en priorité (ordre d'exécution) | |
| 455 | - | |
| 456 | -1. **`CLAUDE.md`** racine + **`.plans/001-scaffold-initial.md`** (copie de ce plan) — avant tout le reste, pour verrouiller la convention. | |
| 457 | -2. **`book.toml`** — config mdBook avec `[preprocessor.gettext]`, `[output.html]` thème, `[preprocessor.mermaid]`. | |
| 458 | -3. **`src/SUMMARY.md`** — squelette complet de l'arborescence ci-dessus (placeholders). | |
| 459 | -4. **`README.md`** racine — présentation du dépôt doc (pas de la plateforme), comment contribuer. | |
| 460 | -5. **`CONTRIBUTING.md`** — workflow `po/*.po` pour traduction, conventions nommage, règles Mermaid. | |
| 461 | -6. **4 `index.md`** — `user_manual/`, `administration_manual/`, `developer_manual/`, `template/` avec carte de navigation Diátaxis. | |
| 462 | -7. **Import en bloc des fichiers "or"** de `gitrust/docs/` (13 fichiers) vers les destinations listées dans le mapping — copie + ajustement d'en-tête + vérification Diátaxis. | |
| 463 | -8. **4 tutoriels phares** (1 par manuel) pour prouver que le scaffold fonctionne bout en bout : | |
| 464 | - - `user_manual/tutorials/01-premier-pas.md` | |
| 465 | - - `administration_manual/tutorials/01-installation-docker.md` | |
| 466 | - - `developer_manual/tutorials/01-getting-started.md` (import direct) | |
| 467 | - - `template/env/dev-local.env` + `template/docker/docker-compose.minimal.yml` | |
| 468 | -9. **`diagrams/architecture-globale.mmd`** + `flux-requetes.mmd` (extraits des Mermaid existants dans `docs/SEQUENCES.md`). | |
| 469 | -10. **`.markdownlint.yaml`** + **`.github/workflows/build-docs.yml`** — CI de build + lint dès le début. | |
| 470 | - | |
| 471 | -## Mapping gitrust/docs → girust_doc (basé sur audit complet, 44 fichiers) | |
| 472 | - | |
| 473 | -> **Rappel** : `girust_doc` est autonome. Toutes les flèches `←` ci-dessous signifient **copier le contenu** dans le fichier cible, pas un lien. Une fois copié, la doc ne dépend plus du dépôt source. | |
| 474 | - | |
| 475 | -### Fichiers "or" — publiables tels quels (copier + adapter en-tête + Diátaxis) | |
| 476 | - | |
| 477 | -| Source (gitrust/) | Destination (girust_doc/) | Manuel | Mode | | |
| 478 | -|---|---|---|---| | |
| 479 | -| `docs/GETTING_STARTED.md` | `developer_manual/tutorials/01-getting-started.md` | dev | tutorial | | |
| 480 | -| `docs/ARCHITECTURE.md` | `developer_manual/reference/architecture-crates.md` + `developer_manual/explanation/vue-ensemble-architecture.md` (scindé) | dev | reference + explanation | | |
| 481 | -| `docs/SEQUENCES.md` | `developer_manual/explanation/flux-requetes.md` + sources `.mmd` dans `diagrams/` | dev | explanation | | |
| 482 | -| `docs/TESTING.md` | `developer_manual/how-to/lancer-tests-unitaires.md` | dev | how-to | | |
| 483 | -| `docs/TESTS_E2E.md` | `developer_manual/how-to/lancer-tests-e2e.md` | dev | how-to | | |
| 484 | -| `docs/QA_RULES.md` | `developer_manual/reference/regles-qa-anssi.md` | dev | reference | | |
| 485 | -| `docs/SETTINGS.md` | `administration_manual/reference/parametres-dynamiques.md` | admin | reference | | |
| 486 | -| `docs/CI_AND_DEPENDENCY_TRACKER.md` | `administration_manual/how-to/integrer-dependency-track.md` | admin | how-to | | |
| 487 | -| `docs/CI_REMOTE_RUNNER.md` | `administration_manual/how-to/configurer-ci-runner-remote.md` | admin | how-to | | |
| 488 | -| `docs/FAIL2BAN_DEPLOYMENT.md` | `administration_manual/how-to/durcir-avec-fail2ban.md` | admin | how-to | | |
| 489 | -| `docs/plans/deploiement-local-192-168-1-57.md` | `administration_manual/tutorials/04-mise-en-production-192-168.md` (généralisé) | admin | tutorial | | |
| 490 | -| `docs/UPSTREAM_RUSTWARDEN.md` | `developer_manual/how-to/contribuer-a-rustwarden.md` | dev | how-to | | |
| 491 | -| `docs/IMPORT_FLOW.md` | `developer_manual/how-to/importer-depot-externe-code.md` | dev | how-to | | |
| 492 | - | |
| 493 | -### Fichiers "mine" — extraits partiels à recomposer | |
| 494 | - | |
| 495 | -| Source | Extraits à publier | Destination | Mode | | |
| 496 | -|---|---|---|---| | |
| 497 | -| `docs/DATABASE.md` | ERD + tables publiques (pas le SQL interne brut) | `developer_manual/reference/schema-base-donnees.md` | reference | | |
| 498 | -| `docs/SERVICES_REFERENCE.md` | Structure + signatures — à **compléter** (inachevé à 100 lignes) | `developer_manual/reference/services-api-interne.md` | reference | | |
| 499 | -| `docs/CHANGELOG_2FA_EMAIL_LOGIN.md` | Transformer "changelog" en doc conceptuelle | `developer_manual/explanation/2fa-fonctionnement.md` | explanation | | |
| 500 | -| `docs/CHANGELOG_FORCE_2FA.md` | Feature flag + impact admin uniquement | `administration_manual/how-to/forcer-2fa-globalement.md` | how-to | | |
| 501 | -| `docs/DAGGER_CI_ANALYSIS.md` | Comparaison Easy vs Power Mode | `developer_manual/explanation/ci-dagger-easy-vs-power.md` | explanation | | |
| 502 | -| `docs/PLAN_UI_TRANSFORMATION.md` | Décisions design (DaisyUI, HTMX) — pas la roadmap | `developer_manual/explanation/decisions-ui-htmx.md` | explanation | | |
| 503 | -| `docs/GUIDE_DEVELOPPEMENT_PHASE5.md` | Diviser en deux : LOT 5.1 webhooks + LOT 5.2 API | `developer_manual/how-to/implementer-webhooks.md` + `implementer-endpoint-api.md` | how-to | | |
| 504 | -| `docs/plans/import-async-worker.md` | Patron TDD + worker + SSE (généraliser hors contexte import) | `developer_manual/explanation/patron-worker-async.md` + `tutorials/03-creer-un-worker-async.md` | explanation + tutorial | | |
| 505 | -| `docs/plans/import-repository-externe.md` | Démarche TDD MVP (généraliser) | Fusionné avec précédent | — | | |
| 506 | -| `docs/REALISE_LOT1.md` | Patron navigation arbre de fichiers | `developer_manual/how-to/ajouter-route-web.md` (exemple illustratif) | how-to | | |
| 507 | -| `docs/REALISE_LOT12.md` | Hiérarchie 2-niveaux des labels | `developer_manual/explanation/hierarchie-labels.md` | explanation | | |
| 508 | - | |
| 509 | -### Fichiers à ignorer (obsolètes, internes, ou confidentiels) | |
| 510 | - | |
| 511 | -| Fichier | Raison | | |
| 512 | -|---|---| | |
| 513 | -| `ARCHITECTURE.md` racine (pas `docs/`) | Généré par wizard rustwarden, obsolète — `docs/ARCHITECTURE.md` fait foi | | |
| 514 | -| `DEVELOPER.md` racine | Générique rustwarden, remplacé par le nouveau manuel dev | | |
| 515 | -| `docs/MIGRATION_GUIDE.md` | V1→V2 obsolète (daté 2026-03-26) | | |
| 516 | -| `docs/LOTS_RESTANTS.md` | TODO interne obsolète | | |
| 517 | -| `docs/ORDONNANCEMENT.md` | Planification interne des lots | | |
| 518 | -| `docs/evaluations.md` | Notes internes produit (49K tokens), pas pour publication | | |
| 519 | -| `docs/eval-credentials.local.md` | **Confidentiel — secrets**, ne jamais publier | | |
| 520 | -| `docs/Update_rustwarden_db_getter.md` + `project_rustwarden_db_getter.md` | Notes tech debt internes | | |
| 521 | -| `docs/REALISE_LOT2-11, 13-14, LOT_SSH` | Rétros sprints sans valeur pédagogique publique | | |
| 522 | - | |
| 523 | -### Autres fichiers existants (hors `docs/`) à copier dans la doc | |
| 524 | - | |
| 525 | -| Fichier source | Contenu copié dans la doc | | |
| 526 | -|---|---| | |
| 527 | -| `.env.example` | **Contenu complet copié** dans `administration_manual/reference/variables-environnement.md` (avec annotations et regroupement thématique) | | |
| 528 | -| `deployment/gitrust.service`, `nginx-gitrust.conf` | **Contenu copié** dans `template/systemd/gitrust.service` et `template/reverse-proxy/nginx-tls.conf` — fichiers standalone | | |
| 529 | -| `static/api-docs/openapi.yaml` | **Copie embarquée** dans `developer_manual/reference/openapi.yaml` + page `api-rest-v1.md` qui documente l'auth, la pagination, les codes erreur et intègre un rendu Swagger UI local (ou équivalent statique) | | |
| 530 | - | |
| 531 | -## Stratégie multilingue (les 6 langues) | |
| 532 | - | |
| 533 | -- **FR** : langue source, canonique, tous les fichiers `.md` dans `src/` et sous-dossiers. | |
| 534 | -- **EN** : traduction prioritaire, via `po/en.po` généré par `mdbook-xgettext`. | |
| 535 | -- **DE / ES / PT / IT** : fichiers `po/*.po` créés vides au scaffold, traduction progressive. | |
| 536 | -- Build mdBook produit 6 sites statiques (`book/fr/`, `book/en/`, ...) déployés sous `demo.gitrust.eu/docs/{lang}/`. | |
| 537 | -- Une page d'accueil statique avec sélecteur de langue redirige selon `Accept-Language`. | |
| 538 | -- **Hors-scope de ce plan** : traduire effectivement le contenu — seul le scaffold bilingue (FR + EN squelette) est livré ; les autres langues restent en stubs jusqu'à ce que la matière FR soit stable. | |
| 539 | - | |
| 540 | -## Scope de ce chantier (itération 1) | |
| 541 | - | |
| 542 | -**Inclus** : | |
| 543 | -- Toute l'arborescence de dossiers et fichiers index (vides ou avec TODO) listée ci-dessus — **incluant `developer_manual/`** | |
| 544 | -- `book.toml` fonctionnel, build local `mdbook serve` opérationnel | |
| 545 | -- **Import en bloc des 13 fichiers "or"** depuis `gitrust/docs/` vers leurs destinations (copie + ajustement d'en-tête + placement Diátaxis correct) | |
| 546 | -- 4 tutoriels phares rédigés (un par manuel : user, admin, dev, template) — **respectant le template pédagogique** : objectifs Bloom, prérequis explicites, modèle mental avant pratique, checkpoints observables toutes les 2 étapes max, sortie verbatim, section « Et si ça ne marche pas » avec 3 erreurs top, récap qui reprend chaque objectif, lien vers la suite du parcours | |
| 547 | -- 4 templates critiques rédigés (env dev, docker-compose minimal, nginx TLS, systemd) | |
| 548 | -- Diagrammes Mermaid architecture globale + flux-requetes (extraits de `docs/SEQUENCES.md`) | |
| 549 | -- CI de build + lint Markdown | |
| 550 | -- `README.md` + `CONTRIBUTING.md` | |
| 551 | -- Pipeline de traduction `po/` en place (en.po généré, autres stubs vides) | |
| 552 | - | |
| 553 | -**Exclus** (itérations ultérieures) : | |
| 554 | -- Extraction fine des 8 fichiers "mine" (recomposition manuelle nécessaire) | |
| 555 | -- Complétion de `SERVICES_REFERENCE.md` (inachevé à 100 lignes — nécessite lecture du code) | |
| 556 | -- Rédaction exhaustive des how-to et reference hors import (placeholders `TODO` listés) | |
| 557 | -- Traduction réelle des langues autres que FR | |
| 558 | -- Captures d'écran UI (nécessitent instance démo déployée) | |
| 559 | -- Documentation API interactive au-delà du lien Swagger existant | |
| 560 | -- Nettoyage du dépôt source `gitrust/docs/` (suppression des fichiers obsolètes identifiés — hors périmètre de ce dépôt doc) | |
| 561 | - | |
| 562 | -## Vérification | |
| 563 | - | |
| 564 | -1. **Build local** : `mdbook build` dans `/home/monsieurb/Documents/devel/girust_doc` produit `book/` sans erreur et sans warning de lien cassé. | |
| 565 | -2. **Serveur de dev** : `mdbook serve --open` affiche le sommaire, les **4 manuels** (user / admin / dev / template), les 4 tutoriels phares rédigés avec diagrammes Mermaid rendus correctement, et les 13 fichiers importés depuis `gitrust/docs/` accessibles via la navigation. | |
| 566 | -3. **Lint Markdown** : `markdownlint-cli2 "**/*.md"` passe sans erreur. | |
| 567 | -4. **Validation Mermaid** : chaque fichier `.mmd` dans `diagrams/` est parsable via `mermaid-cli` (`mmdc -i x.mmd -o x.svg`). | |
| 568 | -5. **Sommaire** : chaque entrée de `src/SUMMARY.md` pointe vers un fichier qui existe (pas de lien mort). | |
| 569 | -6. **Templates copiables** : `cp template/env/dev-local.env ../gitrust/.env && cd ../gitrust && cargo run` doit démarrer l'instance sans modification (validation du contrat avec `gitrust/.env.example`). | |
| 570 | -7. **i18n** : `mdbook build` avec `MDBOOK_BOOK__LANGUAGE=en` produit `book/en/` avec fichiers traduits pour les pages où `po/en.po` contient des entrées, et fallback FR pour le reste. | |
| 571 | -8. **CI GitHub/gitrust** : le workflow de build passe sur une PR factice ajoutant un `.md` incorrect (doit échouer) et sur un `.md` valide (doit passer). | |
| 572 | -9. **Audit pédagogique des 4 tutoriels phares** : chacun coche toute la checklist : | |
| 573 | - - [ ] Objectifs Bloom observables déclarés (`O1..On`) | |
| 574 | - - [ ] Prérequis technique + pédagogique + temps estimé explicites | |
| 575 | - - [ ] Modèle mental / schéma Mermaid **avant** la première commande | |
| 576 | - - [ ] ≤ 3 concepts nouveaux dans la page | |
| 577 | - - [ ] ≤ 2 étapes consécutives sans checkpoint observable | |
| 578 | - - [ ] Sortie verbatim à chaque commande | |
| 579 | - - [ ] Section « Et si ça ne marche pas » avec ≥ 3 erreurs top | |
| 580 | - - [ ] Récap reprend explicitement chaque `Oi` | |
| 581 | - - [ ] Lien vers la prochaine étape du parcours | |
| 582 | -10. **Audit de parcours** : chaque manuel (user, admin, dev) a dans son `index.md` un diagramme Mermaid du parcours complet avec temps, scaffolding dégressif d'exactement 1 cran entre tutoriels, pas de saut > 1 niveau Bloom. |
D
CLAUDE.md
+0
-81
@@ -1,81 +0,0 @@
| 1 | -# CLAUDE.md | |
| 2 | - | |
| 3 | -Directives projet pour Claude Code lorsqu'il intervient dans `girust_doc/`. | |
| 4 | - | |
| 5 | -## Mission du dépôt | |
| 6 | - | |
| 7 | -Documentation officielle publique de la plateforme **gitrust** (forge Git self-hosted en Rust). Publiée sur `https://demo.gitrust.eu`. Source : dépôt gitrust voisin `/home/monsieurb/Documents/devel/gitrust`. | |
| 8 | - | |
| 9 | -## Conventions inviolables | |
| 10 | - | |
| 11 | -### Plans de travail | |
| 12 | - | |
| 13 | -Tout plan issu de `/plan`, `ExitPlanMode`, `autopilot` ou tout autre workflow doit être écrit dans `./.plans/` à la racine du projet, **jamais** dans `~/.claude/plans/`. Numérotation séquentielle `NNN-slug.md`. Les plans sont versionnés avec le dépôt pour rester visibles par l'équipe. | |
| 14 | - | |
| 15 | -### Langue canonique | |
| 16 | - | |
| 17 | -- **Source** : français (FR) — tous les `.md` dans `src/` et sous-dossiers de contenu. | |
| 18 | -- **Traductions** : via `mdbook-i18n-helpers` dans `po/{en,de,es,pt,it}.po`. Aligné avec les 6 langues de l'UI gitrust. | |
| 19 | -- Ne jamais traduire manuellement en éditant un fichier `.md` non-FR : tout passe par `po/`. | |
| 20 | - | |
| 21 | -### Framework documentaire : Diátaxis strict | |
| 22 | - | |
| 23 | -Chaque manuel (`user_manual/`, `administration_manual/`) possède exactement quatre dossiers : | |
| 24 | - | |
| 25 | -- `tutorials/` — apprentissage guidé pas-à-pas (quand l'utilisateur apprend) | |
| 26 | -- `how-to/` — recettes orientées tâche (quand l'utilisateur veut résoudre un problème précis) | |
| 27 | -- `reference/` — description technique exhaustive (quand l'utilisateur cherche une information) | |
| 28 | -- `explanation/` — contexte, rationale, concepts (quand l'utilisateur veut comprendre) | |
| 29 | - | |
| 30 | -Aucun fichier de contenu hors de ces quatre dossiers. Interdit : `guides/`, `docs/`, `misc/`, etc. | |
| 31 | - | |
| 32 | -### Templates = code pur | |
| 33 | - | |
| 34 | -Le dossier `template/` contient uniquement des fichiers copiables (configs, scripts, exemples de code). Pas de prose explicative sauf dans `template/index.md`. Tout contexte narratif va dans un `how-to/` qui référence le template. | |
| 35 | - | |
| 36 | -### Mermaid | |
| 37 | - | |
| 38 | -Sources Mermaid dans `diagrams/*.mmd`. Les `.md` incluent les diagrammes via un bloc de code Mermaid ou une directive d'inclusion mdBook. Ne jamais dupliquer un diagramme dans plusieurs fichiers : un fichier `.mmd` = une source de vérité. | |
| 39 | - | |
| 40 | -### Documentation autonome (déconnectée des sources) | |
| 41 | - | |
| 42 | -**Ce dépôt est autosuffisant.** Un lecteur sur `demo.gitrust.eu` n'a pas accès au code de `gitrust/`. Tout exemple (config, extrait de code, schéma SQL, diagramme) doit être **copié** dans la doc, pas référencé par lien local. | |
| 43 | - | |
| 44 | -- `.env.example` de gitrust → son contenu est copié dans `administration_manual/reference/variables-environnement.md` | |
| 45 | -- Diagrammes Mermaid de `gitrust/docs/SEQUENCES.md` → copiés dans `diagrams/*.mmd` | |
| 46 | -- Modèles de données, patrons de code, recettes d'installation → intégrés dans les pages correspondantes | |
| 47 | -- **Pas de liens `file://`** ni de chemins relatifs sortant de `girust_doc/` | |
| 48 | -- **Seule exception admise** : lien HTTP vers le dépôt public `demo.gitrust.eu/gitrust/gitrust` pour pointer vers le "code de référence", mais le contenu pertinent reste présent dans la doc | |
| 49 | -- Conséquence : quand gitrust évolue, un travail de synchronisation manuel est nécessaire (documenté dans `CONTRIBUTING.md`) | |
| 50 | - | |
| 51 | -## Build et vérification | |
| 52 | - | |
| 53 | -```bash | |
| 54 | -mdbook build # produit book/ (FR) | |
| 55 | -mdbook serve --open # serveur de dev | |
| 56 | -MDBOOK_BOOK__LANGUAGE=en mdbook build # produit book/en/ | |
| 57 | -markdownlint-cli2 "**/*.md" # lint | |
| 58 | -mmdc -i diagrams/x.mmd -o /tmp/x.svg # validation Mermaid individuelle | |
| 59 | -``` | |
| 60 | - | |
| 61 | -CI : `.github/workflows/build-docs.yml` enchaîne build + lint + validation Mermaid sur chaque PR. | |
| 62 | - | |
| 63 | -## Structure imposée | |
| 64 | - | |
| 65 | -``` | |
| 66 | -girust_doc/ | |
| 67 | -├── CLAUDE.md # ce fichier | |
| 68 | -├── .plans/ # plans de travail versionnés | |
| 69 | -├── book.toml # config mdBook | |
| 70 | -├── src/SUMMARY.md # sommaire mdBook | |
| 71 | -├── user_manual/ # Diátaxis × 4 | |
| 72 | -├── administration_manual/ # Diátaxis × 4 | |
| 73 | -├── template/ # code/config copiables | |
| 74 | -├── diagrams/ # sources Mermaid | |
| 75 | -├── po/ # traductions gettext | |
| 76 | -└── theme/ # thème mdBook custom | |
| 77 | -``` | |
| 78 | - | |
| 79 | -## Projet source (gitrust) | |
| 80 | - | |
| 81 | -Tous les liens vers le code ou la config gitrust pointent vers `/home/monsieurb/Documents/devel/gitrust` en local et vers `https://demo.gitrust.eu/gitrust/gitrust` une fois publié. Toujours vérifier que le lien existe encore avant de le référencer dans une page publiée. |
GitRust