From 3e7bc33fb7af0f4ec35e4e24065fd3cbbd35ae90 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Sat, 1 Aug 2026 05:11:46 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker]=20Sprint=208=20=C2=B7=20buffer=20?= =?UTF-8?q?=C2=B7=20SEO/schema.org=20:=20IDENTIT=C3=89=20du=20n=C5=93ud=20?= =?UTF-8?q?racine=20`Organization`=20ANCR=C3=89E=20sur=20CLAUDE.md=20?= =?UTF-8?q?=C2=A7Entit=C3=A9s=20=E2=80=94=20le=20nom=20de=20marque=20`Heli?= =?UTF-8?q?os=20RD`=20(marque=20publique=20=C2=B7=20=C2=AB=20**Helios=20RD?= =?UTF-8?q?**=20(marque=20publique)=20sous=20WAG=20=C2=BB)=20et=20son=20`u?= =?UTF-8?q?rl`=20=3D=3D=20base=5Furl,=20port=C3=A9s=20par=20le=20n=C5=93ud?= =?UTF-8?q?=20racine=20du=20graphe=20JSON-LD=20`seo/out/seo=5Fschema=5Forg?= =?UTF-8?q?.json`,=20=C3=A9taient=20byte-gat=C3=A9s=20pour=20la=20REPRODUC?= =?UTF-8?q?TIBILIT=C3=89=20(check=5Fartifacts=20prouve=20la=20reconstructi?= =?UTF-8?q?on=20depuis=20`seo=5Fspec.json`)=20mais=20JAMAIS=20ANCR=C3=89S?= =?UTF-8?q?=20=C3=A0=20CLAUDE.md.=20Le=20bloc=20SEO=20schema.org=20amont?= =?UTF-8?q?=20gate=20la=20COMPOSITION=20(@type=20+=20bijection=20un-listin?= =?UTF-8?q?g-par-projet),=20aveugle=20=C3=A0=20l'IDENTIT=C3=89=20de=20la?= =?UTF-8?q?=20marque=20que=20Google=20indexe.=20Pi=C3=A8ge=20#6=20:=20reno?= =?UTF-8?q?mmer=20la=20marque=20dans=20`seo=5Fspec.json[schema=5Forg.organ?= =?UTF-8?q?ization.name]`=20(ou=20dans=20CLAUDE.md=20=C2=A7Entit=C3=A9s)?= =?UTF-8?q?=20puis=20r=C3=A9g=C3=A9n=C3=A9rer=20laisse=20le=20JSON-LD=20PU?= =?UTF-8?q?BLIC=20de=20`vente.otov7.com`=20=C3=A9mettre=20un=20nom=20qui?= =?UTF-8?q?=20CONTREDIT=20le=20mandat=20pendant=20que=20la=20byte-gate=20r?= =?UTF-8?q?este=20VERTE=20(l'artefact=20se=20reconstruit=20fid=C3=A8lement?= =?UTF-8?q?=E2=80=A6=20depuis=20un=20spec=20d=C3=A9riv=C3=A9)=20=E2=80=94?= =?UTF-8?q?=20=C2=AB=20vert=20trompeur=20=C2=BB=20de=20la=20classe=20des?= =?UTF-8?q?=20tokens=20branding=20ancr=C3=A9s=20sur=20#4.=20Aucune=20suite?= =?UTF-8?q?=20tests/=20(FONCTIONS=20de=20g=C3=A9n=C3=A9ration,=20jamais=20?= =?UTF-8?q?l'ancrage=20=C3=A0=20CLAUDE.md)=20ne=20l'attrape.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gate ajouté (bloc « SEO org » après la composition schema.org) : marque re-dérivée de la parenthèse « (marque publique) » de CLAUDE.md §Entités (1× exactement · zéro duplication), puis (a) `Organization.name` == marque CLAUDE.md ; (b) `Organization.url` == `MANIFEST.base_url` & `@id` sous base_url ; (c) chaque listing rattaché à CETTE Organization (`brand.@id` == `org.@id`) sous base_url ; (d) `addressCountry` UNIFORME == `country_code` du spec (ISO 2 lettres, géo-ciblage à l'identique) ; (e) le spec DÉCLARE l'ancrage (`organization.name` == marque + `source` cite CLAUDE.md). Racine `Organization` exigée singleton en pré-requis. 6 morsures vérifiées (restauré vert après chacune) : artefact `name`→Helios DR (a) · CLAUDE.md §Entités rename Helios RD→Helios Dominicana → mord SIMULTANÉMENT artefact (a) ET spec (e), l'ancre est vive · artefact `url` divergent (b) · un `addressCountry` DO→US (d) · spec `source` supprime l'ancre CLAUDE.md (e) · un listing `brand.@id`→#phantom (c). Restauré = green, exit 0. Working tree byte-restauré (`git checkout --`, JAMAIS `git clean`). 7 gates re-verts (check_readme_claims/check_ci_integrity/check_docs/guard_constraints/check_artifacts/check_regression/validate_json). ci/README.md (clause table récap + paragraphe détaillé) mis à jour. Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-01.md | 65 +++++++++++++++++++++ ci/README.md | 24 +++++++- ci/check_readme_claims.sh | 106 ++++++++++++++++++++++++++++++++++ 3 files changed, 194 insertions(+), 1 deletion(-) 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 `