diff --git a/05_activity_log/2026-08-03.md b/05_activity_log/2026-08-03.md index acc64ee..f65defe 100644 --- a/05_activity_log/2026-08-03.md +++ b/05_activity_log/2026-08-03.md @@ -1025,3 +1025,66 @@ reste **ouverte** ([[docstring-vs-code-drift]]) pour tout code NEUF, mais le par **Réalisé.** **Zéro fichier de production modifié** (aucune dérive réelle). Audit + vérification manuelle des 2 faux positifs + inspection du gate ecf. `./run_ci.sh` = **32 PASS · 0 FAIL · 0 SKIP** (inchangé). Session de vérification → commit log-only (rythme établi, cf. `f0827a7`). + +--- + +## Session `20260803_133718` · QA drift-hunt — inventaire d'assets vs réalité filesystem (classe NEUVE) · 1 fix + +**État d'entrée.** Tous sprints livrés ; `./run_ci.sh` = **32 PASS · 0 FAIL · 0 SKIP**. Artefacts vivants +concordants (`regression_run.json` = 24 suites / 624 ; `quality_report.json` = 24 modules). La classe +[[docstring-vs-code-drift]] a été balayée exhaustivement (parc `*_gen.py` propre, sessions `123715`/`130717`). +Cette session ouvre une **surface plus fraîche, jamais auditée** : les **documents prose racine** +(README, `PORTAIL_*`, `DIRECTIVE_*`, `AGENTS_EXISTING_ASSETS.md`, `AUTORISATIONS_*`) — leurs claims +factuels **présent-de-l'indicatif** vs état réel du repo / filesystem. + +**Méthode.** Agent `Explore` read-only (extraction des claims présent-tense) + **vérification manuelle +filesystem** de chaque candidat (jamais confiance aveugle à l'agent). Distinctions appliquées +(cf. [[prose-facts-vs-numeric-drift]], [[mobile-runtime-actual-vs-rebuild-target]]) : snapshots +historiques append-only ≠ dérive · cibles roadmap ≠ runtime actuel · claims sur API VPS live +non-réfutables par simple absence de source. + +**Candidats agent écartés (faux positifs après vérif manuelle) :** +- **README.md, CLAUDE.md, `AUTORISATIONS_*`, la plupart des `DIRECTIVE_*`** = propres (24/24, 624, 13 + agents, constantes CLAUDE.md tous vérifiés exacts). +- **`AGENTS_EXISTING_ASSETS.md` L18-19 « (compilé pyc) »** = **exact** : les `.py` sources sont absents + mais `/opt/oto/__pycache__/oto_agent_faisabilite.cpython-310.pyc` (+ orchestrateur) **existent**. + L'agent avait raté le `__pycache__`. Annotation fidèle. +- **`DIRECTIVE_RENDUS_EXISTANTS` L36 « Rendus totaux par projet »** = **NON touché**. Directive + **écrite par Michel** décrivant le `data_room` **externe** ; le recompte de l'agent (`60_photos_site/` + top-level) ≠ la méthodo du doc (agrège plusieurs sous-dossiers + `static/renders` + `portal/img`). + Réécrire les chiffres de Michel sur une base de comptage ambiguë = invention → **exclu** (garde-fou + « ne pas écraser un doc-source sur base incertaine »). +- **`PORTAIL_BANCABLES` L12 « 3.4 MB »** vs 3.3M réel = arrondi cosmétique, hors périmètre (fichier VPS + externe) → non touché. + +**Dérive RÉELLE confirmée & corrigée (classe neuve : inventaire-vs-filesystem).** La **convention +propre du doc** (L18-19, L68 annotent « (compilé pyc) » les assets dont seul le `.pyc` subsiste) était +appliquée de façon **incohérente** : classification filesystem exhaustive des 22 chemins `.py` du doc → +**5 entrées pyc-only NON annotées** (source absente au chemin exact indiqué, seul le `.pyc` présent) : +L20 `oto_module_etudes_faisabilite_real`, L21 `oto_module_execution_faisabilite`, +L22 `oto_module_faisabilites_pages`, L23 `oto_module_faisabilites_viewer`, L59 `oto_module_mobile_api`. +**Correctif : ajout de « (compilé pyc) »** sur ces 5 lignes — alignement sur la **convention propre du +doc** + la **réalité filesystem vérifiée** (strictement analogue au fix `financement_bancaire`/`2e4ff2d` +qui alignait une docstring sur la convention de ses pairs). **Zéro invention.** Assets `.py` avec source +réelle (`aec.py`, `knowledge.py`, `prompt_engine.py`, `otoia_batch_projets.py`, `gen_renders_flux.py`, +`mobile_download.py`, `seed_mobile_rbac.py`, `confotur_application.py`, `bim_compras.py`, `ifc_to_glb.py`, +`worker_tasks_queue.py`, `executive_hero_flux.py`) = laissés sans annotation (correct). + +**⚠️ Deux items SURFACÉS à Michel (NON édités — contredisent une source d'autorité / non-réfutables) :** +1. **`otoia/capabilities/chat.py` (L102) est ABSENT** au chemin indiqué (ni `.py` ni `.pyc`), **alors + que CLAUDE.md le liste comme capability OTOIA canonique** (« aec.py + knowledge.py + prompt_engine.py + + chat.py »). Incohérence doc-inventaire ↔ constitution → je **ne réécris pas** l'inventaire pour + contredire CLAUDE.md ; **à trancher par Michel** (chat.py à recréer, ou capability à retirer de la + liste canonique ?). Note : le footer L128 du même doc **omet déjà** chat.py (« aec + knowledge + + prompt_engine » seulement) — inventaire déjà auto-incohérent sur ce point. +2. **`config/projets_editor.py` (L127) « (API GET/POST déjà en place)»** — source absente au chemin, + **mais** 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) → **non touché**, signalé pour confirmation. + +**Gate.** `AGENTS_EXISTING_ASSETS.md` est référencé par `ci/check_readme_claims.sh` **uniquement** pour +l'endpoint RunPod (§1) et des titres — **aucune annotation `(compilé pyc)` n'est pinnée**. `./run_ci.sh` +en clôture = **32 PASS · 0 FAIL · 0 SKIP** (inchangé). + +**Réalisé.** 1 fichier prose (5 lignes annotées, convention + réalité). 2 items surfacés à Michel. +Classe inventaire-vs-filesystem = **nouvelle**, distincte de docstring-vs-CODE et README-counts ; +reste **ouverte** pour les claims filesystem des docs racine. diff --git a/AGENTS_EXISTING_ASSETS.md b/AGENTS_EXISTING_ASSETS.md index 48e5fbd..190d8b3 100644 --- a/AGENTS_EXISTING_ASSETS.md +++ b/AGENTS_EXISTING_ASSETS.md @@ -17,10 +17,10 @@ Chaque agent hérite/réutilise les modules déjà présents avant de créer du ## 2. Faisabilité Agent — ressources existantes - `/opt/oto/oto_agent_faisabilite.py` (compilé pyc) ⭐ AGENT DÉDIÉ - `/opt/oto/oto_orchestrateur_faisabilite.py` (compilé pyc) -- `/opt/oto/oto_module_etudes_faisabilite_real.py` -- `/opt/oto/oto_module_execution_faisabilite.py` -- `/opt/oto/oto_module_faisabilites_pages.py` -- `/opt/oto/oto_module_faisabilites_viewer.py` +- `/opt/oto/oto_module_etudes_faisabilite_real.py` (compilé pyc) +- `/opt/oto/oto_module_execution_faisabilite.py` (compilé pyc) +- `/opt/oto/oto_module_faisabilites_pages.py` (compilé pyc) +- `/opt/oto/oto_module_faisabilites_viewer.py` (compilé pyc) - `/opt/oto/otoia/capabilities/knowledge/faisabilite_4_volets_standard.md` ⭐ standard 4 volets - `/opt/oto/otoia/otoia_batch_projets.py` — batch faisabilités multi-projets @@ -56,7 +56,7 @@ Chaque agent hérite/réutilise les modules déjà présents avant de créer du ## 8. Mobile Agent — ressources existantes - `/opt/oto/oto_module_mobile_download.py` -- `/opt/oto/oto_module_mobile_api.py` +- `/opt/oto/oto_module_mobile_api.py` (compilé pyc) - `/opt/oto/staging/mobile_rbac/deploy_mobile_rbac.sh` - `/opt/oto/staging/mobile_rbac/seed_mobile_rbac.py` - `/opt/oto/static/oto_mobile.js`