STEP 12 ran `gsd init` AFTER FINISH, creating ROADMAP.md + .gsd/ in the working tree once the merge had already integrated committed history only — so the artifacts stranded outside the merge/PR (BLK-011, 3rd post-FINISH artifact after memory + docs). Resolved by REMOVAL, not by plumbing a commit: STEP 12 speculatively bootstrapped a heavy multi-session engine (state machine / crash recovery / cost tracking / parallel workers) that is opt-in and rarely used. Deleting the producer means the orphan is never created — a negative diff beats building a gsd-commit helper for an artifact nobody commits to using. Deliberate GSD use is untouched: initializable on-demand (`/onboard add gsd`, or `gsd init` in a terminal), still recommended by plugin-advisor, still read by /status. init-project is now an 11-step pipeline. Coherence sweep (the "test" for a removal): zero dangling STEP-12 refs — header 12->11-step, the STEP 10c note, and 4 USAGE.md worked-example references all updated to on-demand init. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C6bUdvHnajCNzgVQefZowj
1023 lines
39 KiB
Markdown
1023 lines
39 KiB
Markdown
# claude-config — Guide d'utilisation et cas d'usage
|
|
|
|
Ce fichier complète le README. Il documente les bonnes pratiques, les workflows typiques, et des exemples concrets pour plusieurs types de projets.
|
|
|
|
---
|
|
|
|
## Principes fondamentaux
|
|
|
|
**Tu décris, le pipeline exécute.** Le système prend en charge : l'architecture, le scaffolding, la décomposition en tâches, l'implémentation TDD, le code review, et la synchronisation du README. Tu n'interviens qu'aux deux gates de validation.
|
|
|
|
**Prompt détaillé = moins de friction.** L'interviewer (STEP 1) skip les questions si ton prompt contient déjà : nom, purpose, stack, features v1, conventions. Un prompt de 10 lignes structuré évite toute interruption.
|
|
|
|
**Plugin-check avant tout.** Soit via `/plugin-check "description"` (explicite), soit via STEP 0 de `/init-project` ou `/ship-feature` (automatique). Les plugins mal configurés dégradent silencieusement la qualité du résultat.
|
|
|
|
---
|
|
|
|
## Quel skill utiliser ?
|
|
|
|
Arbre de décision rapide face à une situation donnée :
|
|
|
|
```
|
|
Tu veux...
|
|
│
|
|
├─ Créer un nouveau projet from scratch ?
|
|
│ → /init-project "description"
|
|
│
|
|
├─ Intégrer un projet existant dans claude-config ?
|
|
│ → /onboard
|
|
│
|
|
├─ Ajouter une feature à un projet existant ?
|
|
│ ├─ Feature complète (multi-fichiers, orchestration) ?
|
|
│ │ → /ship-feature "description"
|
|
│ └─ Petite feature (1-5 fichiers, rapide) ?
|
|
│ → /feat "description"
|
|
│
|
|
├─ Corriger un bug ?
|
|
│ ├─ Bug superficiel (typo, CSS, config, max 2 fichiers) ?
|
|
│ │ → /hotfix "description"
|
|
│ └─ Bug complexe (investigation root cause nécessaire) ?
|
|
│ → /bugfix "description"
|
|
│
|
|
├─ Reprendre après une pause / orienter la session ?
|
|
│ → /status
|
|
│
|
|
├─ Comprendre du code avant de le modifier ?
|
|
│ → /analyze src/fichier.py
|
|
│ → (mode DEBUG si tu passes une erreur/stack trace)
|
|
│
|
|
├─ Améliorer la qualité sans changer le comportement ?
|
|
│ ├─ Refactoring ciblé (un fichier/module) ?
|
|
│ │ → /refactor src/module.py
|
|
│ │ ⚠️ Pour un refactoring profond (module entier) :
|
|
│ │ /analyze src/module/ ← rapport de violations d'abord
|
|
│ │ /refactor src/module/ ← corrections sur rapport
|
|
│ │ /analyze src/module/ ← vérification après (cycle complet)
|
|
│ └─ Dead code, violations de style (codebase-wide) ?
|
|
│ → /code-clean
|
|
│
|
|
├─ Docs périmées / vérifier la sync code↔docs ?
|
|
│ → /doc ← audit complet tous les fichiers .md
|
|
│
|
|
├─ Optimiser le SEO/GEO ?
|
|
│ ├─ Audit complet SEO + GEO ?
|
|
│ │ → /seo
|
|
│ └─ GEO uniquement (visibilité IA) ?
|
|
│ → /geo
|
|
│
|
|
├─ Vérifier si les plugins sont bien configurés ?
|
|
│ → /plugin-check "description du projet"
|
|
│ → (aussi fait automatiquement en STEP 0 de /init-project et /ship-feature)
|
|
│
|
|
├─ Session GSD v2 active/interrompue ?
|
|
│ → dans le terminal: gsd → /gsd auto (reprend depuis .gsd/)
|
|
│ → modifier le plan en cours: /gsd steer ou /gsd discuss
|
|
│ → voir la progression: /gsd status
|
|
│ → un step a échoué: /gsd forensics (debug autonome)
|
|
│
|
|
├─ Auditer les changements depuis le dernier audit ?
|
|
│ → /audit-delta ← conformité / bugs / dead code / sécurité (scope = delta)
|
|
│
|
|
├─ Gérer la mémoire de session ?
|
|
│ → /capitalize ← flush contexte + réconcilie TODO avant /clear ou /compact
|
|
│ → /prune-memory ← curer / compresser les registres .claude/memory/
|
|
│
|
|
└─ Quelque chose ne marche pas ?
|
|
→ /health ← diagnostic complet (symlinks, plugins, permissions, token budget)
|
|
```
|
|
|
|
### Règle de décision simplifiée
|
|
|
|
| Situation | Skill recommandé |
|
|
|---|---|
|
|
| Tout nouveau | `/init-project` |
|
|
| Code existant sans config | `/onboard` |
|
|
| Feature complète | `/ship-feature` |
|
|
| Petite feature (1-5 fichiers) | `/feat` |
|
|
| Bug superficiel (typo, CSS) | `/hotfix` |
|
|
| Bug complexe (root cause) | `/bugfix` |
|
|
| Reprise de session | `/status` |
|
|
| Debug / comprendre | `/analyze` |
|
|
| Nettoyage code ciblé | `/refactor` |
|
|
| Dead code / style codebase | `/code-clean` |
|
|
| Docs périmées | `/doc` |
|
|
| SEO/GEO audit | `/seo` (GEO seul → `/geo`) |
|
|
| Commit structuré | `/commit-change` |
|
|
| Navigation codebase large | `/graphify` |
|
|
| Lister ses skills | `/skills-perso` |
|
|
| Plugins OK ? | `/plugin-check` |
|
|
| Audit du delta (depuis dernier run) | `/audit-delta` |
|
|
| Flush mémoire + TODO avant /clear | `/capitalize` |
|
|
| Curer la mémoire | `/prune-memory` |
|
|
| Fin de session (= /capitalize --ritual) | `/close` |
|
|
| Audit web (TLS, CSP, headers) | `/harden` |
|
|
| Validité HTML/CSS + a11y | `/web-validate` |
|
|
| Visibilité IA (GEO seul) | `/geo` |
|
|
| Livraison client finale | `/client-handover` |
|
|
| Changer profil skills | `/profile` |
|
|
| Rien ne marche | `/health` |
|
|
|
|
---
|
|
|
|
## Les commandes et quand les utiliser
|
|
|
|
| Commande | Quand | Notes |
|
|
|---|---|---|
|
|
| `/init-project` | Nouveau projet from scratch | 11-12 steps, deux gates obligatoires |
|
|
| `/ship-feature` | Feature sur projet existant | Pipeline 9 steps, une gate |
|
|
| `/feat` | Petite feature (1-5 fichiers) | Léger, pas d'orchestration lourde |
|
|
| `/bugfix` | Bug avec investigation root cause | Hypothèses, diagnostic, fix minimal |
|
|
| `/hotfix` | Bug superficiel (typo, CSS, config) | Max 2 fichiers, cause évidente |
|
|
| `/onboard` | Projet existant non géré par ce config | Génère CLAUDE.md + settings |
|
|
| `/plugin-check` | Avant de démarrer tout travail | Aussi embarqué en STEP 0 des orchestrateurs |
|
|
| `/analyze` | Comprendre du code avant de le modifier | Read-only, aucune solution proposée |
|
|
| `/analyze` + erreur | Diagnostiquer un test/build qui échoue | Mode DEBUG : hypothèses ordonnées |
|
|
| `/refactor` | Améliorer un fichier sans changer le comportement | Rapport de violations d'abord, modif ensuite |
|
|
| `/code-clean` | Dead code, violations de style | Audit + rapport, fixes après approbation |
|
|
| `/doc` | Docs périmées après des changements | Audit drift code↔docs, patch chirurgical |
|
|
| `/seo` | Audit SEO/GEO complet | Détecte framework, audite meta/OG/sitemap |
|
|
| `/geo` | Audit GEO uniquement (IA) | Visibilité ChatGPT, Perplexity, Claude, Gemini… |
|
|
| `/commit-change` | Commits bien structurés | Groupe les changements par unité logique |
|
|
| `/graphify` | Navigation codebase large-scope | Knowledge graph, pour tâches multi-fichiers |
|
|
| `/skills-perso` | Lister ses skills personnels | Skills créés dans ~/.claude/skills/ |
|
|
| `/health` | Quand quelque chose ne fonctionne pas | Lance doctor.sh |
|
|
| `/status` | Reprendre après une pause | Snapshot : plugins, git, GSD milestone |
|
|
| `/audit-delta` | Audit récurrent du delta depuis le dernier run | Axes : conformité / bugs / dead code / sécurité |
|
|
| `/capitalize` | Avant /clear ou /compact | Flush contexte non capitalisé + réconcilie .claude/tasks/TODO.md |
|
|
| `/prune-memory` | Registres trop longs / bruyants | Curation : merge, superseded, compression |
|
|
| `/close` | Fin de session | Alias de /capitalize --ritual — dedup + TODO + réflexion 3 questions |
|
|
| `/harden` | Audit sécurité web (SSL, CSP, HSTS) | Projet web avec config HTTP |
|
|
| `/web-validate` | Audit W3C + WCAG a11y | Avant livraison projet web |
|
|
| `/client-handover` | Livraison client | Audits finaux + livrable brandé |
|
|
| `/profile` | Changer le profil de skills | design / dev / qa / audit / minimal |
|
|
|
|
> Cette table couvre les skills personnels principaux. Les plugins (gstack,
|
|
> pr-review-toolkit…) et marketplaces externes en ajoutent beaucoup d'autres —
|
|
> `/skills-perso` liste tes skills personnels.
|
|
|
|
---
|
|
|
|
## Les plugins — décision rapide
|
|
|
|
```
|
|
Toujours actifs (0 token) : security-guidance, rtk
|
|
|
|
Design élaboré/system → ui-ux-pro-max ON
|
|
Deploy + QA browser → gstack ON
|
|
Next.js/React/Prisma → context7 ON (WARN si absent, pas BLOCK)
|
|
Multi-session (>1 jour) → gsd v2 CLI (gsd dans terminal)
|
|
|
|
Backend/CLI seulement → tout OFF sauf superpowers
|
|
Hotfix/quick fix → tout OFF sauf superpowers
|
|
```
|
|
|
|
**GSD v2** n'est pas un plugin Claude Code — c'est un CLI externe. Il ne consomme pas de tokens passifs. Tu le lances dans un terminal séparé avec `gsd`, puis `/gsd auto` pour le mode autonome.
|
|
|
|
---
|
|
|
|
## Patterns de workflow
|
|
|
|
> **Budget Pro (~11k tokens/5h) :** un `/init-project` complet consomme 3000-5000t — laissant 6000-8000t pour les steps suivants. Adapter le choix de plugins actifs en conséquence. Les tokens sont indiqués à titre indicatif — varient selon la taille du projet et les plugins actifs.
|
|
|
|
### Pattern A — Nouveau projet court (≤1 session) · ~3000-5000t
|
|
|
|
```
|
|
# 1. Configurer les plugins
|
|
/plugin-check "description de ton projet"
|
|
# → Activer les plugins recommandés, puis :
|
|
|
|
# 2. Créer le projet
|
|
/init-project "description complète"
|
|
# → STEP 0 : vérifie les plugins automatiquement
|
|
# → STEP 1 : interview (skip si prompt complet)
|
|
# → STEP 4 : ★ GATE — valider l'architecture
|
|
# → STEP 7 : ★ GATE — valider le plan d'implémentation
|
|
# → STEP 8-10 : implémentation TDD + review
|
|
# → STEP 10b-c: capitalize mémoire + sync README (avant finish)
|
|
# → STEP 11 : finish (merge / commit initial)
|
|
|
|
# 3. Features suivantes
|
|
/ship-feature "description de la feature"
|
|
```
|
|
|
|
### Pattern B — Projet long (multi-session, plusieurs jours) · ~1500-2500t/session CC
|
|
|
|
```
|
|
# Même départ que Pattern A. GSD v2 n'est PAS bootstrappé à la création
|
|
# (init-project ne propose plus gsd) — on l'initialise À LA DEMANDE, dans un
|
|
# terminal, quand on décide de passer en multi-session.
|
|
|
|
# À chaque reprise de session (dans Claude Code) :
|
|
/status # snapshot : plugins + git + milestone GSD en cours
|
|
|
|
# Dans un terminal (depuis le dossier projet) :
|
|
gsd # démarrer une session
|
|
/gsd init # initialise .gsd/ + ROADMAP (une fois, à la demande)
|
|
/gsd auto # mode autonome, walk away
|
|
|
|
# Pour suivre :
|
|
/gsd status # dashboard progression + coût
|
|
|
|
# Pour orienter en cours de route :
|
|
/gsd discuss # décisions d'architecture
|
|
/gsd steer # modifier le plan en cours d'exécution
|
|
|
|
# Crash/interruption → reprendre :
|
|
gsd # relancer
|
|
/gsd auto # reprend depuis l'état sauvegardé dans .gsd/
|
|
```
|
|
|
|
### Pattern C — Projet existant (onboarding + audit complet) · ~3000-8000t (onboard full pipeline)
|
|
|
|
`/onboard` est un **orchestrateur** qui fait bien plus que générer une config :
|
|
|
|
```
|
|
cd mon-projet-existant/
|
|
|
|
# Dans Claude Code :
|
|
/onboard
|
|
```
|
|
|
|
**Pipeline exécuté par /onboard** (STEP 0 → STEP 9) :
|
|
|
|
| STEP | Action | Livrable |
|
|
|---|---|---|
|
|
| 0 | plugin-advisor — détection signaux + activation plugins | recommandations plugins |
|
|
| 1 | Archetype detection (scan ~/.claude/lib/project-archetypes/*.md) | archétype SELECTED + implications auto |
|
|
| 1b | Gate monorepo (A/B/C si détecté) | mode choisi |
|
|
| 2 | Config baseline (onboarder agent) | CLAUDE.md, settings.json, .claudeignore, .claude/tasks/ + .claude/memory/ + .claude/audits/ |
|
|
| 3 | Interview deep = business minimum (users, deadlines, équipe, légal, perfs) + adaptative par archétype | brief enrichi |
|
|
| 3.5| ctx7 doc audit — fast-libs détectées, cache pré-fetché si besoin | .ctx7-cache/ |
|
|
| 4 | Graphify (si complexity ≥ 30%) | graphify-out/GRAPH_REPORT.md |
|
|
| 5 | Analyze read-only (analyzer agent) | .onboard-audit/analyze.md |
|
|
| 6 | Audits parallèles selon archétype : | .onboard-audit/*.md (9 fichiers max) |
|
|
| | — dette tech (code-cleaner) |
|
|
| | — sécurité (cso si gstack ON, sinon OWASP fallback) |
|
|
| | — docs drift (doc-syncer) |
|
|
| | — SEO + GEO (si public) |
|
|
| | — design UI/UX (si frontend) |
|
|
| | — performance (Lighthouse ou static bundle audit) |
|
|
| | — accessibilité (axe ou static a11y audit) |
|
|
| 7 | Synthèse structurée dans .claude/audits/ | ONBOARD_REPORT, AUDIT_GOOD, AUDIT_ISSUES, AUDIT_PROPOSALS |
|
|
| 8 | Validation gate utilisateur | choix A/B/C/D/E |
|
|
| 9 | Backlog .claude/tasks/TODO.md séquencé avec /skill recommandé par tâche | .claude/tasks/TODO.md |
|
|
|
|
**Hints optionnels :**
|
|
```
|
|
/onboard "Python FastAPI" # hint stack
|
|
/onboard force-archetype:wordpress # override detection
|
|
/onboard add gsd # générer ROADMAP.md pour GSD v2 (seul)
|
|
```
|
|
|
|
**Après /onboard :**
|
|
```
|
|
# Ouvrir le rapport exécutif
|
|
cat .claude/audits/ONBOARD_REPORT.md
|
|
|
|
# Démarrer la première tâche P0 avec le skill recommandé
|
|
# (indiqué dans .claude/tasks/TODO.md)
|
|
/hotfix "<titre P0>" # ou /feat, /ship-feature, /bugfix selon le cas
|
|
```
|
|
|
|
**Archétypes supportés (P1)** : static-html, wordpress, nextjs-app-router, astro-static, react-spa, rest-api-node, rest-api-python, cli-tool, library, dotfiles-meta.
|
|
Ajouter un archétype : créer `~/.claude/lib/project-archetypes/<name>.md` (voir `_TEMPLATE.md`).
|
|
|
|
### Pattern D — Hotfix / bugfix · ~200-800t
|
|
|
|
```
|
|
# Bug superficiel (typo, CSS, config, max 2 fichiers, cause évidente) :
|
|
/hotfix "le bouton submit est invisible sur mobile" # ~200t
|
|
|
|
# Bug complexe (investigation root cause nécessaire) :
|
|
/bugfix "les notifications ne partent plus depuis mardi" # ~500-800t
|
|
```
|
|
|
|
### Pattern E — Debug d'erreur de build/test · ~600-900t
|
|
|
|
```
|
|
# Copier le message d'erreur complet, puis :
|
|
/analyze "FAILED tests/test_api.py::test_create — AssertionError: 422 != 201"
|
|
# → Mode DEBUG automatique
|
|
# → Hypothèses ordonnées par probabilité
|
|
# → Fichiers à vérifier
|
|
# → Ce qu'il ne faut pas toucher
|
|
|
|
# Puis si fix nécessaire :
|
|
/ship-feature "corriger le test_create_order — cause: champ quantity manquant"
|
|
```
|
|
|
|
### Pattern F — Petite feature (1-5 fichiers) · ~300-600t
|
|
|
|
```
|
|
# Feature simple, pas d'orchestration lourde
|
|
/feat "ajouter un endpoint GET /api/v1/users/:id/stats"
|
|
# → planning léger, implémentation directe, tests
|
|
# Pas de brainstorming superpowers, pas de gate de validation
|
|
```
|
|
|
|
**Choisir entre /ship-feature et /feat :**
|
|
|
|
| Critère | `/ship-feature` | `/feat` |
|
|
|---|---|---|
|
|
| Scope | Feature complète, multi-fichiers | 1-5 fichiers max |
|
|
| Orchestration | Pipeline superpowers complet | Planning léger, direct |
|
|
| Gate de validation | Oui | Non |
|
|
| Code review auto | Oui (superpowers) | Non |
|
|
| Tokens estimés | ~1500-3000t | ~300-600t |
|
|
|
|
---
|
|
|
|
## Exemples complets
|
|
|
|
---
|
|
|
|
### Exemple 1 — Application mobile liste de courses (Expo/React Native)
|
|
|
|
**Contexte :** app mobile, offline-first, SQLite local, notifications push, iOS + Android.
|
|
|
|
**Setup plugins :**
|
|
```
|
|
/plugin-check "App mobile React Native Expo liste de courses, offline-first, SQLite, notifications push"
|
|
|
|
→ SIGNALS: frontend (mobile), fast-libs (Expo SDK)
|
|
→ WARN: context7 si Expo SDK 51+ utilisé (fast-libs)
|
|
→ OFF: gstack (mobile, pas de browser QA), ui-ux-pro-max (optionnel)
|
|
→ BLOCKING: none
|
|
```
|
|
|
|
**Prompt init (prompt complet → pas de questions) :**
|
|
```
|
|
/init-project "Application mobile 'KartApp' — liste de courses offline-first.
|
|
|
|
Stack: React Native 0.74 + Expo SDK 51 + TypeScript. SQLite via expo-sqlite. Notifications push via expo-notifications. Expo Router pour la navigation. Zustand pour le state. iOS + Android.
|
|
|
|
Features v1:
|
|
1. Création/édition/suppression de listes
|
|
2. Ajout d'articles (nom, quantité, unité, catégorie)
|
|
3. Cocher/décocher des articles
|
|
4. Partage de liste par lien (Expo Sharing)
|
|
5. Historique des 10 dernières courses
|
|
|
|
Out of scope: sync backend, collaboration, paiement.
|
|
|
|
Tests: Jest + @testing-library/react-native. Coverage >70%.
|
|
Convention: composants PascalCase, hooks use*, stores en Zustand slices."
|
|
```
|
|
|
|
**Ce que le scaffolder génère (STEP 5) :**
|
|
```
|
|
app/
|
|
(tabs)/
|
|
index.tsx — liste des listes (vide)
|
|
history.tsx — historique (vide)
|
|
list/[id].tsx — détail liste (vide)
|
|
_layout.tsx — root layout Expo Router
|
|
components/
|
|
ListCard.tsx — vide
|
|
ItemRow.tsx — vide
|
|
CategoryBadge.tsx — vide
|
|
stores/
|
|
listsStore.ts — Zustand slice (vide)
|
|
itemsStore.ts — Zustand slice (vide)
|
|
db/
|
|
schema.ts — types SQLite (vide)
|
|
migrations/
|
|
001_initial.ts — vide
|
|
hooks/
|
|
useLists.ts — vide
|
|
useItems.ts — vide
|
|
constants/
|
|
Colors.ts — tokens couleurs
|
|
app.json — Expo config
|
|
package.json — scripts: start/android/ios/test/lint
|
|
tsconfig.json
|
|
.env.example
|
|
|
|
Install : npx expo install ✅
|
|
Verify : npx expo export --platform web --output-dir /tmp/expo-check --clear ✅
|
|
```
|
|
|
|
**Si le projet devient long (plusieurs features sur semaines) :**
|
|
```
|
|
# Pour passer en multi-session, initialise GSD à la demande dans un terminal :
|
|
gsd
|
|
/gsd init
|
|
/gsd auto
|
|
# → GSD gère deck-building, sharing backend, etc. milestone par milestone
|
|
```
|
|
|
|
---
|
|
|
|
### Exemple 2 — Site vitrine graphisme élégant (Next.js)
|
|
|
|
**Contexte :** studio photographique, design premium, galerie masonry, dark mode, SEO, Vercel.
|
|
|
|
**Setup plugins :**
|
|
```
|
|
/plugin-check "Site vitrine Next.js 14 studio photo, design élaboré, animations Framer Motion, galerie, dark mode, SEO"
|
|
|
|
→ SIGNALS: frontend, design-system, fast-libs(Next.js)
|
|
→ ENABLE: ui-ux-pro-max (~400t) — "design élaboré" signal fort
|
|
→ WARN: context7 non configuré → taper "force" pour continuer (ou configurer avant)
|
|
→ OFF: gstack (vitrine statique, pas de deploy complexe)
|
|
→ COST: ~1600t passif (comfortable)
|
|
```
|
|
|
|
**Prompt init :**
|
|
```
|
|
/init-project "Site vitrine 'Lumière Studio' pour photographe professionnel.
|
|
|
|
Stack: Next.js 14 App Router + TypeScript + Tailwind CSS + Framer Motion. Hébergement: Vercel. Pas de base de données.
|
|
|
|
Features v1:
|
|
1. Page d'accueil — hero animé, teaser galerie
|
|
2. Galerie masonry (>50 photos, lightbox, lazy loading)
|
|
3. Page À propos (biographie, parcours)
|
|
4. Page Contact (formulaire → Resend pour email)
|
|
5. Dark mode (system preference + toggle)
|
|
6. SEO (OpenGraph, sitemap, metadata par page)
|
|
|
|
Out of scope: blog, e-commerce, espace client, CMS.
|
|
|
|
Tests: Playwright (home, contact form, dark mode toggle). Jest/RTL pour composants.
|
|
Convention: composants dans components/, pages dans app/, assets dans public/images/."
|
|
```
|
|
|
|
**Ce que ui-ux-pro-max apporte en STEP 3 (brainstorm) :**
|
|
Avec ui-ux-pro-max actif, le brainstorming propose un système de design complet :
|
|
```
|
|
Palette : zinc-950 (fond dark) / zinc-50 (texte) / amber-400 (accent)
|
|
Typo : Cormorant Garant (titres serif) + Inter (corps)
|
|
Espacement : multiples de 8px, max-width 1440px
|
|
Animations : entrées scroll (Framer Motion viewport), 200ms ease-out
|
|
Masonry : CSS columns responsive (1→2→3 colonnes), gap 16px
|
|
```
|
|
Sans ui-ux-pro-max : "Tailwind avec palette neutre, Inter". La différence est visible pour un projet où le design est le produit.
|
|
|
|
**Ajouter une feature après init :**
|
|
```
|
|
/ship-feature "Page Tarifs — 3 formules (Reportage, Portrait, Mariage) avec comparateur visuel et CTA de contact par formule"
|
|
```
|
|
|
|
---
|
|
|
|
### Exemple 3 — Jeu de puzzle avec API, auth et cartes collectibles
|
|
|
|
**Contexte :** le projet le plus complexe — React + FastAPI + PostgreSQL + Docker, auth JWT, gameplay, collection.
|
|
|
|
**Setup plugins :**
|
|
```
|
|
/plugin-check "Jeu de puzzle web React + FastAPI + PostgreSQL. Auth JWT, collection de cartes, boutique in-app, leaderboard. Multi-session, dev sur plusieurs semaines."
|
|
|
|
→ SIGNALS: frontend, fast-libs(React), deploy, multi-session
|
|
→ ENABLE: context7
|
|
→ ENABLE: ui-ux-pro-max (cartes visuelles, cohérence design)
|
|
→ CLI: gsd v2 RECOMMANDÉ (multi-session détecté)
|
|
→ OPTIONAL: gstack si deploy CI + browser QA prévus
|
|
→ COST: ~1800t passif (avec context7)
|
|
```
|
|
|
|
**Prompt init :**
|
|
```
|
|
/init-project "Jeu de puzzle web 'CardForge'.
|
|
|
|
Stack: React 18 + TypeScript + Vite (frontend), FastAPI + Python 3.12 (backend), PostgreSQL 16, Redis 7, Docker Compose.
|
|
|
|
Features v1:
|
|
1. Inscription/connexion (JWT + refresh tokens)
|
|
2. Gameplay puzzle grille 4x4 (pièces = cartes)
|
|
3. Collection personnelle (50 cartes de base)
|
|
4. 3 niveaux de difficulté
|
|
5. Sauvegarde de partie en cours
|
|
6. Profil + statistiques (parties, win rate)
|
|
|
|
Out of scope: boutique, PvP, cartes premium, leaderboard.
|
|
|
|
Tests: pytest backend (>80% coverage), Vitest + Testing Library frontend.
|
|
Docker: dev + prod (nginx pour frontend, uvicorn pour backend).
|
|
Convention: snake_case Python, camelCase TypeScript."
|
|
```
|
|
|
|
**Workflow long avec GSD v2 :**
|
|
```
|
|
# Après /init-project, on initialise GSD à la demande (plus auto-bootstrappé).
|
|
# Le ROADMAP.md généré par `gsd init` contiendra :
|
|
# Milestone 1: Boutique in-app + Stripe
|
|
# Milestone 2: PvP + matchmaking
|
|
# Milestone 3: Leaderboard + saisons
|
|
|
|
# Dans un terminal :
|
|
cd cardforge/
|
|
gsd # démarre session GSD
|
|
/gsd init # crée .gsd/ + ROADMAP (à la demande — plus auto à l'init)
|
|
/gsd auto # GSD travaille sur Milestone 1 de façon autonome
|
|
# → research Stripe API + docs
|
|
# → plan décomposé en tâches
|
|
# → exécute chaque tâche dans fresh context window
|
|
# → commits propres avec messages clairs
|
|
# → revient quand Milestone 1 est complet ou si décision requise
|
|
```
|
|
|
|
**Quand le projet est lancé, ajouter des features ponctuelles :**
|
|
```
|
|
# Petite feature rapide (1h) → rester dans CC
|
|
/ship-feature "Ajouter un compteur de combo sur la grille de jeu"
|
|
|
|
# Feature longue (2 jours) → GSD v2
|
|
gsd
|
|
/gsd quick "Implémenter la boutique in-app avec Stripe"
|
|
# ou
|
|
/gsd auto # si ROADMAP.md est déjà à jour
|
|
```
|
|
|
|
---
|
|
|
|
### Exemple 4 — Onboarding d'un projet existant (CLI Rust)
|
|
|
|
**Contexte :** outil CLI Rust existant sur GitHub, sans CLAUDE.md ni settings.
|
|
|
|
**Workflow :**
|
|
```bash
|
|
git clone git@github.com:user/my-rust-cli.git
|
|
cd my-rust-cli/
|
|
```
|
|
|
|
Dans Claude Code :
|
|
```
|
|
/onboard "Rust CLI"
|
|
|
|
→ PHASE 1 — Discovery:
|
|
Cargo.toml trouvé : name="mycli", edition=2021, version=0.3.1
|
|
Structure: src/main.rs, src/commands/, src/utils/, tests/
|
|
Makefile: targets build, test, release, lint (clippy)
|
|
Pas de Dockerfile (CLI pur)
|
|
|
|
→ PHASE 2 — Interview (manquant):
|
|
Purpose ? → répondre: "CLI de gestion de projets locaux"
|
|
|
|
→ PHASE 3-5 — Génère:
|
|
CLAUDE.md avec stack Rust 1.77, commandes exactes du Makefile
|
|
.claude/settings.json — blocs cargo uniquement
|
|
.claudeignore — target/, *.rlib
|
|
|
|
→ PHASE 6 — GSD v2 ? → skip (projet stable, pas de multi-session)
|
|
|
|
ONBOARD COMPLETE: mycli
|
|
→ Prêt pour /ship-feature
|
|
```
|
|
|
|
```
|
|
/plugin-check "Rust CLI, pas de frontend, pas de deploy"
|
|
|
|
→ SIGNALS: none (CLI pur)
|
|
→ DISABLE: ui-ux-pro-max, gstack, context7
|
|
→ KEEP: superpowers
|
|
→ COST: ~800t (minimal)
|
|
→ ACTION REQUIRED? NO
|
|
```
|
|
|
|
```
|
|
/ship-feature "Ajouter une commande 'mycli export --format json/csv' pour exporter les projets"
|
|
```
|
|
|
|
---
|
|
|
|
### Exemple 5 — Debug d'une régression (mode /analyze DEBUG)
|
|
|
|
**Contexte :** CI qui échoue après un merge, erreur de type TypeScript.
|
|
|
|
**Workflow :**
|
|
```
|
|
/analyze "src/store/cartStore.ts:47:5 - error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
|
|
|
|
const product = products.find(p => p.id === productId)
|
|
addToCart(product.id) // <-- erreur ligne 47"
|
|
```
|
|
|
|
**Output attendu (DEBUG MODE) :**
|
|
```
|
|
DEBUG ANALYSIS: TS2345 — 'string | undefined' non assignable à 'string' en ligne 47
|
|
|
|
ERROR:
|
|
src/store/cartStore.ts:47 — product.id passé à addToCart(id: string)
|
|
product peut être undefined car Array.find() retourne T | undefined
|
|
|
|
TRACE:
|
|
addToCart(productId) → products.find(p => p.id === productId) → product.id → TS2345
|
|
|
|
ROOT CAUSE HYPOTHESES:
|
|
1. [HIGH] Guard manquant après find() — product non vérifié avant utilisation
|
|
evidence: find() retourne toujours T | undefined, jamais T seul
|
|
2. [MED] Type de addToCart() trop strict (devrait accepter string | undefined)
|
|
evidence: si product peut légitimement être absent, le type est correct
|
|
3. [LOW] Changement récent dans le type Product (id devenu optional)
|
|
evidence: vérifier git log sur Product type
|
|
|
|
WHAT TO VERIFY NEXT:
|
|
- Ajouter guard: if (!product) return; avant ligne 47
|
|
- Ou utiliser optional chaining: addToCart(product?.id ?? '')
|
|
- Vérifier si product absent est un cas métier valide ou une erreur
|
|
|
|
DO NOT TOUCH:
|
|
src/store/cartStore.ts dans son ensemble — corriger seulement la ligne 47
|
|
```
|
|
---
|
|
|
|
### Exemple 6 — CLI Rust from scratch (workflow minimaliste)
|
|
|
|
**Contexte :** outil en ligne de commande, pas de frontend, pas de serveur, pas de Docker. Le cas le plus simple — illustre que le système fonctionne aussi bien sur les projets petits que complexes.
|
|
|
|
**Setup plugins — zéro token inutile :**
|
|
```
|
|
/plugin-check "CLI Rust, convertisseur de fichiers JSON/CSV/TOML, pas de réseau, pas de frontend"
|
|
|
|
→ SIGNALS: none (CLI pur, pas de deploy, pas de frontend)
|
|
→ KEEP: superpowers
|
|
→ DISABLE: ui-ux-pro-max, gstack, context7
|
|
→ COST: ~800t (base seulement)
|
|
→ ACTION REQUIRED? NO
|
|
```
|
|
|
|
L'intérêt ici est de voir que `/plugin-check` est aussi utile pour confirmer qu'on n'a **rien** à activer, évitant de polluer le contexte avec 3000t de plugins inutiles.
|
|
|
|
**Prompt init (complet, pas de questions) :**
|
|
```
|
|
/init-project "CLI Rust 'jsonconv' — convertisseur de formats de données.
|
|
|
|
Stack: Rust 1.77 + Cargo. Libs: serde + serde_json + csv + toml + clap (CLI args).
|
|
|
|
Features v1:
|
|
1. Conversion JSON → CSV
|
|
2. Conversion CSV → JSON
|
|
3. Conversion JSON → TOML
|
|
4. Conversion TOML → JSON
|
|
5. Lecture stdin ou fichier, écriture stdout ou fichier
|
|
|
|
Usage: jsonconv --from json --to csv input.json -o output.csv
|
|
|
|
Out of scope: XML, YAML, validation de schéma, streaming.
|
|
|
|
Tests: cargo test, unitaires par format, doctests pour les fonctions publiques.
|
|
Convention: snake_case partout, erreurs via thiserror, pas de unwrap() en dehors des tests."
|
|
```
|
|
|
|
**Ce que le scaffolder génère (STEP 5) :**
|
|
```
|
|
Cargo.toml (serde, serde_json, csv, toml, clap pinned)
|
|
src/
|
|
main.rs (empty — clap parse + dispatch)
|
|
lib.rs (empty — re-exports)
|
|
converter/
|
|
mod.rs (empty)
|
|
json_csv.rs (empty)
|
|
csv_json.rs (empty)
|
|
json_toml.rs (empty)
|
|
toml_json.rs (empty)
|
|
error.rs (empty — thiserror types)
|
|
tests/
|
|
integration_test.rs (empty)
|
|
.gitignore (target/, *.log)
|
|
.claudeignore (target/)
|
|
|
|
Install : cargo fetch ✅
|
|
Verify : cargo check ✅ (validates Cargo.toml + Rust syntax sans compiler)
|
|
Docker : N/A (CLI pur)
|
|
```
|
|
|
|
**Gate #1 — architecture :**
|
|
Simple à valider. L'architecture proposée est plate, pas de surprise.
|
|
|
|
**Gate #2 — plan d'implémentation (20-25 tâches) :**
|
|
```
|
|
1. [error.rs] Définir ConversionError avec thiserror
|
|
2. [converter/json_csv.rs] fn json_to_csv() — tests first
|
|
3. [converter/json_csv.rs] fn csv_to_json() — tests first
|
|
...
|
|
20. [main.rs] Intégrer clap, dispatcher vers les converters
|
|
21. [tests/integration_test.rs] Tests end-to-end avec fichiers fixtures
|
|
```
|
|
|
|
**Après init — features complémentaires :**
|
|
```
|
|
/ship-feature "Ajouter conversion YAML ↔ JSON via serde_yaml"
|
|
/ship-feature "Ajouter flag --pretty pour indentation JSON output"
|
|
/refactor src/converter/ # après plusieurs features, si violations de normes
|
|
/analyze src/converter/json_csv.rs # avant une grosse modification
|
|
```
|
|
|
|
**Points clés de cet exemple :**
|
|
- `/plugin-check` confirme "rien à activer" — actif et utile même pour dire non
|
|
- Scaffolder génère un Cargo.toml avec deps pinned — pas de `cargo add` manuel
|
|
- `cargo check` comme verify évite un full compile sur un skeleton vide
|
|
- Pas de GSD v2 : CLI simple, toutes les features tiennent en 1-2 sessions CC
|
|
|
|
---
|
|
|
|
## Bonnes pratiques — résumé
|
|
|
|
**Plugins :** toujours vérifier avant de commencer. Les gates de validation de `/init-project` et `/ship-feature` sont des points de contrôle — ne jamais "force" une gate d'architecture sans l'avoir lue.
|
|
|
|
**Prompts :** plus le prompt initial est précis (stack, features, conventions), moins il y a de questions. Un prompt de 15 lignes structuré élimine l'interview entière.
|
|
|
|
**GSD v2 :** dès qu'une feature ou un projet dépasse une journée de développement. Le signal est : "je vais devoir ouvrir plusieurs sessions pour finir ça". GSD v2 résout la perte de contexte entre sessions.
|
|
|
|
**`/onboard` :** pour tout projet existant. Même si le projet est fonctionnel, CLAUDE.md et `.claude/settings.json` améliorent significativement la qualité des interactions suivantes.
|
|
|
|
**`/analyze` avant `/refactor` :** toujours. Le refactorer attend le rapport d'analyse avant de toucher au code. Le passer en bypass donne de moins bons résultats.
|
|
|
|
**`/doc` régulièrement :** après chaque milestone. Le mode AUDIT compare la documentation à l'état réel du code et liste les divergences — évite la documentation périmée.
|
|
|
|
---
|
|
|
|
### Exemple 7 — Refactoring d'un module Python legacy
|
|
|
|
**Contexte :** module `services/payment_service.py` dans un projet FastAPI existant. Écrit il y a 2 ans, jamais refactorisé. Violations connues : fonctions de 80 lignes, global state, pas de tests unitaires, logique métier mélangée avec appels HTTP.
|
|
|
|
**Setup :** projet déjà onboardé (CLAUDE.md présent), superpowers actif, plugins inutiles désactivés.
|
|
|
|
#### Étape 1 — Analyse avant toute modification
|
|
|
|
```
|
|
/analyze src/services/payment_service.py
|
|
```
|
|
|
|
**Ce que l'analyzer produit :**
|
|
```
|
|
ANALYSIS: src/services/payment_service.py
|
|
|
|
CONTEXT:
|
|
- Module de 340 lignes gérant les paiements Stripe
|
|
- Pas de tests, 3 variables globales, 2 fonctions > 80 lignes
|
|
|
|
KEY COMPONENTS:
|
|
- process_payment(): 95 lignes — logique métier + appel Stripe + logging entremêlés
|
|
- _build_stripe_payload(): 72 lignes — construction du payload + validation + mapping
|
|
- STRIPE_CLIENT: variable globale initialisée au module load (non mockable)
|
|
- retry_payment(): appelle process_payment() directement (couplage fort)
|
|
|
|
CONSTRAINTS:
|
|
- Aucun test existant — refactoring sans filet
|
|
- retry_payment() appelé par 3 endpoints différents — interface publique à préserver
|
|
|
|
RISKS:
|
|
- Modification de process_payment() peut casser les 3 appelants — probability: high
|
|
- STRIPE_CLIENT global rend les tests unitaires impossibles sans monkeypatch — probability: high
|
|
- _build_stripe_payload() mélange validation et mapping — extraction risquée — probability: medium
|
|
|
|
OPEN QUESTIONS:
|
|
- process_payment() retourne-t-il toujours un dict ou parfois None ?
|
|
- Les appelants de retry_payment() vérifient-ils le code de retour ?
|
|
```
|
|
|
|
#### Étape 2 — Refactoring guidé
|
|
|
|
```
|
|
/refactor src/services/payment_service.py
|
|
```
|
|
|
|
**Ce que le refactorer produit d'abord (rapport avant modification) :**
|
|
```
|
|
VIOLATIONS DETECTED: src/services/payment_service.py
|
|
|
|
- [NORM] process_payment(): 95 lignes → split plan: _validate_payment(), _call_stripe(), _handle_response()
|
|
- [NORM] _build_stripe_payload(): 72 lignes → split plan: _validate_payload(), _map_to_stripe()
|
|
- [NORM] STRIPE_CLIENT: global state → inject via paramètre ou dependency injection
|
|
- [QUALITY] logique métier dans process_payment() mélangée avec appel HTTP Stripe
|
|
- [QUALITY] retry_payment() appelle process_payment() directement (tight coupling)
|
|
|
|
PLAN:
|
|
1. Extraire _validate_payment() depuis process_payment() (lignes 12-28)
|
|
2. Extraire _call_stripe() depuis process_payment() (lignes 45-67)
|
|
3. Extraire _handle_response() depuis process_payment() (lignes 68-95)
|
|
4. Réécrire process_payment() comme coordinateur des 3 sous-fonctions
|
|
5. Extraire _validate_payload() et _map_to_stripe() depuis _build_stripe_payload()
|
|
6. Injecter stripe_client via paramètre (défaut = STRIPE_CLIENT global pour rétro-compat)
|
|
|
|
TESTS PRESENT: non
|
|
→ ⚠️ Aucun test existant. Le refactoring est risqué sans filet.
|
|
Recommandation: créer des tests d'intégration minaux AVANT de toucher au code.
|
|
Procéder malgré tout ? (yes / create tests first)
|
|
```
|
|
|
|
**User répond : "create tests first"**
|
|
|
|
Le refactorer génère d'abord `tests/test_payment_service.py` avec des tests d'intégration basiques qui capturent le comportement actuel (avant refactoring). Puis procède au refactoring fonction par fonction.
|
|
|
|
#### Étape 3 — Vérification finale
|
|
|
|
```
|
|
/analyze src/services/payment_service.py
|
|
```
|
|
|
|
Post-refactoring, l'analyzer confirme :
|
|
```
|
|
VIOLATIONS FIXED:
|
|
- process_payment(): 95 lignes → 18 lignes (coordinateur) ✅
|
|
- STRIPE_CLIENT: injectable, toujours rétro-compatible ✅
|
|
- Interface publique de retry_payment() inchangée ✅
|
|
|
|
REMAINING:
|
|
- _build_stripe_payload() : 48 lignes (sous le seuil de 25 mais proche)
|
|
→ justified: validation + mapping ne peuvent pas être séparés sans risque
|
|
|
|
TESTS: ✅ 8 tests passent (créés avant refactoring)
|
|
```
|
|
|
|
#### Points clés de cet exemple
|
|
|
|
- **`/analyze` d'abord, toujours.** L'analyzer identifie les risques (3 appelants, pas de tests) AVANT que le refactorer ne touche au code. Sans ça, le refactorer aurait pu casser l'interface publique.
|
|
- **Le refactorer s'arrête si pas de tests.** Ce comportement est intentionnel — refactorer sans tests = régression silencieuse garantie. Proposer de créer des tests d'abord est la bonne réponse.
|
|
- **Rapport de violations avant modifications.** Le refactorer produit toujours un rapport + plan, attend confirmation, puis exécute. Jamais aveugle.
|
|
- **`/analyze` après pour confirmer.** Le cycle analyse → refactor → analyse est la boucle de qualité correcte.
|
|
|
|
---
|
|
|
|
### Exemple 8 — Reprise d'une session interrompue avec GSD v2
|
|
|
|
**Contexte :** projet CardForge (React + FastAPI), milestone 2 "Boutique Stripe" en cours. Travail interrompu 4 jours plus tôt. GSD v2 initialisé, 3/7 slices terminées.
|
|
|
|
#### Étape 1 — Orientation rapide
|
|
|
|
```
|
|
/status
|
|
|
|
PROJECT STATUS
|
|
==============
|
|
|
|
CONFIG
|
|
Version : v2.5.0
|
|
Plugins ON: superpowers, context7 (~1000t)
|
|
GSD v2 : installed (2.64.0)
|
|
|
|
PROJECT
|
|
CLAUDE.md : found
|
|
Stack : React 18 + FastAPI + PostgreSQL + Docker
|
|
Branch : feature/stripe-integration
|
|
Uncommitted: 1 file (src/components/checkout/CartSummary.tsx)
|
|
|
|
RECENT COMMITS:
|
|
b3c4d5e feat: add cart persistence to localStorage
|
|
f6g7h8i feat: implement card collection display
|
|
j9k0l1m chore: setup Stripe SDK
|
|
|
|
GSD v2
|
|
Status : initialized
|
|
Milestone : Milestone 2 — Boutique in-app
|
|
Progress : 3/7 slices done (43%)
|
|
```
|
|
|
|
En 5 secondes : je sais où j'en suis, ce qui était en cours, et qu'il reste 4 slices à faire.
|
|
|
|
#### Étape 2 — Reprendre GSD v2 (terminal)
|
|
|
|
```bash
|
|
cd cardforge/
|
|
gsd # relance une session GSD
|
|
```
|
|
|
|
GSD v2 lit `.gsd/` et reconstruit le contexte :
|
|
```
|
|
GSD v2 — Resume session
|
|
Current milestone: Milestone 2 — Boutique in-app
|
|
Last completed : Slice 3 — Cart UI
|
|
Next up : Slice 4 — Stripe checkout integration
|
|
|
|
Previous session crash detected? No — clean shutdown.
|
|
State loaded from .gsd/state.db ✓
|
|
|
|
/gsd auto → reprendre en mode autonome
|
|
/gsd → reprendre en step mode (recommandé après longue pause)
|
|
```
|
|
|
|
#### Étape 3 — Reprendre en step mode (recommandé après pause longue)
|
|
|
|
```
|
|
/gsd
|
|
|
|
── Slice 4 — Stripe checkout integration ──
|
|
Tasks:
|
|
[ ] 4.1 — Implement PaymentIntent creation (backend)
|
|
[ ] 4.2 — Add Stripe Elements to CartSummary.tsx
|
|
[ ] 4.3 — Handle payment confirmation + webhook
|
|
[ ] 4.4 — Integration test: checkout flow
|
|
|
|
Research: Stripe docs fetched (context7 active)
|
|
Plan: ready
|
|
|
|
Execute slice 4? (yes / review plan / modify)
|
|
```
|
|
|
|
Le step mode permet de relire le plan avant d'exécuter — critique après une pause où les décisions peuvent avoir changé.
|
|
|
|
#### Étape 4 — Si une décision d'architecture a changé pendant la pause
|
|
|
|
```
|
|
/gsd discuss
|
|
|
|
"Je veux utiliser Stripe Payment Element au lieu de CardElement —
|
|
c'est l'API recommandée depuis 2023"
|
|
|
|
GSD v2 integrates your input into the current plan.
|
|
Updated: Slice 4 plan — Payment Element instead of CardElement
|
|
Continue? (yes)
|
|
```
|
|
|
|
GSD v2 met à jour le plan dans `.gsd/ROADMAP.md` sans perdre le travail déjà fait.
|
|
|
|
#### Ce que ce workflow démontre
|
|
|
|
- **`/status`** est le point d'entrée naturel après une pause — snapshot complet en 1 commande.
|
|
- **GSD v2 `step mode`** est préférable à `auto` après une longue pause — permet de vérifier que les décisions sont toujours valides.
|
|
- **`.gsd/ROADMAP.md`** est la source de vérité du progress — parsé par `/status` et par GSD lui-même.
|
|
- **`/gsd discuss`** permet de modifier l'architecture en cours de route sans recommencer depuis zéro.
|
|
---
|
|
|
|
### Exemple 9 — Firmware C/C++ embarqué (workflow sans superpowers)
|
|
|
|
**Contexte :** firmware pour microcontrôleur STM32 (C, bare-metal). Pas de réseau, pas de frontend, pas de Docker. L'outillage standard de superpowers (brainstorming Socratique, subagent pipeline) est surdimensionné pour ce contexte.
|
|
|
|
**Setup plugins :**
|
|
```
|
|
/plugin-check "Firmware C STM32, bare-metal, pas de réseau, pas de frontend, pas de Docker"
|
|
|
|
SIGNALS: simple, CLI/embedded
|
|
COST: ~800t (superpowers seul)
|
|
|
|
RECOMMENDATIONS:
|
|
OK KEEP : superpowers (peut être utile pour brainstorm initial)
|
|
DISABLE : ui-ux-pro-max, gstack, context7
|
|
NOTE : Pour un firmware vraiment simple (hotfix, modification ciblée),
|
|
même superpowers peut être désactivé → ~0t passif
|
|
```
|
|
|
|
**Workflow minimaliste — modification d'un driver existant :**
|
|
|
|
```
|
|
# Pas de /init-project, pas de GSD, pas de superpowers
|
|
|
|
# 1. Comprendre avant de modifier
|
|
/analyze src/drivers/uart.c
|
|
|
|
OUTPUT:
|
|
ANALYSIS: src/drivers/uart.c
|
|
CONTEXT: Driver UART pour STM32F4, DMA en mode circulaire
|
|
KEY COMPONENTS:
|
|
uart_init(): 45 lignes — config registres + DMA
|
|
uart_send(): 12 lignes — écriture dans ring buffer
|
|
UART_IRQHandler(): 28 lignes — ISR, gère overrun
|
|
RISKS:
|
|
- uart_init() dépasse 25 lignes → split candidat
|
|
- Accès non-atomique à ring_buffer_head dans ISR — probability: high
|
|
OPEN QUESTIONS:
|
|
- Quid si DMA transfer pas terminé avant appel uart_send() ?
|
|
```
|
|
|
|
**Modification chirurgicale :**
|
|
```
|
|
/ship-feature "Corriger l'accès non-atomique au ring_buffer_head dans l'ISR"
|
|
|
|
STEP 0b — CLAUDE.md found
|
|
STEP 0 — plugin check: superpowers OK (ou désactivé si YOLO mode)
|
|
|
|
STEP 1 — BRAINSTORM (rapide, contexte déjà clair depuis /analyze):
|
|
Design: protéger ring_buffer_head avec __disable_irq()/__enable_irq()
|
|
ou utiliser un flag volatile + memory barrier
|
|
|
|
STEP 3 — VALIDATION GATE:
|
|
TASKS: 2
|
|
1. [src/drivers/uart.c] Ajouter protection atomique dans UART_IRQHandler
|
|
2. [tests/test_uart.c] Ajouter test simulant ISR concurrent
|
|
|
|
STEP 4 — IMPLEMENT (subagents légers, modifications chirurgicales)
|
|
```
|
|
|
|
**Alternative : workflow encore plus minimaliste (sans /ship-feature) :**
|
|
```
|
|
# Pour un hotfix ultra-ciblé, ignorer l'orchestrateur
|
|
/analyze src/drivers/uart.c # comprendre
|
|
# → modifier directement avec Edit tool
|
|
# → vérifier avec make + flash sur hardware
|
|
```
|
|
|
|
**Points clés :**
|
|
- `/plugin-check` confirme "superpowers seulement" → aucun plugin inutile actif.
|
|
- `/analyze` est particulièrement utile sur du code C bas-niveau : l'analyzer identifie les accès non-atomiques, les race conditions, les violations de normes, **sans proposer de fix**.
|
|
- Pour un firmware, le workflow `analyze → ship-feature` peut se réduire à `analyze → edit direct` si la modification est triviale.
|
|
- GSD v2 n'est jamais pertinent pour du firmware : les sessions sont courtes et les tâches atomiques.
|
|
---
|
|
|
|
## Référence rapide — signaux → plugins
|
|
|
|
```
|
|
Description contient... → Plugin
|
|
─────────────────────────────────────────────────────
|
|
Next.js 13+ / App Router → context7 WARN
|
|
Prisma / Supabase → context7 ON
|
|
"design élaboré" / tokens → ui-ux-pro-max ON
|
|
Docker + QA browser → gstack ON
|
|
"plusieurs semaines" → gsd v2 CLI
|
|
Rust / Python / Go / C → tout OFF sauf superpowers
|
|
Mobile / Flutter / RN → gstack OFF
|
|
Hotfix / script rapide → tout OFF sauf superpowers
|
|
```
|