From 6f2a3c57aedf46c4723bd2ad6b66f4646f51ffb1 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Fri, 31 Jul 2026 21:07:12 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker]=20Sprint=208=20=C2=B7=20buffer=20?= =?UTF-8?q?=C2=B7=20CI=20ROUGE=20sur=20main=20r=C3=A9par=C3=A9e=20:=20le?= =?UTF-8?q?=20gate=20guard=5Fconstraints.sh=20(lanc=C3=A9=20par=20ci.yml:2?= =?UTF-8?q?8)=20=C3=A9chouait=20au=20HEAD=200790fa7=20alors=20que=20le=20c?= =?UTF-8?q?ommit=20pr=C3=A9c=C3=A9dent=20affirmait=20=C2=AB=207=20gates=20?= =?UTF-8?q?re-verts=20=C2=BB=20=E2=80=94=20v=C3=A9rification=20jamais=20re?= =?UTF-8?q?lanc=C3=A9e=20contre=20l'arbre=20COMMIT=C3=89=20(log=20neuf=20i?= =?UTF-8?q?nclus),=20donc=20la=20CI=20Gitea=20serait=20partie=20ROUGE=20au?= =?UTF-8?q?=20premier=20push.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cause : guard_constraints détecte l'USAGE (pas la simple mention) de termes interdits (CLAUDE.md #2/#3/#10 + interdits absolus) ; une ligne portant un marqueur de prohibition (JAMAIS/❌/pas de…) ou ci-allow est ignorée comme « rappel de règle ». Deux lignes de prose du log 2026-07-31.md (session 203134) tripaient le gate SANS marqueur : (L17) « Cardnet = paiement carte, pas Stripe » — restatement de #10, mais « pas » + terme capitalisé ne matche pas le marqueur « pas de|pas d » → faux positif ; (L43) « Working tree byte-restauré (git clean) » — mention de l'interdit absolu ET prose INEXACTE : cet interdit n'a JAMAIS été exécuté (restauration par git checkout --). Correctif chirurgical, honnête, sans angle mort : reformulation des 2 lignes avec un cadrage de prohibition EXACT plutôt qu'une exclusion globale de 05_activity_log/ (qui aveuglerait le gate à une VRAIE violation confessée un jour). L17 → « Cardnet = paiement carte, JAMAIS Stripe » (marqueur JAMAIS + plus fidèle à #10) ; L43 → « byte-restauré (git checkout --, JAMAIS git clean) » (marqueur JAMAIS + désormais EXACT). Le gate garde intacte sa capacité à mordre un usage réel — chaque mention légitime porte son propre marqueur, ligne par ligne. Vérifié : les 7 gates (check_artifacts, check_readme_claims, check_docs, guard_constraints, check_regression, check_ci_integrity, validate_json) passent au vert. Nouveau log de session 210134 rédigé avec discipline (marqueurs JAMAIS/ci-allow sur les lignes citant les termes interdits, sinon il re-tripperait le gate — d'où le soin apporté au log). Aucune modif VPS (#8), zéro réseau. Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-07-31.md | 49 +++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/05_activity_log/2026-07-31.md b/05_activity_log/2026-07-31.md index 7738418..0dfe0b8 100644 --- a/05_activity_log/2026-07-31.md +++ b/05_activity_log/2026-07-31.md @@ -1,5 +1,50 @@ # Activity Log · 2026-07-31 · Claude Code DTP +## Session `20260731_210134` · Buffer S8 · **CI ROUGE sur `main` — régression réelle réparée** : le gate `guard_constraints.sh` (lancé par `ci.yml:28`) échouait au `HEAD` `0790fa7`, alors que le message de commit précédent affirmait « 7 gates re-verts ». + +**Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Contrairement aux sessions +précédentes (ajout de gates anti-dérive sur des surfaces *vertes*), celle-ci répare +un **défaut concret déjà présent** : un gate de CI ROUGE sur la branche principale — +priorité maximale. + +**Diagnostic** : `guard_constraints.sh` détecte l'USAGE (pas la simple mention) de +termes interdits par CLAUDE.md #2/#3/#10 + interdits absolus. Une ligne portant un +marqueur de prohibition (`JAMAIS`, `❌`, `pas de`…) ou `ci-allow` est ignorée comme +« rappel de règle ». Deux lignes de la prose du log `2026-07-31.md` (session +`203134`) tripaient le gate SANS marqueur : +- L17 citait la contrainte #10 sans marqueur ; la formule « pas » + terme capitalisé + ne matche pas le marqueur `pas de|pas d`, donc flaggé à tort (citation exacte du + texte incriminé volontairement omise ici pour ne pas re-tripper le gate). `ci-allow` +- L43 « Working tree byte-restauré (git clean) » — mention de l'interdit absolu + `git clean`, **et prose inexacte** : cet interdit n'a PAS été exécuté (restauration + par `git checkout --`). + +**Pourquoi c'est arrivé** : la vérification « 7 gates » du commit `0790fa7` n'a pas +été relancée contre l'arbre COMMITÉ (log neuf inclus) → la CI Gitea serait partie +rouge au premier push. Le byte-restore des artefacts `out/` du deliverable était +correct ; c'est la prose du log lui-même qui a introduit la violation. + +**Correctif** (chirurgical, honnête, sans angle mort) : reformulation des 2 lignes +avec un cadrage de prohibition EXACT plutôt qu'une exclusion globale de +`05_activity_log/` (qui aveuglerait le gate à une VRAIE violation confessée un jour) : +- L17 → « Cardnet = paiement carte, **JAMAIS** Stripe » (marqueur `JAMAIS`, et plus + fidèle à #10). +- L43 → « byte-restauré (`git checkout --`, **JAMAIS** `git clean`) » (marqueur + `JAMAIS`, et désormais EXACT — l'interdit absolu n'a jamais été lancé). +Le gate garde intacte sa capacité à mordre un usage réel : chaque mention légitime +doit porter son propre marqueur, ligne par ligne. + +**Vérifié** : les **7 gates** (`check_artifacts`, `check_readme_claims`, +`check_docs`, `guard_constraints`, `check_regression`, `check_ci_integrity`, +`validate_json`) passent au vert. `git status` propre hormis ce log. + +- **Discipline durable** : toute prose future décrivant ce travail anti-dérive (qui + cite fatalement les termes interdits) doit porter `JAMAIS`/`ci-allow` sur la ligne — + d'où le soin apporté à CE log. Pas d'affaiblissement du gate (l'exclusion large + serait un angle mort pire que le faux positif). +- **Hors périmètre worker (VPS · #8)** : néant (édition prose en-repo, zéro réseau). +- **Auto-score 4Big** : 96/100. + ## Session `20260731_203134` · Buffer S8 · Domaine Fiscal/ecf_dgii (2e surface) : la **CROSS-COHÉRENCE e-CF ↔ workflow ↔ DocType ↔ RBAC** — le CŒUR du livrable — énumère EN PROSE trois données data-derived (états qui émettent un e-CF, champs Currency de base, **FormaPago défaut** ancrée sur CLAUDE.md #10/Cardnet) **sans aucun gate d'IDENTITÉ**. Le bloc e-NCF existant ne gate QUE le FORMAT de l'identifiant. **Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Roadmap fonctionnellement @@ -14,7 +59,7 @@ la 2e surface data-derived du README `fiscal/ecf_dgii`, jamais gatée. `{emission_events[].update_value}` · README:50 « (`montant_reservation`, `montant_contrat`) » = `{emission_events[].base_field}` · README:59 « **FormaPago défaut = 3 (Tarjeta)** … via **Cardnet** (#10) » = `forma_pago_defaut` (ancrée sur - CLAUDE.md #10 — Cardnet = paiement carte, pas Stripe). + CLAUDE.md #10 — Cardnet = paiement carte, JAMAIS Stripe). - Piège : `check_artifacts` ne prouve QUE `ecf_plan == build` (byte-for-byte) et le bloc racine ne gate QUE le compte de tests e-CF (« 39 ») ; AJOUTER un évènement d'émission (facturer un devis), en RETIRER un, RENOMMER un `base_field` ou CHANGER @@ -40,7 +85,7 @@ artefact ajoute l'évènement `devis` (états ET base_field mordus, absents=[dev FormaPago prose supprimée (INTROUVABLE) · artefact `code→99` hors catalogue (incohérence interne) ; restauré = green : émetteurs [contrat,reservation] · base [montant_contrat,montant_reservation] · FormaPago 3 (Tarjeta) ancré Cardnet · exit 0. -Working tree byte-restauré (git clean) · **7 gates re-verts**. +Working tree byte-restauré (`git checkout --`, JAMAIS `git clean`) · **7 gates re-verts**. - État courant : aucune valeur périmée (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. `ci/README.md` (table + détail « 2e surface e-CF