[DTP-Worker] Sprint 8 · buffer · Fiches agents/voix : gate d'ANCRAGE du pied de page « Voix Amélie QC (multilingual_v2) pour toute interaction OTOIA » — répété dans 11 des 13 fiches 03_agents/*/AGENT.md (hors faisabilite/publiciste) — sur CLAUDE.md §Architecture cible
Le triplet persona/qualif/voix (Amélie · QC · multilingual_v2) recopié à la main dans chaque pied de page était HORS de tout gate : le bloc persona Chat OTOIA (063234) ne confronte que le module chat_otoia, aveugle aux 11 fiches ; le bloc configs runtime note même que le « QC » est « gardé en littéral — non gaté ici ». Bloc ajouté (check_readme_claims.sh) : RE-DÉRIVATION INDÉPENDANTE du triplet de §Architecture cible (regex qui ne fige PAS le qualificatif en dur ⇒ QC→… mord ici, pas seulement via l'INTROUVABLE du bloc persona) · 3 tokens == CLAUDE.md exigés sur chaque fiche portant le pied de page · pied de page malformé & évaporation totale du recensement échouent AUSSI (#6). 6 morsures vérifiées (CLAUDE.md voix v2→v3 : 11 fiches + cascade persona · CLAUDE.md qualif QC→BC : 11 fiches, bloc indépendant · seo voix · crm persona · bim malformé · surface évaporée) · restauré green · 7 gates re-verts. ci/README.md (récap + paragraphe détaillé) mis à jour. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,61 @@
|
||||
# Activity Log · 2026-08-01 · Claude Code DTP
|
||||
|
||||
## Session `20260801_173409` · Buffer S8 · Fiches agents/pied de page voix OTOIA : le **PIED DE PAGE CANONIQUE** « - Voix **Amélie QC** (**multilingual_v2**) pour toute interaction OTOIA » — répété à l'identique dans **11 des 13 fiches** `03_agents/*/AGENT.md` (toutes sauf `faisabilite`/`publiciste`, qui n'orchestrent pas OTOIA) — RECOPIE À LA MAIN les **trois** tokens de la contrainte **CLAUDE.md §Architecture cible** « Voix Amélie QC (multilingual_v2) » : prénom persona (`Amélie`), qualificatif de marque (`QC`), modèle de voix ElevenLabs (`multilingual_v2`). Cette surface était **HORS de tout gate**.
|
||||
|
||||
**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 la persona/capabilities
|
||||
`frontend/chat_otoia` ancrées sur §Architecture cible, la marque SEO org (§Entités) et
|
||||
les tokens branding (#4) — appliqué à une **surface distincte encore ungated** : les 11
|
||||
pieds de page de fiches, jamais confrontés à CLAUDE.md.
|
||||
|
||||
**Dérive silencieuse fermée** :
|
||||
- `03_agents/{bim,crm,devops,erpnext_backend,frontend_console,ifc_speckle,mobile,
|
||||
onapi_legal,qa,rendu,seo}/AGENT.md` — ligne « - Voix Amélie QC (multilingual_v2)
|
||||
pour toute interaction OTOIA ».
|
||||
- Source faisant autorité : **CLAUDE.md §Architecture cible** (ligne 30) « Voix
|
||||
Amélie QC (multilingual_v2) ».
|
||||
- Piège : le bloc « Chat OTOIA · IDENTITÉ de la persona » RE-DÉRIVE bien persona+voix
|
||||
de CLAUDE.md mais ne confronte QUE le module `chat_otoia` (spec + `out/` + son propre
|
||||
README + l'oracle du test) — **AVEUGLE aux 11 pieds de page** ; le bloc « configs
|
||||
runtime » note même explicitement que le « QC » est « gardé en littéral — non gaté
|
||||
ici ». Le jour où ElevenLabs déprécie `multilingual_v2` (→`multilingual_v3`) ou qu'on
|
||||
renomme la persona/le qualificatif dans CLAUDE.md, ces 11 fiches annonceraient EN
|
||||
SILENCE une voix/persona que le mandat ne prescrit plus, chacune affirmant orchestrer
|
||||
« toute interaction OTOIA » avec le mauvais modèle. Aucune suite `tests/` (FONCTIONS
|
||||
du builder, jamais la prose des fiches) n'attrape ce « vert trompeur ».
|
||||
- **État courant** : **aucune valeur périmée** — les 11 pieds de page recoupent
|
||||
CLAUDE.md §Architecture cible exactement (anti-invention #6, rien à réécrire). Le
|
||||
défaut est la **surface ungated**.
|
||||
|
||||
**Gate ajouté** (`ci/check_readme_claims.sh`, nouveau bloc « Fiches agents · pied de
|
||||
page voix » après le bloc persona/capabilities Chat OTOIA) : on RE-DÉRIVE le triplet
|
||||
(persona · qualif · voix) de CLAUDE.md §Architecture cible **INDÉPENDAMMENT** du parse
|
||||
persona amont (dont la regex fige `QC` en dur — un renommage du qualificatif doit mordre
|
||||
ICI, pas seulement via l'INTROUVABLE du bloc persona) ; pour CHAQUE fiche git-trackée
|
||||
portant le pied de page, on exige ses **3 tokens == CLAUDE.md**. Une fiche avec prose
|
||||
« interaction OTOIA » mais pied de page malformé échoue ; la **disparition totale** du
|
||||
recensement échoue AUSSI (surface évaporée = régression #6). Direction fiche→CLAUDE.md.
|
||||
|
||||
**6 morsures vérifiées** : CLAUDE.md `multilingual_v2→v3` (mord les 11 fiches +, en
|
||||
cascade, le bloc persona amont — 15 fails, l'ancre est vive) · CLAUDE.md qualif `QC→BC`
|
||||
(mord les 11 pieds de page — bloc INDÉPENDANT, ne s'appuie pas sur le parse persona qui
|
||||
fige QC) · fiche `seo` voix `v2→v1` (1 fail) · fiche `crm` persona `Amélie→Sophie`
|
||||
(1 fail) · fiche `bim` pied de page malformé, parenthèses retirées (1 fail INTROUVABLE) ·
|
||||
pied de page retiré de TOUTES les fiches (surface évaporée, 1 fail) ; restauré = green :
|
||||
11 pieds de page == CLAUDE.md · 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é « Pied de
|
||||
page Voix Amélie QC (multilingual_v2) des fiches agents ancré sur CLAUDE.md
|
||||
§Architecture cible ») 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 ; le runtime réel
|
||||
de la voix OTOIA reste côté VPS).
|
||||
- **Auto-score 4Big** : 96/100.
|
||||
|
||||
## Session `20260801_170404` · Buffer S8 · Domaine QA/audit_4big : la colonne **« Fait vérifié »** de la table du barème (`qa/audit_4big/README.md:24,26`) — les **DEUX SEUILS STRUCTURELS** que le scorer applique réellement (`DOC` « ≥ **400 octets** » · `TESTS` « ≥ **8 méthodes** `def test_*` »), transcrits À LA MAIN — étaient **HORS de tout gate**. Le bloc BARÈME existant recompute la 2e colonne (**poids** : DOC 20 · CONTRAT 20 · TESTS 25 · CLI 15 · HANDOFF 20) mais son regex (`| \`DOC\` | 20 |`) est **AVEUGLE à la 3e cellule** ; ces deux nombres sont DATA-DERIVED de `quality_spec.json[thresholds]` (`min_doc_bytes`/`min_test_methods`).
|
||||
|
||||
**Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Roadmap fonctionnellement
|
||||
|
||||
+27
-1
File diff suppressed because one or more lines are too long
@@ -5781,6 +5781,93 @@ if cm_persona is not None and chat_spec is not None:
|
||||
else:
|
||||
good("Chat OTOIA · (e) oracle du test persona/capabilities == CLAUDE.md")
|
||||
|
||||
# ============================================================================
|
||||
# Fiches agents · le PIED DE PAGE canonique « Voix Amélie QC (multilingual_v2) »
|
||||
# répété dans CHAQUE fiche 03_agents/*/AGENT.md — ANCRÉ sur CLAUDE.md
|
||||
# §Architecture cible, jamais gaté.
|
||||
# ----------------------------------------------------------------------------
|
||||
# 11 des 13 fiches agents (toutes sauf faisabilite/publiciste, qui n'orchestrent
|
||||
# pas OTOIA) se terminent par la ligne « - Voix <persona> <qualif> (<voix>) pour
|
||||
# toute interaction OTOIA ». Elle RECOPIE À LA MAIN les TROIS tokens de la
|
||||
# contrainte CLAUDE.md §Architecture cible « Voix Amélie QC (multilingual_v2) » :
|
||||
# le prénom de la persona (`Amélie`), le qualificatif de marque (`QC`) et le
|
||||
# modèle de voix ElevenLabs (`multilingual_v2`). Le bloc « Chat OTOIA · IDENTITÉ
|
||||
# de la persona » (ci-dessus) RE-DÉRIVE bien persona+voix de CLAUDE.md, MAIS ne
|
||||
# confronte QUE le module chat_otoia (spec + out/ + son propre README + l'oracle
|
||||
# du test) — AVEUGLE aux 11 pieds de page des fiches. L'autre bloc (« Chat OTOIA ·
|
||||
# IDENTITÉ des configs runtime ») note même explicitement que le « QC » est
|
||||
# « gardé en littéral — non gaté ici ». Aucune suite tests/ (FONCTIONS du builder,
|
||||
# jamais la prose des fiches) n'attrape ce « vert trompeur ».
|
||||
# Piège #6 : le jour où ElevenLabs déprécie `multilingual_v2` (→ `multilingual_v3`)
|
||||
# ou qu'on renomme la persona/le qualificatif dans CLAUDE.md, ces 11 pieds de page
|
||||
# annonceraient EN SILENCE une voix/persona que le mandat ne prescrit plus, chaque
|
||||
# fiche affirmant orchestrer « toute interaction OTOIA » avec le mauvais modèle.
|
||||
# On RE-DÉRIVE le triplet (persona · qualif · voix) de CLAUDE.md §Architecture cible
|
||||
# (source unique · zéro duplication — mêmes `nom`/`voix` que le bloc persona
|
||||
# ci-dessus, plus le qualificatif jusqu'ici jamais ancré) et on exige de CHAQUE
|
||||
# fiche portant le pied de page que ses trois tokens == CLAUDE.md. Direction
|
||||
# fiche→CLAUDE.md. La disparition TOTALE du pied de page échoue AUSSI (le
|
||||
# recensement qui s'évapore est lui-même une régression #6). État courant : aucune
|
||||
# valeur périmée.
|
||||
# ============================================================================
|
||||
if True:
|
||||
# RE-DÉRIVATION INDÉPENDANTE de CLAUDE.md (ne dépend PAS du parse persona
|
||||
# ci-dessus, dont la regex fige « QC » en dur : un renommage du qualificatif
|
||||
# doit mordre ICI, pas seulement via l'INTROUVABLE du bloc persona).
|
||||
try:
|
||||
_cm_af = open("CLAUDE.md", encoding="utf-8").read()
|
||||
# triplet canonique : « Voix <nom> <qualif> (<voix>) » (qualif jamais figé en dur)
|
||||
_maf = re.search(r"Voix\s+(\S+)\s+(\S+)\s*\(([^)]+)\)", _cm_af)
|
||||
if _maf is None:
|
||||
raise ValueError("« Voix <persona> <qualif> (<voix>) » INTROUVABLE "
|
||||
"dans CLAUDE.md §Architecture cible")
|
||||
af_nom, af_qual, af_voix = (_nfc(_maf.group(1)), _nfc(_maf.group(2)),
|
||||
_nfc(_maf.group(3)))
|
||||
# cohérence avec le bloc persona quand il a pu parser (zéro duplication —
|
||||
# même source, mêmes valeurs) ; s'il a échoué (cm_persona None), on continue.
|
||||
if cm_persona is not None and (af_nom != cm_persona["nom"]
|
||||
or af_voix != cm_persona["voix"]):
|
||||
raise ValueError(f"triplet {af_nom!r}/{af_voix!r} incohérent avec le bloc "
|
||||
f"persona {cm_persona} (parse divergent de CLAUDE.md)")
|
||||
except (OSError, ValueError) as e:
|
||||
bad(f"Fiches agents · pied de page voix CLAUDE.md §Architecture cible "
|
||||
f"illisible/inattendu : {e}")
|
||||
af_nom = None
|
||||
if af_nom is not None:
|
||||
_fiches = subprocess.run(["git", "ls-files", "03_agents/*/AGENT.md"],
|
||||
capture_output=True, text=True).stdout.split()
|
||||
_foot_re = re.compile(
|
||||
r"Voix\s+(\S+)\s+(\S+)\s*\(([^)]+)\)\s+pour toute interaction OTOIA")
|
||||
af_seen = 0
|
||||
for _fi in _fiches:
|
||||
try:
|
||||
_ftxt = open(_fi, encoding="utf-8").read()
|
||||
except OSError as e:
|
||||
bad(f"Fiches agents · {_fi} illisible : {e}"); continue
|
||||
_mfoot = _foot_re.search(_nfc(_ftxt))
|
||||
# Fiche sans OTOIA (faisabilite/publiciste) : pas de pied de page attendu.
|
||||
if _mfoot is None:
|
||||
if "interaction OTOIA" in _ftxt:
|
||||
bad(f"Fiches agents · {_fi} — prose « interaction OTOIA » présente "
|
||||
f"MAIS pied de page « Voix <nom> <qualif> (<voix>) » malformé/"
|
||||
f"INTROUVABLE (attendu {af_nom} {af_qual} ({af_voix}))")
|
||||
continue
|
||||
af_seen += 1
|
||||
got = (_nfc(_mfoot.group(1)), _nfc(_mfoot.group(2)), _nfc(_mfoot.group(3)))
|
||||
want = (af_nom, af_qual, af_voix)
|
||||
if got == want:
|
||||
good(f"Fiches agents · {_fi} — pied de page « Voix {got[0]} {got[1]} "
|
||||
f"({got[2]}) » == CLAUDE.md §Architecture cible")
|
||||
else:
|
||||
bad(f"Fiches agents · {_fi} — pied de page dit « {got[0]} {got[1]} "
|
||||
f"({got[2]}) » MAIS CLAUDE.md §Architecture cible dit « {want[0]} "
|
||||
f"{want[1]} ({want[2]}) » → persona/qualif/voix périmé (mettre la "
|
||||
f"fiche à jour)")
|
||||
if af_seen == 0:
|
||||
bad("Fiches agents · AUCUNE fiche ne porte le pied de page « Voix "
|
||||
f"{af_nom} {af_qual} ({af_voix}) pour toute interaction OTOIA » — la "
|
||||
f"surface d'identité voix OTOIA s'est évaporée (régression #6)")
|
||||
|
||||
# ============================================================================
|
||||
# Mobile · le SDK MAJEUR Expo (« Expo 54 ») — ANCRÉ sur la roadmap Sprint 5 l.56,
|
||||
# transcrit À LA MAIN dans le README sans AUCUN gate d'IDENTITÉ ni d'ancrage.
|
||||
|
||||
Reference in New Issue
Block a user