18d876352c
Consolide dans OPEN_DECISIONS_REGISTER.md les 3 arbitrages produit qui suspendent toute la séquence moteur V18 (audit → validation Michel → Phase 1). Sourcé file:line, non tranché (fonction du registre + discipline #5). - D-06 · approbation de l'audit = gate d'entrée de la séquence (GO signal :79-84) - D-07 · formules financières DCF/IRR/VAN/DSCR/LTV/LTC absentes → moteurs 4/8 bloqués, risque d'invention #6 max (R1, audit §5/§12.2) - D-08 · Master Intake A1-A20 = sur-ensemble strict du brief.json (R2, audit §4/§12.3) - D-01 enrichi : arbitrage juridique Section 13 (§12.4) remonté au chemin critique V18 Aucun code moteur V18 (interdit avant validation). CI 33 PASS · 0 FAIL · 0 SKIP. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
54 lines
12 KiB
Markdown
54 lines
12 KiB
Markdown
# Activity Log · 2026-08-11 · Claude Code DTP Worker
|
|
|
|
## Session `20260811_015744` — FIX · CI RED → VERT · 2 régressions induites par les commits root V18 (archivage V10/V11 + 4 docs REFERENCE root-owned mode 600)
|
|
|
|
**Constat au démarrage.** `./run_ci.sh` = **31 PASS · 2 FAIL · 0 SKIP** (régression vs la baseline 33/0/0 du 2026-08-06). Deux gates rouges : `check-docs` et `check-readme-claims`. Cause racine commune : les **commits root de Michel** des 2026-08-10 (directives V18 + `f316060 archive · V10 V11 directives déprécies · seule V18 active`) ont muté l'arbre sans que les gates suivent.
|
|
|
|
**Régression 1 · `check_docs` — lien pendant.** `README.md:88` liait `DIRECTIVE_WORKFLOW_FAISABILITE_V10_20260803.md`, **supprimé** par l'archivage V18 (V10 n'est même plus dans `_archived_versions/` — seul `V11 .archived` y subsiste). Lien cassé → gate rouge.
|
|
- **Fix (édition worker légitime, doc du worker).** Repointé l'entrée README vers la directive **active** `DIRECTIVE_V18_MASTER_FEASIBILITY_ENGINE_20260810.md` (Master Institutional Feasibility & Bankability Engine · 18 sections · REMPLACE V12), en notant que le versionnage workflow ex-V10/V11/V12 est déprécié/archivé au profit de V18 (`_archived_versions/`). Le fragment-slug de section `#directives-michel-input-specs-datés` (cf. mémoire `markdown-anchor-fragment-integrity`) est intact.
|
|
|
|
**Régression 2 · `check_readme_claims` — 4 docs root-owned illisibles.** Le scan « VPS infra » énumère `git ls-files *.md`, ouvre chaque fichier en Python (`open()`) et vérifie IP/conteneurs. Or 4 nouveaux fichiers **tracked** sont **root-owned mode 600** (commits REFERENCE de Michel, illisibles ET non éditables par le worker `otoclaude`) : `AUDIT_FAISABILITE_DEEP_20260810.md`, `AUDIT_P1_COMPTE_CLIENT_20260810.md`, `DIRECTIVE_COMPTE_CLIENT_COURRIELS_20260810.md`, `GO_SIGNAL_20260810_1540.md`. `open()` lève `PermissionError` → `bad()` → gate rouge.
|
|
- **Précédent appliqué (mémoire `guard-tracked-files-exclusion`).** `guard_constraints.sh` gère déjà exactement cette classe : il **exclut** `DIRECTIVE_*.md` / `AUTORISATIONS_*.md` / `OTO_DESIGN_SYSTEM_*.md` de son scan et lit via `grep 2>/dev/null` (tolère l'illisible → aucun rouge). `check_readme_claims` n'avait pas l'équivalent.
|
|
- **Fix (chirurgical, honnête).** Dans la boucle VPS-infra : `except PermissionError` **spécifique** → note jaune `⋯ root-owned illisible (REFERENCE Michel · hors périmètre worker) — non scanné` + `continue`. **Tout autre `OSError` reste `bad()`** — un fichier worker-owned corrompu/absent RED toujours. La garde anti-évaporation (`ip_seen==0`/`cont_seen==0` sur le corpus **lisible**) préserve la couverture SSOT de l'identité VPS : l'IP `153.75.250.214` + les 2 conteneurs restent exigés cités quelque part dans les docs lisibles (11 ✓ VPS-infra confirmés post-fix). Distinction clé : seul `PermissionError` (= « pas notre fichier à auditer ») est toléré, pas les erreurs de lecture génériques.
|
|
|
|
**Pourquoi ne PAS éditer les 4 docs / ne PAS les untrack.** Root-owned mode 600, non éditables par le worker (#8 · docs de Michel) ; les untrack serait détruire des commits REFERENCE de Michel. La bonne réponse = rendre le gate robuste à cette classe (comme le précédent guard), pas toucher aux fichiers de Michel.
|
|
|
|
**Vérif.** `check_docs` PASS ; `check_readme_claims` PASS (les 4 docs en ⋯, non-fatals) ; **`./run_ci.sh` = 33 PASS · 0 FAIL · 0 SKIP** rétabli. Aucune commande VPS (#8). Fichiers : `README.md` + `ci/check_readme_claims.sh` + ce journal.
|
|
|
|
**Contexte V18 (prochaine étape, hors ce commit).** Le GO signal `V18_GO_SIGNAL_DEVELOPMENT_20260810.md` fixe la **PREMIÈRE ACTION OBLIGATOIRE** = produire `OTO_V18_MIGRATION_ARCHITECTURE_AUDIT` (audit V12→V18, 25-26 points) **avant tout code**, puis validation Michel, puis Phase 1 (Master Project Intake/Data Model). Ce document n'existe pas encore dans le repo ; le GO signal note « en cours de préparation par Claude en dispatch ». Les docs d'audit deep de Michel (`AUDIT_FAISABILITE_DEEP`, etc.) sont root-owned illisibles par le worker → un audit worker devra se fonder sur le code V12 **lisible** (`faisabilite/generator` + `faisabilite/bancable`, 4 volets → mapping 18 sections) et la directive V18 lisible. Signalé ici, non entamé dans ce commit (fix CI = priorité, unité verte discrète).
|
|
|
|
---
|
|
|
|
## Session `20260811_022753` — LIVRABLE PRÉALABLE V18 · production de `OTO_V18_MIGRATION_ARCHITECTURE_AUDIT_20260810.md` (audit V12→V18 avant tout code)
|
|
|
|
**Tâche prioritaire identifiée.** CI vert au démarrage (`./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP**, baseline rétablie session précédente). La prochaine tâche non-complétée la plus prioritaire n'est pas dans la roadmap 8-semaines classique mais dans le **GO signal V18** : la **PREMIÈRE ACTION OBLIGATOIRE** (directive V18 §PREMIÈRE ACTION + §INTERDICTIONS « NE PAS coder avant l'audit ») = produire l'**audit de migration V12→V18**. Le GO signal le disait « en cours de préparation par Claude en dispatch » mais le fichier **était absent du repo** (`git ls-files | grep -i migration` = vide). C'est le **gate bloquant** de toute la séquence V18 (audit → validation Michel → Phase 1). Rien d'autre ne peut avancer côté moteur avant lui.
|
|
|
|
**Cartographie préalable (code lisible uniquement, anti-invention #6).** Inventaire réel du « V12 » lisible dans `05_deliverables_mvp/faisabilite/` : **2 modules** — `generator/` (4 volets · 446 LOC lib · 17 tests · `model.py CANONICAL` impose 3 %/8.5 %/52 %/USD+DOP/Cardnet/Letter US, jamais du brief) + `bancable/` (dossier financier FR/EN/ES · 640 LOC lib · 22 tests · `finance.py` = sourced/typologies/derived, chaque valeur publie sa formule, opérande manquant ⇒ `null`). Arborescence data_room V12 (`_META/`+`10_masterplan/`→`50_financier_bancable/`) mappée aux 18 sections V18. **Confirmé grep :** aucun `DSCR/LTV/LTC` ni DCF multi-période dans `finance.py` → écart moteur Financial/Bankability (4/8) identifié sans le deviner.
|
|
|
|
**Contenu de l'audit (12 points de couverture, dérivés structurellement des directives lisibles).** §1 Inventaire V12 réel · §2 Cible V18 (18 sect./15 moteurs/7 CP/3 sorties/Master Intake) · §3 **Mapping 18 sections point-par-point** (verdict : 2 ✅ · 7 🟠 · 9 🔴 — socle réutilisable = Programme(3)+Bankability(15)) · §4 Data model « One Master Dataset » (V12 le respecte déjà : bancable consomme le MÊME brief.json ; Master Intake A1-A20 = sur-ensemble strict rétro-compat) · §5 Écart financier le plus technique (DCF/ratios absents · **risque d'invention max** → bloquer moteur 4/8 sur formules Michel) · §6 Checkpoints CP0-CP6 (workflow ERPNext natif) · §7 3 sorties = projections · §8 **Vérif préservation des 10 non-négociables CLAUDE.md** (aucun menacé si canoniques restent imposés-générateur) · §9 Addendum Sec.60 « HELIOS RD SRL only » + filtre anti-fuite vocabulaire IA en publication (règle 60.31) · §10 8 risques + mitigations (R1 invention formules · R2 2e base · R3 écrasement baseline = les 3 rouges) · §11 séquence 15 phases post-validation · §12 4 arbitrages Michel avant Phase 1.
|
|
|
|
**Honnêteté de sourçage (déclarée, non cachée · §0).** La « directive complète 57 chapitres + 5 annexes » et les audits deep de Michel sont **root-owned mode 600 illisibles** par le worker `otoclaude` (#8) → l'audit couvre la **structure lisible** ; les détails fins A1-A20 restent à confronter par Michel. La liste « 25 points » exacte étant dans la directive non lisible, l'audit organise **26 points de couverture sémantiquement équivalents** — divergence de numérotation signalée, non substantielle. **Aucun contenu deviné.**
|
|
|
|
**Interdiction respectée.** Conformément à la directive (« NE PAS coder avant l'audit ») et à la séquence GO signal (audit → **validation Michel** → Phase 1), **aucune ligne de code moteur V18 produite** dans ce commit. Le livrable EST le document. La suite est suspendue à l'approbation de Michel (§12 : approuver l'audit · fournir les formules financières · confirmer sur-ensemble Master Intake · trancher périmètre juridique Section 13).
|
|
|
|
**Vérif.** `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé — le nouveau `.md` passe `check_docs`/`guard_constraints` : chemins en code-spans donc non link-checkés, aucun URL/usage interdit). Aucune commande VPS (#8), aucune API externe. Fichiers : `OTO_V18_MIGRATION_ARCHITECTURE_AUDIT_20260810.md` (NEUF) + entrée README (bloc Directives Michel, sous l'entrée V18) + ce journal.
|
|
|
|
---
|
|
|
|
## Session `20260811_025754` — CONSOLIDATION · les 3 arbitrages Michel bloquant la séquence V18 remontés dans `OPEN_DECISIONS_REGISTER.md` (D-06→D-08)
|
|
|
|
**État au démarrage.** `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (baseline verte). La séquence moteur V18 est **intégralement bloquée** : le GO signal impose audit → **validation Michel** → Phase 1 (`V18_GO_SIGNAL_DEVELOPMENT_20260810.md:79-84`) et la directive interdit de coder avant l'audit approuvé (`DIRECTIVE_V18_MASTER_FEASIBILITY_ENGINE_20260810.md:90-91`). L'audit **est** produit (commit `de837fa`) mais en attente de Michel + les formules financières manquent (§5 · risque d'invention #6 max). **Aucun code moteur V18 n'est légitime tant que ces arbitrages ne sont pas rendus** — travailler sur le moteur violerait la directive et #6.
|
|
|
|
**Tâche prioritaire non-bloquée identifiée.** L'audit §12 énumère **4 arbitrages Michel avant Phase 1**, mais ils n'étaient **consignés nulle part dans la punch-list produit**. Or `OPEN_DECISIONS_REGISTER.md` (dernière MàJ 2026-08-05, D-01→D-05) **est** exactement le point de consolidation prévu — l'audit §12.4 (:216) **pointait déjà** explicitement vers ce registre pour l'arbitrage juridique. Consolider les items V18 ici est donc conforme à la fonction du registre (« regroupe et source, ne tranche pas ») et à la discipline #5 (ne pas re-surfacer en doublon, pointer ici). **Non-bloqué, sans invention, doc worker éditable.**
|
|
|
|
**Fait.**
|
|
- **D-06 · 🟠 Approbation de l'audit** = gate d'entrée de TOUTE la séquence moteur. Sourcé GO signal `:79-84` (séquence à validation) + directive `:90-91` (« NE PAS coder avant l'audit ») + audit §12 (:207-218).
|
|
- **D-07 · 🟠 Formules financières absentes** (DCF · IRR/VAN · DSCR/LTV/LTC) → moteurs 4/8 bloqués, **risque d'invention #6 le plus grave (R1 🔴)**. Sourcé audit §5 (:102-114) + §10-R1 (:182) + §12.2 (:214) ; `grep` confirme `finance.py` = snapshot sans DSCR/LTV/LTC. Hypothèse déclarée : formules peut-être dans les docs deep **root-owned illisibles** (#8).
|
|
- **D-08 · 🟠 Master Intake A1-A20 = sur-ensemble strict du `brief.json`** (éviter 2e base R2 🔴 · préserver parser). Sourcé audit §4 (:86-100) + §10-R2 (:183) + §11 (:197) + §12.3 (:215).
|
|
- **D-01 enrichi** — l'arbitrage juridique Section 13 (§12.4 audit) **est** l'item D-01 existant (Promesa/Fideicomiso/HOA), désormais **remonté dans le chemin critique V18**. Cross-link ajouté, **pas de doublon** (#5).
|
|
- En-tête « Mise à jour » repointé 2026-08-11 avec note du bloc V18.
|
|
|
|
**Honnêteté de sourçage.** Toutes les citations `file:line` du registre ont été **vérifiées** contre la lecture réelle des fichiers cités (mémoire `prose-facts-vs-numeric-drift` : vérifier les citations verbatim). L'audit doc est worker-owned/lisible/git-tracked ; le GO signal et la directive sont lisibles. Aucun item n'est **tranché** — le worker les surface, Michel décide.
|
|
|
|
**Vérif.** `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé — ajouts en code-spans `file:line`, non link-checkés ; aucun décompte de gate ne parse le nombre d'items D-xx du registre — `grep` ci/ confirme : README pointe le fichier sans compter). Aucune commande VPS (#8), aucune API externe. Fichiers : `05_deliverables_mvp/OPEN_DECISIONS_REGISTER.md` + ce journal.
|