[DTP-Worker 20260802_023503] Sprint 8 · buffer · CRM Commissions : gate d'IDENTITÉ du COMPTE D'INVARIANTS de _validate (7ᵉ instance du ledger · série close)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-02 02:39:14 +00:00
parent bf11db6d85
commit aab89a6032
2 changed files with 178 additions and 0 deletions
+57
View File
@@ -1,5 +1,62 @@
# Activity log · 2026-08-02 · Claude Code DTP Worker
## Sprint 8 · buffer · CRM Commissions — gate d'IDENTITÉ du COMPTE D'INVARIANTS de `_validate` (7ᵉ 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**, **Legal CONFOTUR**,
**CRM Dossier Vente** et **QA Audit 5D**. Le **7ᵉ générateur** — dernier candidat
restant recensé au ledger (`crm/commissions` ·10) — était NON gaté :
`crm/commissions/commissions_gen.py` (barème de commissions vendeurs · roadmap l.51).
Le compte **« 10 invariants »** y est transcrit **à la main à CINQ endroits**,
aucun gaté, tous invisibles à `check_artifacts` (le `.py` source n'est pas un
`out/*.json`) :
1. message de succès CLI `validate` « … schéma + 10 invariants verts. » (l.209) ;
2. aide du sous-parseur `validate` « schéma + 10 invariants » (l.221) ;
3. README bloc de commande « schéma + 10 invariants » (l.60) ;
4. README titre de section « ## Les 10 invariants » (l.64) ;
5. README prose de score « 10 invariants de cross-cohérence » (l.92).
Ajouter un contrôle `# 11 ·` à `_validate` sans toucher les 5 chaînes ⇒ le README
ET les self-reports du `.py` mentent en silence pendant que la CI applique 11
contrôles. Aucune suite `tests/` (qui teste des FONCTIONS de validation, pas la
prose) n'attrape ce « vert trompeur ».
**Particularité du registre Commissions** (≈ Dossier Vente) : le ledger est
**PROPRE 1..10** — 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 la
détection de doublon nu comme filet. Le module porte AUSSI un **SECOND nombre**
« **25 tests** » (la suite unittest, déjà gatée par ailleurs) présent dans le
README : l'ancre sur le mot « invariants » l'exclut nativement (« 25 tests » ≠
« invariants ») ⇒ aucun faux positif. Comme Dossier Vente, ce README A un titre
« ## Les N invariants » ET une énumération numérotée du ledger → on gate (a)(b)(c)(d)(e).
**Gate ajouté** (`ci/check_readme_claims.sh`, bloc « CRM · Commissions · 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 · anti-évaporation).
**Vérif** — 5 checks verts sur l'arbre propre (ledger 1..10 = 10 marqueurs
`# N ·`, schéma compté à part). **7 morsures** adversariales : M1 self-report
`.py` 10→11 (b) · M2 titre README 10→11 (c+d) · M3 prose README 10→11 (d) · **M4
ajout marqueur `# 11 ·` ⇒ ledger→11 pendant que la prose reste 10 (mord `.py` ET
README titre/mention 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). Le distinct
« 25 tests » reste INVISIBLE au gate (ancre « invariants »). Gates re-verts :
`check_artifacts` · `check_docs` · `guard_constraints` · `check_ci_integrity` ·
`check_regression` · `check_readme_claims` tous exit 0. **Série ledger close : les
7 générateurs portant le nombre magique d'invariants sont désormais tous gatés.**
---
## Sprint 8 · buffer · QA Audit 5D — gate d'IDENTITÉ du COMPTE D'INVARIANTS de `_validate` (6ᵉ instance du ledger)
**Contexte** — Série anti-dérive Sprint 8 (CLAUDE.md #6 « zéro invention de