Claude Code DTP Worker 733c73ae3f [DTP-Worker] Sprint 8 · buffer L75 · Domaine RBAC/fixtures_gen : le CATALOGUE des DocTypes custom à créer sur le VPS (« Faisabilité, Publiciste Log, CONFOTUR Application, API Access ») ET la SÉPARATION DES POUVOIRS (« set_user_permissions n'est émis que pour le rôle **RBAC Admin** ») étaient transcrits À LA MAIN dans le README du module rbac/fixtures_gen sans AUCUN gate d'IDENTITÉ. Le bloc racine ne gate que le COMPTE (« 50 rôles / 116 DocPerm » via l'agrégat RBAC de l'apply_plan) — surface distincte. Ces deux faits sont DATA-DERIVED : catalogue = custom_doctypes_a_confirmer de rbac/fixtures_gen/out/MANIFEST.json (les DocTypes custom: true du contrat rbac_50_roles.json) · singleton sécurité = {role | set_user_permissions==1} de out/custom_docperm.json (= OTO Plateforme RBAC Admin) — les deux artefacts byte-gatés par check_artifacts. Aucun gate ne comparait ces ENSEMBLES à la prose : AJOUTER un DocType custom au contrat (MANIFEST rebâtit 5 entrées) · RENOMMER/ÉCHANGER l'un des 4 · PROMOUVOIR un 2e rôle porteur du flag (élévation de privilège) ferait dériver la prose en silence pendant que l'artefact dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de mapping, pas la prose du README) n'attrape → nouveau bloc recomputant le catalogue depuis MANIFEST et le singleton depuis custom_docperm (zéro duplication du contrat du générateur #6) et exigeant que la prose l'énumère/le nomme EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff · accents/casse normalisés via unicodedata). Cohérences croisées en bonus : le catalogue est NON VIDE, sans doublon et TRIÉ (byte-déterminisme du générateur) · la séparation des pouvoirs est un SINGLETON (ni vide — garde vacante — ni multiple — élévation de privilège). Un claim absent échoue AUSSI. 6 morsures vérifiées : échange d'un nom de DocType (Faisabilité→Faisabilite2) capté (absents=[faisabilite] en trop=[faisabilite2]) · sous-ensemble (retrait API Access) capté · rôle nommé faux (RBAC Admin→Ventes Conseiller) capté · énumération supprimée (INTROUVABLE) · 2e rôle promu au flag dans l'artefact (singleton cassé) capté · catalogue MANIFEST non trié (byte-déterminisme) capté ; restauré = green : catalogue [API Access,CONFOTUR Application,Faisabilité,Publiciste Log] == MANIFEST · singleton OTO Plateforme RBAC Admin == custom_docperm. État courant : aucun ensemble périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 17:07:38 +00:00
[DTP-Worker] Sprint 8 · buffer L75 · Domaine RBAC/fixtures_gen : le CATALOGUE des DocTypes custom à créer sur le VPS (« Faisabilité, Publiciste Log, CONFOTUR Application, API Access ») ET la SÉPARATION DES POUVOIRS (« set_user_permissions n'est émis que pour le rôle **RBAC Admin** ») étaient transcrits À LA MAIN dans le README du module rbac/fixtures_gen sans AUCUN gate d'IDENTITÉ. Le bloc racine ne gate que le COMPTE (« 50 rôles / 116 DocPerm » via l'agrégat RBAC de l'apply_plan) — surface distincte. Ces deux faits sont DATA-DERIVED : catalogue = custom_doctypes_a_confirmer de rbac/fixtures_gen/out/MANIFEST.json (les DocTypes custom: true du contrat rbac_50_roles.json) · singleton sécurité = {role | set_user_permissions==1} de out/custom_docperm.json (= OTO Plateforme RBAC Admin) — les deux artefacts byte-gatés par check_artifacts. Aucun gate ne comparait ces ENSEMBLES à la prose : AJOUTER un DocType custom au contrat (MANIFEST rebâtit 5 entrées) · RENOMMER/ÉCHANGER l'un des 4 · PROMOUVOIR un 2e rôle porteur du flag (élévation de privilège) ferait dériver la prose en silence pendant que l'artefact dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de mapping, pas la prose du README) n'attrape → nouveau bloc recomputant le catalogue depuis MANIFEST et le singleton depuis custom_docperm (zéro duplication du contrat du générateur #6) et exigeant que la prose l'énumère/le nomme EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff · accents/casse normalisés via unicodedata). Cohérences croisées en bonus : le catalogue est NON VIDE, sans doublon et TRIÉ (byte-déterminisme du générateur) · la séparation des pouvoirs est un SINGLETON (ni vide — garde vacante — ni multiple — élévation de privilège). Un claim absent échoue AUSSI. 6 morsures vérifiées : échange d'un nom de DocType (Faisabilité→Faisabilite2) capté (absents=[faisabilite] en trop=[faisabilite2]) · sous-ensemble (retrait API Access) capté · rôle nommé faux (RBAC Admin→Ventes Conseiller) capté · énumération supprimée (INTROUVABLE) · 2e rôle promu au flag dans l'artefact (singleton cassé) capté · catalogue MANIFEST non trié (byte-déterminisme) capté ; restauré = green : catalogue [API Access,CONFOTUR Application,Faisabilité,Publiciste Log] == MANIFEST · singleton OTO Plateforme RBAC Admin == custom_docperm. État courant : aucun ensemble périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
2026-07-31 17:07:38 +00:00
[DTP-Worker] Sprint 8 · buffer L75 · Domaine RBAC/fixtures_gen : le CATALOGUE des DocTypes custom à créer sur le VPS (« Faisabilité, Publiciste Log, CONFOTUR Application, API Access ») ET la SÉPARATION DES POUVOIRS (« set_user_permissions n'est émis que pour le rôle **RBAC Admin** ») étaient transcrits À LA MAIN dans le README du module rbac/fixtures_gen sans AUCUN gate d'IDENTITÉ. Le bloc racine ne gate que le COMPTE (« 50 rôles / 116 DocPerm » via l'agrégat RBAC de l'apply_plan) — surface distincte. Ces deux faits sont DATA-DERIVED : catalogue = custom_doctypes_a_confirmer de rbac/fixtures_gen/out/MANIFEST.json (les DocTypes custom: true du contrat rbac_50_roles.json) · singleton sécurité = {role | set_user_permissions==1} de out/custom_docperm.json (= OTO Plateforme RBAC Admin) — les deux artefacts byte-gatés par check_artifacts. Aucun gate ne comparait ces ENSEMBLES à la prose : AJOUTER un DocType custom au contrat (MANIFEST rebâtit 5 entrées) · RENOMMER/ÉCHANGER l'un des 4 · PROMOUVOIR un 2e rôle porteur du flag (élévation de privilège) ferait dériver la prose en silence pendant que l'artefact dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de mapping, pas la prose du README) n'attrape → nouveau bloc recomputant le catalogue depuis MANIFEST et le singleton depuis custom_docperm (zéro duplication du contrat du générateur #6) et exigeant que la prose l'énumère/le nomme EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff · accents/casse normalisés via unicodedata). Cohérences croisées en bonus : le catalogue est NON VIDE, sans doublon et TRIÉ (byte-déterminisme du générateur) · la séparation des pouvoirs est un SINGLETON (ni vide — garde vacante — ni multiple — élévation de privilège). Un claim absent échoue AUSSI. 6 morsures vérifiées : échange d'un nom de DocType (Faisabilité→Faisabilite2) capté (absents=[faisabilite] en trop=[faisabilite2]) · sous-ensemble (retrait API Access) capté · rôle nommé faux (RBAC Admin→Ventes Conseiller) capté · énumération supprimée (INTROUVABLE) · 2e rôle promu au flag dans l'artefact (singleton cassé) capté · catalogue MANIFEST non trié (byte-déterminisme) capté ; restauré = green : catalogue [API Access,CONFOTUR Application,Faisabilité,Publiciste Log] == MANIFEST · singleton OTO Plateforme RBAC Admin == custom_docperm. État courant : aucun ensemble périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
2026-07-31 17:07:38 +00:00

OTO Enterprise OS · Digital Twin Platform (DTP)

Mandat de refactoring 8 semaines ou moins : unifier BIM (Blender/Bonsai/IFC/Speckle), ERPNext v15 natif, la Console Helios (luxury dark+doré) et les faisabilités 4 volets niveau 4Big, pilotés par l'agent orchestrateur OTOIA. Vision et contraintes NON-NÉGOCIABLES : CLAUDE.md.

Point d'entrée de ce dépôt de mandat. Il indexe les artefacts et rapporte l'état courant. Chaque chiffre ci-dessous est sourcé vers un artefact commité (anti-invention CLAUDE.md #6) ; ce README n'introduit aucune donnée nouvelle.

Navigation

Zone Contenu
CLAUDE.md Vision · 10 contraintes NON-NÉGOCIABLES · entités · projets · VPS
04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md Plan 8 sprints · gains d'accélération (~47%) · métriques succès MVP
AGENTS_EXISTING_ASSETS.md Modules OTOV7 réutilisés par agent (source des refactorings)
PORTAIL_BANCABLES_4BIG.md Cadre de bancabilité 4Big
02_master_prompt/ Prompt maître du mandat
03_agents/ Fiches des 13 agents (rôle · livrables · coordination)
05_deliverables_mvp/ Livrables (générateurs déterministes + hand-off out/)
05_deliverables_mvp/GAP_ANALYSIS_SPRINT1.md Audit d'assets + gap analysis (Sprint 1)
05_activity_log/ Journal de session horodaté
.gitea/workflows/ci.yml · ci/ Gate CI Gitea Actions + guards locaux
tests/ Baseline E2E Playwright

Les 13 agents

Faisabilité & 3D : bim · ifc_speckle · rendu · faisabilite · publiciste Plateforme : erpnext_backend · frontend_console · crm · onapi_legal · seo · mobile Transverses : devops · qa

État courant (sourcé)

Périmètre worker (in-repo) vs VPS

Ce dépôt produit des générateurs déterministes et leurs hand-off out/, gatés en CI. Le déploiement réel (bench migrate, import fixtures, câblage nginx/systemd, builds stores, indexation, voix Amélie) s'exécute sur le VPS 153.75.250.214 et reste hors périmètre worker (CLAUDE.md #8). Le plan d'activation ordonné est le run-book devops/deploy_runbook.

Git — Gitea uniquement

Dépôt de mandat : michel/oto-enterprise-os-dtp sur Gitea (153.75.250.214:3015). JAMAIS GitHub / GitLab / Bitbucket (CLAUDE.md #2, garde ci/guard_constraints.sh).

S
Description
OTO Enterprise OS · Digital Twin Platform MVP · 8 semaines OU MOINS
Readme 8.1 MiB
Languages
Python 58.7%
Shell 40.5%
TypeScript 0.6%
Go Template 0.2%