From 8a0806548b40b7137f05748caf10f7251b10e49f Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Sun, 2 Aug 2026 19:44:09 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260802=5F193605]=20Sprint=208?= =?UTF-8?q?=20=C2=B7=20buffer=20=C2=B7=20Faux-positif=20d'audit=20r=C3=A9c?= =?UTF-8?q?urrent=20verrouill=C3=A9=20en=20garde-fou=20in-repo=20(ci/READM?= =?UTF-8?q?E.md)=20:=20otov7-platform=20(produit)=20=E2=89=A0=20oto-enterp?= =?UTF-8?q?rise-os-dtp=20(mandat)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Audit doc-vs-réalité (fan-out exploration) sur les *.md de tête, 03_agents/*/AGENT.md, 05_deliverables_mvp/*/README.md, ci/README.md, roadmap → UNE candidate : CLAUDE.md#2 « michel/otov7-platform » vs section Git « oto-enterprise-os-dtp ». FAUX POSITIF connu (mémoire otov7-platform-not-drift) : deux dépôts Gitea distincts, tous deux corrects — otov7-platform = dépôt PRODUIT (plateforme OTOV7 cible du refactoring), oto-enterprise-os-dtp = dépôt MANDAT (ce worker). L'agent d'exploration (sans accès mémoire) l'a re-remonté → preuve que le garde-fou méritait d'être in-repo, pas seulement en mémoire privée. Action : paragraphe « Non-dérive documentée » ajouté à la section guard_constraints.sh de ci/README.md (propriétaire de #2), calqué sur la note roles_couverts « 44 » — explicite que produit ≠ mandat, qu'il ne faut PAS « aligner » CLAUDE.md#2, et qu'il n'y a rien à gater (le garde ne vérifie que l'ABSENCE de github/gitlab/bitbucket, pas l'identité d'un repo Gitea autorisé). Discipline : zéro module · zéro gate ajouté (#5) · CLAUDE.md intact (on ne « corrige » pas la constitution · #6). Recompute README concordant (22/22 scores={100} · 564/564 · 15/15 in_repo · 13 agents · gate.needs=30) = zéro dérive numérique. run_ci.sh --static 7 PASS · guard_constraints/check_docs/check_readme_claims verts (nouveau texte cite les plateformes interdites mais chaque ligne porte « interdites » → ignorée par le garde). Aucune commande touchant au VPS (#8). Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-02.md | 40 +++++++++++++++++++++++++++++++++++ ci/README.md | 14 ++++++++++++ 2 files changed, 54 insertions(+) diff --git a/05_activity_log/2026-08-02.md b/05_activity_log/2026-08-02.md index e52bbfd..90f1a28 100644 --- a/05_activity_log/2026-08-02.md +++ b/05_activity_log/2026-08-02.md @@ -1,5 +1,45 @@ # Activity log · 2026-08-02 · Claude Code DTP Worker +## Session `20260802_193605` · Sprint 8 · buffer · Faux-positif d'audit récurrent documenté en garde-fou in-repo (`ci/README.md`) : `michel/otov7-platform` (CLAUDE.md #2 · dépôt PRODUIT) ≠ `oto-enterprise-os-dtp` (dépôt MANDAT) → prévention d'une « correction » nuisible de la constitution (PAS un gate #5, PAS un module) + +**Nature — verrouiller une non-dérive contre une future « correction » nuisible, pas empiler un gate.** +Ouverture : arbre `git status --porcelain` **vide**, `run_ci.sh` **30 PASS / 0 FAIL / 0 SKIP** +(7 gates `ci/*.sh` + 23 suites module). Recompute indépendant des agrégats du README racine, +concordant : **22/22** qualité (scores = `{100}`) · **564/564** régression · **15/15** recette +(verdict `true`) · **13** agents · `gate.needs` = **30** — **zéro dérive numérique**. + +**Audit doc-vs-réalité (fan-out d'exploration).** Balayage des `*.md` de tête (README, CLAUDE.md, +AGENTS_EXISTING_ASSETS, PORTAIL_BANCABLES), `02_master_prompt/`, `03_agents/*/AGENT.md`, +`05_deliverables_mvp/*/README.md`, `ci/README.md`, `04_roadmap/`. **Une seule** candidate +remontée : CLAUDE.md ligne 16 (#2) nomme `michel/otov7-platform` là où la section *Git* (l.62) +et le README racine nomment `michel/oto-enterprise-os-dtp` — apparence de coquille contradictoire. + +**Verdict : FAUX POSITIF connu** (mémoire *otov7-platform-not-drift*). Ce sont **deux dépôts +Gitea distincts, tous deux corrects** : `otov7-platform` = dépôt du **produit** (plateforme OTOV7 +en construction, cible du refactoring) ; `oto-enterprise-os-dtp` = dépôt de **mandat** (ce worker). +La contrainte #2 verrouille le produit ; la section *Git* précise où vit le mandat. « Aligner » +#2 sur le nom du mandat **corromprait la constitution**. L'agent d'exploration (sans accès à ma +mémoire) l'a re-remonté cette session — preuve que le garde-fou méritait d'être **in-repo**, pas +seulement dans ma mémoire privée. + +**Action — garde-fou documenté, à la manière de la « Non-surface documentée » existante.** +Ajout d'un paragraphe **« Non-dérive documentée »** dans la section `guard_constraints.sh` de +`ci/README.md` (propriétaire de la contrainte #2), calqué sur la note `roles_couverts` (« 44 » +non cross-gaté). Il explicite : produit ≠ mandat, ne pas « corriger » CLAUDE.md #2, et pourquoi +il n'y a **rien à gater** (le garde ne vérifie que l'**absence** de plateformes interdites +github/gitlab/bitbucket, pas l'identité d'un repo Gitea autorisé). **CLAUDE.md non touché.** + +**Discipline (#5/#6).** **Zéro nouveau module · zéro gate ajouté** — pure documentation d'une +non-dérive, dans le fichier qui héberge déjà ce type de garde-fou. **CLAUDE.md intact** (on ne +« corrige » pas la constitution). Le nouveau texte cite github/gitlab/bitbucket mais chaque +occurrence est sur une ligne portant un marqueur de prohibition (« interdites ») → **ignorée** +par `guard_constraints` (vérifié vert). `check_docs` (liens) + `check_readme_claims` verts. + +**Clôture.** `run_ci.sh --static` → **7 PASS / 0 FAIL / 0 SKIP**. Aucune commande touchant au +VPS (`153.75.250.214` · #8). Prochaine tâche : buffer Sprint 8 toujours en **veille saturée** +(fiches 13/13 closes, gates saturés) — ne durcir un gate que si un blind-spot est **prouvé par +mutation-test** (*verify-uncovered-before-gating*), jamais un gate redondant (#5). + ## Session `20260802_183604` · Sprint 8 · buffer · Dérive doc-vs-réalité (README racine) : la ligne « Régression » affirmait `regression_run.json` « non commité par design » — FAUX depuis la refonte baseline byte-gatée (`76fb0e7`) → correction de vérité (PAS un gate #5, PAS un chiffre inventé #6) **Nature — dérive réelle non gatée, corrigée par la vérité (pas un gate de plus).** diff --git a/ci/README.md b/ci/README.md index 8b644ee..3d59ee1 100644 --- a/ci/README.md +++ b/ci/README.md @@ -74,6 +74,20 @@ Détecte l'**usage** (pas la simple mention) de : (`jamais`, `❌`, `only`, `pas de`, `interdit`…) est un rappel de règle → ignorée. Escape hatch documenté : ajouter `ci-allow` sur une ligne pour l'exclure. +**Non-dérive documentée — `michel/otov7-platform` (CLAUDE.md #2) N'EST PAS une coquille +de `michel/oto-enterprise-os-dtp`, à ne PAS « corriger ».** Un audit doc-vs-réalité relève +périodiquement que la contrainte #2 nomme `michel/otov7-platform` (port 3015) tandis que la +section *Git* de CLAUDE.md et le README racine nomment `michel/oto-enterprise-os-dtp` — d'où +un soupçon de faute de frappe dans deux docs qui se contrediraient. **Ce sont deux dépôts +Gitea distincts, tous deux corrects** : `otov7-platform` est le dépôt du **produit** (la +plateforme OTOV7 en cours de construction, cible du refactoring), `oto-enterprise-os-dtp` est +le dépôt de **mandat** (ce worker, ses générateurs et hand-off). La contrainte #2 verrouille +la plateforme *produit* sur Gitea ; la section *Git* précise où vit le *mandat*. Aucune des +deux ne ment. **Ne pas « aligner » CLAUDE.md #2 sur le nom du mandat** — ce serait corrompre +la constitution (mémoire *otov7-platform-not-drift*). Le garde `guard_constraints.sh` ne +vérifie que l'**absence** de plateformes interdites (github/gitlab/bitbucket), pas l'identité +d'un repo Gitea autorisé — donc rien à gater ici (#5). + ### `validate_json.sh` Parse chaque `*.json` suivi (dont `version.schema.json` et `projets_master.schema.json`, contrat de données Faisabilité → Publiciste).