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.
- package/CHANGELOG.md +790 -74
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.de.md +374 -876
- package/README.es.md +374 -875
- package/README.fr.md +374 -875
- package/README.hi.md +374 -875
- package/README.ja.md +374 -875
- package/README.ko.md +374 -874
- package/README.md +374 -876
- package/README.ru.md +374 -877
- package/README.vi.md +374 -875
- package/README.zh-CN.md +374 -874
- package/SECURITY.md +51 -0
- package/bin/commands/init.js +192 -37
- package/content-validator/index.js +97 -4
- package/health-checker/index.js +44 -10
- package/package.json +92 -90
- package/pass-json-validator/index.js +58 -7
- package/pass-prompts/templates/angular/pass3.md +15 -14
- package/pass-prompts/templates/common/claude-md-scaffold.md +81 -0
- package/pass-prompts/templates/common/pass3-footer.md +104 -0
- package/pass-prompts/templates/java-spring/pass3.md +19 -18
- package/pass-prompts/templates/kotlin-spring/pass3.md +23 -22
- package/pass-prompts/templates/node-express/pass3.md +18 -17
- package/pass-prompts/templates/node-fastify/pass3.md +11 -10
- package/pass-prompts/templates/node-nestjs/pass3.md +11 -10
- package/pass-prompts/templates/node-nextjs/pass3.md +18 -17
- package/pass-prompts/templates/node-vite/pass3.md +11 -10
- package/pass-prompts/templates/python-django/pass3.md +18 -17
- package/pass-prompts/templates/python-fastapi/pass3.md +18 -17
- package/pass-prompts/templates/python-flask/pass3.md +9 -8
- package/pass-prompts/templates/vue-nuxt/pass3.md +9 -8
- package/plan-installer/domain-grouper.js +45 -5
- package/plan-installer/index.js +11 -1
- package/plan-installer/scanners/scan-java.js +98 -2
- package/plan-installer/stack-detector.js +44 -0
package/README.fr.md
CHANGED
|
@@ -1,1015 +1,514 @@
|
|
|
1
1
|
# ClaudeOS-Core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
4
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
5
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
4
9
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
14
|
+
Fonctionne sur [**12 stacks**](#supported-stacks) (monorepos inclus) — une seule commande `npx`, sans config, resume-safe, idempotent.
|
|
42
15
|
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
176
|
+
````markdown
|
|
177
|
+
---
|
|
178
|
+
paths:
|
|
179
|
+
- "**/*"
|
|
180
|
+
---
|
|
254
181
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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) { // NO — let 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
285
|
-
|
|
235
|
+
<details>
|
|
236
|
+
<summary><strong>🧠 Un seed <code>decision-log.md</code> auto-généré (extrait réel)</strong></summary>
|
|
286
237
|
|
|
287
|
-
|
|
288
|
-
|
|
238
|
+
```markdown
|
|
239
|
+
## 2026-04-26 — Hexagonal ports & adapters with MyBatis-only persistence
|
|
289
240
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
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
|
-
|
|
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
|
-
|
|
302
|
-
node claudeos-core-tools/plan-installer/index.js
|
|
303
|
-
```
|
|
260
|
+
</details>
|
|
304
261
|
|
|
305
|
-
|
|
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
|
-
|
|
264
|
+
## Quick Start
|
|
317
265
|
|
|
318
|
-
|
|
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
|
-
#
|
|
322
|
-
|
|
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
|
-
|
|
272
|
+
# 2. Lancer init (analyse votre code et demande à Claude d'écrire les rules)
|
|
273
|
+
npx claudeos-core init
|
|
358
274
|
|
|
359
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
313
|
+
---
|
|
378
314
|
|
|
379
|
-
|
|
315
|
+
## À qui s'adresse cet outil ?
|
|
380
316
|
|
|
381
|
-
|
|
|
382
|
-
|
|
383
|
-
|
|
|
384
|
-
|
|
|
385
|
-
|
|
|
386
|
-
|
|
|
387
|
-
|
|
|
388
|
-
|
|
|
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
|
-
|
|
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
|
-
|
|
329
|
+
---
|
|
393
330
|
|
|
394
|
-
|
|
331
|
+
## Comment ça marche ?
|
|
395
332
|
|
|
396
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
438
|
-
|
|
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
|
-
|
|
350
|
+
**3. Step C — Verification (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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
**
|
|
369
|
+
**Backend :** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
|
|
504
370
|
|
|
505
|
-
**
|
|
371
|
+
**Frontend :** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
506
372
|
|
|
507
|
-
|
|
373
|
+
Les projets multi-stack (par ex. backend Spring Boot + frontend Next.js) fonctionnent d'emblée.
|
|
508
374
|
|
|
509
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
583
|
-
|
|
584
|
-
|
|
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
|
-
|
|
387
|
+
# Après avoir édité manuellement les standards ou rules
|
|
388
|
+
npx claudeos-core lint
|
|
593
389
|
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
claudeos-core/generated/
|
|
390
|
+
# Health check (avant les commits, ou en CI)
|
|
391
|
+
npx claudeos-core health
|
|
597
392
|
```
|
|
598
393
|
|
|
599
|
-
|
|
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
|
-
#
|
|
628
|
-
npx claudeos-core
|
|
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
|
-
#
|
|
636
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
412
|
+
Trois conséquences concrètes :
|
|
678
413
|
|
|
679
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
422
|
+
## Vérification (post-génération)
|
|
694
423
|
|
|
695
|
-
|
|
424
|
+
Une fois la doc écrite par Claude, le code la vérifie. Cinq validators distincts :
|
|
696
425
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 :
|
|
815
|
-
Non.
|
|
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 :
|
|
818
|
-
|
|
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 :
|
|
821
|
-
|
|
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 :
|
|
826
|
-
|
|
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 :
|
|
829
|
-
Oui
|
|
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 :
|
|
832
|
-
|
|
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 :
|
|
835
|
-
|
|
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 : Où 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
|
-
##
|
|
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
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
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 stack — ce 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
|
|
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
|
-
|
|
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
|
-
##
|
|
508
|
+
## Licence
|
|
1010
509
|
|
|
1011
|
-
|
|
510
|
+
[ISC](LICENSE) — gratuit pour tout usage, y compris commercial.
|
|
1012
511
|
|
|
1013
|
-
|
|
512
|
+
---
|
|
1014
513
|
|
|
1015
|
-
|
|
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>
|