[DTP-Worker 20260802_013501] Sprint 8 · buffer · CRM Dossier Vente : gate d'IDENTITÉ du COMPTE D'INVARIANTS de _validate (5ᵉ instance du ledger)
5ᵉ instance de la classe « ledger d'invariants » (après Chat OTOIA · SEO · Fiscal e-CF · Legal CONFOTUR). Le compte « 12 invariants » de crm/dossier_vente/doctype_dossier_vente_gen.py était transcrit à la main à 7 endroits (4 chaînes du .py + 3 du README : commande, titre « ## Les 12 invariants », prose de score), aucun gaté — invisibles à check_artifacts (le .py n'est pas un out/*.json) et aux suites tests/ (qui testent des fonctions, pas la prose). Ajouter un contrôle # 13 · sans toucher les 7 chaînes ⇒ CI applique 13 contrôles pendant que docs+self-reports disent 12 en silence (vert trompeur · #6). Ledger PROPRE 1..12 (≈ CONFOTUR) : schéma compté à part (« schéma + N invariants »), pas de schéma-#1 non marqué, pas de split a/b ; détection de doublon nu conservée en filet. Le gate RECOMPUTE le ledger depuis le seul registre-source (# N · de _validate) et exige (a) ledger contigu 1..N ; (b) toute mention « N invariants » du .py == |ledger| ; (c) annonce du titre README == |ledger| ; (d) toute mention README == |ledger| ; (e) énumération numérotée de la section contiguë 1..N. 5 checks verts sur l'arbre propre. 7 morsures adversariales (M1 self-report .py · M2 titre README · M3 prose README · M4 ajout # 13 · = ledger 13 vs prose 12, mord .py+README+énumération = autorité au CODE · M5 gap # 7 · · M6 doublon nu # 5 · · M7 énumération 7→8). 6 gates re-verts exit 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,60 @@
|
||||
# Activity log · 2026-08-02 · Claude Code DTP Worker
|
||||
|
||||
## Sprint 8 · buffer · CRM Dossier Vente — gate d'IDENTITÉ du COMPTE D'INVARIANTS de `_validate` (5ᵉ instance du ledger)
|
||||
|
||||
**Contexte** — Série anti-dérive Sprint 8 (CLAUDE.md #6 « zéro invention de
|
||||
chiffres »). Le pattern « ledger d'invariants » (recompute le nombre de contrôles
|
||||
CI depuis le registre-source `# N ·` de `_validate`, jamais une liste à la main)
|
||||
a déjà couvert **Chat OTOIA**, **SEO**, **Fiscal e-CF** et **Legal CONFOTUR**. Le
|
||||
**5ᵉ générateur** portant le même nombre magique restait NON gaté :
|
||||
`crm/dossier_vente/doctype_dossier_vente_gen.py` (candidats restants recensés :
|
||||
`qa/audit_5d` ·15, `crm/commissions` ·10, tous ledgers propres non gatés).
|
||||
|
||||
Le compte **« 12 invariants »** y est transcrit **à la main à SEPT endroits**,
|
||||
aucun gaté, tous invisibles à `check_artifacts` (le `.py` source n'est pas un
|
||||
`out/*.json`) :
|
||||
1. docstring module (l.14 « schéma + 12 invariants de ») ;
|
||||
2. docstring `_validate` (l.77 « 12 invariants de cross-cohérence ») ;
|
||||
3. message de succès CLI `validate` « … schéma + 12 invariants verts. » (l.218) ;
|
||||
4. aide du sous-parseur `validate` (l.230) ;
|
||||
5. README bloc de commande « schéma + 12 invariants » (l.56) ;
|
||||
6. README titre de section « ## Les 12 invariants » (l.60) ;
|
||||
7. README prose de score « 12 invariants de cross-cohérence » (l.83).
|
||||
|
||||
Ajouter un contrôle `# 13 ·` à `_validate` sans toucher les 7 chaînes ⇒ le README
|
||||
ET les self-reports du `.py` mentent en silence pendant que la CI applique 13
|
||||
contrôles. Aucune suite `tests/` (qui teste des FONCTIONS de validation, pas la
|
||||
prose) n'attrape ce « vert trompeur ».
|
||||
|
||||
**Particularité du registre Dossier Vente** (≈ CONFOTUR, ≠ Fiscal) : le ledger est
|
||||
**PROPRE 1..12** — le **schéma est compté À PART** (phrasé « schéma + N invariants »),
|
||||
donc **pas de schéma-#1 non marqué** et **pas de split a/b**. On garde néanmoins la
|
||||
détection de doublon nu comme filet. Le README porte AUSSI une **énumération
|
||||
numérotée** sous le titre de section (item 1 = conformité au schéma, puis les
|
||||
contrôles), gatée en contiguïté 1..N.
|
||||
|
||||
**Gate ajouté** (`ci/check_readme_claims.sh`, bloc « CRM · Dossier Vente · IDENTITÉ
|
||||
du COMPTE D'INVARIANTS ») — RECOMPUTE le ledger depuis le SEUL registre-source
|
||||
(`# N ·` de `_validate`) et exige :
|
||||
- **(a)** ledger CONTIGU 1..N (lacune OU doublon nu = vrai défaut de registre) ;
|
||||
- **(b)** toute mention « N invariants » du `.py` == |ledger| ;
|
||||
- **(c)** l'annonce du titre README « ## Les N invariants » == |ledger| ;
|
||||
- **(d)** toute mention « N invariants » du README == |ledger| ;
|
||||
- **(e)** l'ÉNUMÉRATION numérotée de la section (« 1. … 2. … N. ») contiguë 1..N.
|
||||
Une mention ou le registre absent échoue AUSSI (traçabilité #6).
|
||||
|
||||
**Vérif** — 5 checks verts sur l'arbre propre (ledger 1..12 = 12 marqueurs `# N ·`,
|
||||
schéma compté à part). **7 morsures** adversariales : M1 self-report `.py` 12→13
|
||||
(b) · M2 titre README 12→13 (c+d) · M3 prose README 12→13 (d) · **M4 ajout marqueur
|
||||
`# 13 ·` ⇒ ledger→13 pendant que la prose reste 12 (mord `.py` ET README ET
|
||||
l'énumération, preuve que l'autorité est le CODE)** · M5 suppression `# 7 ·` ⇒ gap
|
||||
non-contigu (a) · M6 doublon nu `# 5 ·` ⇒ détection de vrai doublon (a) · M7
|
||||
énumération README 7.→8. ⇒ deux 8/pas de 7 (e). Gates re-verts : `check_artifacts`
|
||||
· `check_docs` · `guard_constraints` · `check_ci_integrity` · `check_regression` ·
|
||||
`check_readme_claims` tous exit 0.
|
||||
|
||||
---
|
||||
|
||||
## Sprint 8 · buffer · Legal CONFOTUR — gate d'IDENTITÉ du COMPTE D'INVARIANTS de `_validate` (4ᵉ instance du ledger)
|
||||
|
||||
**Contexte** — Série anti-dérive Sprint 8 (CLAUDE.md #6 « zéro invention de
|
||||
|
||||
Reference in New Issue
Block a user