Commit Graph

20 Commits

Author SHA1 Message Date
Claude Code DTP Worker 4d9af3a6b8 [DTP-Worker] Sprint 8 · buffer L75 · Domaine CRM : le pipeline vente « 9 états · 11 transitions » était transcrit À LA MAIN dans DEUX README de module (titre du module workflow_vente + « 9 états du pipeline » de dossier_vente, même compte du même graphe) sans AUCUN gate — ajouter un état/une transition ferait dériver les deux docs en silence pendant que crm/workflow_vente/out/MANIFEST.json (byte-gaté par check_artifacts, counts recomptés du workflow_vente_spec.json) dit autre chose → nouveau bloc dans check_readme_claims recomputant (states + transitions) depuis MANIFEST.counts et exigeant l'égalité avec les deux docs (4 morsures : dérive états titre · dérive transitions captée là où états seul est aveugle · dérive états 2e doc · claim disparu)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 09:36:11 +00:00
Claude Code DTP Worker 6f6a01a472 [DTP-Worker] Sprint 8 · buffer L75 · Domaine SEO : le total ET la ventilation par langue des mots-clés (« 258 (fr=87·en=87·es=84) ») étaient transcrits À LA MAIN dans DEUX docs (table du README module seo + ligne de la fiche agent seo) sans AUCUN gate — ajouter un projet/vocabulaire ferait dériver les deux docs en silence pendant que seo/out/MANIFEST.json (byte-gaté par check_artifacts, counts recomptés de projets_master.json) dit autre chose → nouveau bloc dans check_readme_claims recomputant le quadruplet (total + fr/en/es) depuis MANIFEST.counts et exigeant l'égalité avec les deux docs (3 morsures : dérive total · compensation entre langues captée là où le total seul est aveugle · claim disparu)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 09:04:41 +00:00
Claude Code DTP Worker b7fa3bf8c8 [DTP-Worker] Sprint 8 · buffer L75 · Surface RBAC non gatée : 3 READMEs de module (roleprofile · apply_plan · userperm) recopiaient À LA MAIN des comptes dérivés des out/MANIFEST.json byte-gatés (recalculés du contrat rbac_50_roles.json à chaque build) sans AUCUN gate — table « Nb rôles » par profil (6 lignes + total bijectif 50), ligne agrégée « 6 étapes · 50 rôles / 116 DocPerm / 28 UP templates / 6 Role Profile · 4 DocType custom + 5 Company + 4 rôles » (8 comptes de tous les volets) et ventilation « 28 entite · 16 groupe · 2 own · 4 equipe » ; ajouter un rôle/DocType ferait dériver les trois docs en silence → nouveau bloc dans check_readme_claims recomputant chaque nombre depuis le MANIFEST du volet (10 checks · 3 morsures vérifiées : dérive par-profil · dérive agrégat consolidé · dérive ventilation ; claim absent = red)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 08:36:33 +00:00
Claude Code DTP Worker 56e64d6089 [DTP-Worker] Sprint 8 · buffer L75 · Hors du domaine « tests » : les comptes PAR WORKSPACE (cartes/liens/rôles) des 5 portails frontend étaient transcrits À LA MAIN dans DEUX docs (table du README module + prose de la fiche frontend_console) sans AUCUN gate — ajouter un rôle/DocType au contrat RBAC ferait dériver les deux docs en silence pendant que frontend/portails/out/MANIFEST.json (byte-gaté par check_artifacts) dit autre chose → nouveau bloc dans check_readme_claims recomputant chaque triplet + le total « N Workspace natifs » depuis MANIFEST.workspaces et exigeant l'égalité avec les deux docs (4 morsures : dérive table · dérive prose captée là où la table est aveugle · cellule disparue · total)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 08:06:10 +00:00
Claude Code DTP Worker d7fc6bab26 [DTP-Worker] Sprint 8 · buffer L75 · Dernière surface de la classe « compte par suite » : les agrégats de tests EN PROSE (crm « 81 (25+31+25) » · erpnext_backend « RBAC 60 (10+11+12+11+16) + e-CF 39 ») n'étaient couverts par AUCUN gate — une compensation entre suites laisserait la table gatée juste et la prose fausse → recompute total ET multiset des composants (ordre-indépendant) depuis plan.suites dans check_readme_claims (3 morsures : total périmé · compensation captée par le multiset · claim disparu)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 07:39:08 +00:00
Claude Code DTP Worker 9038417db8 [DTP-Worker] Sprint 8 · buffer L75 · « Vert trompeur » ironique : le README de l'auditeur 4Big (le module qui COMPTE les modules) figeait son propre total à la main « 17/17 modules » alors que quality_report.json en dit 22 — non gaté (check_readme_claims ne couvrait que le README d'entrée, pas ce README de module ; auditeur auto-exclu SoD ⇒ 0 signal) → 17→22 + règle L38 rendue count-free + bloc gate recomputant verdict/pass/modules/min_score depuis totals (2 morsures)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 07:07:23 +00:00
Claude Code DTP Worker 402727411d [DTP-Worker] Sprint 8 · buffer L75 · Comptes de tests PAR SUITE périmés dans la fiche QA (col « Tests ») : audit_4big 35→34 · regression 25→26 · acceptance 31→37 — dérive silencieuse non gatée (seule la somme 564 l'était ; une compensation +1/−1 passerait) → recompute générique des cellules par-suite depuis plan.suites/count_tests dans check_readme_claims (10 lignes vérifiées) + 3 nombres corrigés
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 06:39:46 +00:00
Claude Code DTP Worker 11f1250b29 [DTP-Worker] Sprint 8 · buffer L75 · Comptes vivants "551 tests" périmés DANS la machinerie CI (ci.yml + check_regression.sh + check_readme_claims.sh), non gatés → renvoi artefact (→558)
Même classe de vert-trompeur que ci/README.md (session 050007) mais dans le
code des gates : 3 comptes vivants figés "22 suites · 551 tests · PASS" (matrice
534→551→558). L'ironie : le header de check_regression — le gate anti-péremption
de la matrice — s'était lui-même périmé. Fix précédent 050007 : suppression de la
surface de dérive (retrait du nombre figé → renvoi à regression_run.json), pas
551→558. Progressions historiques "534→551→558" conservées. 7 gates verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 05:34:20 +00:00
Claude Code DTP Worker 0cde935a39 [DTP-Worker] Sprint 8 · buffer L75 · Chiffre vivant périmé dans la doc du CI : ci/README.md illustrait check_regression par "551 tests" (→558) + décrivait 2 docs gatés au lieu de 3 (fiche Backend omise)
- ci/README.md:80 : compte vivant figé "22 suites · 551 tests" (périmé, matrice=558)
  remplacé par un renvoi au recompute check_readme_claims → zéro surface de dérive (#6)
- ci/README.md:130 : "le run réel 22/551" (présent, faux) → reformulé point-in-time ;
  534 conservé comme anecdote historique du défaut corrigé
- ci/README.md:121-134 : "les deux docs d'entrée" → "les trois" + ajout du bloc
  fiche ERPNext Backend (couverture ajoutée session 043004, omise du doc) → doc == code
- 7 gates verts ; check_artifacts inchangé (édition hors 05_deliverables_mvp)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 05:09:49 +00:00
Claude Code DTP Worker 504bfb0f10 [DTP-Worker] Sprint 8 · buffer L75 · Chiffre périmé fiche agent : "repo 560 tests" (vert-trompeur ungated) → 558/22 sourcé matrice + gate étendu
Défaut réel (#6 anti-invention) : 03_agents/erpnext_backend/AGENT.md situait les
tests backend par "repo : 560 tests au total" saisi à la main. 560 ne correspond à
aucun compte courant (matrice qa/regression = 558/22 ; repo-wide = 584 méthodes
test_*) — périmé en silence (534→551→558 ; 560 = ancien 534 + 26 harnais self-exclu
INV3). Même classe de vert-trompeur que la fiche QA (21/534), mais ungated.

- Vérif ciblée : toutes les autres bornes chiffrées des 13 AGENT.md exactes
  (crm 81, RBAC 60, e-CF 39, portails 19, chat 31, confotur 44, seo 36).
- Fix : le nombre pointe désormais vers l'artefact gaté (regression_run.json).
- Gate : ci/check_readme_claims.sh recalcule tests+suites+verdict depuis
  regression_run et exige l'égalité avec la fiche backend (comme la fiche QA).
- Preuve morsure : 560 réinjecté ⇒ gate rouge ; restauré ⇒ vert.
- 7 gates verts ; édition doc ⇒ aucune dérive out/ (check_artifacts vert).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 04:36:20 +00:00
Claude Code DTP Worker c858e193e0 [DTP-Worker] Sprint 8 · buffer L75 · Gate intégrité chiffres : étendu à la fiche QA (vert-trompeur 21/534)
Fix vert-trompeur hors périmètre du gate README (session précédente) :
- 03_agents/qa/AGENT.md « Verdict agrégé courant » affichait 21 suites·534 tests
  (PASS) en se disant « jamais compté à la main » — figé à la main, périmé vs le
  run réel 22/551. Corrigé 21/534→22/551.
- ci/README.md : exemple 21·534→22·551 + checklist DevOps 6→7 gates statiques.
- Correctif de fond : ci/check_readme_claims.sh RECOMPUTE désormais aussi le compte
  agrégé de la fiche QA depuis regression_run.json (somme des suites commitées) ; un
  claim absent échoue aussi. Portée du gate élargie README + fiche QA (en-tête script
  + ci/README.md §1/§2). Bites : 21/534 → exit1 diff explicite ; claim retiré → exit1.

7 gates verts (dont check_artifacts : aucune dérive out/). Matrice 551/22 PASS inchangée.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 03:36:26 +00:00
Claude Code DTP Worker 97f859b6a5 [DTP-Worker] Sprint 8 · buffer L75 · Gate intégrité chiffres README (ci/check_readme_claims.sh)
Faux-vert réel : le README (point d'entrée) affichait des chiffres PÉRIMÉS
que sa propre source cité contredisait, sans qu'aucun gate ne les enforce.
check_docs ne valide que les LIENS, jamais la VALEUR des nombres → dérive
silencieuse : « 21/21 modules » (artefact: 22/22), « 21 suites » (22),
« 14 in_repo + 1 out_of_scope » (15 in_repo). CLAUDE.md #6 non gardé.

Fix : (1) corrige les 3 chiffres du README ; (2) 7e gate statique
check_readme_claims.sh qui RECOMPUTE chaque chiffre depuis l'artefact cité
(audit_4big/regression/acceptance + count AGENT.md) et exige l'égalité avec
l'écrit — un claim absent échoue aussi. Câblé : job check-readme-claims ∈
gate.needs (30 jobs), source lib.sh, verrouillé par check_ci_integrity INV-B.

Bite proofs : « 21/21 » réintroduit ⇒ exit 1 (README≠artefact) ; claim suites
retiré ⇒ exit 1 (INTROUVABLE) ; restauré ⇒ exit 0. Nettoyage : commentaires
CI « 21 suites/534 tests » → 22/551. 7/7 gates verts, YAML valide.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 03:10:19 +00:00
Claude Code DTP Worker 1da26db22e [DTP-Worker] Sprint 8 · buffer L75 · Fix "vert trompeur" : les 6 gates ci/*.sh passaient exit 0 VERT hors d'un arbre git (cd "$(git rev-parse …)" → cd "" no-op succès → git ls-files vide → 0 fichier contrôlé). Helper partagé ci/lib.sh::cd_repo_root échoue bruyamment (exit 3). INV-B (check_ci_integrity) durci : un ci/*.sh est câblé s'il est lancé par un job OU sourcé par un gate (prouve que lib.sh n'est pas mort).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 02:09:55 +00:00
Claude Code DTP Worker a30ff937f0 [DTP-Worker] Sprint 8 · buffer L75 · Reproductibilité checkout propre : hand-off out/ des 4 générateurs RBAC était .gitignore-é (gate rouge en CI, vert local seulement) + durcissement check_artifacts (build produit ⇒ DOIT être suivi par git)
Défaut réel (même classe que le bug regression_run.json corrigé plus tôt) :
les 4 générateurs RBAC (fixtures_gen/userperm_gen/roleprofile_gen/apply_plan)
.gitignore-aient leur out/, alors qu'ils sont audités en archétype `generator`
(critère HANDOFF). En checkout PROPRE (git archive HEAD = ce que voit le runner
Gitea) leur out/ est absent → qa/audit_4big (dont le build relit le out/ de
CHAQUE module) les note 80<95 ⇒ INV7 ⇒ build refusé ⇒ check-artifacts ET
check-regression ROUGES. Ça ne passait qu'en local via les out/ non suivis
laissés par des build manuels.

Fix : committer le out/ des 4 générateurs (build byte-déterministe prouvé ;
apply_plan lit ses frères en process, pas via out/) → alignement sur les 15
autres générateurs ; audit 100/100 en checkout propre.

Durcissement : check_artifacts.sh exige désormais `git ls-files --error-unmatch`
sur chaque fichier produit → un out/ ignoré/non commité devient une erreur
LOCALE honnête au lieu d'une surprise en CI. Bite-proof : git rm --cached d'un
artefact (laissé sur disque) ⇒ exit 1 ; re-add ⇒ exit 0.

Régénéré : quality_report.json (dérive DOC = taille des 4 README édités).
Vérifs : 6 gates verts sur git archive propre ; 534/21 inchangé ; suites OK.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 01:42:14 +00:00
Claude Code DTP Worker 59542e8f3c [DTP-Worker] Sprint 8 · buffer L75 · Gate intégrité câblage CI (ci/check_ci_integrity.sh) : gate.needs ⊇ tous jobs non-manuels + chaque ci/*.sh verrouillé au gate
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 01:06:36 +00:00
Claude Code DTP Worker 0eaf5bde39 [DTP-Worker] Sprint 8 · buffer L75 · Gate fraîcheur matrice régression (ci/check_regression.sh) : run==commité + verdict PASS
L'artefact le plus cité du dépôt (qa/regression/out/regression_run.json ·
21 suites · 534 tests · PASS) n'avait aucun garde-fou CI : check_artifacts
ne rejoue que 'build' et exclut les artefacts d'exécution 'run'. Nouveau
5e gate statique rejoue 'regression_gen.py run' (~5s, déterministe) et exige
byte-identité + verdict PASS. Rend impossible la re-commission d'une matrice
périmée (dérive type demo 18->21) ou rouge commitée verte. parse_ci inchangé
(gate sans working-directory) → 0 dérive des counts dérivés (check_artifacts
exit 0). Preuve de morsure OK (534->999 => exit 1). 5 gates verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 00:07:14 +00:00
Claude Code DTP Worker e16c4f676d [DTP-Worker] Sprint 8 · buffer · Gate reproductibilité artefacts (ci/check_artifacts.sh) + fix dérive run_sheet demo 18→21
Nouveau gate CI bloquant : régénère chaque 05_deliverables_mvp/**/out/ depuis son
générateur `build` et exige l'égalité byte-for-byte avec le fichier commité
(découverte auto · stdlib pur · zéro pip). Attrape la dérive silencieuse d'un
artefact qui auto-résout une valeur depuis un autre module et devient périmé quand
la source grandit — dérive qu'aucune suite tests/ (fonctions, pas fichier commité)
n'attrapait.

Défaut détecté et corrigé par ce gate : demo/scenarios/out/run_sheet.json
embarquait ci_modules_count=18 (buildé Sprint 7) alors que qa/audit_4big en compte
désormais 21. Régénéré (diff 1 ligne). Consistance live re-vérifiée.

Wiring : job check-artifacts + needs du gate agrégé (.gitea/workflows/ci.yml) ·
doc (ci/README.md). Vérifs : test négatif du gate OK (dérive → EXIT 1), 4 gates
statiques EXIT 0, suites CI-parsing vertes (regression/acceptance/audit_4big/demo),
21/21 suites · 534 tests, compteurs dérivés stables.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 23:38:15 +00:00
Claude Code DTP Worker 535bc83e0d [DTP-Worker] Sprint 8 · buffer L75 · Gate 4Big check_docs 0 faux positif (fixtures data_room exclues + spec CHOISIR scorée 95/100)
- ci/check_docs.sh : exclut */fixtures/data_room/* du gate SOFT auto-score
  (inputs de test synthétiques, cf. publiciste/fixtures/README.md ; même
  statut que daily_reports/*). Portée précise : fixtures/README.md reste gaté.
- specs/CHOISIR_MON_UNITE_SPEC.md : ajoute une section Auto-score 4Big 95/100
  (livrable spec, contrainte #5) ; P01=2.484M USD cité verbatim de la spec (#6).
- Resultat : 9 avertissements documentaires -> 0. Gates vertes (check_docs,
  guard_constraints, validate_json tous EXIT 0).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 23:02:54 +00:00
Claude Code DTP Worker 9f8e0f3fcc [DTP-Worker] Sprint 8 · buffer L75 · Fix CI check_docs : ignore les liens en code-span (faux positif → gate verte) 2026-07-30 21:02:44 +00:00
Claude Code DTP Worker 1cfb8191f4 [DTP-Worker] Sprint 1 · CI/CD Gitea Actions (gate qualité 4Big · DevOps)
Débloque le dernier livrable DevOps Sprint 1 authorable en-repo (GAP §7).

- .gitea/workflows/ci.yml : pipeline Gitea Actions (Gitea ONLY, jamais GitHub)
  4 jobs : constraints-guard · validate-json · check-docs · gate agrégat.
- ci/guard_constraints.sh : enforce contraintes NON-NÉGOCIABLES CLAUDE.md
  (GitHub/GitLab/Bitbucket #2 · EspoCRM/HubSpot #3 · Stripe #10 ·
  /var/www/html/static · git clean · remote non-Gitea).
  Heuristique zéro faux positif (ignore lignes de prohibition) + escape ci-allow.
- ci/validate_json.sh : parse strict schémas Faisabilité↔Publiciste.
- ci/check_docs.sh : liens Markdown internes [HARD] + auto-score 4Big [SOFT].
- ci/README.md : doc pipeline + procédure enregistrement act_runner (VPS/DevOps).
- GAP_ANALYSIS §7 : critère CI/CD Gitea Actions -> done (runner VPS restant).

Validé localement : 3 scripts verts (exit 0) sans faux positif ;
test négatif (hubspot+github.com) -> guard exit 1 correct.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-30 00:30:40 +00:00