Claude Code DTP Worker
8961e14ff5
[DTP-Worker] Sprint 8 · buffer L75 · Domaine CRM (2e surface) : la phrase « SÉPARATION DES POUVOIRS » du README workflow_vente ÉNUMÉRAIT À LA MAIN ses transitions quatre-yeux (« confirmer réservation, signer contrat, approuver CONFOTUR, annuler/résilier — allow_self_approval = 0 ») sans AUCUN gate d'IDENTITÉ. Le bloc CRM existant gate le COMPTE états/transitions (9/11 · titre pipeline README workflow + « N états » README dossier_vente) MAIS PAS l'IDENTITÉ des transitions marquées separation_of_duties — surface data-derived distincte du MÊME README. Cet ensemble dérive de crm/workflow_vente/out/workflow.json (byte-gaté par check_artifacts) : chaque transition porte allow_self_approval ; l'ensemble QUATRE-YEUX = {action | allow_self_approval == 0} — précisément ce que le README énumère. Le bloc de COMPTE reste AVEUGLE au contenu : (a) DÉCLASSER une transition sensible (ex. « Signer contrat » repasse à self=1 dans le contrat) laisse le compte à 9/11 pendant que l'artefact retire l'action de l'ensemble — la prose reste à 5 actions FAUSSES ; (b) PROMOUVOIR une transition (« Déposer CONFOTUR » → self=0) l'ajoute sans que le compte bouge et la prose l'OMET ; (c) un ÉCHANGE/RENOMMAGE d'action passe aussi — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de graphe, pas la prose) n'attrape → nouveau bloc dans check_readme_claims recomputant l'ENSEMBLE des actions quatre-yeux depuis workflow.json (zéro duplication du flag du générateur) et exigeant que la phrase l'énumère EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff), normalisation casse ignorée + suffixe « (perdu) » élidé (les deux transitions vers l'état Perdu — Annuler/Résilier — que la prose groupe « annuler/résilier »). Même patron que l'énumération des onglets Mobile, des open items de l'audit 5D ou de la carte de renormalisation 4Big. Cohérence croisée en bonus : 0 < |quatre-yeux| < |transitions| (l'ensemble sensible est NON VIDE — sinon la garde est vacante — et STRICT — sinon tout le graphe serait bloqué en quatre-yeux). Un claim absent échoue AUSSI (4 morsures vérifiées : déclassement Signer contrat capté là où le compte reste 9/11 · promotion Déposer CONFOTUR captée · échange prose signer contrat→signer bail capté · énumération supprimée = INTROUVABLE ; restauré = green : {annuler, approuver confotur, confirmer réservation, résilier, signer contrat} == workflow.json). État courant : aucune action périmée (anti-invention #6 , rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 15:37:13 +00:00
Claude Code DTP Worker
c5ac020270
[DTP-Worker] Sprint 8 · buffer L75 · Domaine Mobile (2e surface) : la ligne récap du README de l'app Expo ÉNUMÉRAIT À LA MAIN ses 5 onglets « (Ventes/Construction/Achat/Compta/Direction) » sans AUCUN gate d'IDENTITÉ. Le bloc mobile existant recompute le QUADRUPLET de la ligne (onglets · rôles couverts · langues · identifiants a_confirmer) depuis MANIFEST.counts, MAIS son patron du compte matche la parenthèse par \([^)]*\) et en IGNORE le contenu — surface data-derived distincte du MÊME README, même ligne. Cette liste dérive de mobile/app_config/out/role_navigation.json (byte-gaté par check_artifacts) : un onglet par portail métier du contrat RBAC (bijection 1 onglet ⇔ 1 portail, plateforme exclu), chaque entrée = son label « OTO <Nom> » ; nom court énuméré = label sans le préfixe « OTO ». Le bloc mobile ne gate QUE le COMPTE (« 5 onglets ») : un ÉCHANGE (Ventes→Marketing) laisse le compte à 5 — le compteur reste AVEUGLE — pendant que l'artefact dit autre chose ; un RETRAIT (Compta absent) fait tomber l'énumération à 4 tandis que « 5 onglets » reste juste ; un RÉORDRE passe aussi — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS, pas la prose) n'attrape → nouveau bloc dans check_readme_claims recomputant la LISTE ORDONNÉE des noms courts depuis role_navigation (zéro duplication de la navigation du générateur #6 ) et exigeant que la parenthèse l'énumère EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus via set-diff), puis ORDRE. Même patron que l'énumération des confirmations DevOps, la carte de renormalisation par archétype 4Big ou la table « Verdict courant » de l'audit 5D. Cohérence croisée en bonus : len(role_navigation) == MANIFEST.counts.onglets == MANIFEST.counts.portails (la bijection du générateur) — mord un compteur du manifeste désynchronisé de sa navigation. Un claim absent échoue AUSSI (4 morsures vérifiées : échange Ventes→Marketing capté là où le compte reste 5 · retrait Compta capté là où « 5 onglets » reste juste · réordre capté « même ensemble, ordre ≠ » · énumération supprimée = INTROUVABLE ; restauré = green : Ventes/Construction/Achat/Compta/Direction == role_navigation · bijection 5==onglets==portails). État courant : aucun onglet périmé (anti-invention #6 , rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 15:07:06 +00:00
Claude Code DTP Worker
6a40bfccce
[DTP-Worker] Sprint 8 · buffer L75 · Domaine QA/Audit 5D (2e surface) : la TABLE « Verdict courant » de l'audit de conformité énumérait À LA MAIN ses 4 open items (control → dimension → propriétaire) sans AUCUN gate d'IDENTITÉ. Le bloc audit_5d existant gate « 17 contrôles / 5 dimensions » (×2 docs) ET la ventilation du verdict « 13 PASS · 0 FAIL · 4 à confirmer » (recomputée d'audit_report.totals) mais PAS l'identité des 4 contrôles ouverts ni leur (dimension, propriétaire) — surface data-derived distincte du MÊME README. Cette table dérive d'audit_report.json.open_items[] (byte-gaté par check_artifacts : chaque item = {control, dimension, owner, detail} recalculé en rejouant les contrôles sur les hand-off amont). Le bloc de VENTILATION ne recompute que le COMPTE (« 4 à confirmer ») : un ÉCHANGE d'open item (ex. D2.3 → D3.1) laisse le compte à 4 — le compteur reste AVEUGLE — pendant que l'artefact dit autre chose ; idem une dimension mal étiquetée (D1.3 rangé sous D2) ou un propriétaire réattribué — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS, pas la prose) n'attrape → nouveau bloc dans check_readme_claims recomputant l'ensemble {control:(dimension, propriétaire)} depuis audit_report.open_items (zéro duplication du modèle de l'auditeur #6 ) et exigeant que la table README l'énumère EXACTEMENT. Contrôle par ENSEMBLE (absent ET en trop mordus, pas seulement présence), puis (dimension, propriétaire) PAR LIGNE. Même patron que l'énumération des confirmations DevOps ou la carte de renormalisation par archétype 4Big. Cohérence croisée en bonus : l'ensemble des control == MANIFEST.open_items (le manifeste qui résume le rapport) — mord un manifeste désynchronisé de son rapport. Un claim absent échoue AUSSI (4 morsures vérifiées : échange D2.3→D3.1 capté là où le compte reste 4 · dimension D1.3→D2 captée · propriétaire D1.1 Direction→Compta capté · ligne D1.2 supprimée = sous-ensemble capté ; restauré = green : [D1.1,D1.2,D1.3,D2.3] control→dimension→propriétaire == audit_report.open_items). État courant : aucun open item périmé (anti-invention #6 , rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 14:39:58 +00:00
Claude Code DTP Worker
abc9b62214
[DTP-Worker] Sprint 8 · buffer L75 · Domaine QA/Audit 4Big (2e surface) : la CARTE DE RENORMALISATION PAR ARCHÉTYPE de l'auditeur (« data_room (sans HANDOFF) · parser (sans CONTRAT … ni HANDOFF) · contract (sans CLI ni HANDOFF) ») était transcrite À LA MAIN dans le README du module sans AUCUN gate. La session précédente a gaté le BARÈME (nombre de critères + poids par critère de la table + « generator (N critères) », recomputés de quality_report.criteria) mais PAS les exclusions des trois autres archétypes — surface data-derived distincte du MÊME README. Cette carte dérive de quality_report.json.modules (byte-gaté par check_artifacts) : pour un archétype, l'ensemble des critères APPLICABLES = {check.criterion} de ses modules (les non-applicables sont ABSENTS des checks) ⇒ EXCLUS = ordre du barème − applicables. Changer la règle de renormalisation d'un archétype (ex. data_room exclut aussi CLI) ferait dériver la prose en silence pendant que l'artefact dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS, pas la prose) n'attrape → nouveau bloc (6) dans check_readme_claims recomputant PAR archétype l'ensemble des critères exclus depuis les checks de quality_report.modules (zéro duplication du modèle de renormalisation #6 ) et exigeant que la parenthèse du README l'énumère EXACTEMENT. Contrôle par ensemble (mauvais critère, sous-ensemble ET sur-ensemble mordus), pas seulement présence. Bonus d'uniformité : tous les modules d'un même archétype portent le MÊME jeu applicable (« 1 archétype → 1 jeu de critères », base même de la carte). Un claim absent échoue AUSSI (3 morsures vérifiées : data_room « sans HANDOFF »→« sans CLI » capté · parser exclusion HANDOFF retirée = sous-ensemble capté · énumération contract disparue = red ; restauré = green : 4 archétypes uniformes · data_room/parser/contract == référentiel). État courant : aucune exclusion périmée (anti-invention #6 , rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 14:08:51 +00:00
Claude Code DTP Worker
327aa298a2
[DTP-Worker] Sprint 8 · buffer L75 · Domaine QA/Audit 4Big : le BARÈME de notation de l'auditeur (« 5 critères 4Big déterministes » + la table Critère|Poids DOC 20/CONTRAT 20/TESTS 25/CLI 15/HANDOFF 20 + l'archétype « generator (5 critères) ») était transcrit À LA MAIN dans le README du module sans AUCUN gate — ironie du module qui NOTE les autres retranscrivant son propre référentiel de scoring. Le bloc racine de check_readme_claims ne gatait que la ligne « Résultat courant » (verdict/modules/min_score), jamais le barème lui-même, alors que qa/audit_4big/out/quality_report.json (byte-gaté par check_artifacts, criteria[] recomputé du référentiel à chaque build) fait autorité. Ajouter/retirer un critère OU changer un poids ferait dériver le README en silence pendant que l'artefact dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS, pas la prose) n'attrape → nouveau bloc recomputant le nombre de critères (prose « N critères 4Big déterministes » + archétype « generator (N critères) », generator appliquant TOUS les critères) et CHAQUE poids depuis criteria[].weight (zéro duplication du barème du générateur #6 ), exigeant l'égalité avec le README. Contrôle PAR CRITÈRE et pas seulement de la somme : une compensation de poids (+5/−5) laisserait Σ==100 juste et deux lignes fausses. Cohérences croisées en bonus : Σ poids == 100 (base de renormalisation documentée) ET tout module d'archétype generator porte EXACTEMENT len(criteria) checks (« generator = tous les critères » — 18 modules generator × 5 checks vérifiés). Un claim absent échoue AUSSI (4 morsures vérifiées : prose 5→6 captée là où les poids restent justes · poids TESTS 25→30 capté là où le compte reste 5 · generator 5→4 · claim prose disparu = red ; restauré = green). ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 13:37:10 +00:00
Claude Code DTP Worker
0d1df7a8dc
[DTP-Worker] Sprint 8 · buffer L75 · Domaine QA/Recette : le couple « 8 livrables de sprint · 7 métriques succès MVP » du module d'acceptation (qa/acceptance) était transcrit À LA MAIN dans DEUX docs de module (README qa/acceptance/README.md l.8-9 + cellule fiche agent qa/AGENT.md l.27 « 8 livrables + 7 métriques ») sans AUCUN gate — le bloc racine de check_readme_claims ne recompute ce couple que pour le SEUL README d'entrée (« N promesses (X sprint + Y métriques) »), jamais pour ces deux docs de module qui en dérivent. L'artefact qa/acceptance/out/acceptance_matrix.json (byte-gaté par check_artifacts) porte une ligne par promesse roadmap de kind sprint_deliverable OU mvp_metric ; le roadmap-anchor (INV11) ancre les roadmap_line de l'ARTEFACT au fichier roadmap mais ne compare PAS la prose des docs. Ajouter une promesse roadmap → l'artefact rebâtit 9/7 pendant que les deux docs restent à 8/7 en silence (« vert trompeur » qu'aucune suite tests/, qui teste des FONCTIONS pas la prose, n'attrape) → nouveau bloc dans check_readme_claims recomputant CHAQUE nombre depuis SON PROPRE genre de la matrice (n_sprint/n_metric déjà dérivés · zéro duplication #5 ) et exigeant l'égalité avec les DEUX docs. Recomputer les DEUX (sprint ET métriques) mord une dérive de l'un là où l'autre resterait aveugle. Cohérence croisée en bonus : MANIFEST.counts.{sprint_deliverables,mvp_metrics} == le compte de la matrice qu'il résume — mord un compteur du manifeste désynchronisé de sa liste. Un claim absent échoue AUSSI (4 morsures vérifiées : dérive sprint README captée là où métriques reste 7 · dérive métriques README captée là où sprint reste 8 · dérive fiche QA captée là où le README est intact · claim fiche disparu = red ; restauré = green). État courant : aucun nombre périmé (8/7 recoupe la matrice · anti-invention #6 , rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 13:07:20 +00:00
Claude Code DTP Worker
70a8db0f4c
[DTP-Worker] Sprint 8 · buffer L75 · Domaine Frontend/Chat OTOIA : le montage de l'assistant conversationnel par portail (frontend/chat_otoia) affichait « 5 Custom Block + 5 configs runtime » (fiche agent frontend_console) et « 5 portails · 5 fixtures · 5 configs runtime » (README du module) — trois nombres data-derived, TOUS = 5 (piège aveugle), transcrits À LA MAIN dans DEUX docs sans AUCUN gate, alors que frontend/chat_otoia/out/MANIFEST.json (byte-gaté par check_artifacts, counts.custom_blocks/mounts/portails recomptés du contrat RBAC à chaque build via la bijection 1 block ⇔ 1 mount ⇔ 1 portail métier, plateforme exclu) fait autorité. Piège aveugle caractéristique : les trois valent 5 aujourd'hui — un gate qui n'en recompterait qu'UN serait aveugle à la dérive des deux autres (ajouter un portail au contrat RBAC → chat_otoia rebâtit 6 blocks/6 mounts/6 portails pendant que les docs restent à 5 en silence) → nouveau bloc dans check_readme_claims recomputant CHAQUE nombre depuis SON PROPRE champ du MANIFEST et exigeant l'égalité avec les deux docs. Cohérence croisée : custom_blocks == mounts == portails == |MANIFEST.portails| (la bijection du générateur) — mord un compteur désynchronisé de sa propre liste. Un claim absent échoue AUSSI (5 morsures vérifiées : dérive custom_block fiche captée là où mounts reste 5 · dérive configs runtime fiche captée là où blocks reste 5 · dérive portails README · dérive fixtures README · claim configs runtime disparu = red ; restauré = green). ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 12:37:01 +00:00
Claude Code DTP Worker
97a7b25e38
[DTP-Worker] Sprint 8 · buffer L75 · Domaine Démo : le run-sheet de pitch (demo/scenarios) affichait « 10 modules cités » dans le diagramme d'architecture de son README — un compte data-derived transcrit À LA MAIN sans AUCUN gate, alors que demo/scenarios/out/MANIFEST.json (byte-gaté par check_artifacts, counts.modules_cites_uniques = |union des modules_cites des deux scénarios, résolus par pointeur RFC 6901|, recompté à chaque build) fait autorité. Ajouter un beat qui cite un module encore non tissé (11) OU retirer la dernière citation d'un module d'un scénario (9) ferait dériver le diagramme en silence pendant que l'artefact dit autre chose — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS, pas la prose du README) n'attrape → nouveau bloc dans check_readme_claims recomputant le nombre depuis counts.modules_cites_uniques et exigeant l'égalité avec le README. Cohérence croisée en bonus : counts.modules_cites_uniques == |modules_cites| (liste dédupliquée du manifeste, elle-même sans doublon) — mord un compteur désynchronisé de sa propre liste. Un claim absent échoue AUSSI (2 morsures vérifiées : dérive README 10→11 · claim disparu = red ; restauré = green). ci/README.md (table + détail) mis à jour · 7 gates re-verts.
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 12:05:22 +00:00
Claude Code DTP Worker
09ab940321
[DTP-Worker] Sprint 8 · buffer L75 · Domaine DevOps : le run-book de déploiement VPS (devops/deploy_runbook) affichait « 7 phases » (fiche agent devops, ×2 transcriptions) et « 7 confirmations préalables » (README du module) — deux nombres data-derived transcrits À LA MAIN dans DEUX docs sans AUCUN gate, alors que devops/deploy_runbook/out/MANIFEST.json (byte-gaté par check_artifacts, counts.phases=len(graph.phase_order) · counts.confirmations=len(confirmations_ouvertes), recomptés à chaque build) fait autorité. Ajouter une phase au graphe OU une confirmation au catalogue ferait dériver les docs en silence — piège AVEUGLE : phases ET confirmations valent tous deux 7 aujourd'hui, un gate qui n'en recompterait qu'UN serait aveugle à la dérive de l'autre → nouveau bloc dans check_readme_claims recomputant CHAQUE nombre depuis SON PROPRE champ du MANIFEST et exigeant l'égalité avec les docs. Le « 22 » (suites gated de la fiche) volontairement écarté (sémantique suites CI ≠ counts.modules qui s'auto-exclut). Bonus : l'énumération snake_case des confirmations du README doit être l'ensemble EXACT de confirmations_ouvertes (mord l'échange 1↔1 d'un nom, aveugle au compte). Cohérences croisées counts.phases==|phase_order| · counts.confirmations==|confirmations_ouvertes| (5 morsures vérifiées : dérive phases 1re transcription · dérive 2e transcription captée là où la 1re resterait 7 · dérive confirmations count · swap d'un nom captée là où le count reste 7 · claim confirmations disparu = red)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 11:39:18 +00:00
Claude Code DTP Worker
9ac7bdb2de
[DTP-Worker] Sprint 8 · buffer L75 · Domaine QA/Audit 5D : la synthèse de l'audit de conformité (« 17 contrôles · 5 dimensions ») était transcrite À LA MAIN dans DEUX docs (README du module qa/audit_5d + cellule de la fiche agent qa, même couple du même catalogue de contrôles) sans AUCUN gate, et la ventilation du verdict (« 13 PASS · 0 FAIL · 4 à confirmer ») du seul README non plus — ajouter un contrôle/une dimension au catalogue OU faire basculer un contrôle en A_CONFIRMER ferait dériver les docs en silence pendant que les DEUX artefacts byte-gatés par check_artifacts (qa/audit_5d/out/MANIFEST.json = controls_total+dimensions · out/audit_report.json = totals.{pass,fail,a_confirmer}, recomptés du catalogue à chaque build) disent autre chose → nouveau bloc dans check_readme_claims recomputant le couple (contrôles+dimensions) depuis MANIFEST et la ventilation (pass/fail/à-confirmer) depuis audit_report.totals, exigeant l'égalité avec les deux docs + cohérence croisée controls_total==totals.controls (4 morsures vérifiées : dérive contrôles README · bascule 13→12/4→5 captée là où le total de contrôles reste 17 et resterait aveugle · dérive dimensions fiche agent · claim verdict disparu = red)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 11:06:21 +00:00
Claude Code DTP Worker
8f27b65724
[DTP-Worker] Sprint 8 · buffer L75 · Domaine Legal : la synthèse du DocType « CONFOTUR Application » (« 18 champs · 14 de donnée · 4 sections · 3 rôles · 2 évènements de dépôt ») était transcrite À LA MAIN dans DEUX docs (README du module legal/confotur + cellule de la fiche agent onapi_legal, mêmes 5 nombres du même spec) sans AUCUN gate — ajouter un champ/section/rôle au confotur_spec ferait dériver les deux docs en silence pendant que legal/confotur/out/MANIFEST.json (byte-gaté par check_artifacts, counts recomptés du confotur_spec.json à chaque build) dit autre chose → nouveau bloc dans check_readme_claims recomputant le quintuplet (fields + data_fields + sections + roles + depot_events) depuis MANIFEST.counts et exigeant l'égalité avec les deux docs (4 morsures vérifiées : dérive sections README · dérive champs 2e doc · dérive évènements de dépôt captée là où le total de champs est aveugle · claim disparu = red)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 10:35:56 +00:00
Claude Code DTP Worker
152a138861
[DTP-Worker] Sprint 8 · buffer L75 · Domaine mobile : la ligne récap de l'app Expo (« 5 onglets · 44 rôles couverts · 3 langues · 13 identifiants a_confirmer ») était transcrite À LA MAIN dans le README du module mobile/app_config sans AUCUN gate — ajouter un rôle/portail au contrat RBAC, une langue au site ou un credential store ferait dériver le doc en silence pendant que mobile/app_config/out/MANIFEST.json (byte-gaté par check_artifacts, counts recomptés de rbac_50_roles + seo_spec + liste a_confirmer) dit autre chose → nouveau bloc dans check_readme_claims recomputant le quadruplet (onglets + roles_couverts + langues + identifiants_a_confirmer) depuis MANIFEST.counts et exigeant l'égalité (5 morsures vérifiées : dérive de chacun des 4 volets captée là où un seul nombre resterait aveugle · claim disparu = red)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-31 10:05:43 +00:00
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
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