From 7e4affe9d82b385a96423f3a7c97ee49f28e8e50 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Wed, 5 Aug 2026 01:47:04 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260805=5F014119]=20Registre=20d?= =?UTF-8?q?es=20d=C3=A9cisions=20ouvertes=20(launch-readiness=20Sprint=208?= =?UTF-8?q?)=20:=20consolidation=20sourc=C3=A9e=20des=20arbitrages=20produ?= =?UTF-8?q?it/d=C3=A9pendances=20hors-d=C3=A9p=C3=B4t=20=C3=A9parpill?= =?UTF-8?q?=C3=A9s=20dans=20les=20logs=20=E2=86=92=204=20items=20OUVERTS?= =?UTF-8?q?=20re-prouv=C3=A9s=20ind=C3=A9pendamment=20(PIE=20contrats?= =?UTF-8?q?=E2=86=92confotur=20over-attribution=20=C2=B7=20financement=20W?= =?UTF-8?q?AG=E2=86=92audit=20IA=20=C2=B7=20chat.py+projets=5Feditor.py=20?= =?UTF-8?q?absents=20d=C3=A9j=C3=A0=20surfac=C3=A9s=20133718)=20+=201=20so?= =?UTF-8?q?up=C3=A7on=20INVALID=C3=89=20(bundle=20id=20mobile,=20V=C3=89RI?= =?UTF-8?q?FI=C3=89-SANS-SUITE)=20=C2=B7=200=20=C3=A9dition=20d'autorit?= =?UTF-8?q?=C3=A9=20(#6/SURFACE-don't-rewrite)=20=C2=B7=20CI=2033=20PASS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-05.md | 42 ++++++ .../OPEN_DECISIONS_REGISTER.md | 133 ++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 05_deliverables_mvp/OPEN_DECISIONS_REGISTER.md diff --git a/05_activity_log/2026-08-05.md b/05_activity_log/2026-08-05.md index 67c8013..50280a4 100644 --- a/05_activity_log/2026-08-05.md +++ b/05_activity_log/2026-08-05.md @@ -1,5 +1,47 @@ # Activity Log · 2026-08-05 · Claude Code DTP Worker +## Session 014119 · Registre des décisions ouvertes — consolidation sourcée des arbitrages produit surfacés au fil de l'eau (Sprint 8 launch-readiness) → 1 livrable-doc neuf · 0 édition d'autorité + +**Contexte + choix de tâche.** `./run_ci.sh` au démarrage : **33 PASS · 0 FAIL · 0 SKIP**, +arbre propre. Roadmap intégralement livrée/gatée. Les **6 dernières sessions** (`200738` +08-03 → `011114` 08-05) ont saturé l'audit read-only (inter-artefacts, dérive free-text, +attestation stakeholder, 8ᵉ gate mobile). Reproduire une 7ᵉ passe read-only aurait été à +faible valeur / redondant (#5). **Valeur honnête distincte du jour** : les items *réellement +ouverts* (arbitrages de périmètre produit + dépendances runtime hors dépôt) sont **éparpillés** +dans les journaux de session et n'existaient **nulle part de façon consolidée et découvrable** +pour Michel — un vrai trou de *launch-readiness* Sprint 8. J'ai créé +`05_deliverables_mvp/OPEN_DECISIONS_REGISTER.md` : une punch-list unique, **100 % sourcée**, +qui **regroupe** (ne tranche pas, ne réécrit aucune source d'autorité). + +**Vérification indépendante de CHAQUE signal AVANT consolidation** (anti-invention #6 · deux +Explore parallèles + spot-check manuel). Aucun item repris de mémoire sans re-preuve : +- **D-01 PIE `contrats`→`legal/confotur`** : REAL. `pie/manifest/pie_spec.json:24` attribue + `contrats` (Promesa · Fideicomiso · HOA) à `legal/confotur` ; or ce module ne produit **que** + le DocType demande CONFOTUR (`legal/confotur/README.md:8-17`). Incohérence interne confirmée : + tous les autres downstreams sans générateur portent `"module": null` (`pie_spec.json:22,27-30`), + `contrats` est le seul attribué à un module qui ne le génère pas. Arbitrage de périmètre. +- **D-02 Financement condition #4 WAG→audit IA** : REAL. Directive `## PRÉCISION` + (`DIRECTIVE_FINANCEMENT_..._20260803.md:275-279`) supersede `wag_validated_by` par + `audit.decision=='APPROVED'` signé ; le module ship encore l'ancienne couche + (`finlib/gate.py:142-145` + `financement_spec.json:157`). Dépend d'un agent auditeur hors dépôt. +- **D-03 `chat.py` absent** / **D-04 `projets_editor.py` absent** : REAL, filesystem confirmé + (ni `.py` ni `.pyc` sous `/opt/oto`), **déjà surfacés** session `20260803_133718` + (`2026-08-03.md:1245-1253`) → registre = **pointeur** anti-doublon (#5), pas re-surfaçage. +- **D-05 bundle id mobile** : soupçon INVALIDÉ → 🟢 VÉRIFIÉ-SANS-SUITE. Le renommage + OTOV7→« OTO Enterprise OS » ne touche pas le bundle : `bundleIdentifier`/`package` quarantinés + `null · a_confirmer`, découplés du nom d'app (`mobile_spec.json`, `out/app_config.json`). + Consigné pour ne pas ré-ouvrir. Faux-positif écarté (#6). + +**Discipline.** *SURFACE, don't rewrite* respecté : **0 édition** de `CLAUDE.md`, d'une directive +datée, ou d'un `pie_spec.json`/`gate.py` (les toucher serait invention de périmètre ou réécriture +d'autorité). Le registre est un doc-pointeur volontairement non-gaté (chaque ligne cite sa source +file:line, contenu 100 % dérivé — faible surface de dérive), au même titre que `daily_reports`. + +**Vérifications.** `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP** (inchangé — aucun fichier gaté +touché). **0 chiffre inventé (#6) · 1 faux-positif écarté (bundle id) · 4 signaux re-prouvés +indépendamment avant consolidation · 0 édition d'autorité · aucune commande VPS (#8) · aucun +`git clean`.** + ## Session 001109 · Nouveau gate `check-mobile-workflow` — la structure de `mobile-build.yml` devient opposable au merge (surface mutation-testée UNGATED, 1er contrôle) → 1 gate ajouté + câblé · 32→33 jobs **Contexte + choix de tâche.** `./run_ci.sh` au démarrage : **32 PASS · 0 FAIL · 0 diff --git a/05_deliverables_mvp/OPEN_DECISIONS_REGISTER.md b/05_deliverables_mvp/OPEN_DECISIONS_REGISTER.md new file mode 100644 index 0000000..4a76bfd --- /dev/null +++ b/05_deliverables_mvp/OPEN_DECISIONS_REGISTER.md @@ -0,0 +1,133 @@ +# Registre des décisions ouvertes · OTO Enterprise OS DTP + +> **But** — Punch-list unique, sourcée, des **décisions produit qui appartiennent à Michel** +> (arbitrages de périmètre / dépendances runtime hors dépôt), consolidée depuis les journaux +> de session où elles ont été *surfacées* au fil de l'eau. Ces items **ne sont pas des bugs +> worker** : les corriger unilatéralement serait soit une invention de périmètre (#6), soit +> une réécriture d'une source d'autorité. Ce registre **regroupe et source**, il ne tranche pas. +> +> **Portée** — CI dépôt **verte** (33/33 gates · 24 modules 4Big 100/100). Aucun de ces items +> ne casse un gate ; ils concernent le **périmètre produit** et l'état runtime **hors dépôt** +> (VPS `153.75.250.214` · `CLAUDE.md` #8), non vérifiable/éditable depuis le worker. +> +> **Mise à jour** — 2026-08-05 · session `20260805_014119`. Chaque ligne cite sa source exacte +> et la session qui l'a surfacée en premier. **Ne pas re-surfacer** ces items en doublon (#5) : +> pointer ici. + +--- + +## Légende statut +- 🟠 **OUVERT** — décision produit en attente de Michel (ou d'un agent hors dépôt). +- 🟢 **VÉRIFIÉ-SANS-SUITE** — soupçon investigué → aucun risque réel ; consigné pour ne pas ré-ouvrir. + +--- + +## D-01 · 🟠 PIE : `contrats` attribué à `legal/confotur` qui ne génère pas ces contrats + +**Décision attendue** — Soit (a) construire un vrai module `contrats` (Promesa de compraventa · +Fideicomiso d'adhésion · règlement HOA), soit (b) rebasculer l'attribution à `"module": null` +comme les autres downstreams sans générateur (brochures/plans/rendus/bim). + +**Constat** — Le registre downstream PIE mappe `contrats → legal/confotur` : +- `05_deliverables_mvp/pie/manifest/pie_spec.json:24` + → `{ "cle": "contrats", "libelle": "Contrats types (Promesa · Fideicomiso · HOA)", "module": "legal/confotur" }` +- Écho dans l'artefact gaté : `05_deliverables_mvp/pie/manifest/out/pie_manifest.json:165-166`, + `out/MANIFEST.json:24`, et la table `README.md:48`. + +Or `legal/confotur` produit **uniquement le DocType Frappe de la demande CONFOTUR** (Ley 158-01), +pas de gabarit Promesa/Fideicomiso/HOA : +- `05_deliverables_mvp/legal/confotur/README.md:8-17` (sorties = `doctype_confotur_application.json` + + `MANIFEST.json`, rien d'autre). + +**Incohérence interne** — le même registre utilise déjà `"module": null` pour tout downstream +sans générateur (`pie_spec.json:22,27,28,29,30`). `contrats` est le seul downstream attribué à +un module qui ne le produit pas. **Arbitrage de périmètre, pas une correction worker.** + +**Sources / surface** — décrit dans la mémoire projet `directive-vs-implementation` (« PIE SIGNAL »). +Non édité : cf. convention *SURFACE, don't rewrite*. + +--- + +## D-02 · 🟠 Financement bancaire : condition #4 encore sur `wag_validated_by` (humain), directive V10 la remplace par un audit IA signé + +**Décision attendue** — L'agent **OTO Auditeur Finances** (IA autonome, **hors dépôt**) doit +exister/émettre un `audit.decision == APPROVED` signé pour que la condition #4 soit implémentable. +Tant qu'il n'existe pas, le module ne peut pas migrer sans casser le gate de financement. + +**Constat** — La directive porte une couche `## PRÉCISION` (2026-08-03) qui **supersede** +explicitement la validation humaine « conseiller WAG » par une décision d'agent IA : +- `DIRECTIVE_FINANCEMENT_BANCAIRE_COMPLET_20260803.md:206-210` et `:275-279` + → `condition_4_ok = audit and audit['decision'] == 'APPROVED' and audit['signature_valid']`. + +Le module livré implémente encore l'**ancienne** condition humaine : +- `05_deliverables_mvp/crm/financement_bancaire/finlib/gate.py:142-145` + → `_cond_validation_wag` teste `dossier.get("wag_validated_by")`. +- `05_deliverables_mvp/crm/financement_bancaire/financement_spec.json:157` (label « Validation + manuelle WAG confirmée par le conseiller référent »). + +**Pourquoi worker n'édite pas** — la nouvelle condition dépend d'un producteur d'`audit` signé +qui n'existe pas dans le dépôt ; migrer le gate maintenant le rendrait toujours-faux. **Arbitrage +séquencement produit + dépendance agent hors dépôt.** + +**Sources / surface** — mémoire `directive-vs-implementation` (« V10/173726 SIGNAL »). + +--- + +## D-03 · 🟠 Inventaire : `otoia/capabilities/chat.py` absent au chemin, alors que `CLAUDE.md` le liste comme capability canonique + +**Décision attendue** — Soit recréer `chat.py`, soit retirer `chat.py` de la liste des +capabilities OTOIA canoniques dans `CLAUDE.md` §Architecture cible. + +**Constat** +- `AGENTS_EXISTING_ASSETS.md:102` le déclare présent (« conversation »). +- `CLAUDE.md:28` le liste (« aec.py + knowledge.py + prompt_engine.py + chat.py »). +- Filesystem : `/opt/oto/otoia/capabilities/chat.py` **absent** (ni `.py` ni `.pyc`). +- Auto-incohérence : le footer du même inventaire (L128) **omet déjà** `chat.py`. + +**Pourquoi worker n'édite pas** — corriger l'inventaire contredirait la constitution `CLAUDE.md` ; +l'inverse toucherait la constitution. **À trancher par Michel.** (Distinct du `chatbot-lead` +qui, lui, existe — ne pas confondre.) + +**Sources / surface** — **déjà surfacé** session `20260803_133718` +(`05_activity_log/2026-08-03.md:1245-1250`). + +--- + +## D-04 · 🟠 Inventaire : `config/projets_editor.py` « API GET/POST déjà en place » — source absente (claim runtime non réfutable) + +**Décision attendue** — Confirmer si l'API `projets_editor` tourne effectivement (déployée +ailleurs sur le VPS) ou si le claim d'inventaire est obsolète. + +**Constat** +- `AGENTS_EXISTING_ASSETS.md:127` : `/opt/oto/config/projets_editor.py (API GET/POST déjà en place)`. +- Filesystem : aucun `projets_editor*` sous `/opt/oto` ; le sibling `projets_config.json` existe. +- Le claim porte sur une **API VPS live** → **non réfutable** par la seule absence de source + in-`/opt/oto` (peut tourner déployée ailleurs, #8). Non touché. + +**Sources / surface** — **déjà surfacé** session `20260803_133718` +(`05_activity_log/2026-08-03.md:1251-1253`). + +--- + +## D-05 · 🟢 Mobile : identifiant bundle `com.otov7.app` face au renommage OTOV7 → « OTO Enterprise OS » — VÉRIFIÉ, aucun risque + +**Verdict** — Le renommage produit **ne menace pas** l'App Store #32. L'`app.name` passe bien à +« OTO Enterprise OS », mais tout identifiant de store est **quarantiné `null · a_confirmer`, +jamais fabriqué**, et **découplé** du nom d'app par conception (#6/#8) : +- `05_deliverables_mvp/mobile/app_config/mobile_spec.json` (`bundleIdentifier`/`package` en + `a_confirmer`, « jamais fabriquée #6/#8 »). +- `out/app_config.json` → `bundleIdentifier: null`, `package: null`. +- Constante historique figée `com.otov7.app` : `DIRECTIVE_MOBILE_STORES_20260803.md:15-16`. + +Aucun chemin de code ne peut auto-muter le bundle id. La mise à jour réelle de #32 (si besoin) +est **manuelle, hors dépôt**. Consigné ici pour éviter de ré-ouvrir le soupçon (mémoire +`directive-vs-implementation` « mobile SIGNAL »). + +--- + +## Rappel de discipline +- Ces items sont **surfacés, pas tranchés** : les éditer côté worker violerait #6 (invention) ou + réécrirait une source d'autorité (`CLAUDE.md`, une directive datée). +- **Ne pas re-signaler** en doublon dans les rapports quotidiens (#5) — **pointer ce registre**. +- Rien ici ne bloque la CI dépôt (verte) ; tout relève du **périmètre produit** ou du **runtime + hors dépôt** (VPS · #8).