Organization + une Residence par projet ») était décrite EN PROSE dans le README du module seo sans AUCUN gate d'IDENTITÉ. Le bloc SEO existant ne gate que le COMPTE de mots-clés (total + fr/en/es via MANIFEST.counts) — surface distincte du MÊME README. Ces @type sont DATA-DERIVED : l'ensemble des @type du @graph de seo/out/seo_schema_org.json (byte-gaté par check_artifacts) = un nœud racine Organization (@id …#organization) + une Residence par projet, listings uniformes. Aucun gate ne comparait ces TYPES à l'artefact : RENOMMER le @type des listings (Residence→Apartment, un @type voisin du rango schema.org) · AJOUTER un 3e type de nœud (Offer/Product) · CASSER la bijection (2 nœuds pour un projet) ferait dériver la prose en silence pendant que le graphe byte-gaté dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de génération, pas la prose du README) n'attrape → nouveau bloc recomputant l'ENSEMBLE des @type depuis SON artefact byte-gaté (zéro duplication du contrat du générateur #6) et exigeant que la parenthèse README les nomme EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff) + le type « par projet » nommé == @type des listings. Cohérences croisées en bonus (mordent un artefact INTERNEMENT incohérent) : nœud racine Organization SINGLETON · listings UNIFORMES (un seul @type) et en BIJECTION avec les projets (listings == projects == schema_org_nodes−1 du MANIFEST) · aucune offers (statuts sans prix · USD #10). Un claim absent échoue AUSSI. 6 morsures vérifiées : prose listing Residence→Apartment captée (absents=[Residence] en trop=[Apartment] + « par projet » désaligné) · prose racine Organization→Business captée · artefact +nœud Offer (prose absente + listings non uniformes) capté · artefact 1 listing Residence→Apartment (non uniforme) capté · MANIFEST listings 9→8 (bijection cassée) capté · composition prose supprimée (INTROUVABLE) captée ; restauré = green : racine Organization singleton · 9 × Residence · total 10 nœuds · aucune offers == seo_schema_org.@graph. État courant : aucun type périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail « 2e surface SEO ») mis à jour · 7 gates re-verts.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Organization + une Residence par projet ») était décrite EN PROSE dans le README du module seo sans AUCUN gate d'IDENTITÉ. Le bloc SEO existant ne gate que le COMPTE de mots-clés (total + fr/en/es via MANIFEST.counts) — surface distincte du MÊME README. Ces @type sont DATA-DERIVED : l'ensemble des @type du @graph de seo/out/seo_schema_org.json (byte-gaté par check_artifacts) = un nœud racine Organization (@id …#organization) + une Residence par projet, listings uniformes. Aucun gate ne comparait ces TYPES à l'artefact : RENOMMER le @type des listings (Residence→Apartment, un @type voisin du rango schema.org) · AJOUTER un 3e type de nœud (Offer/Product) · CASSER la bijection (2 nœuds pour un projet) ferait dériver la prose en silence pendant que le graphe byte-gaté dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de génération, pas la prose du README) n'attrape → nouveau bloc recomputant l'ENSEMBLE des @type depuis SON artefact byte-gaté (zéro duplication du contrat du générateur #6) et exigeant que la parenthèse README les nomme EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff) + le type « par projet » nommé == @type des listings. Cohérences croisées en bonus (mordent un artefact INTERNEMENT incohérent) : nœud racine Organization SINGLETON · listings UNIFORMES (un seul @type) et en BIJECTION avec les projets (listings == projects == schema_org_nodes−1 du MANIFEST) · aucune offers (statuts sans prix · USD #10). Un claim absent échoue AUSSI. 6 morsures vérifiées : prose listing Residence→Apartment captée (absents=[Residence] en trop=[Apartment] + « par projet » désaligné) · prose racine Organization→Business captée · artefact +nœud Offer (prose absente + listings non uniformes) capté · artefact 1 listing Residence→Apartment (non uniforme) capté · MANIFEST listings 9→8 (bijection cassée) capté · composition prose supprimée (INTROUVABLE) captée ; restauré = green : racine Organization singleton · 9 × Residence · total 10 nœuds · aucune offers == seo_schema_org.@graph. État courant : aucun type périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail « 2e surface SEO ») mis à jour · 7 gates re-verts.
Organization + une Residence par projet ») était décrite EN PROSE dans le README du module seo sans AUCUN gate d'IDENTITÉ. Le bloc SEO existant ne gate que le COMPTE de mots-clés (total + fr/en/es via MANIFEST.counts) — surface distincte du MÊME README. Ces @type sont DATA-DERIVED : l'ensemble des @type du @graph de seo/out/seo_schema_org.json (byte-gaté par check_artifacts) = un nœud racine Organization (@id …#organization) + une Residence par projet, listings uniformes. Aucun gate ne comparait ces TYPES à l'artefact : RENOMMER le @type des listings (Residence→Apartment, un @type voisin du rango schema.org) · AJOUTER un 3e type de nœud (Offer/Product) · CASSER la bijection (2 nœuds pour un projet) ferait dériver la prose en silence pendant que le graphe byte-gaté dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de génération, pas la prose du README) n'attrape → nouveau bloc recomputant l'ENSEMBLE des @type depuis SON artefact byte-gaté (zéro duplication du contrat du générateur #6) et exigeant que la parenthèse README les nomme EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff) + le type « par projet » nommé == @type des listings. Cohérences croisées en bonus (mordent un artefact INTERNEMENT incohérent) : nœud racine Organization SINGLETON · listings UNIFORMES (un seul @type) et en BIJECTION avec les projets (listings == projects == schema_org_nodes−1 du MANIFEST) · aucune offers (statuts sans prix · USD #10). Un claim absent échoue AUSSI. 6 morsures vérifiées : prose listing Residence→Apartment captée (absents=[Residence] en trop=[Apartment] + « par projet » désaligné) · prose racine Organization→Business captée · artefact +nœud Offer (prose absente + listings non uniformes) capté · artefact 1 listing Residence→Apartment (non uniforme) capté · MANIFEST listings 9→8 (bijection cassée) capté · composition prose supprimée (INTROUVABLE) captée ; restauré = green : racine Organization singleton · 9 × Residence · total 10 nœuds · aucune offers == seo_schema_org.@graph. État courant : aucun type périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail « 2e surface SEO ») mis à jour · 7 gates re-verts.
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é)
- Qualité 4Big : 22/22 modules gated à 100/100 (seuil 95 ·
CLAUDE.md#5), verdictPASS— sourceqa/audit_4big/out/quality_report.json. - Régression : 22 suites gated couvertes bijectivement vs CI ; le compte de tests
agrégé faisant autorité est produit par
qa/regression run(non commité par design) — planqa/regression/out/regression_plan.json. - Recette roadmap : 15 promesses (8 livrables sprint + 7 métriques MVP), 15
in_repoprouvées (chacune traçant ses items hors-périmètre worker · #8 · ex. M5 « app publiée 2 stores »), verdicttrue— sourceqa/acceptance/out/acceptance_matrix.json. - Guards :
ci/guard_constraints.sh+ci/check_docs.shverts.
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).