[DTP-Worker] Sprint 8 · buffer L60 · Domaine SEO (2e surface) : la COMPOSITION du graphe schema.org (« graphe JSON-LD Organization + une Residence par projet ») était décrite EN PROSE dans le README du module seo sans AUCUN gate d'IDENTITÉ. Le bloc SEO existant ne gate que le COMPTE de mots-clés (total + fr/en/es via MANIFEST.counts) — surface distincte du MÊME README. Ces @type sont DATA-DERIVED : l'ensemble des @type du @graph de seo/out/seo_schema_org.json (byte-gaté par check_artifacts) = un nœud racine Organization (@id …#organization) + une Residence par projet, listings uniformes. Aucun gate ne comparait ces TYPES à l'artefact : RENOMMER le @type des listings (Residence→Apartment, un @type voisin du rango schema.org) · AJOUTER un 3e type de nœud (Offer/Product) · CASSER la bijection (2 nœuds pour un projet) ferait dériver la prose en silence pendant que le graphe byte-gaté dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de génération, pas la prose du README) n'attrape → nouveau bloc recomputant l'ENSEMBLE des @type depuis SON artefact byte-gaté (zéro duplication du contrat du générateur #6) et exigeant que la parenthèse README les nomme EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff) + le type « par projet » nommé == @type des listings. Cohérences croisées en bonus (mordent un artefact INTERNEMENT incohérent) : nœud racine Organization SINGLETON · listings UNIFORMES (un seul @type) et en BIJECTION avec les projets (listings == projects == schema_org_nodes−1 du MANIFEST) · aucune offers (statuts sans prix · USD #10). Un claim absent échoue AUSSI. 6 morsures vérifiées : prose listing Residence→Apartment captée (absents=[Residence] en trop=[Apartment] + « par projet » désaligné) · prose racine Organization→Business captée · artefact +nœud Offer (prose absente + listings non uniformes) capté · artefact 1 listing Residence→Apartment (non uniforme) capté · MANIFEST listings 9→8 (bijection cassée) capté · composition prose supprimée (INTROUVABLE) captée ; restauré = green : racine Organization singleton · 9 × Residence · total 10 nœuds · aucune offers == seo_schema_org.@graph. État courant : aucun type périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail « 2e surface SEO ») mis à jour · 7 gates re-verts.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,31 @@
|
||||
# Activity Log · 2026-07-31 · Claude Code DTP
|
||||
|
||||
## Session `20260731_173114` · Buffer S8 · Domaine SEO (2e surface) : la **composition du graphe schema.org** (« graphe JSON-LD (`Organization` + une `Residence` par projet) ») était décrite EN PROSE dans le README du module `seo` sans AUCUN gate d'IDENTITÉ — le bloc SEO existant ne gate que le COMPTE de mots-clés (total + fr/en/es).
|
||||
|
||||
- **Constat** : les `@type` du `@graph` de `seo/out/seo_schema_org.json` (byte-gaté)
|
||||
sont l'ensemble faisant autorité : un nœud racine `Organization` (`@id …#organization`)
|
||||
+ une `Residence` par projet. Le README:16 les transcrit à la main. Renommer le
|
||||
`@type` des listings (`Residence`→`Apartment`), ajouter un 3ᵉ type (`Offer`/`Product`)
|
||||
ou casser la bijection ferait dériver la prose en silence pendant que l'artefact
|
||||
dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS
|
||||
de génération, pas la prose) n'attrape.
|
||||
- **Gate ajouté** (`ci/check_readme_claims.sh`) : recompute l'ENSEMBLE des `@type`
|
||||
depuis `seo_schema_org.@graph` (zéro duplication du contrat du générateur #6) et
|
||||
exige que la parenthèse README les nomme EXACTEMENT (set-diff absent ET en trop ;
|
||||
plus le type « par projet » nommé == le `@type` des listings). Cohérences croisées
|
||||
en bonus : racine `Organization` SINGLETON · listings UNIFORMES (un seul `@type`)
|
||||
et en BIJECTION avec les projets (`listings == projects == schema_org_nodes−1` du
|
||||
MANIFEST) · aucune `offers` (statuts sans prix · USD #10).
|
||||
- **6 morsures vérifiées** : prose listing `Residence`→`Apartment` captée (absents=[Residence]
|
||||
en trop=[Apartment] + « par projet » désaligné) · prose racine `Organization`→`Business`
|
||||
captée · artefact +nœud `Offer` (prose absente + listings non uniformes) capté · artefact
|
||||
1 listing `Residence`→`Apartment` (non uniforme) capté · MANIFEST `listings` 9→8 (bijection
|
||||
cassée) capté · composition prose supprimée (INTROUVABLE) captée ; restauré = green
|
||||
(`Organization` racine singleton · 9 × `Residence` · total 10 nœuds · aucune offers).
|
||||
- État courant : aucun type périmé (anti-invention #6, rien à réécrire) — le défaut est
|
||||
la surface ungated. `ci/README.md` (table + détail « 2ᵉ surface SEO ») mis à jour ·
|
||||
**7 gates re-verts**.
|
||||
|
||||
## Session `20260731_170112` · Buffer S8 · Domaine RBAC/fixtures_gen : le **catalogue des DocTypes `custom`** à créer sur le VPS (« `Faisabilité`, `Publiciste Log`, `CONFOTUR Application`, `API Access` ») ET la **séparation des pouvoirs** (« `set_user_permissions` n'est émis que pour le rôle **RBAC Admin** ») étaient transcrits À LA MAIN dans le README du module sans AUCUN gate d'IDENTITÉ — le bloc racine ne gate que le COMPTE (« 50 rôles / 116 DocPerm » via l'agrégat RBAC de l'apply_plan).
|
||||
|
||||
**Tâche** : **Sprint 8 · buffer L75** (DevOps CI/CD · QA). Roadmap fonctionnellement
|
||||
|
||||
Reference in New Issue
Block a user