[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>
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user