[DTP-Worker] Sprint 6 · Générateur Chat OTOIA embarqué par portail (Custom Block natif) (ERPNext Backend · roadmap L63)
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled

Carrier natif ERPNext v15 (Custom Block) + config runtime par portail.
Ancrage RBAC : roles_allowed/knowledge_scope = surface exacte du portail,
synchronisés avec les Has Role des Workspaces. Endpoint OTOIA null (a_confirmer).
Persona Amélie + capabilities + langues FR/EN/ES sourcés (anti-invention #6).
14 invariants · 31 tests · régression 408 tests verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-30 09:37:51 +00:00
parent 0d3b2420c3
commit 17ad5c0a01
17 changed files with 1712 additions and 1 deletions
+53
View File
@@ -1,5 +1,58 @@
# Activity Log · 2026-07-30 · Claude Code DTP
## Session `20260730_092724` (session 19)
**Tâche** : **Sprint 6 · ERPNext Backend** — Générateur du **Chat OTOIA embarqué
par portail** (roadmap **L63** « ERPNext Backend : **Chat OTOIA embedded dans chaque
portail** »). Deuxième volet Sprint 6 réalisable en repo après le SEO trilingue
(session 18) ; le volet OTOIA voice Amélie (pilote AEC) dépend d'API externes / desk
VPS (hors périmètre worker · #8).
**Décision d'architecture (#1 ERPNext natif)** : dans ERPNext v15, un bloc de contenu
réutilisable inséré dans un `Workspace` **EST** le DocType `Custom Block` → on livre
**un `Custom Block` par portail** (un `<div>` de montage) + la **config runtime**
(`chat_mount.json`), pas de framework de chat externe. Chaque bloc s'ancre sur le
`Workspace` du portail (hand-off Sprint 4 · `frontend/portails`).
**Fichiers créés**`05_deliverables_mvp/frontend/chat_otoia/` :
- `chat_spec.json` (présentation + persona seules · persona/capabilities/marque
sourcées · `ui_label` FR/EN/ES · **endpoint `null`**)
- `chatlib/{__init__,deps,frappe,knowledge,builder}.py` (`deps` **réutilise** le
validateur + branding Publiciste **et** le builder RBAC↔Workspaces des portails,
et dérive les langues du `seo_spec` ; `knowledge` dérive rôles + portée du CONTRAT ;
`builder` déterministe)
- `chat_otoia_gen.py` (CLI `build`/`validate` · **14 invariants**)
- `chat.schema.json` (contrat de sortie draft-07)
- `out/{custom_block,chat_mount,MANIFEST}.json` (hand-off) · `tests/test_chat_otoia.py`
(**31 tests** dont 11 injections négatives) · `README.md` · `.gitignore`
**Fichiers modifiés** :
- `.gitea/workflows/ci.yml` : job `chat-otoia-tests` + ajout au `gate`.
**Anti-invention (cœur · #6)** : **endpoint OTOIA = `null` (`a_confirmer`)** — jamais
fabriqué (invariant refuse tout endpoint non-null et toute URL dans le HTML) ; **portée
de connaissance = surface RBAC EXACTE du portail** (l'assistant ne peut exposer un
DocType hors périmètre — ajout/retrait rejeté) ; **rôles autorisés synchronisés avec
les Has Role réels des Workspaces** (cohérence inter-livrables prouvée) ; persona
Amélie / capabilities OTOIA / langues repris de sources sourcées ; HTML de montage sans
aucun chiffre.
**Résultat** : 5 portails métier (`plateforme` exclu) · 5 `Custom Block` · **44 rôles
couverts** · **35 DocTypes de connaissance uniques** · endpoint `a_confirmer`.
**Vérifs** : 31/31 tests ; gate CI local vert (guard + JSON + docs + YAML) ;
régression **408 tests verts** au total (377 → +31) ; build déterministe.
**Hors périmètre worker (VPS · #8)** : import fixtures `Custom Block` + insertion du
bloc `custom_block` dans le `content` de chaque Workspace + renseignement endpoint
OTOIA + chargement du web-component via le thème desk → agents ERPNext Backend /
Frontend.
**Détail complet** : voir
[`05_deliverables_mvp/daily_reports/2026-07-30-session19.md`](../05_deliverables_mvp/daily_reports/2026-07-30-session19.md).
**Auto-score 4Big** : 96/100.
## Session `20260730_085719` (session 18)
**Tâche** : **Sprint 6 · SEO** — Générateur **SEO trilingue** (roadmap L60 :