[DTP-Worker] Sprint 2 · Faisabilité générateur 4 volets (brief→data_room + round-trip Publiciste + gate)
Générateur brief JSON → data_room/PXX/ (template canonique v1.0) :
- genlib/{model,scorer,renderer}.py : params canoniques imposés (#9/#10),
barème 4Big §7, rendu aligné sur le parser Publiciste (round-trip garanti)
- faisabilite_gen.py : CLI score/scaffold/generate/batch ; axe machine-lisible
PROUVÉ (re-parse Publiciste + validation version.json), jamais auto-décerné
- Anti-invention #6 : champ 🔴 absent → placeholder + champs_manquants +
rétrogradation statut ; prix manquant → {{…}} (jamais 0)
- 16 tests unittest (stdlib, réutilise parser+validateur Publiciste · #5) +
oracle jsonschema ; job CI faisabilite-gen-tests dans le gate (Gitea only #2)
- brief.schema.json + fixtures synthétiques ; README ; GAP §2 mis à jour
Boucle de valeur fermée : generator → data_room → Publiciste → projets_master.json
Auto-score 4Big : 96/100.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -185,3 +185,53 @@ Rapport écrit dans `05_deliverables_mvp/daily_reports/` (chemin canonique fixé
|
||||
---
|
||||
|
||||
**Auto-score 4Big du livrable RBAC 50 rôles : 95/100.** Réserve −5 : application fixtures + DocTypes `custom` + `User Permission` = côté VPS (agent ERPNext, hors périmètre) ; plafonds monétaires non chiffrés (anti-invention #6). Validé statiquement en-repo (10 tests verts + schéma conforme + gate CI vert).
|
||||
|
||||
---
|
||||
|
||||
# Daily Report · 2026-07-30 · Claude Code DTP Worker (session 5)
|
||||
|
||||
**Session** : `20260730_022639`
|
||||
|
||||
## Tâche exécutée
|
||||
**Sprint 2 · Livrable Faisabilité « Générateur 4 volets automatique »**
|
||||
(roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` §Sprint 2/3 · `03_agents/faisabilite/AGENT.md` §Livrable S2 · `GAP_ANALYSIS_SPRINT1` §2 · suggérée par sessions 3-4).
|
||||
|
||||
## Contexte / analyse
|
||||
- Relu `CLAUDE.md`, `ROADMAP_8_WEEKS_OR_LESS.md`, `GAP_ANALYSIS_SPRINT1.md`, daily reports sessions 1-4, `AGENT.md` Faisabilité, template canonique v1.0 + `version.schema.json`, **parser Publiciste** (`lib/parser.py`) + `publiciste.py`.
|
||||
- **Sprint 1 bouclé côté repo** ; Sprint 2 : RBAC (session 4) + Publiciste parser (session 3) livrés. Frontend/CRM dépendent des layouts LIVE (VPS · hors périmètre).
|
||||
- Priorité évidente : **Générateur Faisabilité 4 volets** — sur le **chemin critique**, produit les `data_room/PXX/` que le parser Publiciste (déjà livré) consomme. **Ferme la boucle de valeur** et 100 % autorable en-repo (zéro API, zéro VPS). Vérifiable end-to-end : générateur → parser → schéma.
|
||||
|
||||
## Réalisé — module `05_deliverables_mvp/faisabilite/generator/`
|
||||
- `genlib/model.py` — constantes **canoniques** (3 %/8.5 %/52 % · USD+DOP · Cardnet · Letter US · #9/#10, **imposées, jamais issues du brief**) + tables des champs 🔴 par volet + `is_filled()` (détecte placeholders/absences).
|
||||
- `genlib/scorer.py` — **barème 4Big §7** (5 axes × 20) : complétude, anti-gap prix (§3.2), traçabilité (`sources[]` + taux daté/sourcé), paramètres canoniques, machine-lisible. Dérive `statut_faisabilite` / `volets_complets` / `champs_manquants` cohérents avec la contrainte `allOf` de `version.schema.json`.
|
||||
- `genlib/renderer.py` — rend les 4 volets + brief + commercial + manifeste photos + `_META/version.json`, avec **en-têtes/colonnes exactement alignés sur le parser Publiciste** (garantit le round-trip). Champ absent → placeholder `{{…}}` (**jamais de chiffre inventé · #6**).
|
||||
- `faisabilite_gen.py` — CLI `score` / `scaffold` / `generate` / `batch`. L'axe machine-lisible n'est **pas auto-décerné** : après génération, le CLI **re-parse** le projet avec le parser Publiciste + **valide** `version.json` → en cas d'échec, retire les 20 pts, réécrit `version.json`, sort en erreur.
|
||||
- `brief.schema.json` (contrat d'entrée) + `fixtures/` **synthétiques** (`brief_complete.json` → complete 100/100 ; `brief_incomplete.json` → prix absents → rétrogradation `en_developpement`, prix restés placeholders).
|
||||
- `tests/test_generator.py` — **16 tests `unittest` (stdlib pur, zéro pip)** : scoring, rétrogradation défensive, paramètres canoniques, et **round-trip end-to-end** generator → parser Publiciste → `projets_master.json` validé contre le schéma. **Réutilise** parser + validateur Publiciste (aucune duplication · workflow #5) + oracle `jsonschema` si présent.
|
||||
- **CI** : job `faisabilite-gen-tests` ajouté au **gate** de `.gitea/workflows/ci.yml` (Gitea Actions uniquement · #2).
|
||||
- `README.md` + `.gitignore` ; `GAP_ANALYSIS_SPRINT1.md §2` mis à jour (générateur livré S2).
|
||||
|
||||
## Anti-invention (#6) appliqué
|
||||
- Paramètres canoniques émis par le générateur (jamais du brief) → impossibles à fausser projet par projet.
|
||||
- Tout 🔴 absent → placeholder + `champs_manquants` + rétrogradation ; prix manquant → `{{…}}` (jamais `0`).
|
||||
- Fixtures **clairement synthétiques** (`"synthetique": true` + bannière « ne jamais publier »).
|
||||
|
||||
## Vérifications effectuées (en-repo, sans toucher au VPS)
|
||||
- **16/16 tests verts** (schéma maison **+** oracle `jsonschema` → concordance draft-07 confirmée).
|
||||
- **Pipeline complet démontré en CLI** : `batch fixtures` → `data_room/{P01,P02}/` → **Publiciste `run`** → `projets_master.json` (2 projets : P01 `disponible`/3 typo, P02 `en_developpement`/2 typo) + `index.html`. Round-trip cohérent de bout en bout.
|
||||
- **Gate CI local vert (exit 0)** : `guard_constraints.sh`, `validate_json.sh` (inclut `brief.schema.json` + fixtures), `check_docs.sh` (0 lien cassé), YAML `ci.yml` valide.
|
||||
- **Régression** : 23/23 tests Publiciste + 10/10 tests RBAC toujours verts (réutilisation sans effet de bord).
|
||||
|
||||
## Non fait (hors périmètre worker · VPS ou calendrier ultérieur)
|
||||
- Génération contre les **briefs réels** P01-P09 (VPS · Faisabilité) — régénération batch des 7 faisabilités = **S4**.
|
||||
- `40_llm_outputs/` marché/directeur/fiscal/juridique + rapports bancables FR/EN/ES + archives auto `_ARCHIVES/` (S3+).
|
||||
- Trigger `otoia-faisabilite.timer` + notification Publiciste/WhatsApp (S6 · VPS).
|
||||
|
||||
## Prochaine tâche suggérée
|
||||
- Faisabilité S3 : générer les `40_llm_outputs/` + rapports bancables FR/EN/ES depuis le brief (étend le renderer).
|
||||
- Ou ERPNext S2 : générateur de fixtures `rbac_50_roles.json → fixtures/` (même patron, autorable en-repo).
|
||||
- Ou Publiciste S3 : brancher le generator HTML sur un layout proche de `/waf-home` (dépend layout LIVE · VPS).
|
||||
|
||||
---
|
||||
|
||||
**Auto-score 4Big du livrable Générateur Faisabilité : 96/100.** Réserve −4 : exécution contre les briefs réels P01-P09 différée (VPS · S4) ; `40_llm_outputs`/bancables/archives = livrables S3+. Validé statiquement en-repo (16 tests verts + round-trip end-to-end démontré + gate CI vert).
|
||||
|
||||
Reference in New Issue
Block a user