Files
oto-enterprise-os-dtp/03_agents/publiciste/AGENT.md
T
Claude Code DTP Worker 1a4813c67f [DTP-Worker] Sprint 8 · buffer L75 · Fiche agent Publiciste cross-linke son livrable in-repo
Audit cohérence des 13 AGENT.md (grep -c 05_deliverables_mvp) : publiciste = seul
agent possédant un vrai module in-repo gaté (publiciste/ · 23 tests · job
publiciste-tests) à n'en cross-linker aucun (0), vs pairs >=3. Meme defaut que
faisabilite corrige session 36. + section 'Livrable Publiciste reellement produit'
(table Module/Sprint/Role/CLI/Job CI/Tests · toutes cellules verifiees) : CLI
publiciste.py {parse,validate,generate,run} (--help) · 23 tests (grep + regression) ·
job au gate (ci.yml) · Sprint 2 source README+GAP §3.13 (pas un n° roadmap qui ne
nomme pas le module) · contrat projets_master.json attribue au Faisabilite Agent
(source unique #5) · auto-score 95/100 cite depuis README L79. Anti-invention #6 :
aucun prix/positionnement fabrique · fixtures data_room = entrees hors auto-score ·
publication vente.otov7.com hors perimetre VPS #8. check_docs EXIT 0 (0 lien casse ·
5 liens resolvent) · guard_constraints EXIT 0 · regression inchangee 534 tests verts
(doc-only 0 code) · publiciste/AGENT.md links 0->5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 20:02:51 +00:00

7.0 KiB

🎯 Publiciste Agent · Maintenance automatique site public (vente.otov7.com)

Rôle : Cet agent OTOIA maintient automatiquement à jour le site public vente.otov7.com à partir des faisabilités canoniques de chaque projet. Il élimine le besoin d'édition manuelle du site.

Mission

  1. Extraire en continu depuis les faisabilités canoniques (data_room/PXX/) :

    • Positionnement marketing
    • Typologies + surfaces
    • Prix "à partir de" par typologie
    • Grille tarifaire complète
    • Ce qui est inclus (services · équipements · CONFOTUR · Fideicomiso · etc.)
    • Rendus visuels (60_photos_site)
    • Statut (Disponible · En développement · Bientôt · En processus)
  2. Générer copy multilingue FR/EN/ES à partir du positionnement documenté

  3. Publier automatiquement sur vente.otov7.com sans intervention humaine

  4. Détecter changements dans faisabilités et déclencher rebuild du site

  5. Ajouter automatiquement les nouveaux projets dès que data_room/PXX/ créé + faisabilité complète

Sources de vérité (dans l'ordre)

  1. /opt/oto/data_room/PXX/50_financier_bancable/one_pager_banquier.pdf
  2. /opt/oto/data_room/PXX/40_llm_outputs/commercial.md
  3. /opt/oto/data_room/PXX/40_llm_outputs/marche_analyste.md
  4. /opt/oto/data_room/PXX/40_llm_outputs/directeur.md
  5. /opt/oto/data_room/PXX/00_brief/
  6. /opt/oto/data_room/PXX/60_photos_site/ (rendus)

Règles absolues (interdits)

  • Zéro invention de prix, chiffres, positionnement (source ONLY = faisabilité)
  • Jamais éditer directement vente.otov7.com/index.html — passer par le générateur
  • Ne pas publier un projet dont la faisabilité est incomplète (marquer "En développement")
  • Ne pas dupliquer rendus AI (source unique data_room/PXX/60_photos_site/)

Workflow détaillé

Trigger 1 : Faisabilité mise à jour

  • Détecte modification dans data_room/PXX/40_llm_outputs/*.md
  • Re-extrait positionnement + prix
  • Régénère section projet dans vente.otov7.com/index.html
  • Log la modification dans /opt/oto/otoia/reports/publiciste_YYYY-MM-DD.md
  • Notifie Michel via WhatsApp si prix / positionnement change

Trigger 2 : Nouveau projet créé

  • Détecte création data_room/PXX/ (nouveau code projet)
  • Attend que la faisabilité soit complète (score ≥ 95/100)
  • Ajoute automatiquement la card projet sur vente.otov7.com
  • Copie les rendus dans /opt/oto/sites/static/projets/pXX/
  • Log + WhatsApp notification

Trigger 3 : Nouveau rendu généré

  • Détecte nouveau rendu dans data_room/PXX/60_photos_site/
  • Copie vers /opt/oto/sites/static/projets/pXX/
  • Met à jour l'image hero de la card si c'est le rendu principal
  • Cache-bust Cloudflare automatique

Trigger 4 : Faisabilité incomplète

  • Détecte "prix non documenté" ou "pricing non défini"
  • Marque le projet en "En développement" avec "Prochainement · Détails à venir"
  • Log + WhatsApp à Michel pour compléter faisabilité

Architecture technique

data_room/PXX/  ────► parser.py (extraction) ────► projets_master.json
                                                          │
                                                          ▼
                                                  generator.py (rendu HTML)
                                                          │
                                                          ▼
                                                  /opt/oto/sites/vente/index.html
                                                          │
                                                          ▼
                                                  Cache-bust Cloudflare + notify Michel

Composants à créer

  1. otoia/capabilities/publiciste.py — orchestrateur agent
  2. otoia/capabilities/knowledge/site_public_template.md — template génération site
  3. Systemd timer otoia-publiciste.timer (check horaire)
  4. Watch inotify sur data_room/*/40_llm_outputs/ (temps réel)
  5. Backend Frappe DocType Publiciste Log pour audit trail

Livrable Publiciste réellement produit (05_deliverables_mvp/publiciste/)

Les « Composants à créer » ci-dessus décrivent le runtime VPS cible (otoia/capabilities/publiciste.py, systemd/inotify · hors périmètre worker · CLAUDE.md #8). Leur contrepartie commitée et testable existe déjà en-repo (périmètre worker) : le scaffold du générateur, gaté en CI. C'est le seul module net-neuf du mandat, sur le chemin critique (cf. ../../05_deliverables_mvp/GAP_ANALYSIS_SPRINT1.md §3.13).

Module Sprint Rôle Entrée CLI Job CI Tests
publiciste/ 2 (README scaffold (Sprint 2) · GAP §3.13) Pipeline site public : data_room/PXX/projets_master.jsonindex.html luxury (lib/parser.py extraction · lib/validator.py schéma · lib/generator.py + lib/branding.py rendu dark+doré #0a0a12/#f0b429 · templates/site_public.html.tmpl) publiciste.py parse|validate|generate|run publiciste-tests 23

Le contrat d'échange projets_master.json n'est pas défini ici mais par le Faisabilité Agent (../../05_deliverables_mvp/faisabilite/projets_master.schema.json, Sprint 1) — source unique, zéro duplication (#5). Le Publiciste en est le consommateur : lib/parser.py extrait, lib/validator.py valide contre ce schéma avant tout rendu.

Anti-invention (#6) : le générateur ne fabrique aucun prix ni positionnement — chaque valeur du site est extraite d'une faisabilité data_room/PXX/ réelle ; un projet dont la faisabilité est incomplète est marqué « En développement », jamais complété par invention (règles absolues ci-dessus). Aucun index.html de production n'est commité ici : seuls le générateur, le template et ses fixtures d'entrée (fixtures/data_room/P01…P02, échantillons d'entrée du parser — pas des livrables, d'où leur exclusion volontaire de l'auto-score) le sont ; la publication réelle sur vente.otov7.com s'exécute côté VPS (#8). Auto-score du livrable : 95/100 (README.md).

Livrable Sprint (mandat 8 semaines)

  • Semaine 2 : Setup base + parser faisabilité → JSON
  • Semaine 3 : Générateur HTML → vente.otov7.com
  • Semaine 4 : Triggers systemd + inotify actifs
  • Semaine 5 : Notifications WhatsApp Michel
  • Semaine 6 : Multi-langue FR/EN/ES automatique
  • Semaine 7 : Tests + validation faisabilités P01-P09
  • Semaine 8 : Production

Coordination inter-agents

  • BIM Agent : fournit rendus (Blender/Bonsai → 60_photos_site)
  • Faisabilité Agent : génère faisabilités 4 volets → 40_llm_outputs
  • Rendu Agent : batch renders → 60_photos_site
  • CRM Agent : reçoit leads/inscriptions du site public
  • SEO Agent : optimise les balises meta générées