Files
Claude Code DTP Worker c0d2e21ef3 [DTP-Worker] Sprint 4 · Générateur Workspaces ERPNext 5 portails rôle (Frontend Console · roadmap L49)
Livre le dernier volet ouvert de Sprint 4 : Frontend Console « 5 portails
(Ventes/Construction/Achat/Compta/Direction) ». Contrainte #1 (ERPNext natif) :
le portail de landing par rôle EST le DocType Workspace v15 → 5 Workspaces natifs.

Anti-invention (#6) : rôles et DocTypes dérivés du contrat rbac_50_roles.json ;
chaque lien/raccourci vise un DocType présent dans les permissions_cibles du
portail (droit prouvé) ; couverture exhaustive ; flag custom issu du contrat ;
tokens de marque repris verbatim de CLAUDE.md #4. CLI + 12 invariants + 19 tests
(4 négatifs). Régression 260 tests verts. Hand-off VPS #8 documenté.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 07:38:44 +00:00

83 lines
3.9 KiB
Markdown

# Daily Report · 2026-07-30 · Claude Code DTP Worker (session 15)
**Session** : `20260730_072711`
## Tâche exécutée
**Sprint 4 · Frontend Console — Générateur de Workspaces ERPNext (5 portails
rôle)** (roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` §Sprint 4 l.49 :
_« Frontend Console : 5 portails (Ventes/Construction/Achat/Compta/Direction) »_).
## Contexte / analyse
- Relu `CLAUDE.md`, `ROADMAP_8_WEEKS_OR_LESS.md`, l'`05_activity_log/2026-07-30.md`
et les rapports sessions 11-14.
- **Constat** : les deux autres volets de Sprint 4 sont livrés — CRM (workflow
vente s11, DocType porteur s12) et ERPNext Backend (commissions s13, e-CF DGII
s14). Le volet **Frontend Console « 5 portails rôle »** restait ouvert (aucun
artefact `portail`/`workspace` dans le repo).
- **Décision d'architecture** (contrainte #1 « ERPNext natif = priorité absolue
avant tout outil externe ») : dans ERPNext v15, le portail de landing par rôle
**EST le DocType `Workspace`** (le desk affiche à l'utilisateur les Workspaces
dont il détient un rôle autorisé). On livre donc 5 Workspaces natifs plutôt
qu'un framework de dashboard externe.
## Fichiers créés — `05_deliverables_mvp/frontend/portails/`
- `portails_spec.json` — mise en page des 5 portails (cartes, raccourcis, thème) ;
ne déclare **aucun** DocType ni rôle hors du contrat RBAC.
- `wslib/{__init__,frappe,builder}.py` — connaissance Frappe (DocType `Workspace`
+ enfants `shortcuts`/`links`/`roles` + blocs `content`) + assemblage
déterministe (dérive rôles et DocTypes du contrat `rbac_50_roles.json`).
- `workspaces_gen.py` — CLI `build`/`validate` · **12 invariants** de
cross-cohérence.
- `workspace.schema.json` — contrat de sortie draft-07.
- `out/{workspace,MANIFEST}.json` — hand-off (commité).
- `tests/test_workspaces.py`**19 tests** (dont 4 négatifs). `README.md` · `.gitignore`.
## Fichiers modifiés
- `.gitea/workflows/ci.yml` : job `frontend-portails-tests` + ajout au `gate`.
## Anti-invention (cœur · #6)
La **source de vérité** est le contrat RBAC, jamais la spec :
- **Aucun lien / raccourci inventé** : tout DocType visé (carte ou raccourci) doit
figurer dans les `permissions_cibles` du portail → le portail a **prouvablement**
le droit dessus (invariants 2-3, testés en négatif).
- **Couverture exhaustive et sans doublon** des DocTypes autorisés par les cartes
(aucun oubli silencieux — invariant 3).
- **Rôles** dérivés du contrat (mêmes rôles que le `Role Profile` du portail),
triés ; 44 rôles restreints au total.
- **Flag `custom`** (DocType OTO à créer vs natif v15) lu dans le **contrat** (source
unique — invariant 9).
- **Aucun chiffre stocké** : raccourcis type DocType = compteur **live** du desk.
- **Tokens de marque** (`#0a0a12`, `#f0b429`, Fraunces, Cormorant Garamond) repris
**verbatim** de CLAUDE.md #4, chacun avec `source` (invariant 11).
## Résultat
5 Workspaces : `OTO Ventes` (4 cartes/11 liens/12 rôles), `OTO Construction`
(4/9/10), `OTO Achat` (3/8/5), `OTO Compta` (4/11/8), `OTO Direction` (4/14/9).
Console technique `plateforme` **exclue** (roadmap = 5 portails métier ; invariant
d'égalité stricte avec `portails_business`).
## Vérifs
- 19/19 tests ; gate CI local vert (guard + JSON + docs + YAML `ci.yml` OK).
- **Régression : 260 tests verts** au total (241 + 19).
- Build déterministe (invariant 12 : deux passes identiques).
## Hors périmètre worker (VPS · #8)
- Fixer `Workspace.module` au module de l'app OTO à l'import (laissé `null`).
- Créer les DocTypes custom avant import : `CONFOTUR Application`, `Faisabilité`,
`Publiciste Log` (issus des modules OTOV7 du contrat).
- Déposer `workspace.json` dans `fixtures/` puis `bench migrate`.
- Appliquer le thème luxury dark+doré (couche thème desk / Website Theme).
→ agent **ERPNext Backend** + **Frontend Console** (déploiement thème).
**Auto-score 4Big** : 96/100.