Files
oto-enterprise-os-dtp/05_deliverables_mvp/daily_reports/2026-07-30-session19.md
T
Claude Code DTP Worker 17ad5c0a01
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
[DTP-Worker] Sprint 6 · Générateur Chat OTOIA embarqué par portail (Custom Block natif) (ERPNext Backend · roadmap L63)
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>
2026-07-30 09:37:51 +00:00

82 lines
4.2 KiB
Markdown

# Rapport de session · 2026-07-30 · session 19 (`20260730_092724`)
## Tâche
**Sprint 6 · ERPNext Backend** — Générateur du **Chat OTOIA embarqué par portail**
(roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` l.63 : « ERPNext Backend : **Chat
OTOIA embedded dans chaque portail** »).
C'est le **deuxième volet réalisable en repo** de Sprint 6, après le SEO trilingue
(session 18). Le troisième volet Sprint 6 — **OTOIA voice Amélie pilote AEC complet**
(BIM/Faisabilité) — dépend d'API externes / desk VPS et reste hors périmètre worker
(#8). Le volet « chat embarqué » a en revanche une **tranche repo nette** : le
**carrier natif** et sa **config de montage** par portail, indépendants du backend
conversationnel réel.
## 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` (`frappe/desk/doctype/custom_block`). On ne fabrique donc
**aucun** framework de chat externe : on livre **un `Custom Block` par portail** (un
`<div>` de montage vide et déterministe) + la **config runtime** (`chat_mount.json`)
que le web-component OTOIA consommera. Chaque `Custom Block` s'ancre sur le `Workspace`
du portail produit par le hand-off Sprint 4 (`frontend/portails`).
## Fichiers créés — `05_deliverables_mvp/frontend/chat_otoia/`
- `chat_spec.json` — présentation + persona seules (persona Amélie sourcée, capabilities
OTOIA sourcées, `ui_label` FR/EN/ES générique, `endpoint: null`, tokens de marque).
- `chatlib/{__init__,deps,frappe,knowledge,builder}.py` :
- `deps` **réutilise** (#5) le validateur + `branding` Publiciste **et** le builder
RBAC↔Workspaces (`frontend/portails/wslib/builder.py`) → même surface RBAC, zéro
duplication ; dérive les langues du `seo_spec.json` (source unique).
- `frappe` : connaissance du DocType natif `Custom Block` (`block_name` + `html`).
- `knowledge` : `roles_allowed` / `knowledge_scope` par portail, dérivés du CONTRAT.
- `builder` : assemblage déterministe du bundle.
- `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)
Le générateur ne fabrique **aucun fait** :
- **endpoint OTOIA = `null` (`a_confirmer`)** — jamais fabriqué ; un invariant refuse
tout endpoint non-null et refuse toute URL (`http(s)://`) dans le HTML de montage.
- **portée de connaissance = surface RBAC EXACTE du portail** (`permissions_cibles`) :
l'assistant ne peut ni prétendre ni exposer un DocType hors du périmètre du portail.
Ajouter/retirer un DocType est rejeté par invariant.
- **rôles autorisés = rôles du portail**, et un invariant vérifie qu'ils sont
**synchronisés avec les Has Role réels des Workspaces** (`portails/out/workspace.json`)
→ cohérence inter-livrables prouvée.
- persona (`Amélie`/`multilingual_v2`), capabilities (`aec/knowledge/prompt_engine/chat.py`)
et langues (FR/EN/ES) repris de sources **sourcées** (CLAUDE.md, seo_spec), jamais
inventés ; le HTML de montage ne contient **aucun chiffre**.
## Résultat
5 portails métier (`plateforme` exclu comme les Workspaces) · 5 `Custom Block` ·
**44 rôles couverts** (= total restreint des Workspaces) · **35 DocTypes de
connaissance uniques** · endpoint `a_confirmer`.
## Vérifs
- **31/31** tests du livrable ; `validate` = schéma + 14 invariants verts ; build
déterministe.
- Gate CI local vert : guard des contraintes · docs (liens OK) · JSON bien formés.
- **Régression : 408 tests verts au total** (377 → +31).
## Hors périmètre worker (VPS · #8)
Import des fixtures `Custom Block` (bench) · insertion d'un bloc `custom_block` dans
le `content` de chaque Workspace (payload editor.js `a_confirmer` selon patch v15) ·
renseignement de l'endpoint OTOIA + chargement du web-component via le thème desk ·
application des tokens dark+doré → agents ERPNext Backend / Frontend.
## Auto-score 4Big : 96/100.