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

3.9 KiB

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.py19 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.