# ✅ NestCraftX — Suivi de Progression vers v1.0
> Fichier de check indépendant — le roadmap complet est dans `AUDIT_ROADMAP.md`
> **Ne jamais modifier `AUDIT_ROADMAP.md`** — il est la référence figée de l'audit.

---

## 📊 Tableau de bord

| Phase | Statut | Tickets | Complétés | Progression |
|---|---|---|---|---|
| Phase 0 — Stabilisation (v0.3.0) | ✅ Terminé | 17 | 17 | 100% |
| Phase 1 — Refactorisation (v0.4.0) | ✅ Terminé | 18 | 18 | 100% |
| Phase 2 — Qualité & Sécurité (v0.5.0) | ✅ Terminé | 11 | 11 | 100% |
| Phase 3 — Tests & CI/CD (v0.6.0) | ✅ Terminé | 15 | 15 | 100% |
| Phase 4 — Features (v0.7–0.9) | ✅ Terminé | 12 | 12 | 100% |
| Phase 5 — Documentation (v0.9.x) | ⏸️ En attente | 8 | 0 | 0% |
| Phase 6 — Release v1.0 | 🔵 En cours | 7 | 5 | 71% |
| **TOTAL (v1.0)** | | **88** | **78** | **89%** |

> Mis à jour : 2026-06-29

---

## 🔴 PHASE 0 — Stabilisation d'urgence (v0.3.0)
> Objectif : Zéro crash, zéro bug bloquant

### 0A — Crash & Stabilité _(priorité maximale)_

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| PROD-03 | Refactoriser `runCommand` : ajouter `{ critical: boolean }` | `utils/shell.js` | ✅ Terminé | 2026-06-05 |
| PROD-01a | Dégradation gracieuse si `prisma format` échoue | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-05 |
| PROD-01b | Capitalisation modèles Prisma (`capitalize(from/to)`) | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-05 |
| PROD-01c | Déduplication FK dans le 2e pass des relations | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-05 |
| BUG-09 | `forEach async` → `for...of` dans setupCleanArchitecture | `utils/configs/setupCleanArchitecture.js` | ✅ Terminé | 2026-06-05 |
| BUG-01 | Unifier module system ESM/CJS (`utils.js` + `userInput.js`) | `utils/utils.js`, `utils/userInput.js` | ✅ Terminé | 2026-06-06 |

### 0B — Comportement incorrect

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| BUG-03 | Fixer logique `hasAllLightModeFlags` / `hasAllFullModeFlags` | `commands/new.js` | ✅ Terminé | 2026-06-06 |
| BUG-06 | `setupAuth` : utiliser `inputs.packageManager` (pas `npm` hardcodé) | `utils/setups/setupAuth.js` | ✅ Terminé | 2026-06-06 |
| BUG-07 | `setupMongoose` : ne plus écraser le `.env` complet | `utils/setups/setupMongoose.js` | ✅ Terminé | 2026-06-07 |
| BUG-04 | `createFile` : vraiment ne pas écraser quand `overwrite: false` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |
| BUG-08 | Corriger regex AppModule dans `safeUpdateAppModule` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |

### 0C — Nettoyage immédiat

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| BUG-12 | `help.js` : version dynamique depuis `package.json` | `commands/help.js` | ✅ Terminé | 2026-06-07 |
| MP-07a | Supprimer code mort dans `cliParser.js` (45 lignes) | `utils/cliParser.js` | ✅ Terminé | 2026-06-07 |
| MP-07b | Supprimer code mort dans `setupPrisma.js` (44 lignes) | `utils/setups/setupPrisma.js` | ✅ Terminé | 2026-06-07 |
| BUG-02 | `handleAuthGeneration` : implémenter ou message clair | `commands/generate.js` | ✅ Terminé | 2026-06-07 |
| BUG-11 | Retirer `console.log` debug du `RolesGuard` généré | `utils/setups/setupAuth.js` | ✅ Terminé | 2026-06-07 |
| BUG-12b | Corriger commentaire `PostMapper` hardcodé dans mapper généré | `utils/utils.js` | ✅ Terminé | 2026-06-07 |

---

## 🟠 PHASE 1 — Refactorisation Architecture (v0.4.0)
> Objectif : Code maintenable, testable, sans duplication

### 1A — Découpage des gros fichiers

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| MP-01a | Extraire `generators/entity.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
| MP-01b | Extraire `generators/dto.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
| MP-01c | Extraire `generators/controller.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
| MP-01d | Extraire `generators/mapper.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
| MP-01e | Extraire `generators/service.generator.js` depuis `utils.js` | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
| MP-01f | Extraire `utils/helpers.js` (capitalize, decapitalize, pluralize) | `utils/utils.js` | ✅ Terminé | 2026-06-07 |
| MP-07c | Éclater `userInput.js` → `utils/file-system.js` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |
| MP-07d | Éclater `userInput.js` → `utils/app-module.updater.js` | `utils/userInput.js` | ✅ Terminé | 2026-06-07 |
| MP-03 | Supprimer `generateDtox` (doublon de `generateDto`) | `utils/utils.js` | ✅ Terminé | 2026-06-07 |

### 1B — Refonte du flow d'input entités (PROD-04 + PROD-05)

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| PROD-04a | Étendre modèle de champ : `unique`, `nullable`, `default` | `utils/fullModeInput.js`, `utils/lightModeInput.js` | ✅ Terminé | 2026-06-14 |
| PROD-05 | Écran de révision d'entité (modifier, supprimer, renommer) | `utils/fullModeInput.js`, `utils/lightModeInput.js` | ✅ Terminé | 2026-06-14 |
| PROD-04b | Refonte state-based : `EntityBuilder` navigable | `utils/fullModeInput.js` | ✅ Terminé | 2026-06-14 |
| MP-02 | Dédupliquer `addCustomEntities` et `addRelations` | `utils/fullModeInput.js`, `utils/lightModeInput.js` | ✅ Terminé | 2026-06-14 |

### 1C — Architecture générale

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| MA-05 | Extraire flow commun `demo.js` → partager avec `new.js` | `commands/demo.js`, `commands/new.js` | ✅ Terminé | 2026-06-16 |
| MP-04 | Remplacer `execSync` par `execa` avec timeout | `utils/shell.js` | ✅ Terminé | 2026-06-16 |
| MA-01 | Mécanisme de rapport final (accumuler warnings, afficher en bloc) | `utils/shell.js`, `commands/new.js` | ✅ Terminé | 2026-06-16 |
| MA-02 | Isoler `process.chdir` — vérifier CWD avant chaque I/O | `utils/setups/projectSetup.js` | ✅ Terminé | 2026-06-16 |
| DRY-01 | Ajouter `--dry-run` flag (simuler sans écrire) | `bin/nestcraft.js`, `commands/new.js` | ✅ Terminé | 2026-06-16 |

---

## 🟠 PHASE 2 — Qualité & Sécurité (v0.5.0)
> Objectif : Code généré sécurisé et professionnel

### 2A — Sécurité du code généré

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| MP-17 | `resetPassword` : stocker et valider le token (table DB / Redis) | `utils/setups/setupAuth.js` | ✅ Terminé | 2026-06-16 |
| MP-16 | OTPs : utiliser DB ou Redis au lieu de `Map` en mémoire | `utils/setups/setupAuth.js` | ✅ Terminé | 2026-06-16 |
| MA-06 | Pinning versions dépendances générées (ranges semver stricts) | `utils/setups/*.js` | ✅ Terminé | 2026-06-16 |

### 2B — Descriptions Swagger (PROD-02)

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| PROD-02a | Système de descriptions sémantiques par catégorie de champ | `utils/generators/application/dtoGenerator.js` | ✅ Terminé | 2026-06-16 |
| PROD-02b | Description manuelle optionnelle dans `getFullModeInputs` | `utils/interactive/entityBuilder.js` | ✅ Terminé | 2026-06-16 |
| PROD-02c | Description contextuelle Create vs Update DTO | `utils/generators/application/dtoGenerator.js` | ✅ Terminé | 2026-06-16 |

### 2C — Corrections qualité

| Ticket | Description | Fichier(s) | Statut | Date |
|---|---|---|---|---|
| BUG-18 | Corriger condition De Morgan dans `cleanModuleGenerator` | `utils/generators/cleanModuleGenerator.js` | ✅ Terminé | 2026-06-16 |
| MP-09 | Corriger détection ORM dans `generateConf` (ordre priorité) | `commands/generateConf.js` | ✅ Terminé | 2026-06-16 |
| MP-13 | JWT vars conditionnelles à `useAuth` dans `envGenerator` | `utils/envGenerator.js` | ✅ Terminé | 2026-06-16 |
| MP-10 | Supporter mode LIGHT sans nom en argument dans `new.js` | `commands/new.js` | ✅ Terminé | 2026-06-16 |
| MA-09 | Timeout 5 min sur `npm install` dans `runCommand` | `utils/shell.js` | ✅ Terminé | 2026-06-16 |

---

## 🟡 PHASE 3 — Tests & CI/CD (v0.6.0)
> Objectif : Zéro régression possible sur chaque PR

### 3A — Tests unitaires (Jest)

| Ticket | Description | Statut | Date |
|---|---|---|---|
| TEST-01 | `generateDto()` — output TypeScript valide pour chaque ORM | ✅ Terminé | 2026-06-16 |
| TEST-02 | `generateEntityFileContent()` — structure domaine correcte | ✅ Terminé | 2026-06-16 |
| TEST-03 | `generateController()` — routes, guards, decorators | ✅ Terminé | 2026-06-16 |
| TEST-04 | `mapTypeToPrisma()` — tous les types | ✅ Terminé | 2026-06-16 |
| TEST-05 | `mapTypeToMongoose()` — tous les types | ✅ Terminé | 2026-06-16 |
| TEST-06 | Schema Prisma relations 1-n (FK, inverse, capitalisation) | ✅ Terminé | 2026-06-16 |
| TEST-07 | Schema Prisma relations n-n et 1-1 | ✅ Terminé | 2026-06-16 |
| TEST-08 | CLI Parser — tous les cas de flags | ✅ Terminé | 2026-06-16 |
| TEST-09 | `safeUpdateAppModule` — différents états `app.module.ts` | ✅ Terminé | 2026-06-16 |

### 3B — Tests d'intégration E2E

| Ticket | Description | Statut | Date |
|---|---|---|---|
| E2E-01 | Générer `test-full-prisma` → `tsc --noEmit` passe | ✅ Terminé | 2026-06-16 |
| E2E-02 | Générer `test-full-typeorm` → `tsc --noEmit` passe | ✅ Terminé | 2026-06-16 |
| E2E-03 | Générer `test-full-mongoose` → `tsc --noEmit` passe | ✅ Terminé | 2026-06-16 |
| E2E-04 | Générer `test-light-prisma` → `tsc --noEmit` passe | ✅ Terminé | 2026-06-16 |
| E2E-05 | Générer avec auth → `auth.module.ts` correctement câblé | ✅ Terminé | 2026-06-16 |
| E2E-06 | Générer avec relations 1-n → schema Prisma valide | ✅ Terminé | 2026-06-16 |
| E2E-07 | Test résilience PROD-03 : erreur migration → reste généré | ✅ Terminé | 2026-06-16 |

### 3C — CI/CD

| Ticket | Description | Statut | Date |
|---|---|---|---|
| CI-01 | ESLint sur chaque PR | ✅ Terminé | 2026-06-16 |
| CI-02 | Tests Node 18, 20, 22 LTS (matrix) | ✅ Terminé | 2026-06-16 |
| CI-03 | Génération sur Ubuntu + Windows (matrix) | ✅ Terminé | 2026-06-16 |
| CI-04 | Semantic Release automatique | ✅ Terminé | 2026-06-16 |
| CI-05 | Publish automatique sur npm | ✅ Terminé | 2026-06-16 |

---

## 🟡 PHASE 4 — Features Manquantes (v0.7.0–v0.9.0)
> Objectif : Être feature-complete avant la v1.0

### 4A — Features CLI

| Ticket | Description | Statut | Date |
|---|---|---|---|
| FEAT-01 | `nestcraftx g auth` — implémenter complètement | ✅ Terminé | 2026-06-18 |
| FEAT-02 | Mode non-interactif complet (tous les flags) | ✅ Terminé | 2026-06-18 |
| FEAT-03 | `nestcraftx update` — auto-update de la CLI | ⏸️ Post-v1.0 | — |
| FEAT-04 | `nestcraftx list` — lister entités depuis `.nestcraftxrc` | ✅ Terminé | 2026-06-18 |
| FEAT-05 | Support `pnpm` | ✅ Terminé | 2026-06-18 |

### 4B — Qualité du code généré

| Ticket | Description | Statut | Date |
|---|---|---|---|
| FEAT-06 | Pagination GET all (`?page=1&limit=10`) | ✅ Terminé | 2026-06-29 |
| FEAT-07 | Filtering & Sorting query params | ✅ Terminé | 2026-06-29 |
| FEAT-08 | Rate limiting global (`@nestjs/throttler`) | ✅ Terminé | 2026-07-02 |
| FEAT-09 | Health check endpoint (`/health`) | ✅ Terminé | 2026-07-02 |
| FEAT-10 | Exception filter global typé | ✅ Terminé | 2026-06-29 |
| FEAT-11 | Guards RBAC conditionnels sur endpoints | ✅ Terminé | 2026-07-01 |
| FEAT-12 | Support MySQL/SQLite (Prisma/TypeORM) | ⏸️ Post-v1.0 | — |

### 4C — Expérience développeur

| Ticket | Description | Statut | Date |
|---|---|---|---|
| FEAT-13 | Templates personnalisés depuis GitHub | ⏸️ Post-v1.0 | — |
| FEAT-14 | `nestcraftx g relation` — relation entre modules existants | ✅ Terminé | 2026-07-02 |
| FEAT-15 | Rapport de génération en fin de commande | ✅ Terminé | 2026-07-02 |

---

## 🟢 PHASE 5 — Documentation & Site Web (v0.9.x)
> Objectif : Site officiel avant la v1.0

| Ticket | Description | Statut | Date |
|---|---|---|---|
| DOC-01 | Créer site Docusaurus/VitePress (`nestcraftx.dev`) | ⬜ À faire | — |
| DOC-02 | Page Getting Started (5 minutes) | ⬜ À faire | — |
| DOC-03 | CLI Reference (toutes les commandes et flags) | ⬜ À faire | — |
| DOC-04 | Architecture Guide (Clean Arch générée) | ⬜ À faire | — |
| DOC-05 | ORM Guide (Prisma vs TypeORM vs Mongoose) | ⬜ À faire | — |
| DOC-06 | Auth Deep Dive (JWT, guards, roles) | ⬜ À faire | — |
| DOC-07 | Troubleshooting & Migration Guide (0.2.x → 1.0) | ⬜ À faire | — |
| DOC-08 | Playground interactif dans le navigateur | ⬜ À faire | — |

---

## 🟢 PHASE 6 — Release v1.0 stable

| Ticket | Description | Statut | Date |
|---|---|---|---|
| REL-01 | Audit de sécurité final | ✅ Terminé | 2026-07-02 |
| REL-02 | Test complet Windows + macOS + Linux | ⬜ À faire | — |
| REL-03 | Revue de toutes les sorties CLI | ✅ Terminé | 2026-07-02 |
| REL-04 | README mis à jour avec badges CI | ✅ Terminé | 2026-07-02 |
| REL-05 | CHANGELOG complet depuis v0.2.6 | ✅ Terminé | 2026-07-02 |
| REL-06 | Publication npm avec tag `@stable` | ⬜ À faire | — |
| REL-07 | Annonce GitHub Release avec notes détaillées | ⬜ À faire | — |

---

## 📝 Journal des changements

| 2026-06-05 | 0.2.6 | — | Audit initial + retours prod intégrés |
| 2026-06-05 | 0.3.0-wip | PROD-03, PROD-01a, PROD-01b, PROD-01c, BUG-09 | `runCommand` refactorisé (PROD-03). Prisma relations : capitalisation forcée des modèles et types, déduplication complète des clés étrangères (PROD-01a, b, c). Correction de la boucle asynchrone des use cases clean architecture (BUG-09). |
| 2026-06-06 | 0.3.0-wip | BUG-01, BUG-03, BUG-06 | Unification du module system en CommonJS (BUG-01). Validation non-interactive des flags (BUG-03). Utilisation de inputs.packageManager dynamique dans `setupAuth.js` au lieu de npm en dur (BUG-06). |
| 2026-06-07 | 0.3.0 | BUG-07, BUG-04, BUG-08, BUG-12, MP-07a, MP-07b, BUG-02, BUG-11, BUG-12b | Clôture de la Phase 0. Mongoose .env préservé. createFile supporte overwrite. safeUpdateAppModule robuste aux crochets imbriqués. help.js dynamic. Nettoyage de code mort et debug logs. |
| 2026-06-14 | 0.3.0-wip | PROD-04a, PROD-04b, PROD-05, MP-02 | Refonte state-based interactive de la saisie d'entités avec EntityBuilder. Support des contraintes unique, nullable et valeurs par défaut. Alignement et déduplication des générateurs (Prisma, TypeORM, Mongoose, DTOs, et Domain Entities). |
| 2026-06-16 | 0.6.0 | TEST-01..09, E2E-01..07, CI-01..05 | Clôture de la Phase 3. Ajout de 26 tests unitaires Jest, tests d'intégration E2E vérifiant la compilation TypeScript sans erreur des projets générés (Prisma/TypeORM/Mongoose) et pipeline GitHub Actions (Ubuntu/Windows). |
| 2026-06-18 | 0.7.0 | FEAT-01, FEAT-02, FEAT-04, FEAT-05 | Clôture des tickets CLI de la Phase 4. Implémentation complète de `nestcraftx g auth` (multi-ORM, secrets JWT et migrations), mode de génération non-interactif robuste via CLI flags, commande `nestcraftx list` avec tableaux ASCII, et support complet multi-package manager (pnpm, yarn). |

---

## 🔑 Légende des statuts

| Icône | Signification |
|---|---|
| ⬜ À faire | Ticket non démarré |
| 🔵 En cours | Travail en cours |
| ✅ Terminé | Ticket complété et validé |
| ❌ Annulé | Ticket annulé (avec raison dans Notes) |
| ⏸️ Bloqué | En attente d'un autre ticket |

---

*Ce fichier est mis à jour manuellement à chaque session de travail.*
*Pour le détail technique de chaque ticket, voir [AUDIT_ROADMAP.md](./AUDIT_ROADMAP.md)*
