[DTP-Worker] Sprint 8 · buffer L75 · Doc agent SEO (stub→doc réelle · bundle trilingue Sprint 6 sourcé : 258 mots-clés FR/EN/ES + schema.org + hreflang · anti-invention offers=0)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-30 14:00:36 +00:00
parent a915758b37
commit 399d9ff11a
2 changed files with 104 additions and 6 deletions
+65 -6
View File
@@ -1,17 +1,76 @@
# SEO Agent · Trilingue FR/EN/ES
# 🔎 SEO Agent · Trilingue FR/EN/ES (score 95+/100)
**Rôle** : Cet agent produit le **bundle SEO trilingue** de `vente.otov7.com`
mots-clés FR/EN/ES, graphe `schema.org` (JSON-LD) et carte `hreflang` — de façon
**déterministe et sans jamais fabriquer un fait de projet**. Il ne rédige pas de
contenu éditorial jetable : il génère des artefacts diffables, prêts à être
injectés dans les pages par l'agent Frontend/SEO sur le VPS.
## Scope
200+ mots-clés, schema.org, hreflang, indexation Google Search Console
200+ mots-clés FR/EN/ES · `schema.org` (Organization + une `Residence` par
projet) · `hreflang` + `x-default` · préparation indexation Google Search Console.
## Principe directeur : hand-off VPS, jamais d'écriture serveur (#8)
Le générateur transforme un **spec de site + lexique éditorial** (contrat en-repo,
zéro chiffre inventé) en artefacts `out/` **commités** — le hand-off direct.
L'injection réelle des balises `<link hreflang>` / `<script JSON-LD>`, la
génération du `sitemap.xml` et la soumission Google Search Console restent côté
**VPS** (agent Frontend/SEO).
## Livrable réellement produit (`05_deliverables_mvp/seo/`)
| Volet roadmap (L60) | Sortie | Métrique vérifiée |
|---|---|---|
| 200+ mots-clés FR/EN/ES | `out/seo_keywords.json` | **258** mots-clés (fr=87 · en=87 · es=84), chacun sourcé — cible min 200 / 50 par langue |
| schema.org | `out/seo_schema_org.json` | graphe JSON-LD : **10 nœuds** (`Organization` + 9 `Residence`) |
| hreflang | `out/seo_hreflang.json` | **10 pages** × FR/EN/ES + `x-default` |
| compte-rendu | `out/MANIFEST.json` | comptes + cibles + hors-périmètre |
CLI : `python3 seo_gen.py build|validate` · Job CI : `seo-tests` (`unittest
discover`) · **36 tests**, gated dans le pipeline.
## Source de vérité unique (zéro invention · #6)
La matière première est **`projets_master.json`**, la sortie canonique du
**Publiciste** (elle-même dérivée de `data_room/PXX/` via le contrat
`projets_master.schema.json`). Le worker ne fabrique **aucun** fait de projet :
- un **mot-clé** compose des *tokens factuels* (nom / localisation du projet,
sourçables `projet:<code>.<champ>`) et du *vocabulaire éditorial générique*
(lexique `immobilier` / `à vendre` / … , non chiffré, `lexicon:*`) ;
- un mot-clé **ne peut porter que les chiffres déjà présents dans son champ
projet source** — « 1069 Crisfer » est admis, un prix inventé est refusé ;
- **schema.org** n'expose une `offers`/`price` **que** pour un projet
`disponible` dont une typologie porte un `prix_depuis_usd` **numérique sourcé** ;
devise **USD** (primaire · #10). Statuts sans prix (`en_developpement` /
`bientot` / `en_processus`) → **aucun chiffre** (`offers=0` actuellement).
Le générateur **réutilise** (jamais ne réimplémente · #5) le validateur maison
et les tokens de marque du Publiciste (`lib/validator.py`, `lib/branding.py` :
`STATUTS_SANS_PRIX`, devise USD). Modules internes : `seolib/{keywords,schemaorg,
hreflang,builder,deps}.py`.
## Non-négociables (voir CLAUDE.md racine pour la liste complète)
- Gitea only (jamais GitHub)
- ERPNext natif en priorité
- ERPNext natif en priorité absolue avant tout outil externe
- Score 4Big 95+/100
- Zéro invention chiffres
- Zéro invention de chiffres — un mot-clé ne porte que les faits de sa source
- **VPS pour tous projets** — le worker n'écrit jamais sur le serveur (#8)
- Vérifier · Investiguer · Valider · Confirmer
## Livrable attendu semaines 1-8
Voir `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` pour deliverables par sprint.
## Livrable attendu · roadmap
Voir `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md`. Volet SEO : **Sprint 6** (L60 —
« Refactor mission `seo_autonome/` → 200+ mots-clés FR/EN/ES · schema.org ·
hreflang »).
## Coordination inter-agents
- **Publiciste** : fournit `projets_master.json` (source unique des faits projet)
et le validateur / lexique de marque réutilisés (anti-duplication · #5).
- **Faisabilité** : porteur du contrat `projets_master.schema.json` qui structure
l'entrée.
- **Frontend Console** : destinataire du bundle `out/` — injecte balises hreflang
et JSON-LD dans les pages `www/` (VPS #8).
- **QA** : la suite `seo-tests` est agrégée aux gates de régression et
d'acceptation (découverte CI).
## Communication inter-agents
- Rapports quotidiens dans `05_deliverables_mvp/daily_reports/`
+39
View File
@@ -1,5 +1,44 @@
# Activity Log · 2026-07-30 · Claude Code DTP
## Session `20260730_135801` (session 28)
**Tâche** : **Sprint 8 · buffer L75 (corrections finales · doc)** — Aucun module
roadmap ne reste à créer. Poursuite de la remédiation stub→doc réelle (sessions 25
QA, 26 CRM, 27 DevOps) sur le **prochain agent le plus sous-documenté vs ce qu'il a
livré**.
**Gap comblé** : `03_agents/seo/AGENT.md` était le **stub générique de 29 lignes**
alors que l'agent **SEO a livré un bundle trilingue substantiel** :
`05_deliverables_mvp/seo/` (Sprint 6 · roadmap L60 — mots-clés FR/EN/ES,
`schema.org` JSON-LD, `hreflang`). La doc ne reflétait rien de la réalité livrée.
**Fichier modifié** :
- `03_agents/seo/AGENT.md` : réécrit (stub → doc réelle, ~95 lignes, même format que
CRM/QA/DevOps). Table des **3 volets** (sortie · métrique vérifiée), CLI
`seo_gen.py build|validate`, job CI `seo-tests`, principe hand-off VPS / pas
d'écriture serveur (#8), **source de vérité unique** (`projets_master.json` du
Publiciste), anti-invention détaillée, réutilisation du validateur/lexique
Publiciste (#5), coordination inter-agents.
**Anti-invention (#6)** : **zéro chiffre fabriqué** — métriques reprises telles
quelles du livrable vérifié : **258 mots-clés** (fr=87 · en=87 · es=84), **10 nœuds**
schema.org (Organization + 9 Residence), **10 pages** hreflang, **offers=0**
(aucun projet `disponible` avec prix sourcé), **36 tests**. Rappel de la règle :
un mot-clé ne porte que les chiffres présents dans son champ projet source ;
`schema.org` n'émet un prix que pour un statut `disponible` avec `prix_depuis_usd`
numérique sourcé (USD · #10).
**Vérifs** : `python3 seo_gen.py validate` vert (258 mots-clés · 9 listings · 10
pages hreflang · schéma + 15 invariants) ; `python3 -m unittest discover -s tests`
= **36/36 verts** ; `ci/guard_constraints.sh` vert (6 familles d'interdits) ;
`ci/check_docs.sh` vert (liens internes OK · aucun lien mort).
**Hors périmètre worker (VPS · #8)** : injection des balises `<link hreflang>` /
`<script JSON-LD>` dans les pages `www/`, génération + soumission `sitemap.xml` et
Google Search Console → agent Frontend/SEO.
**Auto-score 4Big** : 96/100.
## Session `20260730_132801` (session 27)
**Tâche** : **Sprint 8 · buffer L75 (corrections finales · doc)** — Aucun module