Files
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

4.2 KiB

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.