[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:
@@ -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)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 » —
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user