[DTP-Worker 20260802_123546] Sprint 8 · buffer · Dérive doc-vs-réalité « 12 agents » sur les 2 docs de mandat de tête (AGENTS_EXISTING_ASSETS titre + MASTER_PROMPT §28) : le 13e agent (publiciste) est livré+gaté 100/100 → correction 12→13 (source unique 03_agents/) + clarification statut publiciste (LIVRÉ mandat · runtime VPS hors #8) + extension check_readme_claims réutilisant n_agents pour ancrer ces 2 docs (surface prouvée non couverte par mutation-test)

This commit is contained in:
Claude Code DTP Worker
2026-08-02 12:42:52 +00:00
parent 2e71c5f51e
commit cb8d931abb
4 changed files with 84 additions and 3 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ Livrer une plateforme intégrée BIM + ERPNext + Console luxury + OTOIA orchestr
- **Speckle** : bim-cloud.otov7.com (viewer 3D) - **Speckle** : bim-cloud.otov7.com (viewer 3D)
- **Design system** : `#0a0a12` dark + `#f0b429` doré · Fraunces + Cormorant Garamond - **Design system** : `#0a0a12` dark + `#f0b429` doré · Fraunces + Cormorant Garamond
## Tes 12 agents spécialisés (voir `03_agents/`) ## Tes 13 agents spécialisés (voir `03_agents/`)
Chaque agent a son propre `AGENT.md` avec scope + outils + non-négociables. Chaque agent a son propre `AGENT.md` avec scope + outils + non-négociables.
## Ton livrable final (semaine 8) ## Ton livrable final (semaine 8)
+45
View File
@@ -1284,3 +1284,48 @@ Aucune commande touchant au VPS.
**Non fait (hors périmètre #8)** — déploiement serveur réel, runner Gitea, Playwright **Non fait (hors périmètre #8)** — déploiement serveur réel, runner Gitea, Playwright
serveur : VPS `153.75.250.214`, plan ordonné `devops/deploy_runbook`. serveur : VPS `153.75.250.214`, plan ordonné `devops/deploy_runbook`.
---
## Session 20260802_123546 · Dérive « 12 agents » sur les docs de mandat de tête (hors README)
**Contexte** — Reprise en **Sprint 8 · buffer**. Relu CLAUDE.md, roadmap (0 item
ouvert), MEMORY.md, journal du jour. Re-vérification indépendante multi-angle de la
santé (recompute `python3` sur artefacts commités) : **7 gates → exit 0** · qualité
**22/22 @ 100/100** (verdict PASS · scores tous à 100, pas seulement le seuil) ·
régression **22 suites / 564 tests / 0 échec**, **13/13 modules** présents dans la
matrice · recette **15/15 `in_repo`** · constantes canoniques (3 %/8.5 %/52 %) toutes
ancrées · README (13 agents ×2, 22/22, 15 promesses) exact vs artefacts.
**Blind-spot RÉEL trouvé** (surface distincte de l'audit fiches `03_agents/*` clos au
`2bc3afb`) — audit des **docs de mandat de TÊTE**, non couverts par le gate de claims
(scopé README.md uniquement). `PORTAIL_BANCABLES_4BIG.md` vérifié exact (commande +
sorties `50_financier_bancable/{fr,en,es}.md` concordent avec `bancable_gen.py`). Mais
**deux docs affichaient encore « 12 agents »** :
- `AGENTS_EXISTING_ASSETS.md:1` (titre) · `02_master_prompt/MASTER_PROMPT_DTP_v2.md:28`.
Réalité re-dérivée : **13 agents** — 13 répertoires `03_agents/`, README canonique
« 13 agents » (×2, déjà gaté), le 13e (**publiciste**) **LIVRÉ+GATÉ** (fiche +
générateur `05_deliverables_mvp/publiciste/` **100/100** + suite de régression
`publiciste`). Les « 12 » précédaient l'ajout du publiciste → dérive doc-vs-réalité.
**Réalisé**
- **Correction du compte** 12 → 13 dans les deux docs (fait objectif, `03_agents/`
= source unique · #6 anti-invention).
- **Clarification publiciste** (`AGENTS_EXISTING_ASSETS.md` §13) : marqueur « (à créer) »
levé, **note « Statut mandat : LIVRÉ »** pointant fiche + générateur gaté, tout en
**préservant** la liste « À développer » comme **runtime VPS** hors périmètre worker
(#8) — respecte la convention « VPS-runtime `à créer` ≠ dérive » (memory
`fiche-accuracy-audit-closed`). Deux liens Markdown ajoutés → résolus (`check_docs`).
- **Extension du gate** `check_readme_claims.sh` (surface prouvée NON couverte par
mutation-test) : nouvelle boucle qui **réutilise le `n_agents` déjà dérivé** de
`git ls-files 03_agents/*/AGENT.md` (pas de nouvelle machinerie · #5 pas de doublon)
et exige que les DEUX docs de tête citent exactement ce compte. Classe
`doc-numeric-claims-gate`.
**Vérifications** — nouveau check **mutation-testé** (12 réinjecté → gate ROUGE
« dit 12 MAIS 03_agents/ en compte 13 », restauré → exit 0). **7 gates re-joués →
exit 0**. Aucune commande touchant au VPS.
**Non fait (hors périmètre #8)** — runtime VPS publiciste (`publiciste.py`, systemd/
inotify, WhatsApp), déploiement serveur : hors périmètre worker.
+9 -2
View File
@@ -1,4 +1,4 @@
# Actifs existants OTOV7 · Mapping vers les 12 agents DTP # Actifs existants OTOV7 · Mapping vers les 13 agents DTP
## Principe : NE PAS REPARTIR DE ZÉRO ## Principe : NE PAS REPARTIR DE ZÉRO
Chaque agent hérite/réutilise les modules déjà présents avant de créer du nouveau code. Chaque agent hérite/réutilise les modules déjà présents avant de créer du nouveau code.
@@ -112,9 +112,16 @@ Chaque agent hérite/réutilise les modules déjà présents avant de créer du
4. **Capabilities OTOIA** = fondation → chaque agent DTP branche dessus 4. **Capabilities OTOIA** = fondation → chaque agent DTP branche dessus
5. **Éliminer le vieux** : si un module est obsolète, l'archiver dans `_ARCHIVES/`, ne pas laisser deux versions 5. **Éliminer le vieux** : si un module est obsolète, l'archiver dans `_ARCHIVES/`, ne pas laisser deux versions
## 13. Publiciste Agent — NOUVEAU (à créer) ## 13. Publiciste Agent — NOUVEAU
**Rôle** : Maintient automatiquement le site public `vente.otov7.com` à partir des faisabilités. **Rôle** : Maintient automatiquement le site public `vente.otov7.com` à partir des faisabilités.
> **Statut mandat** : la fiche + le générateur déterministe côté dépôt sont **LIVRÉS**
> ([`03_agents/publiciste/AGENT.md`](03_agents/publiciste/AGENT.md) ·
> [`05_deliverables_mvp/publiciste/`](05_deliverables_mvp/publiciste/README.md), gated
> 100/100 · suite de régression `publiciste`). La liste **« À développer »** ci-dessous
> recense le **runtime VPS** (orchestrateur `publiciste.py`, triggers systemd/inotify,
> notifications WhatsApp) qui reste hors périmètre worker (`CLAUDE.md` #8).
**Ressources existantes à réutiliser** : **Ressources existantes à réutiliser** :
- `/opt/oto/config/projets_config.json` (déjà en place) - `/opt/oto/config/projets_config.json` (déjà en place)
- `/opt/oto/config/projets_editor.py` (API GET/POST déjà en place) - `/opt/oto/config/projets_editor.py` (API GET/POST déjà en place)
+29
View File
@@ -216,6 +216,35 @@ if re.search(r"verdict `true`", norm):
else: else:
bad("Recette · verdict `true` non cité dans README (attendu)") bad("Recette · verdict `true` non cité dans README (attendu)")
# ============================================================================
# Comptes d'agents dans les docs de mandat de tête (hors README) · même classe.
# ----------------------------------------------------------------------------
# Le README est déjà gaté (« 13 agents » ×2 ci-dessus, recompté depuis
# 03_agents/*/AGENT.md). Or DEUX autres docs de tête retranscrivent ce même
# compte en dur et se périmaient en silence : ils affichaient « 12 agents » alors
# que le 13e (publiciste) était livré+gaté (fiche + générateur 100/100 + suite de
# régression). Aucun gate ne les comparait à la réalité du disque. On réutilise
# le `n_agents` DÉJÀ dérivé de `git ls-files 03_agents/*/AGENT.md` (source unique,
# pas de nouvelle machinerie) et on exige que chaque doc cite exactement ce compte.
# ============================================================================
for path, pat, label in [
("AGENTS_EXISTING_ASSETS.md",
r"Mapping vers les (\d+) agents DTP", "Actifs existants · titre"),
("02_master_prompt/MASTER_PROMPT_DTP_v2.md",
r"Tes (\d+) agents spécialisés", "Master prompt · titre"),
]:
try:
doc = re.sub(r"\s+", " ", open(path, encoding="utf-8").read())
except OSError as e:
bad(f"{label} — {path} illisible : {e}"); continue
m = re.search(pat, doc)
if m is None:
bad(f"{label} — compte d'agents INTROUVABLE dans {path} (attendu {n_agents}) · motif=/{pat}/")
elif m.group(1) == str(n_agents):
good(f"{label} — {path} cite {m.group(1)} == 03_agents/ ({n_agents})")
else:
bad(f"{label} — {path} dit {m.group(1)} MAIS 03_agents/ en compte {n_agents} → corriger le doc")
# ============================================================================ # ============================================================================
# Fiche QA (03_agents/qa/AGENT.md) · même classe de « vert trompeur » — # Fiche QA (03_agents/qa/AGENT.md) · même classe de « vert trompeur » —
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------