c0d2e21ef3
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>
83 lines
3.9 KiB
Markdown
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.
|