Files
oto-enterprise-os-dtp/OTO_V18_MIGRATION_ARCHITECTURE_AUDIT_20260810.md
Claude Code DTP Worker 460574a265 [DTP-Worker] vérif exactitude audit V18 (tous claims sains) · Annexe A reproductible → gate-doc auto-auditable anti-drift
Confronté tous les claims factuels de OTO_V18_MIGRATION_ARCHITECTURE_AUDIT
au code réel : 622/640 LOC, 17/22 tests, 4 schémas, absence DSCR/LTV/LTC,
legal=CONFOTUR, sorties bancable, commits sources — TOUS exacts.
Ajout Annexe A : chaque chiffre apparié à sa commande de re-dérivation
(le doc devient auto-vérifiable ; a déjà servi à corriger 446→622).
0 code moteur V18 (bloqué D-06→D-08), 0 gate, run_ci 33/0/0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-11 04:32:37 +00:00

22 KiB
Raw Permalink Blame History

OTO V18 · MIGRATION & ARCHITECTURE AUDIT

Statut : LIVRABLE PRÉALABLE OBLIGATOIRE — avant tout code V18 Version audit : 1.0 · rédigé 2026-08-11 (fichier daté 20260810 conformément au nom imposé par la directive) Auteur : Claude Code DTP Worker (agent autonome · repo oto-enterprise-os-dtp) Directives sources (lisibles) : DIRECTIVE_V18_MASTER_FEASIBILITY_ENGINE_20260810.md (commit f00df20) · V18_ADDENDUM_SECTION_60_DOCUMENT_INTEGRITY_20260810.md (be8bfda) · V18_GO_SIGNAL_DEVELOPMENT_20260810.md En attente de : VALIDATION MICHEL de cet audit — aucune ligne de code moteur V18 n'est écrite tant que cet audit n'est pas approuvé (directive V18 §PREMIÈRE ACTION OBLIGATOIRE · §INTERDICTIONS ABSOLUES « NE PAS coder avant l'audit »).


0. Raison d'être & méthode

La directive V18 exige, en première action obligatoire, un « OTO V18 · MIGRATION & ARCHITECTURE AUDIT » (25-26 points) avant d'écrire le moindre moteur. Le GO signal V18_GO_SIGNAL_DEVELOPMENT_20260810.md note que ce document était « en cours de préparation par Claude en dispatch » — il n'existait pas dans le repo. Ce fichier le produit.

Méthode anti-invention (CLAUDE.md #6 · directive V18 « NE PAS inventer données / NE PAS cacher hypothèses ») :

  • Chaque constat V12 est ancré sur du code lisible effectivement présent dans 05_deliverables_mvp/faisabilite/ (2 modules : generator/ + bancable/, 1262 LOC lib, 39 tests). Les chemins sont donnés en code-span vérifiable.
  • Chaque exigence V18 est citée de la directive lisible (18 sections · 15 phases · 7 checkpoints · 3 sorties · Master Project Intake).
  • Limite de sourçage déclarée sans la cacher : la « directive complète (57 chapitres + 5 annexes) » et les audits deep de Michel (AUDIT_FAISABILITE_DEEP_20260810.md, AUDIT_P1_COMPTE_CLIENT_20260810.md, DIRECTIVE_COMPTE_CLIENT_COURRIELS_20260810.md) sont root-owned mode 600, illisibles par le worker otoclaude (#8). Cet audit couvre donc la structure lisible ; les détails A1-A20 fins et les 57 chapitres restent à confronter par Michel. Aucun contenu de ces docs n'est deviné.
  • La liste « 25 points » exacte figure dans la directive complète non lisible ; cet audit organise 26 points de couverture dérivés structurellement de la directive lisible (inventaire · mapping 18 sections · 15 moteurs · data model · checkpoints · sorties · non-négociables · risques · plan). Si la numérotation Michel diffère, la correspondance sémantique prime — signalé, non caché.

1. Inventaire de l'existant V12 (code réellement lisible)

Le « moteur de faisabilité V12 » réellement présent et lisible dans ce repo se résume à deux modules Python, tous deux pilotés par un même brief.json sourcé :

Module Chemin LOC lib Tests Rôle actuel
Générateur 4 volets 05_deliverables_mvp/faisabilite/generator/ 622 (model+renderer+scorer+__init__) 17 brief → data_room/PXX/ (template canonique v1.0) + score 4Big 5 axes
Dossier bancable FR/EN/ES 05_deliverables_mvp/faisabilite/bancable/ 640 (deps+finance+i18n+report+__init__) 22 même brief → 50_financier_bancable/{fr,en,es}.md + manifest.json

Arborescence data_room V12 produite (TEMPLATE_FAISABILITE_CANONIQUE_v1.0.md §1) : _META/ · 10_masterplan/ · 20_architecture/ · 30_paysage_experience/ · 40_ingenierie_faisabilite/ · 50_financier_bancable/.

Contrats machine V12 déjà en place : version.schema.json · brief.schema.json · bancable.schema.json · projets_master.schema.json (extraction Publiciste). Le scoring machine-lisible n'est pas auto-décerné : le CLI re-parse le projet généré avec le parser Publiciste et valide version.json (generator/README.md §Scoring).

Constat clé pour la migration : V12 couvre, en langage V18, 4 des 18 sections (Programme/Masterplan · Architecture · Paysage · Ingénierie-Financier partiel) + une amorce Section 15 (Bankability) via le module bancable. 14 sections V18 sur 18 n'ont aucun code producteur. Ce n'est pas une régression : V12 n'a jamais prétendu les couvrir. C'est le périmètre de construction V18.


2. Cible V18 (exigences lisibles)

Extraites verbatim de la directive lisible :

  • 18 sections officielles (Sommaire/Bank Credit → Marché → Programme → Archi+BIM → Structure+BIM → Plomberie+BIM → Électrique+BIM → HVAC+BIM → Clash → Planning → Commercial/Absorption → Financier/DCF/CashFlow → Juridique → Environnemental+BIM VRD → Financement/Bankability → Risques → Investment/Credit Decision → Annexes/Evidence Room).
  • 15 moteurs (ordre de dev imposé, un à la fois) : Master Intake/Data Model → Document/Evidence → 18-Section → Financial → Commercial/Absorption → Planning → BIM/Clash/Quantity → Bankability → OTOv7 Integration → ERPNext Integration → Report Generator → QA → Baseline → Change Control → Actual vs Baseline.
  • 7 checkpoints CP0-CP6 (CP0 Document Completeness = OTOAI ; CP1-CP6 = Michel).
  • 3 sorties partageant UN Master Project Dataset : A Bank Package · B Full Institutional Feasibility (18 sect.) · C Project Operations Package.
  • Master Project Intake (A1-A20) remplace le « Formulaire Briefing V12 ».
  • Écosystème : OTOv7 (governance) · OTOAI (intelligence) · V18 (feasibility/bankability/baseline) · BIM (technical ref) · ERPNext (execution) · Bank Package (published view).
  • Addendum Sec. 60 : Document Integrity Identification & Signature System · règle « HELIOS RD SRL only » en externe (voir §9 ci-dessous).
  • GO signal · règle 60.31 : en externe, « Powered by OTOv7 management system » ; interdits externes : OTOYA / OTOAI / CLAUDE / AI / AGENT / INTERNAL ENGINE ( gestion OK · IA NON).

3. Mapping V12 → V18 · les 18 sections (point-par-point)

Statut : code producteur existe · 🟠 amorce partielle · 🔴 aucun code (à construire).

# Section V18 Origine V12 lisible Statut Note de migration
1 Sommaire Exécutif / Bank Credit Summary — (agrégat) 🔴 Sortie du Report Generator (moteur 11), agrège 2-17.
2 Étude de Marché 🔴 Nouveau. Sourcé (études), zéro invention.
3 Programme Immobilier 10_masterplan/ + REQUIRED[masterplan] Réutiliser genlib/model.py (nb_unites, phasage, zonage).
4 Architecturale + BIM 20_architecture/ + TYPO_REQUIRED (bloc anti-gap prix) 🟠 Volet archi existe ; BIM absent (pas d'aec.py/IFC lisible ici).
5 Structurelle + BIM 🔴 Nouveau (moteur BIM 7).
6 Plomberie + BIM 🔴 Nouveau.
7 Électrique + BIM 🔴 Nouveau.
8 Mécanique HVAC + BIM 🔴 Nouveau.
9 Clash Detection 🔴 Moteur 7 (BIM/Clash/Quantity) · gate CP3.
10 Planification & Phasage phasage/nb_phases (données) 🟠 Données de phasage captées ; moteur Planning (6) absent.
11 Commercial, Vente & Absorption bancable (positionnement, catalogue USD/DOP, point d'équilibre unités) 🟠 Amorce forte dans banclib/finance.py derived().
12 Financière, DCF, Cash Flow, Cost Plan bancable (coût constr., revenu brut, marge, PE 52 %) 🟠 DCF/Cash Flow multi-période ABSENT ; V12 = snapshot statique, pas d'échéancier. Gros chantier moteur 4.
13 Juridique 05_deliverables_mvp/legal/ (CONFOTUR) 🟠 Module legal produit CONFOTUR ; Promesa/Fideicomiso/HOA non générés (cf. mémoire directive-vs-implementation).
14 Environnementale + BIM VRD 🔴 Nouveau.
15 Financement & Bankability bancable/ FR/EN/ES + Portail Bancables 4Big Le plus mûr. DSCR/LTV/LTC bancaires à confirmer (voir §5).
16 Risques & Mitigation 🔴 Nouveau.
17 Investment & Credit Decision verdict score≥95 (proxy) 🟠 V12 a un verdict 4Big, pas une décision crédit (moteur 8).
18 Annexes & Evidence Room _META/ + sources[] 🟠 Traçabilité sources[] existe ; Evidence Engine (moteur 2) formel absent.

Bilan mapping : 2 · 7 🟠 · 9 🔴. Le socle réutilisable réel = Programme (3) + Bankability (15), plus des données exploitables pour 4/10/11/12/13/17/18. Aucune section ne doit être écrite from-scratch en ignorant brief.json — le Master Data Model V18 doit en être le sur-ensemble strict (§4).


4. Data model · « One Master Dataset · Multiple Outputs »

Interdiction directive : NE PAS créer 2e base indépendante · NE PAS dupliquer données · One Master Dataset · Multiple Outputs.

État V12 (lisible) : un brief.json unique alimente déjà les deux modules (le bancable « consomme le MÊME brief.json que le générateur 4 volets — une seule source, zéro re-saisie », bancable/README.md). C'est exactement le principe One Master Dataset — V12 le respecte à petite échelle.

Migration recommandée (à valider) : le Master Project Intake A1-A20 devient le sur-ensemble strict du brief.json V12. Règle de migration non destructive :

  1. brief.schema.json (V12) → sous-schéma inclus dans master_intake.schema.json (V18). Tout champ V12 existant conserve sa clé (rétro-compat parser Publiciste).
  2. Les 3 sorties (Bank / Full / Ops) sont des projections du même dataset — jamais des copies éditables indépendamment.
  3. Baseline vs Actual (moteurs 13/15) = deux vues horodatées du même dataset, jamais un écrasement (interdiction « NE PAS écraser baseline avec actual »). Implique un champ dataset_version + gel baseline à CP6.

Risque data model n°1 : V12 stocke des {{placeholder}} pour champs 🔴 absents (anti-invention). V18 A1-A20 étant plus large, la fraction de champs absents explosera au démarrage → le scoring 4Big rétrogradera massivement au début. Ce n'est pas un bug : c'est la mesure honnête de complétude. Prévoir un affichage « maturité data » progressive plutôt qu'un pass/fail brutal.


5. Financier & Bankability · écart le plus technique

bancable/banclib/finance.py produit aujourd'hui : sourced() (verbatim brief), typologies(), derived() (Σ unités · valeur catalogue USD/DOP · point d'équilibre en unités = 52 % × total). Chaque valeur publie sa formule ; opérande manquant ⇒ null + champ listé (traçabilité intégrale).

Ce qui manque pour une vraie Bankability institutionnelle V18 (section 12 + 15) :

  • DCF / Cash Flow multi-période : V12 est un snapshot (coût, revenu, marge). Aucun échéancier, aucune actualisation, aucun IRR/VAN. → cœur du moteur Financial (4).
  • Ratios bancaires : DSCR, LTV, LTC, dette/equity, points de couverture — non présents dans finance.py (grep : aucun DSCR/LTV/LTC). → moteur Bankability (8).
  • Cost Plan structuré (WBS, contingences) vs marge unique actuelle.

Hypothèse déclarée (non cachée) : les formules DCF/ratios précises attendues par Michel figurent probablement dans la directive complète non lisible (57 chapitres) et/ou les audits deep root-owned. À confirmer avant de coder le moteur 4/8 — sinon risque d'invention de convention financière. Ne pas deviner les formules bancaires.

Point positif : l'architecture « valeur = {formule + opérandes sourcés/null} » de V12 est exactement le bon patron pour un moteur financier auditable. À généraliser, pas à remplacer.


6. Checkpoints CP0-CP6 · gouvernance

V12 n'a pas de machine à états de checkpoints ; il a un verdict binaire (complete ⇔ score ≥ 95 ∧ 0 champ 🔴 ∧ bloc prix intégral ∧ 4 volets). Migration :

CP Owner Mapping V12 → action V18
CP0 Document Completeness OTOAI Généraliser la logique champs_manquants/missing_fields() existante en gate CP0 automatisé (moteur 2 Evidence).
CP1 BIM Geometry Michel Nouveau (dépend BIM).
CP2 Technical Coordination Michel Nouveau.
CP3 Clash Resolution Michel « aucun blocking non résolu » = gate dur moteur 7.
CP4 Cost & Finance Michel S'appuie sur moteurs 4/8.
CP5 Bankability Michel S'appuie sur bancable généralisé.
CP6 Baseline Approval Michel Gèle le dataset → interdit tout écrasement actual.

Recommandation : modéliser les checkpoints comme un workflow ERPNext natif (CLAUDE.md #1/#3 · pas d'outil externe) + statut porté dans _META/version.json. Chaque CP produit une signature (lien Sec. 60, §9).


7. Les 3 sorties · projections du même dataset

Sortie Public Base V12 réutilisable
A · Bank Package Banques bancable/ FR/EN/ES + Portail Bancables 4Big (privé, noindex) — déjà quasi-livré.
B · Full Institutional Feasibility (18 sect.) Interne/investisseurs generator/ 4 volets = 4/18 ; à étendre.
C · Project Operations Package Exécution ERPNext (moteur 10) — inexistant côté faisabilité.

Invariant à préserver : les 3 partagent le Master Dataset ; aucune ne doit être éditée hors dataset (sinon divergence silencieuse = interdiction « aucune synchronisation silencieuse »).


8. Non-négociables CLAUDE.md · vérification de préservation sous V18

L'audit doit confirmer que la migration ne casse aucun non-négociable :

  1. ERPNext natif priorité — moteurs 9/10 (OTOv7 + ERPNext Integration) sont dans la séquence V18 ; ne pas introduire d'ERP externe.
  2. Gitea seule plateforme — inchangé .
  3. CRM = ERPNext natif — inchangé .
  4. Design luxury #0a0a12/#f0b429 (Fraunces/Cormorant) — s'applique aux sorties/console V18 (gate claude-md-constant-anchor-gate).
  5. Score ≥ 95/100 — V12 le mesure déjà ; V18 doit le conserver comme gate de sortie B, sans le fausser par auto-attribution.
  6. Zéro invention — architecture V12 « formule + opérandes sourcés/null » à généraliser (§5). Le risque d'invention est maximal sur les 9 sections 🔴 sans source.
  7. Standards 4 volets — sur-ensemble par les 18 sections (les 4 volets restent un sous-ensemble navigable).
  8. VPS tous projets — hors périmètre worker (#8) ; V18 code reste dans ce repo, déploiement ultérieur.
  9. Frais 3 % · Marketing 8.5 % · PE 52 %canoniques imposés par le générateur (model.py CANONICAL), jamais du brief. À réimposer identiques dans le Master Data Model V18 (ne pas les rendre saisissables).
  10. USD+DOP · Letter US · Cardnet — canoniques CANONICAL ; préserver.

Aucun non-négociable n'est menacé par la migration si les canoniques restent imposés-générateur. C'est l'invariant de migration le plus important.


9. Addendum Sec. 60 · Document Integrity & règle externe « HELIOS RD SRL only »

Le GO signal (règle 60.31) + l'addendum imposent :

  • En externe (documents publiés banques/clients) : identité HELIOS RD SRL. Autorisé de mentionner OTOv7 comme système de gestion . Interdit : OTOYA / OTOAI / CLAUDE / « AI-generated » / « AI-assisted » / détails moteur interne .
  • Signature / intégrité documentaire : chaque livrable institutionnel doit porter une signature d'intégrité (Sec. 60).

Impact migration : le Report Generator (moteur 11) doit avoir une couche de rendu externe filtrée — aucune fuite du vocabulaire IA/technique interne dans A/B/C publiés. C'est un gate de conformité de publication, pas cosmétique. Recommandation : un test automatisé (style guard_constraints) qui échoue si un artefact published-view contient OTOYA/OTOAI/CLAUDE/AI-generated. (Le présent repo mandat est interne → ces termes y sont permis pour la gouvernance ; le filtre s'applique aux sorties publiées.)


10. Risques de migration & mitigations

# Risque Gravité Mitigation
R1 Coder un moteur (surtout 4/8 financier) en inventant des formules absentes des docs lisibles 🔴 Haute Ne pas coder moteur 4/8 avant lecture par Michel des formules DCF/ratios (§5). Bloquer sur validation.
R2 Créer une 2e base en dupliquant brief.json au lieu d'étendre le schéma 🔴 Haute Master Intake = sur-ensemble strict du brief.schema.json (§4).
R3 Écraser baseline avec actual (moteurs 13/15) 🔴 Haute Vues horodatées + gel CP6, jamais overwrite.
R4 Régression des gates CI existants (33 PASS) pendant l'ajout V18 🟠 Moyenne Chaque moteur = module testé + gate ; run_ci.sh reste vert à chaque phase.
R5 Fuite vocabulaire IA en externe (Sec. 60) 🟠 Moyenne Gate de publication (§9).
R6 Perte du parser Publiciste / rétro-compat projets_master 🟠 Moyenne Conserver les clés V12 (§4.1).
R7 Auto-attribution du score 4Big (les 20 pts machine-lisible) sur sections non prouvées 🟠 Moyenne Étendre le principe « preuve, pas auto-décernement » du scorer aux 18 sections.
R8 Docs deep root-owned illisibles ⇒ angle mort sur exigences fines A1-A20 🟡 Info Déclaré (§0). Michel doit combler avant Phase 1.

11. Séquence recommandée (post-validation Michel)

Conforme à l'ordre imposé (15 moteurs, un à la fois, validation à chaque phase) :

  1. Phase 1 · Master Project Intake / Data Model — étendre brief.schema.jsonmaster_intake.schema.json (A1-A20), rétro-compat garantie, canoniques réimposés. Zéro moteur métier tant que le data model n'est pas validé.
  2. Phase 2 · Document/Evidence Engine — généraliser champs_manquants/missing_fields() → gate CP0.
  3. Phase 3 · 18-Section Engine — réutiliser generator/ pour 3/4/10/18 ; squelettes sourcés (jamais inventés) pour 2/5/6/7/8/9/14/16.
  4. Phase 4-5 · Financial + Commercial/Absorptionprécédé d'un point de validation formules (R1/§5).
  5. Phases 6-15 — Planning · BIM/Clash · Bankability · OTOv7 · ERPNext · Report Gen (+ filtre Sec. 60) · QA · Baseline · Change Control · Actual vs Baseline.

Projet pilote : P01 Coralis (référence pour P02 Coral del Sur, puis P03 Nakua).


12. Recommandation & point de décision Michel

Recommandation de l'audit : le socle V12 lisible est sain et réutilisable (One Master Dataset déjà respecté ; anti-invention par formule+opérandes ; scoring par preuve). V18 n'est pas un rebuild mais une extension : 2 sections , 7 amorcées, 9 à construire — sans jamais casser les 10 non-négociables ni inventer de chiffres.

Ce qui doit être arbitré par Michel AVANT Phase 1 :

  1. Approbation de cet audit (débloque la séquence).
  2. Fournir/rendre lisibles les formules financières (DCF, IRR/VAN, DSCR/LTV/LTC) — sinon moteurs 4/8 bloqués (R1). Les audits deep root-owned les contiennent peut-être.
  3. Confirmer que le Master Intake A1-A20 est bien un sur-ensemble du brief.json V12 (rétro-compat parser).
  4. Confirmer le périmètre de génération juridique (Section 13) : CONFOTUR seul (existant) ou aussi Promesa/Fideicomiso/HOA (aucun code aujourd'hui — cf. OPEN_DECISIONS_REGISTER.md).

INTERDICTION RESPECTÉE : conformément à la directive V18 (« NE PAS coder avant l'audit ») et à la séquence du GO signal (audit → validation Michel → Phase 1), aucun code moteur V18 n'est produit dans ce commit. Ce document est le livrable attendu ; la suite est suspendue à l'approbation de Michel.


Annexe A · Vérification reproductible des chiffres (anti-drift #6)

Chaque chiffre factuel du présent audit est re-dérivable par la commande ci-dessous — aucun n'est saisi à la main sans source vérifiable. Cette annexe rend le document auto-auditable : elle a déjà servi à corriger un LOC stale (generator 446→622, commit c3f5664). Exécuter depuis 05_deliverables_mvp/faisabilite/ sauf indication.

Claim de l'audit Commande de re-dérivation Valeur attendue
§1 · generator/genlib LOC wc -l generator/genlib/*.py | tail -1 622 total
§1 · bancable/banclib LOC wc -l bancable/banclib/*.py | tail -1 640 total
§0/§1 · total LOC lib 622 + 640 1262
§1 · tests générateur python3 -m unittest discover -s generator/tests 2>&1 | grep Ran Ran 17 tests
§1 · tests bancable python3 -m unittest discover -s bancable/tests 2>&1 | grep Ran Ran 22 tests
§1 · total tests 17 + 22 39
§1 · contrats machine (4 schémas) find . -name '*.schema.json' | sort bancable · brief · projets_master · version
§5 · fonctions finance.py grep -E '^def ' bancable/banclib/finance.py sourced · typologies · derived · missing_fields (+ helpers _)
§5/§10-R1 · ratios bancaires absents grep -riE 'DSCR|LTV|LTC|IRR|DCF' bancable/ generator/ --include=*.py | grep -v test (aucune sortie)
§3-13 · module legal = CONFOTUR ls ../legal/confotur/out/MANIFEST.json fichier présent (CONFOTUR seul)
§7 · sorties bancable grep '50_financier_bancable' bancable/banclib/report.py {fr,en,es}.md + manifest
§0/§6 · commits directives sources git log --oneline -- DIRECTIVE_V18_MASTER_FEASIBILITY_ENGINE_20260810.md V18_ADDENDUM_SECTION_60_DOCUMENT_INTEGRITY_20260810.md (racine repo) f00df20 · be8bfda

Portée & honnêteté. Cette annexe ne vérifie que le lisible (#8) : les détails A1-A20 et les 57 chapitres de la directive complète root-owned restent hors de portée du worker et à confronter par Michel (cf. §0). Les valeurs ci-dessus ont été re-exécutées et confirmées le 2026-08-11 ; toute évolution ultérieure d'un module doit rejouer la commande et mettre à jour la cellule (l'exécution fait foi, jamais la mémoire).


Fin de l'audit — 12 points de couverture principaux détaillant les 18 sections, 15 moteurs, 7 checkpoints, 3 sorties, data model, non-négociables, Sec. 60, risques et séquence, + Annexe A vérification reproductible. Toute divergence avec la numérotation « 25/26 points » de la directive complète non lisible est sémantique, non substantielle, et signalée §0.