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

198 lines
7.5 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://oto.dtp/schemas/chat_otoia/chat.schema.json",
"title": "Contrat de sortie du générateur Chat OTOIA (custom_block + chat_mount + manifest)",
"description": "Validé par le validateur maison Publiciste (draft-07, sous-ensemble). La cross-cohérence fine (portails métier, portée RBAC, endpoint null, cohérence avec les Has Role des Workspaces, déterminisme) est vérifiée par les invariants de chat_otoia_gen.py.",
"type": "object",
"required": ["custom_block", "chat_mount", "manifest"],
"additionalProperties": false,
"properties": {
"custom_block": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["doctype", "block_name", "html"],
"additionalProperties": false,
"properties": {
"doctype": {"type": "string", "const": "Custom Block"},
"block_name": {"type": "string", "minLength": 1},
"html": {"type": "string", "minLength": 1}
}
}
},
"chat_mount": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"portail", "workspace", "custom_block", "html_id", "persona",
"langues", "lang_defaut", "ui_label", "roles_allowed",
"knowledge_scope", "capabilities", "endpoint"
],
"additionalProperties": false,
"properties": {
"portail": {"type": "string", "minLength": 1},
"workspace": {"type": "string", "minLength": 1},
"custom_block": {"type": "string", "minLength": 1},
"html_id": {"type": "string", "pattern": "^otoia-chat-"},
"persona": {
"type": "object",
"required": ["nom", "voix"],
"additionalProperties": false,
"properties": {
"nom": {"type": "string", "const": "Amélie"},
"voix": {"type": "string", "const": "multilingual_v2"}
}
},
"langues": {
"type": "array",
"minItems": 1,
"items": {"type": "string", "enum": ["fr", "en", "es"]}
},
"lang_defaut": {"type": "string", "enum": ["fr", "en", "es"]},
"ui_label": {
"type": "object",
"required": ["fr", "en", "es"],
"additionalProperties": false,
"properties": {
"fr": {"type": "string", "minLength": 1},
"en": {"type": "string", "minLength": 1},
"es": {"type": "string", "minLength": 1}
}
},
"roles_allowed": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {"type": "string", "minLength": 1}
},
"knowledge_scope": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {"type": "string", "minLength": 1}
},
"capabilities": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {"type": "string", "enum": ["aec.py", "knowledge.py", "prompt_engine.py", "chat.py"]}
},
"endpoint": {"type": "null"}
}
}
},
"manifest": {
"type": "object",
"required": [
"deliverable", "sprint", "roadmap_ref", "generated_from", "carrier",
"persona", "langues", "lang_defaut", "capabilities", "endpoint_statut",
"counts", "portails", "brand", "handoff_vps"
],
"additionalProperties": false,
"properties": {
"deliverable": {"type": "string", "minLength": 1},
"sprint": {"type": "string", "minLength": 1},
"roadmap_ref": {"type": "string", "minLength": 1},
"generated_from": {"type": "string", "minLength": 1},
"carrier": {
"type": "object",
"required": ["doctype", "workspace_content_block_type", "note"],
"additionalProperties": false,
"properties": {
"doctype": {"type": "string", "const": "Custom Block"},
"workspace_content_block_type": {"type": "string", "const": "custom_block"},
"note": {"type": "string", "minLength": 1}
}
},
"persona": {
"type": "object",
"required": ["nom", "voix"],
"additionalProperties": false,
"properties": {
"nom": {"type": "string", "const": "Amélie"},
"voix": {"type": "string", "const": "multilingual_v2"}
}
},
"langues": {"type": "array", "minItems": 1, "items": {"type": "string", "enum": ["fr", "en", "es"]}},
"lang_defaut": {"type": "string", "enum": ["fr", "en", "es"]},
"capabilities": {"type": "array", "minItems": 1, "items": {"type": "string"}},
"endpoint_statut": {"type": "string", "const": "a_confirmer"},
"counts": {
"type": "object",
"required": ["portails", "custom_blocks", "mounts", "roles_couverts", "knowledge_doctypes_uniques"],
"additionalProperties": false,
"properties": {
"portails": {"type": "integer", "minimum": 1},
"custom_blocks": {"type": "integer", "minimum": 1},
"mounts": {"type": "integer", "minimum": 1},
"roles_couverts": {"type": "integer", "minimum": 1},
"knowledge_doctypes_uniques": {"type": "integer", "minimum": 1}
}
},
"portails": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["portail", "workspace", "custom_block", "nb_roles", "nb_knowledge_doctypes"],
"additionalProperties": false,
"properties": {
"portail": {"type": "string", "minLength": 1},
"workspace": {"type": "string", "minLength": 1},
"custom_block": {"type": "string", "minLength": 1},
"nb_roles": {"type": "integer", "minimum": 1},
"nb_knowledge_doctypes": {"type": "integer", "minimum": 1}
}
}
},
"brand": {
"type": "object",
"required": ["fond", "accent", "polices"],
"additionalProperties": false,
"properties": {
"fond": {
"type": "object",
"required": ["valeur", "source"],
"additionalProperties": false,
"properties": {
"valeur": {"type": "string", "const": "#0a0a12"},
"source": {"type": "string", "minLength": 1}
}
},
"accent": {
"type": "object",
"required": ["valeur", "source"],
"additionalProperties": false,
"properties": {
"valeur": {"type": "string", "const": "#f0b429"},
"source": {"type": "string", "minLength": 1}
}
},
"polices": {
"type": "array",
"minItems": 2,
"items": {
"type": "object",
"required": ["valeur", "source"],
"additionalProperties": false,
"properties": {
"valeur": {"type": "string", "minLength": 1},
"source": {"type": "string", "minLength": 1}
}
}
}
}
},
"handoff_vps": {
"type": "array",
"minItems": 1,
"items": {"type": "string", "minLength": 1}
}
}
}
}
}