diff --git a/05_activity_log/2026-08-01.md b/05_activity_log/2026-08-01.md index ca3e7e7..970f237 100644 --- a/05_activity_log/2026-08-01.md +++ b/05_activity_log/2026-08-01.md @@ -546,3 +546,68 @@ chaque token en gras `****` == #10 (casse tolérée) + l'exclusion pour 3. CLAUDE.md #10 `(pas Stripe)`→`(pas PayPal)` → mord l'exclusion erpnext ✓ 4. fiche crm `Letter US`→`Letter USA` → mord CRM (format) ✓ 5. fiche erpnext supprime l'ancre `CLAUDE.md #10` → mord INTROUVABLE ✓ + +## Session `20260801_050225` · Buffer S8 · SEO/schema.org · IDENTITÉ du nœud racine `Organization` ancrée sur CLAUDE.md §Entités : le nom de marque **`Helios RD`** (la *marque publique* · **CLAUDE.md §Entités** « **Helios RD** (marque publique) sous WAG ») et son `url` == base_url du site, portés par le nœud racine du graphe JSON-LD `05_deliverables_mvp/seo/out/seo_schema_org.json`, étaient **byte-gatés pour la REPRODUCTIBILITÉ** (`check_artifacts` prouve que l'artefact se reconstruit depuis `seo_spec.json`) mais **JAMAIS ANCRÉS à CLAUDE.md**. Le bloc SEO schema.org amont gate la COMPOSITION (`@type` + bijection un-listing-par-projet), aveugle à l'IDENTITÉ de la marque que Google indexe. + +**Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Roadmap fonctionnellement +close ; poursuite de la série anti-dérive d'ANCRAGE à CLAUDE.md (classe +[[claude-md-constant-anchor-gate]]). **Même patron EXACT** que les tokens branding +`publiciste/branding` ancrés sur CLAUDE.md #4 et les paramètres canoniques +`faisabilite/generator` ancrés sur #9/#10 (`CANONICAL` ↔ contrainte) — appliqué à +une **surface distincte** : l'identité de marque émise dans le JSON-LD **public** de +`vente.otov7.com`, dont la reproductibilité byte était gatée mais pas l'ancrage. + +**Dérive silencieuse fermée** : +- `05_deliverables_mvp/seo/out/seo_schema_org.json` `@graph` — nœud racine + `Organization` : `name: "Helios RD"` + `url: "https://vente.otov7.com"` + + `@id: ".../#organization"` ; chaque nœud `Residence` (listing) porte + `brand.@id == org.@id` + `address.addressCountry == "DO"`. +- `05_deliverables_mvp/seo/seo_spec.json[schema_org]` — l'INPUT du générateur : + `organization.name == "Helios RD"`, `country_code == "DO"`, et un bullet `source` + qui DÉCLARE l'ancrage « CLAUDE.md §Entites (Helios RD = marque publique sous WAG) ». +- Source faisant autorité : **CLAUDE.md §Entités** (« **Helios RD** (marque publique) + sous WAG ») pour la marque + `MANIFEST.base_url` (byte-gaté) pour le base_url + le + `country_code` du spec pour le géo-ciblage. +- Piège #6 : la byte-gate prouve que l'artefact se reconstruit **fidèlement… depuis + un spec dérivé**, PAS que le nom == CLAUDE.md. RENOMMER la marque dans + `seo_spec.json` (ou dans CLAUDE.md §Entités) puis régénérer laisse le JSON-LD + **public** émettre un nom de marque qui CONTREDIT le mandat pendant que + `check_artifacts` reste **VERT** — « vert trompeur ». Aucune suite `tests/` + (FONCTIONS de génération, jamais l'ancrage à CLAUDE.md) ne l'attrape. +- **État courant** : aucune valeur périmée — `name`/`url`/`@id`/rattachements/ + `addressCountry`/déclaration du spec recoupent CLAUDE.md+MANIFEST+spec exactement + (anti-invention #6, rien à réécrire). Le défaut est la **surface ungated**. + +**Gate ajouté** (`ci/check_readme_claims.sh`, nouveau bloc « SEO org » après le bloc +composition schema.org) : la marque est **re-dérivée** de CLAUDE.md §Entités +(parenthèse « (marque publique) », exigée présente 1× exactement · zéro duplication), +puis : **(a)** `Organization.name` == marque CLAUDE.md ; **(b)** `Organization.url` +== `MANIFEST.base_url` et `@id` sous base_url ; **(c)** chaque listing rattaché à +CETTE Organization (`brand.@id` == `org.@id`) et sous base_url ; **(d)** +`addressCountry` UNIFORME == `country_code` du spec (code ISO 2 lettres, géo-ciblage +appliqué à l'identique) ; **(e)** le spec DÉCLARE l'ancrage (`organization.name` == +marque + `source` cite CLAUDE.md + la marque). Racine `Organization` exigée singleton +en pré-requis. + +**6 morsures vérifiées** (restauré vert après chacune, 7 gates re-verts) : +1. **artefact** `Organization.name`→`Helios DR` → mord (a) anchor ✓ +2. **CLAUDE.md §Entités** rename `Helios RD`→`Helios Dominicana` → mord + **SIMULTANÉMENT** (a) artefact ET (e) spec — l'ancre est vive ✓ +3. **artefact** `Organization.url` divergent → mord (b) url/@id ✓ +4. **artefact** un `addressCountry` `DO`→`US` → mord (d) uniformité géo ✓ +5. **spec** `organization.source` supprime l'ancre CLAUDE.md → mord (e) déclaration ✓ +6. **artefact** un listing `brand.@id`→`#phantom` → mord (c) rattachement ✓ + +Restauré = green : `Helios RD` == CLAUDE.md · url == base_url · 9 listings rattachés +sous base_url · addressCountry uniforme `DO` · spec déclare l'ancrage · exit 0. +Working tree byte-restauré (`git checkout --`, **JAMAIS** `git clean`, interdit +absolu) · **7 gates re-verts** (`check_readme_claims`/`check_ci_integrity`/ +`check_docs`/`guard_constraints`/`check_artifacts`/`check_regression`/`validate_json`). + +- `ci/README.md` (clause de la table récap du pipeline + paragraphe détaillé + « Identité du nœud racine `Organization` ancrée sur CLAUDE.md §Entités ») mis à jour. +- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ; + édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; l'injection + réelle du `