claudeos-core 2.3.2 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +790 -74
  2. package/CODE_OF_CONDUCT.md +15 -0
  3. package/README.de.md +374 -876
  4. package/README.es.md +374 -875
  5. package/README.fr.md +374 -875
  6. package/README.hi.md +374 -875
  7. package/README.ja.md +374 -875
  8. package/README.ko.md +374 -874
  9. package/README.md +374 -876
  10. package/README.ru.md +374 -877
  11. package/README.vi.md +374 -875
  12. package/README.zh-CN.md +374 -874
  13. package/SECURITY.md +51 -0
  14. package/bin/commands/init.js +192 -37
  15. package/content-validator/index.js +97 -4
  16. package/health-checker/index.js +44 -10
  17. package/package.json +92 -90
  18. package/pass-json-validator/index.js +58 -7
  19. package/pass-prompts/templates/angular/pass3.md +15 -14
  20. package/pass-prompts/templates/common/claude-md-scaffold.md +81 -0
  21. package/pass-prompts/templates/common/pass3-footer.md +104 -0
  22. package/pass-prompts/templates/java-spring/pass3.md +19 -18
  23. package/pass-prompts/templates/kotlin-spring/pass3.md +23 -22
  24. package/pass-prompts/templates/node-express/pass3.md +18 -17
  25. package/pass-prompts/templates/node-fastify/pass3.md +11 -10
  26. package/pass-prompts/templates/node-nestjs/pass3.md +11 -10
  27. package/pass-prompts/templates/node-nextjs/pass3.md +18 -17
  28. package/pass-prompts/templates/node-vite/pass3.md +11 -10
  29. package/pass-prompts/templates/python-django/pass3.md +18 -17
  30. package/pass-prompts/templates/python-fastapi/pass3.md +18 -17
  31. package/pass-prompts/templates/python-flask/pass3.md +9 -8
  32. package/pass-prompts/templates/vue-nuxt/pass3.md +9 -8
  33. package/plan-installer/domain-grouper.js +45 -5
  34. package/plan-installer/index.js +11 -1
  35. package/plan-installer/scanners/scan-java.js +98 -2
  36. package/plan-installer/stack-detector.js +44 -0
package/README.fr.md CHANGED
@@ -1,1015 +1,514 @@
1
1
  # ClaudeOS-Core
2
2
 
3
- **Le seul outil qui lit d'abord votre code source, confirme votre stack et vos patterns par une analyse déterministe, puis génère des règles Claude Code adaptées exactement à votre projet.**
3
+ [![npm version](https://img.shields.io/npm/v/claudeos-core.svg?logo=npm&label=npm)](https://www.npmjs.com/package/claudeos-core)
4
+ [![CI](https://img.shields.io/github/actions/workflow/status/claudeos-core/claudeos-core/test.yml?branch=master&logo=github&label=CI)](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
5
+ [![tests](https://img.shields.io/badge/tests-736%20passing-brightgreen?logo=node.js&logoColor=white)](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
6
+ [![node](https://img.shields.io/node/v/claudeos-core.svg?logo=node.js&logoColor=white&label=node)](https://nodejs.org/)
7
+ [![license](https://img.shields.io/npm/l/claudeos-core.svg?color=blue)](LICENSE)
8
+ [![downloads](https://img.shields.io/npm/dm/claudeos-core.svg?logo=npm&color=blue&label=downloads)](https://www.npmjs.com/package/claudeos-core)
4
9
 
5
- ```bash
6
- npx claudeos-core init
7
- ```
8
-
9
- ClaudeOS-Core lit votre codebase, extrait chaque pattern qu'il y trouve et génère un ensemble complet de Standards, Rules, Skills et Guides adaptés à _votre_ projet. Ensuite, quand vous dites à Claude Code « Crée un CRUD pour les commandes », il produit du code qui correspond exactement à vos patterns existants.
10
-
11
- [🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇯🇵 日本語](./README.ja.md) · [🇪🇸 Español](./README.es.md) · [🇻🇳 Tiếng Việt](./README.vi.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇩🇪 Deutsch](./README.de.md)
12
-
13
- ---
14
-
15
- ## Pourquoi ClaudeOS-Core ?
16
-
17
- Tous les autres outils Claude Code fonctionnent ainsi :
18
-
19
- > **Un humain décrit le projet → le LLM génère la documentation**
20
-
21
- ClaudeOS-Core fonctionne ainsi :
22
-
23
- > **Le code analyse vos sources → le code construit un prompt sur mesure → le LLM génère la documentation → le code vérifie la sortie**
24
-
25
- Ce n'est pas une petite différence. Voici pourquoi c'est important :
26
-
27
- ### Le problème fondamental : les LLMs devinent. Le code, non.
28
-
29
- Quand vous demandez à Claude d'« analyser ce projet », il **devine** votre stack, votre ORM, votre structure de domaines.
30
- Il peut voir `spring-boot` dans votre `build.gradle` mais ne pas réaliser que vous utilisez MyBatis (et non JPA).
31
- Il peut détecter un répertoire `user/` sans comprendre que votre projet utilise le packaging layer-first (Pattern A), pas domain-first (Pattern B).
32
-
33
- **ClaudeOS-Core ne devine pas.** Avant même que Claude ne voie votre projet, le code Node.js a déjà :
10
+ **Faites suivre à Claude Code les conventions de VOTRE projet dès la première tentative — pas des valeurs par défaut génériques.**
34
11
 
35
- - Parsé `build.gradle` / `package.json` / `pyproject.toml` et **confirmé** votre stack, ORM, BD et gestionnaire de paquets
36
- - Scanné votre structure de répertoires et **confirmé** votre liste de domaines avec le nombre de fichiers
37
- - Classifié la structure de votre projet selon l'un des 5 patterns Java, Kotlin CQRS/BFF, ou Next.js App Router/FSD
38
- - Divisé les domaines en groupes de taille optimale qui rentrent dans la fenêtre de contexte de Claude
39
- - Assemblé un prompt spécifique au stack avec tous les faits confirmés injectés
12
+ Un scanner Node.js déterministe lit d'abord votre code ; un pipeline Claude en 4 passes écrit ensuite l'ensemble complet — `CLAUDE.md` + `.claude/rules/` auto-chargé + standards + skills + L4 memory. 10 langues de sortie, 5 validators post-génération, et une path allowlist explicite qui empêche le LLM d'inventer des fichiers ou frameworks absents de votre code.
40
13
 
41
- Au moment Claude reçoit le prompt, il n'y a plus rien à deviner. Le stack est confirmé. Les domaines sont confirmés. Le pattern structurel est confirmé. Le seul travail de Claude est de générer une documentation qui correspond à ces **faits confirmés**.
14
+ Fonctionne sur [**12 stacks**](#supported-stacks) (monorepos inclus) une seule commande `npx`, sans config, resume-safe, idempotent.
42
15
 
43
- ### Le résultat
44
-
45
- Les autres outils produisent une documentation « globalement correcte ».
46
- ClaudeOS-Core produit une documentation qui sait que votre projet utilise `ApiResponse.ok()` (pas `ResponseEntity.success()`), que vos mappers MyBatis XML vivent dans `src/main/resources/mybatis/mappers/`, et que votre structure de packages est `com.company.module.{domain}.controller` — parce qu'il a lu votre code réel.
47
-
48
- ### Avant et après
49
-
50
- **Sans ClaudeOS-Core** — vous demandez à Claude Code de créer un CRUD Order :
51
- ```
52
- ❌ Utilise un repository style JPA (votre projet utilise MyBatis)
53
- ❌ Crée ResponseEntity.success() (votre wrapper est ApiResponse.ok())
54
- ❌ Place les fichiers dans order/controller/ (votre projet utilise controller/order/)
55
- ❌ Génère des commentaires en anglais (votre équipe écrit des commentaires en français)
56
- → Vous passez 20 minutes à corriger chaque fichier généré
57
- ```
58
-
59
- **Avec ClaudeOS-Core** — `.claude/rules/` contient déjà vos patterns confirmés :
60
- ```
61
- ✅ Génère un mapper MyBatis + XML (détecté depuis build.gradle)
62
- ✅ Utilise ApiResponse.ok() (extrait de votre vraie source)
63
- ✅ Place les fichiers dans controller/order/ (Pattern A confirmé par le scan structurel)
64
- ✅ Commentaires en français (--lang fr appliqué)
65
- → Le code généré correspond immédiatement aux conventions de votre projet
16
+ ```bash
17
+ npx claudeos-core init
66
18
  ```
67
19
 
68
- Cette différence se cumule. 10 tâches/jour × 20 minutes économisées = **plus de 3 heures/jour**.
20
+ [🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇯🇵 日本語](README.ja.md) · [🇪🇸 Español](README.es.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇷🇺 Русский](README.ru.md) · [🇩🇪 Deutsch](README.de.md)
69
21
 
70
22
  ---
71
23
 
72
- ## Assurance qualité post-génération (v2.3.0)
73
-
74
- La génération n'est que la moitié du problème. L'autre moitié est **savoir que la sortie est correcte** — à travers 10 langues de sortie, 11 templates de stack et des projets de toute taille. v2.3.0 ajoute deux validateurs déterministes qui s'exécutent après la génération et qui ne dépendent pas d'auto-vérifications du LLM.
75
-
76
- ### `claude-md-validator` — invariants structurels
77
-
78
- Chaque `CLAUDE.md` généré est vérifié par rapport à 25 invariants structurels qui n'utilisent que des signaux indépendants de la langue : syntaxe markdown (`^## `, `^### `), noms de fichiers littéraux (`decision-log.md`, `failure-patterns.md` — jamais traduits), nombre de sections, nombre de sous-sections par section, nombre de lignes de table. Le même validateur, octet pour octet, produit des verdicts identiques sur un `CLAUDE.md` généré en anglais, coréen, japonais, vietnamien, hindi, russe, espagnol, chinois, français ou allemand.
24
+ ## C'est quoi cet outil ?
79
25
 
80
- La garantie cross-langue est vérifiée par des fixtures de test dans les 10 langues, y compris des fixtures bad-case dans 6 de ces langues qui produisent des signatures d'erreur identiques. Lorsqu'un invariant échoue sur un projet en vietnamien, la correction est la même que lorsqu'il échoue sur un projet en allemand.
26
+ Vous utilisez Claude Code. Il est puissant, mais chaque session démarre à zéro il n'a aucun souvenir de la façon dont _votre_ projet est structuré. Du coup, il retombe sur des valeurs par défaut « globalement bonnes » qui correspondent rarement à ce que votre équipe fait réellement :
81
27
 
82
- ### `content-validator [10/10]` vérification des revendications de chemin et cohérence MANIFEST
28
+ - Votre équipe utilise **MyBatis**, mais Claude génère des repositories JPA.
29
+ - Votre wrapper de réponse est `ApiResponse.ok()`, mais Claude écrit `ResponseEntity.success()`.
30
+ - Vos packages sont organisés par couche (`controller/order/`), mais Claude crée par domaine (`order/controller/`).
31
+ - Vos erreurs passent par un middleware centralisé, mais Claude éparpille des `try/catch` dans chaque endpoint.
83
32
 
84
- Lit chaque référence de chemin entre backticks (`src/...`, `.claude/rules/...`, `claudeos-core/skills/...`) dans tous les fichiers `.md` générés et les vérifie contre le vrai système de fichiers. Attrape deux classes d'échecs LLM que aucun outil ne détectait auparavant :
33
+ Vous voudriez un jeu de `.claude/rules/` par projet Claude Code le charge automatiquement à chaque session mais écrire ces rules à la main pour chaque nouveau repo prend des heures, et elles dérivent à mesure que le code évolue.
85
34
 
86
- - **`STALE_PATH`** quand Pass 3 ou Pass 4 fabrique un chemin plausible mais inexistant. Trois classes canoniques : (1) **renormalisation identifiant → nom de fichier** — déduire un nom de fichier à partir d'une constante TypeScript en ALL_CAPS ou d'une annotation Java alors que le fichier réel suit une convention de nommage différente ; (2) **invention d'un point d'entrée par convention de framework** — supposer un fichier d'entrée standard (le module main de Vite, les providers d'app-router de Next.js, etc.) dans un projet ayant choisi une autre disposition ; (3) **invention d'un utilitaire au nom plausible** — citer un nom de fichier concret pour un helper qui « existerait naturellement » sous un répertoire visible.
87
- - **`MANIFEST_DRIFT`** — quand `claudeos-core/skills/00.shared/MANIFEST.md` enregistre un skill que `CLAUDE.md §6` ne mentionne pas (ou inversement). Reconnaît le layout courant orchestrator + sub-skills où `CLAUDE.md §6` est un point d'entrée et `MANIFEST.md` est le registre complet — les sub-skills sont considérés couverts via leur orchestrator parent.
35
+ **ClaudeOS-Core les écrit pour vous, à partir de votre code source réel.** Un scanner Node.js déterministe lit d'abord votre projet (stack, ORM, layout des packages, conventions, chemins de fichiers). Puis un pipeline Claude en 4 passes transforme les faits extraits en un ensemble documentaire complet :
88
36
 
89
- Le validateur est couplé à une prévention au moment du prompt dans `pass3-footer.md` et `pass4.md` : des blocs anti-pattern documentant les classes spécifiques d'hallucination (préfixe de répertoire parent, conventions de bibliothèques Vite/MSW/Vitest/Jest/RTL) et une guidance positive explicite pour scope les règles par répertoire quand un nom de fichier concret n'est pas dans `pass3a-facts.md`.
37
+ - **`CLAUDE.md`** l'index projet que Claude lit à chaque session
38
+ - **`.claude/rules/`** — rules auto-chargées par catégorie (`00.core` / `10.backend` / `20.frontend` / `30.security-db` / `40.infra` / `60.memory` / `70.domains` / `80.verification`)
39
+ - **`claudeos-core/standard/`** — documents de référence (le « pourquoi » derrière chaque rule)
40
+ - **`claudeos-core/skills/`** — patterns réutilisables (CRUD scaffolding, templates de pages)
41
+ - **`claudeos-core/memory/`** — decision log + failure patterns qui grandissent avec le projet
90
42
 
91
- ### Exécuter la validation sur n'importe quel projet
43
+ Parce que le scanner remet à Claude une path allowlist explicite, le LLM **ne peut pas inventer de fichiers ou frameworks qui ne sont pas dans votre code**. Cinq validators post-génération (`claude-md-validator`, `content-validator`, `pass-json-validator`, `plan-validator`, `sync-checker`) vérifient la sortie avant qu'elle ne soit publiée — language-invariant, donc les mêmes règles s'appliquent que vous génériez en anglais, en coréen ou dans l'une des 8 autres langues.
92
44
 
93
- ```bash
94
- npx claudeos-core health # tous les validateurs — verdict go/no-go unique
95
- npx claudeos-core lint # uniquement les invariants structurels de CLAUDE.md (n'importe quelle langue)
96
45
  ```
97
-
98
- ---
99
-
100
- ## Stacks Supportés
101
-
102
- | Stack | Détection | Profondeur d'analyse |
103
- |---|---|---|
104
- | **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 patterns de package | 10 catégories, 59 sous-éléments |
105
- | **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, auto-détection CQRS/BFF | 12 catégories, 95 sous-éléments |
106
- | **Node.js / Express** | `package.json` | 9 catégories, 57 sous-éléments |
107
- | **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 catégories, 68 sous-éléments |
108
- | **Next.js / React** | `package.json`, `next.config.*`, support FSD | 9 catégories, 55 sous-éléments |
109
- | **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 catégories, 58 sous-éléments |
110
- | **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 catégories, 55 sous-éléments |
111
- | **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 catégories, 58 sous-éléments |
112
- | **Node.js / Fastify** | `package.json` | 10 catégories, 62 sous-éléments |
113
- | **Vite / React SPA** | `package.json`, `vite.config.*` | 9 catégories, 55 sous-éléments |
114
- | **Angular** | `package.json`, `angular.json` | 12 catégories, 78 sous-éléments |
115
-
116
- Auto-détecté : langage et version, framework et version (y compris Vite en tant que framework SPA), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, etc.), base de données (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), gestionnaire de paquets (Gradle, Maven, npm, yarn, pnpm, pip, poetry), architecture (CQRS, BFF — à partir des noms de modules), structure multi-module (depuis settings.gradle), monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces), **configuration runtime depuis `.env.example`** (v2.2.0 — extraction de port/host/API-target à partir de plus de 16 noms de variables conventionnelles parmi les frameworks Vite · Next.js · Nuxt · Angular · Node · Python).
117
-
118
- **Vous n'avez rien à spécifier. Tout est détecté automatiquement.**
119
-
120
- ### Configuration runtime pilotée par `.env` (v2.2.0)
121
-
122
- v2.2.0 ajoute `lib/env-parser.js` pour que le `CLAUDE.md` généré reflète ce que le projet déclare réellement plutôt que les defaults framework.
123
-
124
- - **Ordre de recherche** : `.env.example` (canonique, commité) → `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`. La variante `.example` l'emporte parce qu'elle est la shape-of-truth neutre côté développeur, et non les overrides locaux d'un contributeur particulier.
125
- - **Conventions de variables de port reconnues** : `VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / `PORT` générique. Les noms spécifiques au framework l'emportent sur le `PORT` générique quand les deux sont présents.
126
- - **Host & API target** : `VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET`, etc.
127
- - **Priorité** : le `server.port` de `application.yml` Spring Boot gagne toujours (config framework-native), puis le port déclaré dans `.env`, puis le default framework (Vite 5173, Next.js 3000, Django 8000, etc.) en dernier recours.
128
- - **Redaction des variables sensibles** : les valeurs des variables correspondant aux patterns `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` sont remplacées par `***REDACTED***` avant d'atteindre n'importe quel générateur en aval. Defense-in-depth contre les secrets accidentellement commités dans `.env.example`. `DATABASE_URL` est explicitement whitelisté pour la back-compat d'identification BD du stack-detector.
129
-
130
- ### Détection des Domaines Java (5 patterns avec fallback)
131
-
132
- | Priorité | Pattern | Structure | Exemple |
133
- |---|---|---|---|
134
- | A | Layer d'abord | `controller/{domain}/` | `controller/user/UserController.java` |
135
- | B | Domaine d'abord | `{domain}/controller/` | `user/controller/UserController.java` |
136
- | D | Préfixe de module | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
137
- | E | DDD/Hexagonal | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
138
- | C | Plat | `controller/*.java` | `controller/UserController.java` → extrait `user` du nom de classe |
139
-
140
- Les domaines uniquement service (sans contrôleurs) sont également détectés via les répertoires `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Ignorés : `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, etc.
141
-
142
- ### Détection des Domaines Kotlin Multi-Module
143
-
144
- Pour les projets Kotlin avec structure Gradle multi-module (ex : monorepo CQRS) :
145
-
146
- | Étape | Ce que fait l'outil | Exemple |
147
- |---|---|---|
148
- | 1 | Scanne `settings.gradle.kts` pour trouver les `include()` | Trouve 14 modules |
149
- | 2 | Détecte le type de module depuis le nom | `reservation-command-server` → type : `command` |
150
- | 3 | Extrait le domaine du nom de module | `reservation-command-server` → domaine : `reservation` |
151
- | 4 | Regroupe le même domaine à travers les modules | `reservation-command-server` + `common-query-server` → 1 domaine |
152
- | 5 | Détecte l'architecture | Contient modules `command` + `query` → CQRS |
153
-
154
- Types de module supportés : `command`, `query`, `bff`, `integration`, `standalone`, `library`. Les bibliothèques partagées (`shared-lib`, `integration-lib`) sont détectées comme domaines spéciaux.
155
-
156
- ### Détection des Domaines Frontend
157
-
158
- - **App Router** : `app/{domain}/page.tsx` (Next.js)
159
- - **Pages Router** : `pages/{domain}/index.tsx`
160
- - **FSD (Feature-Sliced Design)** : `features/*/`, `widgets/*/`, `entities/*/`
161
- - **Split RSC/Client** : Détecte le pattern `client.tsx`, suit la séparation Server/Client des composants
162
- - **Chemins imbriqués non standards** : Détecte pages, components et couches FSD sous les chemins `src/*/` (ex : `src/admin/pages/dashboard/`, `src/admin/components/form/`, `src/admin/features/billing/`)
163
- - **Détection platform/tier-split (v2.0.0)** : Reconnaît les layouts `src/{platform}/{subapp}/` — `{platform}` peut être un mot-clé de device/cible (`desktop`, `pc`, `web`, `mobile`, `mc`, `mo`, `sp`, `tablet`, `tab`, `pwa`, `tv`, `ctv`, `ott`, `watch`, `wear`) ou un mot-clé de niveau d'accès (`admin`, `cms`, `backoffice`, `back-office`, `portal`). Émet un domaine par paire `(platform, subapp)` nommé `{platform}-{subapp}` avec des compteurs par domaine pour routes/components/layouts/hooks. Tourne simultanément sur Angular, Next.js, React et Vue (glob multi-extensions `{tsx,jsx,ts,js,vue}`). Nécessite ≥2 fichiers source par subapp pour éviter des domaines bruyants à 1 seul fichier.
164
- - **Split plateforme en monorepo (v2.0.0)** : Le scan de plateforme matche aussi `{apps,packages}/*/src/{platform}/{subapp}/` (Turborepo/pnpm workspace avec `src/`) et `{apps,packages}/{platform}/{subapp}/` (workspaces sans wrapper `src/`).
165
- - **Fallback E — fichier de routes (v2.0.0)** : Quand les scanners primaires + Fallbacks A–D renvoient tous 0, glob `**/routes/*.{tsx,jsx,ts,js,vue}` et regroupe par le nom du répertoire parent de `routes`. Capture les projets à routage par fichiers React Router (CRA/Vite + `react-router`) qui ne matchent ni `page.tsx` de Next.js ni les layouts FSD. Les noms de parent génériques (`src`, `app`, `pages`) sont filtrés.
166
- - **Fallback de config** : Détecte Next.js/Vite/Nuxt depuis les fichiers de config quand ils ne sont pas dans `package.json` (support monorepo)
167
- - **Fallback répertoire profond** : Pour les projets React/CRA/Vite/Vue/RN, scanne `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` à n'importe quelle profondeur
168
- - **Listes d'ignore partagées (v2.0.0)** : Tous les scanners partagent `BUILD_IGNORE_DIRS` (`node_modules`, `build`, `dist`, `out`, `.next`, `.nuxt`, `.svelte-kit`, `.angular`, `.turbo`, `.cache`, `.parcel-cache`, `coverage`, `storybook-static`, `.vercel`, `.netlify`) et `TEST_FILE_IGNORE` (spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`) pour que les sorties de build et les fixtures de test ne gonflent pas les compteurs par domaine.
169
-
170
- ### Overrides de scanner (v2.0.0)
171
-
172
- Déposez un `.claudeos-scan.json` optionnel à la racine de votre projet pour étendre les valeurs par défaut du scanner sans modifier le toolkit. Tous les champs sont **additifs** — les entrées utilisateur étendent les valeurs par défaut, ne les remplacent jamais :
173
-
174
- ```json
175
- {
176
- "frontendScan": {
177
- "platformKeywords": ["kiosk"],
178
- "skipSubappNames": ["legacy"],
179
- "minSubappFiles": 3
180
- }
181
- }
46
+ Avant : Vous → Claude Code → code « globalement bon » → corrections manuelles à chaque fois
47
+ Après : Vous → Claude Code → code qui colle à VOTRE projet → on expédie
182
48
  ```
183
49
 
184
- | Champ | Par défaut | But |
185
- |---|---|---|
186
- | `platformKeywords` | liste intégrée ci-dessus | Mots-clés `{platform}` supplémentaires pour le scan de plateforme (ex : `kiosk`, `vr`, `embedded`) |
187
- | `skipSubappNames` | répertoires structurels uniquement | Noms de subapp supplémentaires à exclure de l'émission de domaines du scan de plateforme |
188
- | `minSubappFiles` | `2` | Remplace le nombre minimum de fichiers requis avant qu'un subapp ne devienne un domaine |
189
-
190
- Fichier manquant ou JSON mal formé → retombe silencieusement aux valeurs par défaut (pas de crash). Usage typique : activer une abréviation courte (`adm`, `bo`) que la liste intégrée exclut comme trop ambiguë, ou augmenter `minSubappFiles` pour des monorepos bruyants.
191
-
192
50
  ---
193
51
 
194
- ## Démarrage Rapide
195
-
196
- ### Prérequis
197
-
198
- - **Node.js** v18+
199
- - **CLI Claude Code** (installée et authentifiée)
200
-
201
- ### Installation
202
-
203
- ```bash
204
- cd /your/project/root
205
-
206
- # Option A : npx (recommandé — pas d'installation nécessaire)
207
- npx claudeos-core init
208
-
209
- # Option B : installation globale
210
- npm install -g claudeos-core
211
- claudeos-core init
212
-
213
- # Option C : devDependency du projet
214
- npm install --save-dev claudeos-core
215
- npx claudeos-core init
216
-
217
- # Option D : git clone (pour développement/contribution)
218
- git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
219
-
220
- # Cross-plateforme (PowerShell, CMD, Bash, Zsh — n'importe quel terminal)
221
- node claudeos-core-tools/bin/cli.js init
222
-
223
- # Linux/macOS (Bash uniquement)
224
- bash claudeos-core-tools/bootstrap.sh
52
+ ## Démo sur un projet réel
53
+
54
+ Exécution sur [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) — Java 11 · Spring Boot 2.6 · MyBatis · SQLite · 187 source files. Résultat : **75 generated files**, durée totale **53 minutes**, tous les validators ✅.
55
+
56
+ <p align="center">
57
+ <img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
58
+ </p>
59
+
60
+ <details>
61
+ <summary><strong>📺 Sortie terminal (version texte, pour recherche et copie)</strong></summary>
62
+
63
+ ```text
64
+ ╔════════════════════════════════════════════════════╗
65
+ ║ ClaudeOS-Core — Bootstrap (4-Pass) ║
66
+ ╚════════════════════════════════════════════════════╝
67
+ Project root: spring-boot-realworld-example-app
68
+ Language: English (en)
69
+
70
+ [Phase 1] Detecting stack...
71
+ Language: java 11
72
+ Framework: spring-boot 2.6.3
73
+ Database: sqlite
74
+ ORM: mybatis
75
+ PackageMgr: gradle
76
+
77
+ [Phase 2] Scanning structure...
78
+ Backend: 2 domains
79
+ Total: 2 domains
80
+ Package: io.spring.infrastructure
81
+
82
+ [Phase 5] Active domains...
83
+ ✅ 00.core ✅ 10.backend ⏭️ 20.frontend
84
+ ✅ 30.security-db ✅ 40.infra
85
+ ✅ 80.verification ✅ 90.optional
86
+
87
+ [4] Pass 1 — Deep analysis per domain group...
88
+ ✅ pass1-1.json created (5m 34s)
89
+ [█████░░░░░░░░░░░░░░░] 25% (1/4)
90
+
91
+ [5] Pass 2 — Merging analysis results...
92
+ ✅ pass2-merged.json created (4m 22s)
93
+ [██████████░░░░░░░░░░] 50% (2/4)
94
+
95
+ [6] Pass 3 — Generating all files...
96
+ 🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
97
+ ✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
98
+ ✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
99
+ ✅ 3c complete (12m 35s) — 13 skills + 9 guides
100
+ ✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
101
+ 🎉 Pass 3 split complete: 4/4 stages successful
102
+ [███████████████░░░░░] 75% (3/4)
103
+
104
+ [7] Pass 4 — Memory scaffolding...
105
+ 📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
106
+ ✅ Pass 4 complete (5m)
107
+ 📋 Gap-fill: all 12 expected files already present
108
+ [████████████████████] 100% (4/4)
109
+
110
+ ╔═══════════════════════════════════════╗
111
+ ║ ClaudeOS-Core — Health Checker ║
112
+ ╚═══════════════════════════════════════╝
113
+ ✅ plan-validator pass
114
+ ✅ sync-checker pass
115
+ ✅ content-validator pass
116
+ ✅ pass-json-validator pass
117
+ ✅ All systems operational
118
+
119
+ [Lint] ✅ CLAUDE.md structure valid (25 checks)
120
+ [Content] ✅ All content validation passed
121
+ Total: 0 advisories, 0 notes
122
+
123
+ ╔════════════════════════════════════════════════════╗
124
+ ║ ✅ ClaudeOS-Core — Complete ║
125
+ ║ Files created: 75 ║
126
+ ║ Domains analyzed: 1 group ║
127
+ ║ L4 scaffolded: memory + rules ║
128
+ ║ Output language: English ║
129
+ ║ Total time: 53m 8s ║
130
+ ╚════════════════════════════════════════════════════╝
131
+ ```
132
+
133
+ </details>
134
+
135
+ <details>
136
+ <summary><strong>📄 Ce qui se retrouve dans votre <code>CLAUDE.md</code> (extrait réel — Section 1 + 2)</strong></summary>
137
+
138
+ ```markdown
139
+ # CLAUDE.md — spring-boot-realworld-example-app
140
+
141
+ > Reference implementation of the RealWorld backend specification on
142
+ > Java 11 + Spring Boot 2.6, exposing both REST and GraphQL endpoints
143
+ > over a hexagonal MyBatis persistence layer.
144
+
145
+ ## 1. Role Definition
146
+
147
+ As the senior developer for this repository, you are responsible for
148
+ writing, modifying, and reviewing code. Responses must be written in English.
149
+ A Java Spring Boot REST + GraphQL API server organized around a hexagonal
150
+ (ports & adapters) architecture, with a CQRS-lite read/write split inside
151
+ an XML-driven MyBatis persistence layer and JWT-based authentication.
152
+
153
+ ## 2. Project Overview
154
+
155
+ | Item | Value |
156
+ |---|---|
157
+ | Language | Java 11 |
158
+ | Framework | Spring Boot 2.6.3 |
159
+ | Build Tool | Gradle (Groovy DSL) |
160
+ | Persistence | MyBatis 3 via `mybatis-spring-boot-starter:2.2.2` (no JPA) |
161
+ | Database | SQLite (`org.xerial:sqlite-jdbc:3.36.0.3`) — `dev.db` (default), `:memory:` (test) |
162
+ | Migration | Flyway — single baseline `V1__create_tables.sql` |
163
+ | API Style | REST (`io.spring.api.*`) + GraphQL via Netflix DGS `:4.9.21` |
164
+ | Authentication | JWT HS512 (`jjwt-api:0.11.2`) + Spring Security `PasswordEncoder` |
165
+ | Server Port | 8080 (default) |
166
+ | Test Stack | JUnit Jupiter 5, Mockito, AssertJ, rest-assured, spring-mock-mvc |
225
167
  ```
226
168
 
227
- ### Langue de sortie (10 langues)
169
+ Chaque valeur ci-dessus — coordonnées exactes des dépendances, le nom de fichier `dev.db`, le nom de migration `V1__create_tables.sql`, « no JPA » — est extraite par le scanner depuis `build.gradle` / `application.properties` / l'arbre source avant que Claude n'écrive le fichier. Rien n'est deviné.
228
170
 
229
- Quand vous lancez `init` sans `--lang`, un sélecteur interactif apparaît — utilisez les flèches ou les touches numériques pour choisir :
171
+ </details>
230
172
 
231
- ```
232
- ╔══════════════════════════════════════════════════╗
233
- ║ Select generated document language (required) ║
234
- ╚══════════════════════════════════════════════════╝
235
-
236
- Les fichiers générés (CLAUDE.md, Standards, Rules,
237
- Skills, Guides) seront écrits en français.
238
-
239
- 1. en — English
240
- 2. ko — 한국어 (Korean)
241
- 3. zh-CN — 简体中文 (Chinese Simplified)
242
- 4. ja — 日本語 (Japanese)
243
- 5. es — Español (Spanish)
244
- 6. vi — Tiếng Việt (Vietnamese)
245
- 7. hi — हिन्दी (Hindi)
246
- 8. ru — Русский (Russian)
247
- ❯ 9. fr — Français (French)
248
- 10. de — Deutsch (German)
249
-
250
- ↑↓ Move 1-0 Jump Enter Select ESC Cancel
251
- ```
173
+ <details>
174
+ <summary><strong>🛡️ Une rule réelle auto-chargée (<code>.claude/rules/10.backend/01.controller-rules.md</code>)</strong></summary>
252
175
 
253
- La description change vers la langue sélectionnée au fur et à mesure que vous naviguez. Pour sauter le sélecteur, passez directement `--lang` :
176
+ ````markdown
177
+ ---
178
+ paths:
179
+ - "**/*"
180
+ ---
254
181
 
255
- ```bash
256
- npx claudeos-core init --lang ko # Coréen
257
- npx claudeos-core init --lang ja # Japonais
258
- npx claudeos-core init --lang en # Anglais (par défaut)
182
+ # Controller Rules
183
+
184
+ ## REST (`io.spring.api.*`)
185
+
186
+ - Controllers are the SOLE response wrapper for HTTP — no aggregator/facade above them.
187
+ Return `ResponseEntity<?>` or a body Spring serializes via `JacksonCustomizations`.
188
+ - Each controller method calls exactly ONE application service method. Multi-source
189
+ composition lives in the application service.
190
+ - Controllers MUST NOT import `io.spring.infrastructure.*`. No direct `@Mapper` access.
191
+ - Validate command-param arguments with `@Valid`. Custom JSR-303 constraints live under
192
+ `io.spring.application.{aggregate}.*`.
193
+ - Resolve the current user via `@AuthenticationPrincipal User`.
194
+ - Let exceptions propagate to `io.spring.api.exception.CustomizeExceptionHandler`
195
+ (`@ControllerAdvice`). Do NOT `try/catch` business exceptions inside the controller.
196
+
197
+ ## GraphQL (`io.spring.graphql.*`)
198
+
199
+ - DGS components (`@DgsComponent`) are the sole GraphQL response wrappers.
200
+ Use `@DgsQuery` / `@DgsData` / `@DgsMutation`.
201
+ - Resolve the current user via `io.spring.graphql.SecurityUtil.getCurrentUser()`.
202
+
203
+ ## Examples
204
+
205
+ ✅ Correct:
206
+ ```java
207
+ @PostMapping
208
+ public ResponseEntity<?> createArticle(@AuthenticationPrincipal User user,
209
+ @Valid @RequestBody NewArticleParam param) {
210
+ Article article = articleCommandService.createArticle(param, user);
211
+ ArticleData data = articleQueryService.findById(article.getId(), user)
212
+ .orElseThrow(ResourceNotFoundException::new);
213
+ return ResponseEntity.ok(Map.of("article", data));
214
+ }
259
215
  ```
260
216
 
261
- > **Remarque :** Cela définit la langue uniquement pour les fichiers de documentation générés. L'analyse du code (Pass 1–2) tourne toujours en anglais ; la sortie générée (Pass 3) est écrite dans la langue choisie. Les exemples de code à l'intérieur des fichiers générés gardent la syntaxe de leur langage de programmation d'origine.
262
-
263
- C'est tout. Après 10 minutes (petit projet) à 2 heures (monorepo de 60+ domaines), toute la documentation est générée et prête à l'emploi. La CLI affiche une barre de progression avec pourcentage, temps écoulé et ETA pour chaque pass. Voir [Auto-scaling selon la Taille du Projet](#auto-scaling-selon-la-taille-du-projet) pour des timings détaillés par taille de projet.
264
-
265
- ### Installation Manuelle Pas à Pas
266
-
267
- Si vous voulez un contrôle total sur chaque phase ou si le pipeline automatisé échoue à une étape — vous pouvez exécuter chaque étape manuellement. Cela sert également à comprendre le fonctionnement interne de ClaudeOS-Core.
268
-
269
- #### Étape 1 : Cloner et installer les dépendances
270
-
271
- ```bash
272
- cd /your/project/root
273
-
274
- git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
275
- cd claudeos-core-tools && npm install && cd ..
217
+ Incorrect:
218
+ ```java
219
+ @PostMapping
220
+ public ResponseEntity<?> create(@RequestBody NewArticleParam p) {
221
+ try {
222
+ articleCommandService.createArticle(p, currentUser);
223
+ } catch (Exception e) { // NOlet CustomizeExceptionHandler handle it
224
+ return ResponseEntity.status(500).body(e.getMessage()); // NO — leaks raw message
225
+ }
226
+ return ResponseEntity.ok().build();
227
+ }
276
228
  ```
229
+ ````
277
230
 
278
- #### Étape 2 : Créer la structure de répertoires
231
+ Le glob `paths: ["**/*"]` signifie que Claude Code charge automatiquement cette rule chaque fois que vous éditez un fichier du projet. Chaque nom de classe, chemin de package et exception handler dans la rule provient directement du source scanné — y compris les `CustomizeExceptionHandler` et `JacksonCustomizations` réels du projet.
279
232
 
280
- ```bash
281
- # Rules (v2.0.0 : ajout de 60.memory)
282
- mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
233
+ </details>
283
234
 
284
- # Standards
285
- mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
235
+ <details>
236
+ <summary><strong>🧠 Un seed <code>decision-log.md</code> auto-généré (extrait réel)</strong></summary>
286
237
 
287
- # Skills
288
- mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
238
+ ```markdown
239
+ ## 2026-04-26 — Hexagonal ports & adapters with MyBatis-only persistence
289
240
 
290
- # Guide, Database, MCP, Generated, Memory (v2.0.0 : ajout de memory ; v2.1.0 : suppression de plan)
291
- mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
292
- mkdir -p claudeos-core/{database,mcp-guide,generated,memory}
241
+ - **Context:** `io.spring.core.*` exposes `*Repository` ports (e.g.,
242
+ `io.spring.core.article.ArticleRepository`) implemented by
243
+ `io.spring.infrastructure.repository.MyBatis*Repository` adapters.
244
+ The domain layer has zero `org.springframework.*` /
245
+ `org.apache.ibatis.*` / `io.spring.infrastructure.*` imports.
246
+ - **Options considered:** JPA/Hibernate, Spring Data, MyBatis-Plus
247
+ `BaseMapper`. None adopted.
248
+ - **Decision:** MyBatis 3 (`mybatis-spring-boot-starter:2.2.2`) with
249
+ hand-written XML statements under `src/main/resources/mapper/*.xml`.
250
+ Hexagonal port/adapter wiring keeps the domain framework-free.
251
+ - **Consequences:** Every SQL lives in XML — `@Select`/`@Insert`/`@Update`/`@Delete`
252
+ annotations are forbidden. New aggregates require both a
253
+ `core.{aggregate}.{Aggregate}Repository` port AND a
254
+ `MyBatis{Aggregate}Repository` adapter; introducing a JPA repository would
255
+ split the persistence model.
293
256
  ```
294
257
 
295
- > **Remarque v2.1.0 :** Le répertoire `claudeos-core/plan/` n'est plus créé. La génération de master plan a été supprimée parce que les master plans étaient un backup interne que Claude Code ne lisait jamais à l'exécution, et leur agrégation déclenchait des échecs `Prompt is too long`. Utilisez `git` pour le backup/restore.
296
-
297
- #### Étape 3 : Lancer plan-installer (analyse du projet)
298
-
299
- Cela scanne votre projet, détecte le stack, trouve les domaines, les divise en groupes et génère les prompts.
258
+ Pass 4 ensemence `decision-log.md` avec les décisions architecturales extraites de `pass2-merged.json` afin que les sessions futures se souviennent du *pourquoi* la codebase ressemble à ce qu'elle est pas seulement quoi* elle ressemble. Chaque option JPA/Hibernate », « MyBatis-Plus ») et chaque conséquence sont ancrées dans le bloc de dépendances réel de `build.gradle`.
300
259
 
301
- ```bash
302
- node claudeos-core-tools/plan-installer/index.js
303
- ```
260
+ </details>
304
261
 
305
- **Sortie (dans `claudeos-core/generated/`) :**
306
- - `project-analysis.json` — stack détecté, domaines, info frontend
307
- - `domain-groups.json` — groupes de domaines pour Pass 1
308
- - `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — prompts d'analyse
309
- - `pass2-prompt.md` — prompt de merge
310
- - `pass3-prompt.md` — template de prompt Pass 3 avec le bloc Phase 1 « Read Once, Extract Facts » préfixé (Règles A–E). Le pipeline automatisé découpe Pass 3 en plusieurs stages à l'exécution ; ce template alimente chaque stage.
311
- - `pass3-context.json` — résumé projet allégé (< 5 Ko, construit après Pass 2) que les prompts Pass 3 préfèrent au `pass2-merged.json` complet (v2.1.0)
312
- - `pass4-prompt.md` — prompt de scaffolding memory L4 (v2.0.0 ; utilise le même `staging-override.md` pour les écritures de règles `60.memory/`)
313
-
314
- Vous pouvez inspecter ces fichiers pour vérifier la précision de détection avant de continuer.
262
+ ---
315
263
 
316
- #### Étape 4 : Pass 1 — Analyse profonde du code (par groupe de domaines)
264
+ ## Quick Start
317
265
 
318
- Lancez Pass 1 pour chaque groupe de domaines. Consultez `domain-groups.json` pour connaître le nombre de groupes.
266
+ **Prérequis :** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installé et authentifié.
319
267
 
320
268
  ```bash
321
- # Vérifier combien de groupes
322
- cat claudeos-core/generated/domain-groups.json | node -e "
323
- const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
324
- g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
325
- "
326
-
327
- # Lancer Pass 1 pour chaque groupe (remplacer les domaines et le numéro de groupe)
328
- # Note : v1.6.1+ utilise String.replace() de Node.js au lieu de perl — perl n'est
329
- # plus nécessaire, et la sémantique de fonction de remplacement empêche l'injection
330
- # regex des caractères $/&/$1 susceptibles d'apparaître dans les noms de domaine.
331
- #
332
- # Pour le groupe 1 :
333
- DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
334
- const fs = require('fs');
335
- const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
336
- const out = tpl
337
- .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
338
- .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
339
- process.stdout.write(out);
340
- " | claude -p --dangerously-skip-permissions
341
-
342
- # Pour le groupe 2 (si présent) :
343
- DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
344
- const fs = require('fs');
345
- const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
346
- const out = tpl
347
- .replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
348
- .replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
349
- process.stdout.write(out);
350
- " | claude -p --dangerously-skip-permissions
351
-
352
- # Pour les groupes frontend, remplacez pass1-backend-prompt.md → pass1-frontend-prompt.md
353
- ```
354
-
355
- **Vérifier :** `ls claudeos-core/generated/pass1-*.json` devrait afficher un JSON par groupe.
269
+ # 1. Aller à la racine du projet
270
+ cd my-spring-boot-project
356
271
 
357
- #### Étape 5 : Pass 2 Merger les résultats d'analyse
272
+ # 2. Lancer init (analyse votre code et demande à Claude d'écrire les rules)
273
+ npx claudeos-core init
358
274
 
359
- ```bash
360
- cat claudeos-core/generated/pass2-prompt.md \
361
- | claude -p --dangerously-skip-permissions
275
+ # 3. Terminé. Ouvrez Claude Code et codez — vos rules sont déjà chargées.
362
276
  ```
363
277
 
364
- **Vérifier :** `claudeos-core/generated/pass2-merged.json` doit exister avec 9+ clés de niveau supérieur.
365
-
366
- #### Étape 6 : Pass 3 — Générer toute la documentation (divisée en plusieurs stages)
367
-
368
- **Remarque v2.1.0 :** Pass 3 est **toujours exécuté en mode split** par le pipeline automatisé. Chaque stage est un appel `claude -p` séparé avec une fenêtre de contexte fraîche, donc l'overflow par accumulation de sortie est structurellement impossible quelle que soit la taille du projet. Le template `pass3-prompt.md` est assemblé par stage avec une directive `STAGE:` qui indique à Claude quel sous-ensemble de fichiers émettre. En mode manuel, le chemin le plus simple reste d'alimenter le template complet et de laisser Claude tout générer en un seul appel — mais cela n'est fiable que sur les petits projets (≤5 domaines). Pour toute taille supérieure, utilisez `npx claudeos-core init` pour que le runner split s'occupe de l'orchestration des stages.
369
-
370
- **Mode appel unique (petits projets uniquement, ≤5 domaines) :**
278
+ **Ce que vous obtenez** une fois `init` terminé :
371
279
 
372
- ```bash
373
- cat claudeos-core/generated/pass3-prompt.md \
374
- | claude -p --dangerously-skip-permissions
375
280
  ```
281
+ your-project/
282
+ ├── .claude/
283
+ │ └── rules/ ← Auto-chargé par Claude Code
284
+ │ ├── 00.core/ (rules générales — naming, architecture)
285
+ │ ├── 10.backend/ (rules de stack backend, le cas échéant)
286
+ │ ├── 20.frontend/ (rules de stack frontend, le cas échéant)
287
+ │ ├── 30.security-db/ (sécurité & conventions DB)
288
+ │ ├── 40.infra/ (env, logging, CI/CD)
289
+ │ ├── 50.sync/ (rappels de doc-sync — rules only)
290
+ │ ├── 60.memory/ (memory rules — Pass 4, rules only)
291
+ │ ├── 70.domains/{type}/ (rules par domaine, type = backend|frontend)
292
+ │ └── 80.verification/ (stratégie de tests + rappels de vérification du build)
293
+ ├── claudeos-core/
294
+ │ ├── standard/ ← Documents de référence (miroir de la structure des catégories)
295
+ │ │ ├── 00.core/ (vue d'ensemble du projet, architecture, naming)
296
+ │ │ ├── 10.backend/ (référence backend — si stack backend)
297
+ │ │ ├── 20.frontend/ (référence frontend — si stack frontend)
298
+ │ │ ├── 30.security-db/ (référence sécurité & DB)
299
+ │ │ ├── 40.infra/ (référence env / logging / CI-CD)
300
+ │ │ ├── 70.domains/{type}/ (référence par domaine)
301
+ │ │ ├── 80.verification/ (référence build / startup / tests — standard only)
302
+ │ │ └── 90.optional/ (extras spécifiques au stack — standard only)
303
+ │ ├── skills/ (patterns réutilisables que Claude peut appliquer)
304
+ │ ├── guide/ (how-to guides pour les tâches courantes)
305
+ │ ├── database/ (vue d'ensemble du schéma, guide de migration)
306
+ │ ├── mcp-guide/ (notes d'intégration MCP)
307
+ │ └── memory/ (decision log, failure patterns, compaction)
308
+ └── CLAUDE.md (l'index que Claude lit en premier)
309
+ ```
310
+
311
+ Les catégories partageant le même préfixe numérique entre `rules/` et `standard/` représentent la même zone conceptuelle (par ex. `10.backend` rules ↔ `10.backend` standards). Catégories rules-only : `50.sync` (rappels de sync de docs) et `60.memory` (Pass 4 memory). Catégorie standard-only : `90.optional` (extras spécifiques au stack sans application). Tous les autres préfixes (`00`, `10`, `20`, `30`, `40`, `70`, `80`) apparaissent à la fois dans `rules/` et `standard/`. Désormais, Claude Code connaît votre projet.
376
312
 
377
- **Mode stage par stage (recommandé pour toutes les tailles de projet) :**
313
+ ---
378
314
 
379
- Le pipeline automatisé exécute ces stages. La liste des stages est :
315
+ ## À qui s'adresse cet outil ?
380
316
 
381
- | Stage | Écrit | Notes |
382
- |---|---|---|
383
- | `3a` | `pass3a-facts.md` (fiche de faits distillée 5–10 Ko) | Lit `pass2-merged.json` une seule fois ; les stages suivants référencent ce fichier |
384
- | `3b-core` | `CLAUDE.md`, `standard/` communs, `.claude/rules/` communs | Fichiers inter-projet ; pas de sortie spécifique à un domaine |
385
- | `3b-1..N` | `standard/60.domains/*.md` spécifiques aux domaines + règles de domaine | Batch de ≤15 domaines par stage (auto-divisé à partir de 16 domaines) |
386
- | `3c-core` | `guide/` (9 fichiers), `skills/00.shared/MANIFEST.md`, orchestrateurs `skills/*/` | Skills partagés et tous les guides destinés à l'utilisateur |
387
- | `3c-1..N` | Sous-skills de domaine sous `skills/20.frontend-page/scaffold-page-feature/` | Batch de ≤15 domaines par stage |
388
- | `3d-aux` | `database/`, `mcp-guide/` | Taille fixe, indépendante du nombre de domaines |
317
+ | Vous êtes... | La douleur que ça enlève |
318
+ |---|---|
319
+ | **Un développeur solo** qui démarre un nouveau projet avec Claude Code | « Apprendre mes conventions à Claude à chaque session » — fini. `CLAUDE.md` + `.claude/rules/` à 8 catégories générés en une seule passe. |
320
+ | **Un team lead** qui maintient des standards partagés sur plusieurs repos | `.claude/rules/` qui dérive quand on renomme des packages, change d'ORM ou de wrapper de réponse. ClaudeOS-Core resynchronise de façon déterministe — même entrée, sortie byte-identique, aucun bruit dans les diffs. |
321
+ | **Déjà utilisateur de Claude Code** mais fatigué de corriger le code généré | Mauvais wrapper de réponse, mauvais layout de packages, JPA quand vous utilisez MyBatis, `try/catch` éparpillés alors que votre projet utilise un middleware centralisé. Le scanner extrait vos vraies conventions ; chaque passe Claude tourne contre une path allowlist explicite. |
322
+ | **En cours d'onboarding sur un nouveau repo** (projet existant, intégration d'équipe) | Lancez `init` sur le repo, obtenez une carte d'architecture vivante : table de stack dans CLAUDE.md, rules par couche avec exemples ✅/❌, decision log ensemencé avec le « pourquoi » des choix majeurs (JPA vs MyBatis, REST vs GraphQL, etc.). Lire 5 fichiers vaut mieux que lire 5 000 fichiers source. |
323
+ | **Travaillant en coréen / japonais / chinois / 7 autres langues** | La plupart des générateurs de rules Claude Code sont en anglais uniquement. ClaudeOS-Core écrit l'ensemble complet en **10 langues** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`) avec **validation structurelle byte-identique** — même verdict `claude-md-validator` quelle que soit la langue de sortie. |
324
+ | **Sur un monorepo** (Turborepo, pnpm/yarn workspaces, Lerna) | Domaines backend + frontend analysés en une seule exécution avec des prompts séparés ; `apps/*/` et `packages/*/` parcourus automatiquement ; rules par stack émises sous `70.domains/{type}/`. |
325
+ | **Contributeur OSS ou expérimentation** | Sortie gitignore-friendly — `claudeos-core/` est votre dir de travail local, seuls `CLAUDE.md` + `.claude/` doivent être expédiés. Resume-safe en cas d'interruption ; idempotent à la réexécution (vos éditions manuelles de rules survivent sans `--force`). |
389
326
 
390
- Pour un projet de 1 à 15 domaines, cela se développe en 4 stages (`3a`, `3b-core`, `3c-core`, `3d-aux` pas de sous-division en batches). Pour 16 à 30 domaines, 8 stages (`3b` et `3c` chacun sous-divisés en 2 batches). Voir [Auto-scaling selon la Taille du Projet](#auto-scaling-selon-la-taille-du-projet) pour le tableau complet.
327
+ **Pas adapté si :** vous voulez un bundle preset universel d'agents/skills/rules qui fonctionne dès le premier jour sans étape de scan (voir [docs/fr/comparison.md](docs/fr/comparison.md) pour ce qui convient où), votre projet n'entre pas encore dans l'un des [stacks supportés](#supported-stacks), ou vous n'avez besoin que d'un seul `CLAUDE.md` (le `claude /init` intégré suffit — pas besoin d'installer un autre outil).
391
328
 
392
- **Vérifier :** `CLAUDE.md` doit exister à la racine de votre projet, et le marqueur `claudeos-core/generated/pass3-complete.json` doit être écrit. En mode split, le marqueur contient `mode: "split"` et un array `groupsCompleted` listant chaque stage terminé — la logique de marqueur partiel s'en sert pour reprendre au bon stage après un crash plutôt que de redémarrer depuis `3a` (qui doublerait le coût en tokens).
329
+ ---
393
330
 
394
- > **Remarque staging :** Pass 3 écrit les fichiers de règles d'abord dans `claudeos-core/generated/.staged-rules/` car la politique de chemins sensibles de Claude Code bloque les écritures directes dans `.claude/`. Le pipeline automatisé gère le déplacement automatiquement après chaque stage. Si vous exécutez un stage manuellement, vous devrez déplacer l'arbre staged vous-même : `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (en préservant les sous-chemins).
331
+ ## Comment ça marche ?
395
332
 
396
- #### Étape 7 : Pass 4 Scaffolding memory
333
+ ClaudeOS-Core inverse le workflow Claude Code habituel :
397
334
 
398
- ```bash
399
- cat claudeos-core/generated/pass4-prompt.md \
400
- | claude -p --dangerously-skip-permissions
401
335
  ```
402
-
403
- **Vérifier :** `claudeos-core/memory/` doit contenir 4 fichiers (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`), `.claude/rules/60.memory/` doit contenir 4 fichiers de règles, et `CLAUDE.md` doit désormais avoir une section `## Memory (L4)` ajoutée. Marqueur : `claudeos-core/generated/pass4-memory.json`.
404
-
405
- > **Gap-fill v2.1.0 :** Pass 4 garantit aussi que `claudeos-core/skills/00.shared/MANIFEST.md` existe. Si Pass 3c l'a omis (possible sur les projets skill-sparse car les templates `pass3.md` par stack listent `MANIFEST.md` parmi les cibles de génération sans le marquer REQUIRED), le gap-fill crée un stub minimal pour que `.claude/rules/50.sync/02.skills-sync.md` (chemin v2.2.0 — le nombre de règles sync est passé de 3 à 2, ce qui était `03` est devenu `02`) ait toujours une cible de référence valide. Idempotent : saute si le fichier a déjà du contenu réel (>20 caractères).
406
-
407
- > **Remarque :** Si `claude -p` échoue ou si `pass4-prompt.md` est absent, le pipeline automatisé retombe sur un scaffold statique via `lib/memory-scaffold.js` (avec traduction pilotée par Claude quand `--lang` n'est pas l'anglais). Le fallback statique ne tourne qu'à l'intérieur de `npx claudeos-core init` — le mode manuel exige que Pass 4 réussisse.
408
-
409
- #### Étape 8 : Lancer les outils de vérification
410
-
411
- ```bash
412
- # Générer les métadonnées (requis avant les autres vérifications)
413
- node claudeos-core-tools/manifest-generator/index.js
414
-
415
- # Lancer toutes les vérifications
416
- node claudeos-core-tools/health-checker/index.js
417
-
418
- # Ou lancer des vérifications individuelles :
419
- node claudeos-core-tools/plan-validator/index.js --check # Cohérence Plan ↔ disque
420
- node claudeos-core-tools/sync-checker/index.js # Fichiers non enregistrés/orphelins
421
- node claudeos-core-tools/content-validator/index.js # Vérifications qualité (incl. section memory/ [9/9])
422
- node claudeos-core-tools/pass-json-validator/index.js # Vérifications JSON Pass 1–4 + marqueur de complétion
336
+ Habituel : Vous décrivez le projet → Claude devine votre stack → Claude écrit la doc
337
+ Ici : Le code lit votre stack Le code transmet les faits confirmés à Claude Claude écrit à partir des faits
423
338
  ```
424
339
 
425
- #### Étape 9 : Vérifier les résultats
426
-
427
- ```bash
428
- # Compter les fichiers générés
429
- find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
430
-
431
- # Regarder CLAUDE.md
432
- head -30 CLAUDE.md
340
+ Le pipeline tourne en **trois étapes**, avec du code des deux côtés de l'appel LLM :
433
341
 
434
- # Regarder un fichier standard
435
- cat claudeos-core/standard/00.core/01.project-overview.md | head -20
342
+ **1. Step A — Scanner (déterministe, sans LLM).** Un scanner Node.js parcourt la racine de votre projet, lit `package.json` / `build.gradle` / `pom.xml` / `pyproject.toml`, parse les fichiers `.env*` (avec redaction des variables sensibles pour `PASSWORD/SECRET/TOKEN/JWT_SECRET/...`), classifie votre pattern d'architecture (5 patterns Java A/B/C/D/E, Kotlin CQRS / multi-module, Next.js App vs Pages Router, FSD, components-pattern), découvre les domaines, et construit une allowlist explicite de chaque chemin de fichier source qui existe. Sortie : `project-analysis.json` — la source de vérité unique pour ce qui suit.
436
343
 
437
- # Regarder les règles
438
- ls .claude/rules/*/
439
- ```
344
+ **2. Step B — pipeline Claude en 4 passes (contraint par les faits de Step A).**
345
+ - **Pass 1** lit les fichiers représentatifs par groupe de domaines et extrait ~50–100 conventions par domaine — wrappers de réponse, libraries de logging, error handling, conventions de naming, patterns de tests. Tourne une fois par groupe de domaines (`max 4 domains, 40 files per group`) afin que le contexte ne déborde jamais.
346
+ - **Pass 2** fusionne toutes les analyses par domaine en une vue projet globale et résout les désaccords en choisissant la convention dominante.
347
+ - **Pass 3** écrit `CLAUDE.md` + `.claude/rules/` + `claudeos-core/standard/` + skills + guides — divisé en stages (`3a` faits → `3b-core/3b-N` rules+standards → `3c-core/3c-N` skills+guides → `3d-aux` database+mcp-guide) afin que le prompt de chaque stage tienne dans la fenêtre de contexte du LLM même quand `pass2-merged.json` est gros. Sub-divise 3b/3c en batches ≤15 domaines pour les projets ≥16 domaines.
348
+ - **Pass 4** ensemence le L4 memory layer (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`) et ajoute les rules de scaffold universelles. Pass 4 a **interdiction de modifier `CLAUDE.md`** — la Section 8 de Pass 3 fait autorité.
440
349
 
441
- > **Astuce :** Si une étape échoue, vous pouvez corriger le problème et relancer uniquement cette étape. Les résultats de Pass 1/2 sont cachés si `pass1-N.json` ou `pass2-merged.json` existe déjà, le pipeline automatisé les saute. Utilisez `npx claudeos-core init --force` pour supprimer les résultats précédents et repartir de zéro.
350
+ **3. Step CVerification (déterministe, sans LLM).** Cinq validators vérifient la sortie :
351
+ - `claude-md-validator` — 25 checks structurels sur `CLAUDE.md` (8 sections, comptes H3/H4, unicité des fichiers de mémoire, T1 canonical heading invariant). Language-invariant : même verdict quel que soit `--lang`.
352
+ - `content-validator` — 10 checks de contenu dont la vérification des path claims (`STALE_PATH` attrape les références fabriquées `src/...`) et la détection de drift du MANIFEST.
353
+ - `pass-json-validator` — Pass 1/2/3/4 JSON well-formedness + comptage de sections stack-aware.
354
+ - `plan-validator` — cohérence plan ↔ disque (legacy, principalement no-op depuis v2.1.0).
355
+ - `sync-checker` — cohérence d'enregistrement disque ↔ `sync-map.json` à travers 7 répertoires suivis.
442
356
 
443
- ### Commencer à Utiliser
357
+ Trois niveaux de sévérité (`fail` / `warn` / `advisory`) pour que les warnings ne bloquent jamais la CI sur des hallucinations LLM que l'utilisateur peut corriger manuellement.
444
358
 
445
- ```
446
- # Dans Claude Code — demandez simplement naturellement :
447
- « Crée un CRUD pour le domaine order »
448
- « Ajoute une API d'authentification utilisateur »
449
- « Refactorise ce code pour qu'il matche les patterns du projet »
359
+ L'invariant qui lie le tout : **Claude ne peut citer que des chemins qui existent réellement dans votre code**, parce que Step A lui remet une allowlist finie. Si le LLM essaie quand même d'inventer (rare mais arrive sur certains seeds), Step C l'attrape avant que la doc ne soit expédiée.
450
360
 
451
- # Claude Code référence automatiquement vos Standards, Rules et Skills générés.
452
- ```
361
+ Pour les détails par passe, le resume basé sur markers, le contournement staged-rules pour le sensitive-path block `.claude/` de Claude Code, et les internals de la détection de stack, voir [docs/fr/architecture.md](docs/fr/architecture.md).
453
362
 
454
363
  ---
455
364
 
456
- ## Comment ça marche — Pipeline à 4 Passes
365
+ ## Supported Stacks
457
366
 
458
- ```
459
- npx claudeos-core init
460
-
461
- ├── [1] npm install ← Dépendances (~10s)
462
- ├── [2] Structure de répertoires ← Créer les dossiers (~1s)
463
- ├── [3] plan-installer (Node.js) ← Scan du projet (~5s)
464
- │ ├── Auto-détecte le stack (multi-stack aware)
465
- │ ├── Extrait la liste de domaines (tagged : backend/frontend)
466
- │ ├── Divise en groupes de domaines (par type)
467
- │ ├── Construit pass3-context.json (résumé allégé, v2.1.0)
468
- │ └── Sélectionne des prompts spécifiques au stack (par type)
469
-
470
- ├── [4] Pass 1 × N (claude -p) ← Analyse profonde du code (~2-8min)
471
- │ ├── ⚙️ Groupes backend → prompt spécifique backend
472
- │ └── 🎨 Groupes frontend → prompt spécifique frontend
473
-
474
- ├── [5] Pass 2 × 1 (claude -p) ← Merge d'analyse (~1min)
475
- │ └── Consolide TOUS les résultats de Pass 1 dans pass2-merged.json
476
-
477
- ├── [6] Pass 3 (mode split, v2.1.0) ← Génère tout
478
- │ │
479
- │ ├── 3a × 1 (claude -p) ← Extraction de faits (~5-10min)
480
- │ │ └── Lit pass2-merged.json une fois → pass3a-facts.md
481
- │ │
482
- │ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + standard/rules communs
483
- │ ├── 3b-1..N × N (claude -p) ← Standards/règles de domaine (≤15 domaines/batch)
484
- │ │
485
- │ ├── 3c-core × 1 (claude -p) ← Guides + skills partagés + MANIFEST.md
486
- │ ├── 3c-1..N × N (claude -p) ← Sous-skills de domaine (≤15 domaines/batch)
487
- │ │
488
- │ └── 3d-aux × 1 (claude -p) ← Stubs database/ + mcp-guide/
489
-
490
- ├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30s-5min)
491
- │ ├── Seed memory/ (decision-log, failure-patterns, …)
492
- │ ├── Génère les règles 60.memory/
493
- │ ├── Ajoute la section « Memory (L4) » à CLAUDE.md
494
- │ └── Gap-fill : garantit skills/00.shared/MANIFEST.md (v2.1.0)
495
-
496
- └── [8] Vérification ← Auto-exécute le health checker
497
- ```
498
-
499
- ### Pourquoi 4 Passes ?
500
-
501
- **Pass 1** est le seul pass qui lit votre code source. Il sélectionne des fichiers représentatifs par domaine et extrait des patterns à travers 55–95 catégories d'analyse (selon le stack). Pour les gros projets, Pass 1 tourne plusieurs fois — une par groupe de domaines. Dans les projets multi-stack (ex : Java backend + React frontend), les domaines backend et frontend utilisent des **prompts d'analyse différents** adaptés à chaque stack.
367
+ 12 stacks, auto-détectés depuis vos fichiers projet :
502
368
 
503
- **Pass 2** merge tous les résultats de Pass 1 en une analyse unifiée : patterns communs (100% partagés), patterns majoritaires (50%+ partagés), patterns spécifiques à un domaine, anti-patterns par sévérité et préoccupations transverses (naming, sécurité, BD, testing, logging, performance). Les résultats backend et frontend sont mergés ensemble.
369
+ **Backend :** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
504
370
 
505
- **Pass 3** (mode split, v2.1.0) prend l'analyse mergée et génère tout l'écosystème de fichiers (CLAUDE.md, règles, standards, skills, guides) à travers plusieurs appels `claude -p` séquentiels. L'intuition clé est que l'overflow par accumulation de sortie n'est pas prédictible à partir de la taille d'entrée : le Pass 3 en appel unique fonctionnait bien sur les projets à 2 domaines et échouait de façon fiable autour de 5 domaines, et la frontière d'échec bougeait selon la verbosité de chaque fichier. Le mode split contourne cela entièrement — chaque stage démarre avec une fenêtre de contexte fraîche et écrit un sous-ensemble borné de fichiers. La cohérence inter-stages (qui était le principal avantage de l'approche monolithique) est préservée par `pass3a-facts.md`, une fiche de faits distillée de 5 à 10 Ko que tous les stages suivants référencent.
371
+ **Frontend :** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
506
372
 
507
- Le template de prompt Pass 3 inclut également un **bloc Phase 1 « Read Once, Extract Facts »** avec cinq règles qui contraignent encore le volume de sortie :
373
+ Les projets multi-stack (par ex. backend Spring Boot + frontend Next.js) fonctionnent d'emblée.
508
374
 
509
- - **Règle A** Référencer la table de faits ; ne pas relire `pass2-merged.json`.
510
- - **Règle B** — Écriture de fichiers idempotente (skip si la cible existe avec du contenu réel), rendant Pass 3 sûrement rejouable après interruption.
511
- - **Règle C** — Cohérence inter-fichiers imposée via la table de faits comme unique source de vérité.
512
- - **Règle D** — Concision de sortie : une seule ligne (`[WRITE]`/`[SKIP]`) entre chaque écriture de fichier, pas de recopie de la table de faits, pas d'écho du contenu des fichiers.
513
- - **Règle E** — Vérification idempotente par batch : un seul `Glob` au début de PHASE 2 plutôt que des appels `Read` par cible.
514
-
515
- En **v2.2.0**, Pass 3 intègre également en ligne un scaffold CLAUDE.md déterministe (`pass-prompts/templates/common/claude-md-scaffold.md`) dans le prompt. Cela fixe les titres et l'ordre des 8 sections de premier niveau afin que le `CLAUDE.md` généré ne dérive plus entre projets, tandis que le contenu de chaque section continue de s'adapter à chaque projet. Le nouveau parser `.env` du stack-detector (`lib/env-parser.js`) fournit `stack.envInfo` au prompt pour que les lignes port/host/API target correspondent à ce que le projet déclare réellement plutôt qu'aux defaults du framework.
516
-
517
- **Pass 4** scaffolde la couche Memory L4 : fichiers persistants de connaissance d'équipe (decision-log, failure-patterns, politique de compaction, auto-rule-update) plus les règles `60.memory/` qui indiquent aux futures sessions quand et comment lire/écrire ces fichiers. La couche memory est ce qui permet à Claude Code d'accumuler des leçons entre les sessions au lieu de les redécouvrir à chaque fois. Quand `--lang` n'est pas l'anglais, le contenu statique de fallback est traduit via Claude avant d'être écrit. v2.1.0 ajoute un gap-fill pour `skills/00.shared/MANIFEST.md` au cas où Pass 3c l'aurait omis.
375
+ Pour les règles de détection et ce que chaque scanner extrait, voir [docs/fr/stacks.md](docs/fr/stacks.md).
518
376
 
519
377
  ---
520
378
 
521
- ## Structure des Fichiers Générés
379
+ ## Workflow quotidien
522
380
 
523
- ```
524
- your-project/
525
-
526
- ├── CLAUDE.md ← Point d'entrée Claude Code (structure déterministe à 8 sections, v2.2.0)
527
-
528
- ├── .claude/
529
- │ └── rules/ ← Règles déclenchées par glob
530
- │ ├── 00.core/
531
- │ ├── 10.backend/
532
- │ ├── 20.frontend/
533
- │ ├── 30.security-db/
534
- │ ├── 40.infra/
535
- │ ├── 50.sync/ ← Règles de rappel de sync
536
- │ └── 60.memory/ ← Règles de scope on-demand de la memory L4 (v2.0.0)
537
-
538
- ├── claudeos-core/ ← Répertoire principal de sortie
539
- │ ├── generated/ ← JSON d'analyse + prompts dynamiques + marqueurs de Pass (mettre en gitignore)
540
- │ │ ├── project-analysis.json ← Info du stack (multi-stack aware)
541
- │ │ ├── domain-groups.json ← Groupes avec type : backend/frontend
542
- │ │ ├── pass1-backend-prompt.md ← Prompt d'analyse backend
543
- │ │ ├── pass1-frontend-prompt.md ← Prompt d'analyse frontend (si détecté)
544
- │ │ ├── pass2-prompt.md ← Prompt de merge
545
- │ │ ├── pass2-merged.json ← Sortie Pass 2 (consommée par Pass 3a uniquement)
546
- │ │ ├── pass3-context.json ← Résumé allégé (< 5 Ko) pour Pass 3 (v2.1.0)
547
- │ │ ├── pass3-prompt.md ← Template de prompt Pass 3 (bloc Phase 1 préfixé)
548
- │ │ ├── pass3a-facts.md ← Fiche de faits écrite par Pass 3a, lue par 3b/3c/3d (v2.1.0)
549
- │ │ ├── pass4-prompt.md ← Prompt de scaffolding memory (v2.0.0)
550
- │ │ ├── pass3-complete.json ← Marqueur de complétion Pass 3 (mode split : inclut groupsCompleted, v2.1.0)
551
- │ │ ├── pass4-memory.json ← Marqueur de complétion Pass 4 (skip au resume)
552
- │ │ ├── rule-manifest.json ← Index de fichiers pour les outils de vérification
553
- │ │ ├── sync-map.json ← Mapping Plan ↔ disque (vide en v2.1.0 ; conservé pour compat sync-checker)
554
- │ │ ├── stale-report.json ← Résultats de vérification consolidés
555
- │ │ ├── .i18n-cache-<lang>.json ← Cache de traduction (non-anglais `--lang`)
556
- │ │ └── .staged-rules/ ← Répertoire de staging transitoire pour les écritures `.claude/rules/` (auto-déplacé + nettoyé)
557
- │ ├── standard/ ← Standards de codage (15-19 fichiers + par-domaine dans 60.domains/)
558
- │ │ ├── 00.core/ ← Vue d'ensemble, architecture, naming
559
- │ │ ├── 10.backend-api/ ← Patterns API (spécifiques au stack)
560
- │ │ ├── 20.frontend-ui/ ← Patterns frontend (si détecté)
561
- │ │ ├── 30.security-db/ ← Sécurité, schéma BD, utilitaires
562
- │ │ ├── 40.infra/ ← Config, logging, CI/CD
563
- │ │ ├── 50.verification/ ← Vérification de build, testing
564
- │ │ ├── 60.domains/ ← Standards par-domaine (écrits par Pass 3b-N, v2.1.0)
565
- │ │ └── 90.optional/ ← Conventions optionnelles (extras spécifiques au stack)
566
- │ ├── skills/ ← Skills de scaffolding CRUD/page
567
- │ │ └── 00.shared/MANIFEST.md ← Source unique de vérité pour les skills enregistrés
568
- │ ├── guide/ ← Onboarding, FAQ, troubleshooting (9 fichiers)
569
- │ ├── database/ ← Schéma BD, guide de migration
570
- │ ├── mcp-guide/ ← Guide d'intégration de serveur MCP
571
- │ └── memory/ ← L4 : connaissance d'équipe (4 fichiers) — commitez-les
572
- │ ├── decision-log.md ← Le « pourquoi » derrière les décisions de conception
573
- │ ├── failure-patterns.md ← Erreurs récurrentes et fixes (auto-scoré — `npx claudeos-core memory score`)
574
- │ ├── compaction.md ← Stratégie de compaction en 4 étapes (lancez `npx claudeos-core memory compact`)
575
- │ └── auto-rule-update.md ← Propositions d'amélioration de règles (`npx claudeos-core memory propose-rules`)
576
-
577
- └── claudeos-core-tools/ ← Ce toolkit (ne pas modifier)
578
- ```
579
-
580
- Chaque fichier standard inclut ✅ des exemples corrects, ❌ des exemples incorrects et une table récapitulative des règles — tout dérivé des vrais patterns de votre code, pas de templates génériques.
381
+ Trois commandes couvrent ~95 % de l'usage :
581
382
 
582
- > **Remarque v2.1.0 :** `claudeos-core/plan/` n'est plus généré. Les master plans étaient un backup interne que Claude Code ne consommait pas à l'exécution, et leur agrégation dans Pass 3 était une cause majeure d'overflow par accumulation de sortie. Utilisez `git` pour le backup/restore à la place. Les projets qui migrent depuis la v2.0.x peuvent supprimer sans risque un éventuel répertoire `claudeos-core/plan/` existant.
583
-
584
- ### Recommandations de gitignore
585
-
586
- **À commiter** (connaissance d'équipe — destinée au partage) :
587
- - `CLAUDE.md` — point d'entrée Claude Code
588
- - `.claude/rules/**` — règles auto-chargées
589
- - `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — documentation générée
590
- - `claudeos-core/memory/**` — historique de décisions, patterns d'échec, propositions de règles
383
+ ```bash
384
+ # Première fois sur un projet
385
+ npx claudeos-core init
591
386
 
592
- **À NE PAS commiter** (artefacts de build régénérables) :
387
+ # Après avoir édité manuellement les standards ou rules
388
+ npx claudeos-core lint
593
389
 
594
- ```gitignore
595
- # ClaudeOS-Core — analyse générée et cache de traduction
596
- claudeos-core/generated/
390
+ # Health check (avant les commits, ou en CI)
391
+ npx claudeos-core health
597
392
  ```
598
393
 
599
- Le répertoire `generated/` contient le JSON d'analyse (`pass1-*.json`, `pass2-merged.json`), les prompts (`pass1/2/3/4-prompt.md`), les marqueurs de complétion de Pass (`pass3-complete.json`, `pass4-memory.json`), le cache de traduction (`.i18n-cache-<lang>.json`) et le répertoire transitoire de staging (`.staged-rules/`) — tout reconstruisible en relançant `npx claudeos-core init`.
600
-
601
- ---
602
-
603
- ## Auto-scaling selon la Taille du Projet
604
-
605
- Le mode split de Pass 3 adapte le nombre de stages au nombre de domaines. La sous-division en batches se déclenche à 16 domaines pour garder chaque stage sous ~50 fichiers de sortie, qui est la plage empiriquement sûre pour `claude -p` avant que l'overflow par accumulation de sortie ne commence.
606
-
607
- | Taille du projet | Domaines | Stages Pass 3 | Total `claude -p` | Temps est. |
608
- |---|---|---|---|---|
609
- | Petit | 1–4 | 4 (`3a`, `3b-core`, `3c-core`, `3d-aux`) | 7 (Pass 1 + 2 + 4 stages de Pass 3 + Pass 4) | ~10–15 min |
610
- | Moyen | 5–15 | 4 | 8–9 | ~25–45 min |
611
- | Grand | 16–30 | **8** (3b, 3c chacun divisé en 2 batches) | 11–12 | **~60–105 min** |
612
- | X-Grand | 31–45 | 10 | 13–14 | ~100–150 min |
613
- | XX-Grand | 46–60 | 12 | 15–16 | ~150–200 min |
614
- | XXX-Grand | 61+ | 14+ | 17+ | 200 min+ |
615
-
616
- Formule du nombre de stages (quand batché) : `1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`, où `N = ceil(totalDomains / 15)`.
617
-
618
- Pass 4 (memory scaffolding) ajoute ~30 secondes à 5 minutes par-dessus selon que la génération pilotée par Claude ou le fallback statique tourne. Pour les projets multi-stack (ex : Java + React), les domaines backend et frontend sont comptés ensemble. Un projet avec 6 domaines backend + 4 frontend = 10 au total = palier Moyen.
619
-
620
- ---
621
-
622
- ## Outils de Vérification
623
-
624
- ClaudeOS-Core inclut 5 outils de vérification intégrés qui tournent automatiquement après la génération :
394
+ Deux autres pour la maintenance du memory layer :
625
395
 
626
396
  ```bash
627
- # Lancer toutes les vérifications d'un coup (recommandé)
628
- npx claudeos-core health
629
-
630
- # Commandes individuelles
631
- npx claudeos-core validate # Comparaison Plan ↔ disque
632
- npx claudeos-core refresh # Sync Disque → Plan
633
- npx claudeos-core restore # Restore Plan → Disque
397
+ # Compacter le log failure-patterns exécuter périodiquement)
398
+ npx claudeos-core memory compact
634
399
 
635
- # Ou utiliser node directement (utilisateurs git clone)
636
- node claudeos-core-tools/health-checker/index.js
637
- node claudeos-core-tools/manifest-generator/index.js
638
- node claudeos-core-tools/plan-validator/index.js --check
639
- node claudeos-core-tools/sync-checker/index.js
400
+ # Promouvoir des failure patterns fréquents en rules proposées
401
+ npx claudeos-core memory propose-rules
640
402
  ```
641
403
 
642
- | Outil | Ce qu'il fait |
643
- |---|---|
644
- | **manifest-generator** | Construit le JSON de métadonnées (`rule-manifest.json`, `sync-map.json`, initialise `stale-report.json`) ; indexe 7 répertoires dont `memory/` (`totalMemory` dans summary). v2.1.0 : `plan-manifest.json` n'est plus généré puisque les master plans ont été supprimés. |
645
- | **plan-validator** | Valide les blocs `<file>` du master plan par rapport au disque pour les projets qui ont encore `claudeos-core/plan/` (cas de migration legacy). v2.1.0 : saute l'émission de `plan-sync-status.json` quand `plan/` est absent ou vide — `stale-report.json` enregistre quand même un no-op réussi. |
646
- | **sync-checker** | Détecte les fichiers non enregistrés (sur disque mais pas dans le plan) et les entrées orphelines — couvre 7 répertoires (ajout de `memory/` en v2.0.0). Se termine proprement quand `sync-map.json` n'a aucun mapping (état par défaut v2.1.0). |
647
- | **content-validator** | Vérification qualité en 9 sections — fichiers vides, exemples ✅/❌ manquants, sections requises, plus intégrité du scaffold memory L4 (dates de headings de decision-log, champs requis de failure-pattern, parsing fence-aware) |
648
- | **pass-json-validator** | Valide la structure JSON de Pass 1–4 plus les marqueurs de complétion `pass3-complete.json` (forme mode split, v2.1.0) et `pass4-memory.json` |
404
+ Pour toutes les options de chaque commande, voir [docs/fr/commands.md](docs/fr/commands.md).
649
405
 
650
406
  ---
651
407
 
652
- ## Comment Claude Code Utilise Votre Documentation
653
-
654
- ClaudeOS-Core génère une documentation que Claude Code lit réellement — voici comment :
655
-
656
- ### Ce que Claude Code lit automatiquement
657
-
658
- | Fichier | Quand | Garanti |
659
- |---|---|---|
660
- | `CLAUDE.md` | À chaque début de conversation | Toujours |
661
- | `.claude/rules/00.core/*` | Quand n'importe quel fichier est édité (`paths: ["**/*"]`) | Toujours |
662
- | `.claude/rules/10.backend/*` | Quand n'importe quel fichier est édité (`paths: ["**/*"]`) | Toujours |
663
- | `.claude/rules/20.frontend/*` | Quand un fichier frontend est édité (limité aux chemins component/page/style) | Conditionnel |
664
- | `.claude/rules/30.security-db/*` | Quand n'importe quel fichier est édité (`paths: ["**/*"]`) | Toujours |
665
- | `.claude/rules/40.infra/*` | Uniquement lors de l'édition de fichiers config/infra (chemins limités) | Conditionnel |
666
- | `.claude/rules/50.sync/*` | Uniquement lors de l'édition de fichiers claudeos-core (chemins limités) | Conditionnel |
667
- | `.claude/rules/60.memory/*` | Quand `claudeos-core/memory/*` est édité (limité aux chemins memory) — indique **comment** lire/écrire la couche memory on-demand | Conditionnel (v2.0.0) |
668
-
669
- ### Ce que Claude Code lit on-demand via les références de règles
670
-
671
- Chaque fichier de règle lie à son standard correspondant via une section `## Reference`. Claude lit uniquement le standard pertinent pour la tâche courante :
408
+ ## Ce qui distingue cet outil
672
409
 
673
- - `claudeos-core/standard/**` patterns de codage, exemples ✅/❌, conventions de naming
674
- - `claudeos-core/database/**` — schéma BD (pour queries, mappers, migrations)
675
- - `claudeos-core/memory/**` (v2.0.0) — couche de connaissance d'équipe L4 ; **pas** auto-chargée (serait trop bruyante à chaque conversation). À la place, les règles `60.memory/*` indiquent à Claude *quand* Read ces fichiers : au début de session (skim du `decision-log.md` récent + `failure-patterns.md` à haute importance), et append-on-demand lors de décisions ou d'erreurs récurrentes.
410
+ La plupart des outils de documentation Claude Code génèrent à partir d'une description (vous expliquez à l'outil, l'outil explique à Claude). ClaudeOS-Core génère à partir de votre code source réel (l'outil lit, l'outil dit à Claude ce qui est confirmé, Claude n'écrit que ce qui est confirmé).
676
411
 
677
- Le `00.standard-reference.md` sert d'annuaire de tous les fichiers standard pour découvrir des standards qui n'ont pas de règle correspondante.
412
+ Trois conséquences concrètes :
678
413
 
679
- ### Ce que Claude Code NE lit PAS (économise du contexte)
414
+ 1. **Détection de stack déterministe.** Même projet + même code = même sortie. Pas de « Claude a tiré différemment cette fois-ci ».
415
+ 2. **Aucun chemin inventé.** Le prompt de Pass 3 liste explicitement chaque chemin source autorisé ; Claude ne peut pas citer de chemins qui n'existent pas.
416
+ 3. **Conscience multi-stack.** Backend et frontend domains utilisent des prompts d'analyse différents dans la même exécution.
680
417
 
681
- Ces dossiers sont explicitement exclus via la section `DO NOT Read` de la règle standard-reference :
682
-
683
- | Dossier | Pourquoi exclu |
684
- |---|---|
685
- | `claudeos-core/plan/` | Backups de master plan des projets legacy (v2.0.x et antérieurs). Non généré en v2.1.0. Si présent, Claude Code ne le charge pas automatiquement — lecture on-demand uniquement. |
686
- | `claudeos-core/generated/` | JSON de métadonnées de build, prompts, marqueurs de Pass, cache de traduction, `.staged-rules/`. Pas pour coder. |
687
- | `claudeos-core/guide/` | Guides d'onboarding pour humains. |
688
- | `claudeos-core/mcp-guide/` | Docs de serveur MCP. Pas pour coder. |
689
- | `claudeos-core/memory/` (auto-load) | **Auto-load désactivé** par design — gonflerait le contexte à chaque conversation. Lu on-demand via les règles `60.memory/*` à la place (ex : scan de début de session de `failure-patterns.md`). Commitez toujours ces fichiers. |
418
+ Pour une comparaison côte-à-côte de scope avec d'autres outils, voir [docs/fr/comparison.md](docs/fr/comparison.md). La comparaison porte sur **ce que fait chaque outil**, pas **lequel est le meilleur** — la plupart sont complémentaires.
690
419
 
691
420
  ---
692
421
 
693
- ## Workflow Quotidien
422
+ ## Vérification (post-génération)
694
423
 
695
- ### Après l'installation
424
+ Une fois la doc écrite par Claude, le code la vérifie. Cinq validators distincts :
696
425
 
697
- ```
698
- # Utilisez simplement Claude Code normalement — il référence vos standards automatiquement :
699
- « Crée un CRUD pour le domaine order »
700
- « Ajoute une API de mise à jour de profil utilisateur »
701
- « Refactorise ce code pour qu'il matche les patterns du projet »
702
- ```
426
+ | Validator | Ce qu'il vérifie | Lancé par |
427
+ |---|---|---|
428
+ | `claude-md-validator` | Invariants structurels de CLAUDE.md (8 sections, language-invariant) | `claudeos-core lint` |
429
+ | `content-validator` | Les chemins cités existent vraiment ; cohérence du manifest | `health` (advisory) |
430
+ | `pass-json-validator` | Sorties Pass 1 / 2 / 3 / 4 bien formées en JSON | `health` (warn) |
431
+ | `plan-validator` | Le plan sauvegardé correspond au disque | `health` (fail-on-error) |
432
+ | `sync-checker` | Les fichiers du disque correspondent aux enregistrements `sync-map.json` (détection orphaned/unregistered) | `health` (fail-on-error) |
703
433
 
704
- ### Après édition manuelle des Standards
434
+ Un `health-checker` orchestre les quatre validators d'exécution avec une sévérité à trois niveaux (fail / warn / advisory) et sort avec le code approprié pour la CI. `claude-md-validator` est lancé séparément via la commande `lint` car le drift structurel est un signal de re-init, pas un soft warning. À exécuter à tout moment :
705
435
 
706
436
  ```bash
707
- # Après avoir édité des fichiers de standards ou de règles :
708
- npx claudeos-core refresh
709
-
710
- # Vérifiez que tout est cohérent
711
437
  npx claudeos-core health
712
438
  ```
713
439
 
714
- ### Quand les docs sont corrompues
715
-
716
- ```bash
717
- # Recommandation v2.1.0 : utilisez git pour restaurer (puisque les master plans
718
- # ne sont plus générés). Commitez vos docs générés régulièrement pour pouvoir
719
- # revenir en arrière sur des fichiers spécifiques sans tout régénérer :
720
- git checkout HEAD -- .claude/rules/ claudeos-core/
721
-
722
- # Legacy (projets v2.0.x avec claudeos-core/plan/ encore présent) :
723
- npx claudeos-core restore
724
- ```
725
-
726
- ### Maintenance de la couche Memory (v2.0.0)
727
-
728
- La couche Memory L4 (`claudeos-core/memory/`) accumule la connaissance d'équipe à travers les sessions. Trois sous-commandes CLI la maintiennent en bonne santé :
729
-
730
- ```bash
731
- # Compact : applique la politique de compaction en 4 étapes (à lancer périodiquement — ex : mensuellement)
732
- npx claudeos-core memory compact
733
- # Étape 1 : résume les entrées anciennes (>30 jours, corps → une ligne)
734
- # Étape 2 : merge les headings dupliqués (fréquence sommée, dernier fix conservé)
735
- # Étape 3 : drop basse-importance + anciennes (importance <3 ET lastSeen >60 jours)
736
- # Étape 4 : applique le plafond de 400 lignes par fichier (la plus ancienne basse-importance est supprimée en premier)
737
-
738
- # Score : re-classe les entrées de failure-patterns.md par importance
739
- npx claudeos-core memory score
740
- # importance = round(frequency × 1.5 + recency × 5), plafonné à 10
741
- # À lancer après avoir ajouté plusieurs nouveaux failure patterns
742
-
743
- # Propose-rules : fait remonter des candidats d'ajouts de règles depuis les échecs récurrents
744
- npx claudeos-core memory propose-rules
745
- # Lit les entrées de failure-patterns.md avec frequency ≥ 3
746
- # Calcule la confiance (sigmoïde sur evidence pondérée × multiplicateur d'anchor)
747
- # Écrit les propositions dans memory/auto-rule-update.md (PAS auto-appliqué)
748
- # Confiance ≥ 0.70 mérite une revue sérieuse ; accepter → éditer la règle + loguer la décision
749
-
750
- # v2.1.0 : `memory --help` route désormais vers l'aide des sous-commandes (auparavant top-level)
751
- npx claudeos-core memory --help
752
- ```
753
-
754
- > **Corrections v2.1.0 :** `memory score` ne laisse plus de lignes `importance` dupliquées après la première exécution (auparavant la ligne auto-scorée était ajoutée au-dessus tandis que la ligne plate d'origine restait en dessous). Le marqueur de résumé de l'Étape 1 de `memory compact` est désormais un vrai item de liste markdown (`- _Summarized on ..._`) pour qu'il s'affiche proprement et soit correctement re-parsé lors des compactions suivantes.
755
-
756
- Quand écrire dans memory (Claude le fait on-demand, mais vous pouvez aussi éditer manuellement) :
757
- - **`decision-log.md`** — ajoutez une nouvelle entrée quand vous choisissez entre des patterns concurrents, sélectionnez une bibliothèque, définissez une convention d'équipe ou décidez de NE PAS faire quelque chose. Append-only ; n'éditez jamais les entrées historiques.
758
- - **`failure-patterns.md`** — ajoutez à la **deuxième occurrence** d'une erreur récurrente ou d'une root cause non évidente. Les erreurs de première fois n'ont pas besoin d'entrée.
759
- - `compaction.md` et `auto-rule-update.md` — générés/gérés par les sous-commandes CLI ci-dessus ; ne pas éditer à la main.
760
-
761
- ### Intégration CI/CD
762
-
763
- ```yaml
764
- # Exemple GitHub Actions
765
- - run: npx claudeos-core validate
766
- # Exit code 1 bloque la PR
767
-
768
- # Optionnel : housekeeping mensuel de memory (workflow cron séparé)
769
- - run: npx claudeos-core memory compact
770
- - run: npx claudeos-core memory score
771
- ```
440
+ Pour le détail des checks de chaque validator, voir [docs/fr/verification.md](docs/fr/verification.md).
772
441
 
773
442
  ---
774
443
 
775
- ## En Quoi Est-ce Différent ?
776
-
777
- ### vs autres outils Claude Code
778
-
779
- | | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
780
- |---|---|---|---|---|---|
781
- | **Approche** | Code analyse d'abord, puis LLM génère | Presets de config pré-construits | Le LLM conçoit des équipes d'agents | Le LLM génère des docs de spec | Le LLM écrit CLAUDE.md |
782
- | **Lit votre code source** | ✅ Analyse statique déterministe | ❌ | ❌ | ❌ (le LLM lit) | ❌ (le LLM lit) |
783
- | **Détection de stack** | Le code confirme (ORM, BD, build tool, pkg manager) | N/A (stack-agnostic) | Le LLM devine | Le LLM devine | Le LLM devine |
784
- | **Détection de domaines** | Le code confirme (Java 5 patterns, Kotlin CQRS, Next.js FSD) | N/A | Le LLM devine | N/A | N/A |
785
- | **Même projet → Même résultat** | ✅ Analyse déterministe | ✅ (fichiers statiques) | ❌ (le LLM varie) | ❌ (le LLM varie) | ❌ (le LLM varie) |
786
- | **Gestion des gros projets** | Split en groupes de domaines (4 domaines / 40 fichiers par groupe) | N/A | Pas de split | Pas de split | Limite de fenêtre de contexte |
787
- | **Sortie** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ fichiers) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 documents de spec | CLAUDE.md (1 fichier) |
788
- | **Emplacement de sortie** | `.claude/rules/` (auto-chargé par Claude Code) | `.claude/` divers | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
789
- | **Vérification post-génération** | ✅ 5 validateurs automatiques | ❌ | ❌ | ❌ | ❌ |
790
- | **Sortie multi-langue** | ✅ 10 langues | ❌ | ❌ | ❌ | ❌ |
791
- | **Multi-stack** | ✅ Backend + Frontend simultanés | ❌ Stack-agnostic | ❌ | ❌ | Partiel |
792
- | **Couche memory persistante** | ✅ L4 — decision log + failure patterns + propositions de règles auto-scorées (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
793
- | **Orchestration d'agents** | ❌ | ✅ 28 agents | ✅ 6 patterns | ❌ | ❌ |
794
-
795
- ### La différence clé en une phrase
796
-
797
- **Les autres outils donnent à Claude « des instructions globalement correctes ». ClaudeOS-Core donne à Claude « des instructions extraites de votre code réel ».**
444
+ ## Memory Layer (optionnel, pour les projets longs)
798
445
 
799
- C'est pourquoi Claude Code arrête de générer du code JPA dans votre projet MyBatis,
800
- arrête d'utiliser `success()` quand votre codebase utilise `ok()`,
801
- et arrête de créer des répertoires `user/controller/` quand votre projet utilise `controller/user/`.
446
+ Depuis v2.0, ClaudeOS-Core écrit un dossier `claudeos-core/memory/` contenant quatre fichiers :
802
447
 
803
- ### Complémentaires, pas concurrents
448
+ - `decision-log.md` append-only « pourquoi nous avons choisi X plutôt que Y »
449
+ - `failure-patterns.md` — erreurs récurrentes avec scores frequency/importance
450
+ - `compaction.md` — comment la memory est auto-compactée au fil du temps
451
+ - `auto-rule-update.md` — patterns qui devraient devenir de nouvelles rules
804
452
 
805
- ClaudeOS-Core se concentre sur les **règles et standards spécifiques au projet**.
806
- Les autres outils se concentrent sur **l'orchestration d'agents et les workflows**.
453
+ Vous pouvez exécuter `npx claudeos-core memory propose-rules` pour demander à Claude d'examiner les failure patterns récents et de suggérer de nouvelles rules à ajouter.
807
454
 
808
- Vous pouvez utiliser ClaudeOS-Core pour générer les règles de votre projet, puis utiliser ECC ou Harness par-dessus pour les équipes d'agents et l'automatisation des workflows. Ils résolvent des problèmes différents.
455
+ Pour le modèle memory et son cycle de vie, voir [docs/fr/memory-layer.md](docs/fr/memory-layer.md).
809
456
 
810
457
  ---
811
458
 
812
459
  ## FAQ
813
460
 
814
- **Q : Est-ce que ça modifie mon code source ?**
815
- Non. Il crée uniquement `CLAUDE.md`, `.claude/rules/` et `claudeos-core/`. Votre code existant n'est jamais modifié.
461
+ **Q : Ai-je besoin d'une clé API Claude ?**
462
+ R : Non. ClaudeOS-Core utilise votre installation Claude Code existante — il pipe les prompts vers `claude -p` sur votre machine. Pas de comptes supplémentaires.
816
463
 
817
- **Q : Combien ça coûte ?**
818
- Il appelle `claude -p` plusieurs fois à travers les 4 passes. En mode split v2.1.0, Pass 3 seul se développe en 4–14+ stages selon la taille du projet (voir [Auto-scaling](#auto-scaling-selon-la-taille-du-projet)). Un petit projet typique (1–15 domaines) utilise 8–9 appels `claude -p` au total ; un projet de 18 domaines en utilise 11 ; un projet de 60 domaines en utilise 15–17. Chaque stage tourne avec une fenêtre de contexte fraîche le coût en tokens par appel est en fait plus bas qu'avec le Pass 3 monolithique, parce qu'aucun stage n'a à retenir l'arbre de fichiers entier dans un seul contexte. Quand `--lang` n'est pas l'anglais, le chemin de fallback statique peut invoquer quelques appels supplémentaires à `claude -p` pour traduire ; les résultats sont cachés dans `claudeos-core/generated/.i18n-cache-<lang>.json` pour que les exécutions suivantes les réutilisent. Cela reste dans l'usage normal de Claude Code.
464
+ **Q : Cela écrasera-t-il mon CLAUDE.md ou `.claude/rules/` existants ?**
465
+ R : Première exécution sur un projet vierge : ils sont créés. Réexécution sans `--force` : vos éditions sont préservées les markers de pass de l'exécution précédente sont détectés et les passes sont sautées. Réexécution avec `--force` : tout est wipé et régénéré (vos éditions sont perdues c'est ce que `--force` veut dire). Voir [docs/fr/safety.md](docs/fr/safety.md).
819
466
 
820
- **Q : Qu'est-ce que le mode split de Pass 3 et pourquoi a-t-il été ajouté en v2.1.0 ?**
821
- Avant la v2.1.0, Pass 3 faisait un seul appel `claude -p` qui devait émettre tout l'arbre de fichiers généré (`CLAUDE.md`, standards, règles, skills, guides — typiquement 30–60 fichiers) en une seule réponse. Cela fonctionnait sur les petits projets mais se heurtait de façon fiable à des échecs `Prompt is too long` par accumulation de sortie autour de 5 domaines. L'échec n'était pas prédictible à partir de la taille d'entrée — il dépendait de la verbosité des fichiers générés et pouvait frapper le même projet de façon intermittente. Le mode split contourne le problème structurellement : Pass 3 est découpé en stages séquentiels (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`), chacun un appel `claude -p` séparé avec une fenêtre de contexte fraîche. La cohérence inter-stages est préservée par `pass3a-facts.md`, une fiche de faits distillée de 5 à 10 Ko que chaque stage suivant référence au lieu de relire `pass2-merged.json`. Le marqueur `pass3-complete.json` porte un array `groupsCompleted` pour qu'un crash pendant `3c-2` reprenne à `3c-2` (pas à `3a`), évitant de doubler le coût en tokens.
822
- **Q : Dois-je commiter les fichiers générés dans Git ?**
823
- Oui, recommandé. Votre équipe peut partager les mêmes standards Claude Code. Pensez à ajouter `claudeos-core/generated/` à `.gitignore` (le JSON d'analyse est régénérable).
467
+ **Q : Mon stack n'est pas supporté. Puis-je en ajouter un ?**
468
+ R : Oui. Un nouveau stack nécessite ~3 templates de prompt + un domain scanner. Voir [CONTRIBUTING.md](CONTRIBUTING.md) pour le guide en 8 étapes.
824
469
 
825
- **Q : Qu'en est-il des projets stack mixte (ex : Java backend + React frontend) ?**
826
- Totalement supporté. ClaudeOS-Core auto-détecte les deux stacks, tagge les domaines comme `backend` ou `frontend`, et utilise des prompts d'analyse spécifiques au stack pour chacun. Pass 2 merge tout, et Pass 3 génère les standards backend et frontend à travers ses stages split — les domaines backend vont dans certains batches 3b/3c, les domaines frontend dans d'autres, tous référençant le même `pass3a-facts.md` pour la cohérence.
470
+ **Q : Comment générer la doc en français (ou dans une autre langue) ?**
471
+ R : `npx claudeos-core init --lang fr`. 10 langues supportées : en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
827
472
 
828
- **Q : Est-ce que ça marche avec les monorepos Turborepo / pnpm workspaces / Lerna ?**
829
- Oui. ClaudeOS-Core détecte `turbo.json`, `pnpm-workspace.yaml`, `lerna.json`, ou `package.json#workspaces` et scanne automatiquement les `package.json` des sous-packages pour les dépendances framework/ORM/BD. Le scan de domaines couvre les patterns `apps/*/src/` et `packages/*/src/`. Lancez depuis la racine du monorepo.
473
+ **Q : Cela fonctionne-t-il avec les monorepos ?**
474
+ R : Oui Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) et npm/yarn workspaces (`package.json#workspaces`) sont détectés par le stack-detector. Chaque app a sa propre analyse. Les autres layouts de monorepo (par ex. NX) ne sont pas spécifiquement détectés, mais les patterns génériques `apps/*/` et `packages/*/` sont quand même pris en compte par les scanners par stack.
830
475
 
831
- **Q : Que se passe-t-il en cas de re-lancement ?**
832
- Si des résultats précédents de Pass 1/2 existent, un prompt interactif vous laisse choisir : **Continue** (reprendre ça s'est arrêté) ou **Fresh** (tout supprimer et repartir de zéro). Utilisez `--force` pour sauter le prompt et toujours repartir de zéro. En mode split v2.1.0, le resume de Pass 3 fonctionne à la granularité du stage — si l'exécution a crashé pendant `3c-2`, le prochain `init` reprend à `3c-2` plutôt que de redémarrer depuis `3a` (ce qui doublerait le coût en tokens). Le marqueur `pass3-complete.json` enregistre `mode: "split"` plus un array `groupsCompleted` pour piloter cette logique.
476
+ **Q : Et si Claude Code génère des rules avec lesquelles je suis en désaccord ?**
477
+ R : Éditez-les directement. Puis exécutez `npx claudeos-core lint` pour vérifier que CLAUDE.md est toujours structurellement valide. Vos éditions sont préservées sur les exécutions `init` suivantes (sans `--force`) le mécanisme de resume saute les passes dont les markers existent.
833
478
 
834
- **Q : NestJS a-t-il son propre template ou utilise-t-il celui d'Express ?**
835
- NestJS utilise un template dédié `node-nestjs` avec des catégories d'analyse spécifiques à NestJS : decorators `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, container DI, patterns CQRS et `Test.createTestingModule`. Les projets Express utilisent le template séparé `node-express`.
836
-
837
- **Q : Qu'en est-il des projets Vue / Nuxt ?**
838
- Vue/Nuxt utilise un template dédié `vue-nuxt` couvrant Composition API, `<script setup>`, defineProps/defineEmits, Pinia stores, `useFetch`/`useAsyncData`, routes serveur Nitro et `@nuxt/test-utils`. Les projets Next.js/React utilisent le template `node-nextjs`.
839
-
840
- **Q : Supporte-t-il Kotlin ?**
841
- Oui. ClaudeOS-Core auto-détecte Kotlin depuis `build.gradle.kts` ou le plugin kotlin dans `build.gradle`. Il utilise un template dédié `kotlin-spring` avec une analyse spécifique Kotlin (data classes, sealed classes, coroutines, extension functions, MockK, etc.).
842
-
843
- **Q : Qu'en est-il de l'architecture CQRS / BFF ?**
844
- Totalement supporté pour les projets Kotlin multi-module. ClaudeOS-Core lit `settings.gradle.kts`, détecte les types de module (command, query, bff, integration) depuis les noms de module, et regroupe le même domaine à travers les modules Command/Query. Les standards générés incluent des règles séparées pour command controllers vs query controllers, patterns BFF/Feign et conventions de communication inter-modules.
845
-
846
- **Q : Qu'en est-il des monorepos Gradle multi-module ?**
847
- ClaudeOS-Core scanne tous les sous-modules (`**/src/main/kotlin/**/*.kt`) indépendamment de la profondeur d'imbrication. Les types de module sont inférés des conventions de naming (ex : `reservation-command-server` → domaine : `reservation`, type : `command`). Les bibliothèques partagées (`shared-lib`, `integration-lib`) sont également détectées.
848
-
849
- **Q : Qu'est-ce que la couche Memory L4 (v2.0.0) ? Dois-je commiter `claudeos-core/memory/` ?**
850
- Oui — **commitez toujours** `claudeos-core/memory/`. C'est une connaissance d'équipe persistante : `decision-log.md` enregistre le *pourquoi* des choix architecturaux (append-only), `failure-patterns.md` enregistre les erreurs récurrentes avec des scores d'importance pour que les futures sessions les évitent, `compaction.md` définit la politique de compaction en 4 étapes, et `auto-rule-update.md` collecte les propositions d'amélioration de règles générées par la machine. Contrairement aux règles (auto-chargées par chemin), les fichiers memory sont **on-demand** — Claude ne les lit que quand les règles `60.memory/*` le lui indiquent (ex : scan de début de session des échecs à haute importance). Cela maintient le coût de contexte bas tout en préservant la connaissance à long terme.
851
-
852
- **Q : Et si Pass 4 échoue ?**
853
- Le pipeline automatisé (`npx claudeos-core init`) a un fallback statique : si `claude -p` échoue ou si `pass4-prompt.md` est absent, il scaffolde la couche memory directement via `lib/memory-scaffold.js`. Quand `--lang` n'est pas l'anglais, le fallback statique **doit** traduire via la CLI `claude` — si ça échoue aussi, l'exécution s'avorte avec `InitError` (pas de fallback silencieux vers l'anglais). Relancez quand `claude` est authentifié, ou utilisez `--lang en` pour sauter la traduction. Les résultats de traduction sont cachés dans `claudeos-core/generated/.i18n-cache-<lang>.json` pour que les exécutions suivantes les réutilisent.
854
-
855
- **Q : Que font `memory compact` / `memory score` / `memory propose-rules` ?**
856
- Voir la section [Maintenance de la couche Memory](#maintenance-de-la-couche-memory-v200) ci-dessus. Version courte : `compact` lance la politique en 4 étapes (résumer anciennes, merger duplicats, drop basse-importance anciennes, appliquer plafond 400 lignes) ; `score` re-classe `failure-patterns.md` par importance (fréquence × récence) ; `propose-rules` fait remonter les candidats d'ajouts de règles depuis les échecs récurrents dans `auto-rule-update.md` (pas auto-appliqué — revoyez et acceptez/rejetez manuellement).
857
-
858
- **Q : Pourquoi `--force` (ou le mode resume « fresh ») supprime-t-il `.claude/rules/` ?**
859
- v2.0.0 a ajouté trois guards de silent-failure à Pass 3 (Guard 3 couvre deux variantes de sortie incomplète : H2 pour `guide/` et H1 pour `standard/skills`). Guard 1 (« déplacement partiel de staged-rules ») et Guard 3 (« sortie incomplète — fichiers guide manquants/vides ou sentinel standard manquant / skills vide ») ne dépendent pas des règles existantes, mais Guard 2 (« zéro règles détectées ») si — il se déclenche quand Claude a ignoré la directive `staging-override.md` et a tenté d'écrire directement dans `.claude/` (où la politique de chemins sensibles de Claude Code bloque). Des règles obsolètes d'une exécution précédente feraient que Guard 2 produise un faux négatif — donc `--force`/`fresh` efface `.claude/rules/` pour assurer une détection propre. **Les éditions manuelles des fichiers de règles seront perdues** sous `--force`/`fresh` ; sauvegardez d'abord si besoin. (Remarque v2.1.0 : Guard 3 H1 ne vérifie plus `plan/` puisque les master plans ne sont plus générés.)
860
-
861
- **Q : Qu'est-ce que `claudeos-core/generated/.staged-rules/` et pourquoi existe-t-il ?**
862
- La politique de chemins sensibles de Claude Code refuse les écritures directes dans `.claude/` depuis le sous-processus `claude -p` (même avec `--dangerously-skip-permissions`). v2.0.0 contourne cela en faisant que les prompts Pass 3/4 redirigent toutes les écritures `.claude/rules/` vers le répertoire de staging ; l'orchestrateur Node.js (qui n'est pas soumis à cette politique) déplace ensuite l'arbre staged dans `.claude/rules/` après chaque pass. C'est transparent pour l'utilisateur — le répertoire est auto-créé, auto-nettoyé et auto-déplacé. Si une exécution précédente a crashé en plein milieu du déplacement, la suivante efface le répertoire de staging avant de réessayer. En mode split v2.1.0, le runner de stage déplace les règles staged dans `.claude/rules/` après chaque stage (pas seulement à la fin), donc un crash en plein Pass 3 laisse en place les règles des stages déjà terminés.
863
-
864
- **Q : Puis-je lancer Pass 3 manuellement au lieu de `npx claudeos-core init` ?**
865
- Oui pour les petits projets (≤5 domaines) — les instructions manuelles en appel unique de l'[Étape 6](#étape-6--pass-3--générer-toute-la-documentation-divisée-en-plusieurs-stages) fonctionnent toujours. Pour les projets plus gros vous devriez utiliser `npx claudeos-core init` parce que c'est le runner split qui orchestre l'exécution stage par stage avec des contextes frais, gère la sous-division en batches à partir de 16 domaines, écrit la bonne forme de marqueur `pass3-complete.json` (`mode: "split"` + `groupsCompleted`), et déplace les règles staged entre les stages. Reproduire cette orchestration à la main est possible mais fastidieux. Si vous avez une raison d'exécuter des stages manuellement (ex : débogage d'un stage spécifique), vous pouvez templater `pass3-prompt.md` avec la bonne directive `STAGE:` et l'alimenter à `claude -p` directement — mais pensez à déplacer `.staged-rules/` après chaque stage et à mettre à jour le marqueur vous-même.
866
-
867
- **Q : Mon projet est une migration depuis la v2.0.x et a un répertoire `claudeos-core/plan/` existant. Que faire ?**
868
- Rien de requis — les outils v2.1.0 ignorent `plan/` quand il est absent ou vide, et `plan-validator` gère toujours les projets legacy avec des répertoires `plan/` peuplés pour la rétrocompatibilité. Vous pouvez supprimer sans risque `claudeos-core/plan/` si vous n'avez pas besoin des backups de master plan (l'historique git est un meilleur backup de toute façon). Si vous gardez `plan/`, lancer `npx claudeos-core init` ne le mettra pas à jour — le nouveau contenu n'est plus agrégé dans les master plans en v2.1.0. Les outils de vérification gèrent les deux cas proprement.
869
-
870
- ---
871
-
872
- ## Structure des Templates
873
-
874
- ```
875
- pass-prompts/templates/
876
- ├── common/ # header/footer partagés + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
877
- │ ├── header.md # Rôle + directive de format de sortie (toutes les passes)
878
- │ ├── pass3-footer.md # Instruction health-check post-Pass-3 + 5 blocs CRITICAL de guardrails (v2.2.0)
879
- │ ├── pass3-phase1.md # Bloc « Read Once, Extract Facts » avec Rules A-E (v2.1.0)
880
- │ ├── pass4.md # Prompt de scaffolding mémoire (v2.0.0)
881
- │ ├── staging-override.md # Redirige les écritures .claude/rules/** vers .staged-rules/** (v2.0.0)
882
- │ ├── claude-md-scaffold.md # Template CLAUDE.md déterministe à 8 sections (v2.2.0)
883
- │ └── lang-instructions.json # Directives de sortie par langue (10 langues)
884
- ├── java-spring/ # Java / Spring Boot
885
- ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
886
- ├── node-express/ # Node.js / Express
887
- ├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
888
- ├── node-fastify/ # Node.js / Fastify
889
- ├── node-nextjs/ # Next.js / React (App Router, RSC)
890
- ├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
891
- ├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
892
- ├── angular/ # Angular
893
- ├── python-django/ # Python / Django (DRF)
894
- ├── python-fastapi/ # Python / FastAPI
895
- └── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
896
- ```
897
-
898
- `plan-installer` auto-détecte votre(vos) stack(s), puis assemble des prompts spécifiques au type. NestJS, Vue/Nuxt, Vite SPA et Flask utilisent chacun des templates dédiés avec des catégories d'analyse spécifiques au framework (ex : `@Module`/`@Injectable`/Guards pour NestJS ; `<script setup>`/Pinia/useFetch pour Vue ; client-side routing/`VITE_` env pour Vite ; Blueprint/`app.factory`/Flask-SQLAlchemy pour Flask). Pour les projets multi-stack, des `pass1-backend-prompt.md` et `pass1-frontend-prompt.md` séparés sont générés, tandis que `pass3-prompt.md` combine les cibles de génération des deux stacks. En v2.1.0, le template Pass 3 est préfixé par `common/pass3-phase1.md` (le bloc « Read Once, Extract Facts » avec les Règles A–E) avant d'être tranché par stage en mode split. Pass 4 utilise le template partagé `common/pass4.md` (memory scaffolding) quel que soit le stack.
899
-
900
- **Dans v2.2.0**, le prompt Pass 3 intègre également en ligne `common/claude-md-scaffold.md` (le template CLAUDE.md déterministe à 8 sections) entre le bloc phase1 et le corps spécifique au stack — cela fixe la structure des sections afin que les CLAUDE.md générés ne dérivent pas entre projets, tout en laissant le contenu s'adapter à chaque projet. Les templates sont écrits **English-first** ; l'injection de langue depuis `lang-instructions.json` demande au LLM de traduire les titres de section et la prose dans la langue de sortie cible au moment de l'émission.
479
+ **Q : signaler les bugs ?**
480
+ R : [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Pour les problèmes de sécurité, voir [SECURITY.md](SECURITY.md).
901
481
 
902
482
  ---
903
483
 
904
- ## Support Monorepo
905
-
906
- ClaudeOS-Core auto-détecte les setups de monorepo JS/TS et scanne les sous-packages à la recherche de dépendances.
907
-
908
- **Marqueurs de monorepo supportés** (auto-détectés) :
909
- - `turbo.json` (Turborepo)
910
- - `pnpm-workspace.yaml` (pnpm workspaces)
911
- - `lerna.json` (Lerna)
912
- - `package.json#workspaces` (npm/yarn workspaces)
913
-
914
- **Lancez depuis la racine du monorepo** — ClaudeOS-Core lit `apps/*/package.json` et `packages/*/package.json` pour découvrir les dépendances framework/ORM/BD entre sous-packages :
915
-
916
- ```bash
917
- cd my-monorepo
918
- npx claudeos-core init
919
- ```
920
-
921
- **Ce qui est détecté :**
922
- - Dépendances de `apps/web/package.json` (ex : `next`, `react`) → stack frontend
923
- - Dépendances de `apps/api/package.json` (ex : `express`, `prisma`) → stack backend
924
- - Dépendances de `packages/db/package.json` (ex : `drizzle-orm`) → ORM/BD
925
- - Chemins de workspace personnalisés depuis `pnpm-workspace.yaml` (ex : `services/*`)
926
-
927
- **Le scan de domaines couvre aussi les layouts monorepo :**
928
- - `apps/api/src/modules/*/` et `apps/api/src/*/` pour les domaines backend
929
- - `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` pour les domaines frontend
930
- - `packages/*/src/*/` pour les domaines de packages partagés
931
-
932
- ```
933
- my-monorepo/ ← Lancez ici : npx claudeos-core init
934
- ├── turbo.json ← Auto-détecté comme Turborepo
935
- ├── apps/
936
- │ ├── web/ ← Next.js détecté depuis apps/web/package.json
937
- │ │ ├── app/dashboard/ ← Domaine frontend détecté
938
- │ │ └── package.json ← { "dependencies": { "next": "^14" } }
939
- │ └── api/ ← Express détecté depuis apps/api/package.json
940
- │ ├── src/modules/users/ ← Domaine backend détecté
941
- │ └── package.json ← { "dependencies": { "express": "^4" } }
942
- ├── packages/
943
- │ ├── db/ ← Drizzle détecté depuis packages/db/package.json
944
- │ └── ui/
945
- └── package.json ← { "workspaces": ["apps/*", "packages/*"] }
946
- ```
947
-
948
- > **Remarque :** Pour les monorepos Kotlin/Java, la détection multi-module utilise `settings.gradle.kts` (voir [Détection des Domaines Kotlin Multi-Module](#détection-des-domaines-kotlin-multi-module) ci-dessus) et ne nécessite pas de marqueurs de monorepo JS.
949
-
950
- ## Troubleshooting
951
-
952
- **« claude: command not found »** — La CLI Claude Code n'est pas installée ou pas dans le PATH. Voir [docs Claude Code](https://code.claude.com/docs/en/overview).
953
-
954
- **« npm install failed »** — La version de Node.js est peut-être trop basse. Requiert v18+.
955
-
956
- **« 0 domains detected »** — La structure de votre projet peut être non standard. Voir les patterns de détection ci-dessus pour votre stack.
957
-
958
- **« 0 domains detected » sur projet Kotlin** — Assurez-vous que votre projet a `build.gradle.kts` (ou `build.gradle` avec plugin kotlin) à la racine, et que les fichiers source sont sous `**/src/main/kotlin/`. Pour les projets multi-module, assurez-vous que `settings.gradle.kts` contient des instructions `include()`. Les projets Kotlin single-module (sans `settings.gradle`) sont aussi supportés — les domaines sont extraits de la structure package/classe sous `src/main/kotlin/`.
959
-
960
- **« Language detected as java instead of kotlin »** — ClaudeOS-Core vérifie d'abord le `build.gradle(.kts)` racine, puis les fichiers build des sous-modules. Si le fichier de build racine utilise le plugin `java` sans `kotlin`, mais que les sous-modules utilisent Kotlin, l'outil vérifie jusqu'à 5 fichiers de build de sous-modules en fallback. Si toujours pas détecté, assurez-vous qu'au moins un `build.gradle.kts` contient `kotlin("jvm")` ou `org.jetbrains.kotlin`.
961
-
962
- **« CQRS not detected »** — La détection d'architecture dépend du fait que les noms de module contiennent les mots-clés `command` et `query`. Si vos modules utilisent un naming différent (ex : `write-server`, `read-server`), l'architecture CQRS ne sera pas auto-détectée. Vous pouvez ajuster manuellement les prompts générés après l'exécution de plan-installer.
963
-
964
- **« Pass 3 produced 0 rule files under .claude/rules/ » (v2.0.0)** — Guard 2 s'est déclenché : Claude a ignoré la directive `staging-override.md` et a essayé d'écrire directement dans `.claude/`, où la politique de chemins sensibles de Claude Code bloque les écritures. Relancez avec `npx claudeos-core init --force`. Si l'erreur persiste, inspectez `claudeos-core/generated/pass3-prompt.md` pour vérifier que le bloc `staging-override.md` est en haut.
965
-
966
- **« Pass 3 finished but N rule file(s) could not be moved from staging » (v2.0.0)** — Guard 1 s'est déclenché : le déplacement depuis staging a heurté un file lock transitoire (typiquement antivirus Windows ou file-watcher). Le marqueur n'est PAS écrit, donc l'exécution `init` suivante réessaie Pass 3 automatiquement. Relancez simplement `npx claudeos-core init`.
967
-
968
- **« Pass 3 produced CLAUDE.md and rules but N/9 guide files are missing or empty » (v2.0.0)** — Guard 3 (H2) s'est déclenché : Claude a tronqué sa réponse au milieu après avoir écrit CLAUDE.md + règles mais avant de finir (ou de commencer) la section `claudeos-core/guide/` (9 fichiers attendus). Se déclenche aussi sur un fichier uniquement BOM ou uniquement whitespace (le heading a été écrit mais le corps a été tronqué). Sans ce guard, le marqueur de complétion serait quand même écrit, laissant `guide/` vide de façon permanente aux exécutions suivantes. Ici le marqueur n'est PAS écrit, donc l'exécution `init` suivante réessaie Pass 3 à partir des mêmes résultats de Pass 2. Si ça continue de se répéter, relancez avec `npx claudeos-core init --force` pour régénérer depuis zéro.
969
-
970
- **« Pass 3 finished but the following required output(s) are missing or empty » (v2.0.0, mis à jour en v2.1.0)** — Guard 3 (H1) s'est déclenché : Claude a tronqué APRÈS `claudeos-core/guide/` mais avant (ou pendant) `claudeos-core/standard/` ou `claudeos-core/skills/`. Exigences : (a) `standard/00.core/01.project-overview.md` existe et n'est pas vide (sentinel écrit par le prompt Pass 3 de chaque stack), (b) `skills/` a ≥1 `.md` non vide. `database/` et `mcp-guide/` sont intentionnellement exclus (certains stacks produisent légitimement zéro fichier). `plan/` n'est plus vérifié depuis la v2.1.0 (les master plans ont été supprimés). Même chemin de récupération que Guard 3 (H2) : relancez `init`, ou `--force` si ça persiste.
971
-
972
- **« Pass 3 split stage crashed partway through (v2.1.0) »** — Quand l'un des stages split (ex : `3b-1`, `3c-2`) échoue en cours d'exécution, le marqueur au niveau stage n'est PAS écrit, mais les stages terminés SONT enregistrés dans `pass3-complete.json.groupsCompleted`. L'exécution `init` suivante lit cet array et reprend au premier stage non terminé, sautant tout le travail terminé précédemment. Vous n'avez rien à faire manuellement — relancez simplement `npx claudeos-core init`. Si le resume échoue au même stage de façon répétée, inspectez `claudeos-core/generated/pass3-prompt.md` pour du contenu mal formé, puis essayez `--force` pour un redémarrage complet. La forme de `pass3-complete.json` (`mode: "split"`, `groupsCompleted: [...]`) est stable ; un marqueur manquant ou mal formé fait que tout Pass 3 redémarre depuis `3a`.
973
-
974
- **« Pass 3 stale marker (shape mismatch) — treating as incomplete » (v2.1.0)** — Un `pass3-complete.json` d'une exécution monolithique pré-v2.1.0 est interprété sous les nouvelles règles du mode split. Le check de forme cherche `mode: "split"` et un array `groupsCompleted` ; si l'un ou l'autre manque, le marqueur est traité comme partiel et Pass 3 est relancé en mode split. Si vous avez migré depuis la v2.0.x, c'est attendu une fois — l'exécution suivante écrira la bonne forme de marqueur. Aucune action nécessaire.
484
+ ## Documentation
975
485
 
976
- **« pass2-merged.json exists but is malformed or incomplete (<5 top-level keys), re-running » (v2.0.0)** — Log info, pas une erreur. Au resume, `init` parse et valide désormais `pass2-merged.json` (≥5 clés de niveau supérieur requises, reflétant le seuil `INSUFFICIENT_KEYS` de `pass-json-validator`). Un squelette `{}` ou un JSON mal formé d'une exécution précédente crashée est automatiquement supprimé et Pass 2 est relancé. Pas d'action manuelle nécessaire — le pipeline s'auto-répare. Si ça récurre, inspectez `claudeos-core/generated/pass2-prompt.md` et réessayez avec `--force`.
977
-
978
- **« Static fallback failed while translating to lang='ko' » (v2.0.0)** Quand `--lang` n'est pas l'anglais, Pass 4 / fallback statique / gap-fill requièrent tous la CLI `claude` pour traduire. Si la traduction échoue (CLI non authentifiée, timeout réseau, ou la validation stricte a rejeté la sortie : longueur <40%, code fences cassés, frontmatter perdu, etc.), l'exécution s'avorte plutôt que d'écrire silencieusement en anglais. Fix : assurez-vous que `claude` est authentifié, ou relancez avec `--lang en` pour sauter la traduction.
979
-
980
- **« pass4-memory.json exists but memory/ is empty » (v2.0.0)** Une exécution précédente a écrit le marqueur mais l'utilisateur (ou un script de nettoyage) a supprimé `claudeos-core/memory/`. La CLI auto-détecte ce marqueur obsolète et relance Pass 4 au prochain `init`. Pas d'action manuelle nécessaire.
981
-
982
- **« pass4-memory.json exists but is malformed (missing passNum/memoryFiles) — re-running Pass 4 » (v2.0.0)** — Log info, pas une erreur. Le contenu du marqueur de Pass 4 est désormais validé (`passNum === 4` + array `memoryFiles` non vide), pas seulement son existence. Un échec partiel de Claude qui aurait émis quelque chose comme `{"error":"timeout"}` comme corps du marqueur était précédemment accepté comme succès pour toujours ; maintenant le marqueur est supprimé et Pass 4 est relancé automatiquement.
983
-
984
- **« Could not delete stale pass3-complete.json / pass4-memory.json » InitError (v2.0.0)** `init` a détecté un marqueur obsolète (Pass 3 : CLAUDE.md a été supprimé extérieurement ; Pass 4 : memory/ vide ou corps de marqueur mal formé) et a tenté de le supprimer, mais l'appel `unlinkSync` a échoué — typiquement parce qu'un antivirus Windows ou un file-watcher (éditeur, indexeur IDE) retient le handle du fichier. Auparavant ceci était silencieusement ignoré, faisant que le pipeline sautait le pass et réutilisait le marqueur obsolète. Maintenant il échoue bruyamment. Fix : fermez tout éditeur/scanner AV qui pourrait avoir le fichier ouvert, puis relancez `npx claudeos-core init`.
985
-
986
- **« CLAUDEOS_SKIP_TRANSLATION=1 is set but --lang='ko' requires translation » InitError (v2.0.0)** — Vous avez la variable d'environnement réservée aux tests `CLAUDEOS_SKIP_TRANSLATION=1` définie dans votre shell (probablement un reste de setup CI/test) ET vous avez choisi un `--lang` non-anglais. Cette variable d'environnement court-circuite le chemin de traduction dont dépendent le fallback statique et le gap-fill de Pass 4 pour la sortie non-anglaise. `init` détecte le conflit au moment de la sélection de langue et s'avorte immédiatement (plutôt que de crasher en plein Pass 4 avec une erreur imbriquée confuse). Fix : soit `unset CLAUDEOS_SKIP_TRANSLATION` avant de lancer, soit utilisez `npx claudeos-core init --lang en`.
987
-
988
- **Avertissement "⚠️ v2.2.0 upgrade detected" (v2.2.0)** — Votre `CLAUDE.md` existant a été généré avec une version antérieure à v2.2.0. La régénération par défaut en mode resume ignorera les fichiers existants sous Rule B idempotency, donc les améliorations structurelles de v2.2.0 (scaffold CLAUDE.md à 8 sections, paths par fichier dans `40.infra/*`, précision du port basée sur `.env.example`, redesign de Section 8 `Common Rules & Memory (L4)` (repensée avec deux sous-sections : Common Rules · L4 Memory), ligne de règle `60.memory/*`, `04.doc-writing-guide.md` en forward-reference) NE seront PAS appliquées. Fix : relancez avec `npx claudeos-core init --force`. Cela écrase les fichiers générés (`CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, `claudeos-core/skills/`, `claudeos-core/guide/`) tout en préservant `claudeos-core/memory/` (decision-log, failure-patterns accumulés — append-only). Commitez le projet avant si vous voulez diff les écrasements avant acceptation.
989
-
990
- **Le port dans CLAUDE.md diffère de `.env.example` (v2.2.0)** — Le nouveau parser `.env` du stack-detector (`lib/env-parser.js`) lit d'abord `.env.example` (canonique, commité), puis les variantes `.env` en fallback. Variables de port reconnues : `PORT`, `VITE_PORT`, `VITE_DESKTOP_PORT`, `NEXT_PUBLIC_PORT`, `NUXT_PORT`, `DJANGO_PORT`, etc. Pour Spring Boot, `server.port` de `application.yml` a toujours la priorité sur `.env` (config framework-native gagne). Si votre projet utilise un nom de var env inhabituel, renommez-la selon une convention reconnue ou ouvrez une issue pour étendre `PORT_VAR_KEYS`. Les defaults framework (Vite 5173, Next.js 3000, Django 8000) ne sont utilisés que quand la détection directe et `.env` sont tous deux silencieux.
991
-
992
- **Valeurs secrètes redactées en `***REDACTED***` dans les docs générés (v2.2.0)** — Comportement attendu. Le parser `.env` v2.2.0 redacte automatiquement les valeurs des variables correspondant aux patterns `PASSWORD`/`SECRET`/`TOKEN`/`API_KEY`/`CREDENTIAL`/`PRIVATE_KEY` avant qu'elles n'atteignent un générateur. C'est du defense-in-depth contre les secrets accidentellement commités dans `.env.example`. `DATABASE_URL` reste tel quel pour la back-compat d'identification DB du stack-detector. Si vous voyez `***REDACTED***` quelque part dans le `CLAUDE.md` généré, c'est un bug — les valeurs redactées ne devraient pas atteindre le tableau ; veuillez ouvrir une issue. La config runtime non sensible (port, host, API target, NODE_ENV, etc.) passe sans modification.
486
+ | Sujet | À lire |
487
+ |---|---|
488
+ | Comment fonctionne le pipeline 4-pass (plus en profondeur que le diagramme) | [docs/fr/architecture.md](docs/fr/architecture.md) |
489
+ | Diagrammes visuels (Mermaid) de l'architecture | [docs/fr/diagrams.md](docs/fr/diagrams.md) |
490
+ | Détection de stackce que chaque scanner cherche | [docs/fr/stacks.md](docs/fr/stacks.md) |
491
+ | Memory layer — decision logs et failure patterns | [docs/fr/memory-layer.md](docs/fr/memory-layer.md) |
492
+ | Les 5 validators en détail | [docs/fr/verification.md](docs/fr/verification.md) |
493
+ | Toutes les commandes CLI et options | [docs/fr/commands.md](docs/fr/commands.md) |
494
+ | Installation manuelle (sans `npx`) | [docs/fr/manual-installation.md](docs/fr/manual-installation.md) |
495
+ | Overrides de scanner — `.claudeos-scan.json` | [docs/fr/advanced-config.md](docs/fr/advanced-config.md) |
496
+ | Sécurité : ce qui est préservé lors d'un re-init | [docs/fr/safety.md](docs/fr/safety.md) |
497
+ | Comparaison avec des outils similaires (scope, pas qualité) | [docs/fr/comparison.md](docs/fr/comparison.md) |
498
+ | Erreurs et récupération | [docs/fr/troubleshooting.md](docs/fr/troubleshooting.md) |
993
499
 
994
500
  ---
995
501
 
996
502
  ## Contribuer
997
503
 
998
- Les contributions sont les bienvenues ! Les domaines l'aide est la plus nécessaire :
999
-
1000
- - **Nouveaux templates de stack** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
1001
- - **Intégration IDE** — extension VS Code, plugin IntelliJ
1002
- - **Templates CI/CD** — GitLab CI, CircleCI, exemples Jenkins (GitHub Actions déjà livré — voir `.github/workflows/test.yml`)
1003
- - **Couverture de test** — Étendre la suite de tests (actuellement 602 tests à travers 30 fichiers de test couvrant scanners, stack detection, domain grouping, plan parsing, prompt generation, CLI selectors, monorepo detection, Vite SPA detection, outils de vérification, memory scaffold L4, validation de resume de Pass 2, Pass 3 Guards 1/2/3 (H1 sentinel + H2 BOM-aware empty-file + strict stale-marker unlink), sous-division en batches du mode split Pass 3, resume de marqueur partiel Pass 3 (v2.1.0), validation du contenu du marqueur Pass 4 + rigueur du stale-marker unlink + gap-fill scaffoldSkillsManifest (v2.1.0), guard d'env-skip de traduction + early fail-fast + workflow CI, déplacement de staged-rules, fallback lang-aware de traduction, suite de régression de suppression des master plans (v2.1.0), régression de formatage memory score/compact (v2.1.0), structure du template AI Work Rules, et extraction port/host/API-target du parser `.env` + redaction de variables sensibles (v2.2.0))
504
+ Les contributions sont les bienvenues ajout de support pour un stack, amélioration des prompts, correction de bugs. Voir [CONTRIBUTING.md](CONTRIBUTING.md).
1004
505
 
1005
- Voir [`CONTRIBUTING.md`](./CONTRIBUTING.md) pour la liste complète des domaines, le style de code, la convention de commit et le guide pas à pas pour ajouter un nouveau template de stack.
1006
-
1007
- ---
506
+ Pour le Code of Conduct et la politique de sécurité, voir [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) et [SECURITY.md](SECURITY.md).
1008
507
 
1009
- ## Auteur
508
+ ## Licence
1010
509
 
1011
- Créé par **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
510
+ [ISC](LICENSE) gratuit pour tout usage, y compris commercial.
1012
511
 
1013
- ## Licence
512
+ ---
1014
513
 
1015
- ISC
514
+ <sub>Construit avec soin par [@claudeos-core](https://github.com/claudeos-core). Si cela vous a fait gagner du temps, une ⭐ sur GitHub aide à garder le projet visible.</sub>