4bc98198b1a5fd14877d613f844fb4059c8c4f4e
276 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4bc98198b1 |
[DTP-Worker 20260806_041444] VÉRIF indépendante — NOUVEL axe objectif: intégrité référentielle des slugs rôle+portail inter-artefacts (980 refs rôle + 66 portail vs rbac_50_roles.json) → CLEAN · 0 édition de production
Sweep rejouable de tous les out/*.json: 0 slug de rôle non résolu vs les 50 ids canoniques; 6 tokens portail hors portails_business = non-défauts vérifiés (5 valeurs icon ERPNext du champ mobile + le 6e portail technique legitime plateforme). Axe jamais balayé, distinct de docstring/currency. 0 prod, 0 artefact rebuild, 0 gate (#5), 0 chiffre inventé (#6), 0 VPS (#8). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
b2749587c0 |
[DTP-Worker 20260806_034434] CURRENCY canal stakeholder porté de a8342e9 au HEAD 48276ee + re-vérif indépendante de la dernière prod
Le daily_reports/2026-08-06.md (rédigé session 011419, attestait HEAD |
||
|
|
48276ee916 |
[DTP-Worker 20260806_031432] FIX générateur — crm/financement_bancaire MANIFEST.roles_rbac_utilises répétait ventes-conseiller (dup ungaté, liste per-slot vs ensemble distinct)
Défaut réel/reproductible (pas stale, byte-repro vert) : finlib/builder.py:89
faisait [roles_resolved[k] for k in sorted(roles_resolved)], itérant les 4 SLOTS
logiques de spec["roles"] — 2 slots (conseiller_wag ET validation_dossier) pointent
le même rôle ventes-conseiller → 4 entrées pour 3 rôles distincts. Preuve bug (pas
per-slot voulu) : la sortie drope la clé de slot (cle), donc le doublon ne porte
aucune info distinctive ; sémantique documentée README.md:54 « rôles RBAC utilisés »
+ ci/README.md:1100 « ensemble distinct » ; les 3 modules frères produisent tous un
ensemble distinct (confotur 3/3, commissions 4/4, workflow_vente 7/7) — financement
seul outlier 4/3.
Fix (aligné idiome commissions) : ensemble distinct trié par role_id via
sorted({rr["role_id"] for rr in roles_resolved.values()}). Artefact régénéré → 3/3
distinct. 0 gate ajouté (#5 — champ lu par AUCUN gate financement ni consommateur
externe ; convention distinctness déjà tenue par les frères). 0 chiffre inventé (#6).
run_ci 33 PASS · 0 FAIL · 0 SKIP (byte-repro vert avec nouvel artefact, 35 tests verts).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|
|
243523c6c2 |
[DTP-Worker 20260806_024430] VÉRIF indépendante multi-axes (7 axes) → CLEAN · 0 édition de production
Chasse adversariale ciblée à un vrai défaut ungaté sur 7 axes FRAIS (anti-churn : évite
help-text/currency/prose déjà balayés par 021424/014423/011419). Tous CLEAN ou déjà gatés :
1. README «Entrée CLI»↔argparse (23 modules) — 0 flag/sous-commande fantôme.
2. Sémantique CLI `validate` — re-build en mémoire, PAS de dents vs out/ corrompu = BY-DESIGN
(check_artifacts couvre la dérive byte). Noté verify-before-flag.
3. Ledger 15 invariants SEO — code 1..15 + 3 proses + README self-consistent ; «=9» mémoire = 9
MODULES dialecte A, pas 9 invariants (non-contradiction).
4. Root README «24 modules / 24 suites» — sourcé : 24=périmètre audit_4big ; 24 suites=
regression_plan self-exclu (self_module qa/regression) = 25 run_ci − 1. Piège réconcil. 24-vs-25.
5. Prose notes[] dans artefacts JSON (regression_plan) — accurate, re-générée+byte-gatée.
6. Complétude gate.needs (33 checks, e2e-baseline manuel exclu) — DÉJÀ GATÉ par
check_ci_integrity.sh INV-A (gate.needs == {tous jobs} − {gate} − {manuels}).
7. Commentaires inline # cross-fait/compteur (*_gen.py + *lib/, hors docstrings/README) —
14 compteurs vérifiés vs réalité (50 rôles, 3 langues, 5 portails, 12 groupes PIE…). CLEAN.
0 prod touché, 0 artefact rebuild, 0 gate ajouté (#5), 0 chiffre inventé (#6), 0 VPS (#8).
run_ci 33 PASS · 0 FAIL · 0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|
|
354a68788d |
[DTP-Worker 20260806_021424] FIX argparse-help↔code — seo/seo_gen.py help build nommait des fichiers de sortie INEXISTANTS
Poursuite de la sous-classe help-text du fix |
||
|
|
b60d471030 |
[DTP-Worker 20260806_014423] FIX prose-numérique canal stakeholder — le compte « bijection compte-de-tests README↔réel » de la session 011419 sous-comptait les READMEs annonceurs (14 → 16)
Défaut réel (classe prose-facts-vs-numeric-drift) présent dans DEUX surfaces — daily_reports/2026-08-06.md (l.48-54, canal stakeholder) ET 05_activity_log/2026-08-06.md (entrée 011419) : l'« axe de vérification objectif » annonçait « concordance totale sur les 14 READMEs annonceurs » mais son énumération omettait 2 modules qui annoncent pourtant un compte de tests dans leur README, tous deux concordants avec le réel — frontend/portails 19 (19 def test_) et demo/scenarios 39 (39 def test_). Le vrai total est 16 annonceurs / 9 sans annonce, corroboré par l'en-tête faisant autorité de ci/check_readme_claims.sh (l.96 : « 27 claims sur 16 modules »). Le « 11 sans annonce » était le complément erroné 25−14 → 9. Fix (sweep des 2 surfaces en une passe, cf. prose-facts-vs-numeric-drift : un twin fix balaie TOUTES les surfaces) : daily_reports 14→16 + ajout des 2 entrées manquantes + 11→9 + ancrage explicite au gate ; journal 14→16 dans l'entrée 011419 (fait courant) avec commentaire de traçabilité + nouvelle entrée documentant la correction. Chiffres recomputés, non saisis (grep READMEs annonceurs=16 · def test_ concordance 16/16 · find tests=25 → complément 9). Écarté au préalable : candidat comment↔code check_regression.sh:17 (« ran/passed/failures ») = FAUX POSITIF — le commentaire décrit ce que l'ARTEFACT porte (le JSON a bien failures:0), pas la ligne d'affichage l.79 ; le contrat réel = diff -q byte-à-byte du fichier entier l.71. 0 prod édité, 0 artefact rebuild, 0 gate ajouté (#5 — la surface README-count est déjà gatée), 0 chiffre inventé (#6), 0 VPS (#8). run_ci 33 PASS · 0 FAIL · 0 SKIP avant/après. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
34c8cd2e17 |
[DTP-Worker 20260806_011419] CURRENCY canal stakeholder porté au HEAD a8342e9 · le canal daily_reports s'arrêtait au 2026-08-05 (8903a4b) et ne reflétait pas les 2 jalons du 08-06 — fe61207 (VÉRIF multi-axes CLEAN) et surtout a8342e9 (FIX 1-ligne help argparse mobile/app_config omettant store_listing.json), un vrai changement d'état non encore consigné stakeholder. Rapport daily_reports/2026-08-06.md : tableau des 2 jalons (nature+opposabilité), état courant re-dérivé d'artefacts (33 PASS = 8 statiques + 25 suites · régression 624 exec/607 pass/17 skip=PASS) + AXE OBJECTIF ajouté : bijection compte-de-tests README↔réel (def test_*) → concordance totale 14/14 READMEs annonceurs, 0 dérive. Vérif préalable lecture-seule : docstring↔code publiciste + fiscal/ecf (« 12 invariants »=schéma+2→12 self-consistant, pas un défaut) CLEAN ; couverture CI publiciste confirmée dans gate.needs. 0 prod, 0 artefact rebuild, 0 gate (#5), 0 chiffre inventé (#6 — tout recomputé), 0 VPS (#8). run_ci 33 PASS·0 FAIL·0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
a8342e97e2 |
[DTP-Worker 20260806_004414] FIX docstring↔code — help argparse de la sous-commande build (mobile/app_config_gen.py) omettait store_listing.json
Chasse adversariale ciblée (classe RECURRING docstring↔code, scopée aux modules non balayés
la veille) → 1 vrai défaut ungaté. Le help= de sub.add_parser("build") énumérait 4 sorties
(app_config/eas_build/role_navigation/MANIFEST) alors que cmd_build() en écrit 5 : store_listing.json
(l.243) était omis. Docstring (l.15 « les 5 fichiers ci-dessus ») + README (l.56/68) listent bien
les 5. Nouvelle sous-classe help-text argparse du motif docstring↔code (2e surface prose dans le code,
distincte des open('w') vs docstring déjà balayés). Fix = ajout store_listing.json à sa position
canonique. Aucun gate/test ne fige la chaîne (grep -rn = 0 hit externe) → pas d'oracle à réaligner,
pas de gate ajouté (#5). Non-régression : help n'affecte aucune sortie, artefacts byte-identiques,
run_ci 33 PASS·0 FAIL·0 SKIP avant/après. Reste de l'audit (audit_5d/acceptance/regression/
deploy_runbook/commissions/dossier_vente/ecf/portails/faisabilite) CLEAN. 0 artefact rebuild, 0 VPS (#8).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|
|
fe61207ca6 |
[DTP-Worker 20260806_001412] VÉRIF indépendante multi-axes → CLEAN · 0 édition de production
Session de vérification (pas de currency churn : le canal stakeholder daily_reports attestait |
||
|
|
c196e4183e |
[DTP-Worker 20260805_234409] VÉRIF adversariale ciblée · candidat « MANIFEST.json manquant » de la fiche frontend_console = NON-défaut par design · 0 édition de production
Chasse à un vrai défaut ungaté (agent Explore skeptique) plutôt que répéter le motif de currency (churn). Candidat remonté puis RÉFUTÉ par vérif indépendante : la cellule « Sortie » de 03_agents/frontend_console/AGENT.md omet MANIFEST.json dans les DEUX lignes (portails:28 `out/workspace.json` alors que workspaces_gen.py:219 l'écrit ; chat_otoia:29 `{custom_block,chat_mount}` alors que chat_otoia_gen.py:229 l'écrit) → convention éditoriale (payload listé, manifeste de traçabilité omis), PAS une dérive. L'énumération complète des 3 fichiers est correcte là où elle compte (docstring chat_otoia_gen.py:12/15/18 + README module). Corriger la seule ligne chat = asymétrie ; éditer les deux = churn d'une cellule parsée par ci/check_readme_claims.sh (CO_FI ~L3506/L3576). CLEAN, laissé tel quel (#5/#6, « X not drift, don't fix »).
0 fichier de production édité, 0 artefact reconstruit, 0 gate ajouté (#5), 0 chiffre saisi (#6, 33 recompté de run_ci.sh), 0 VPS (#8). Seule édition in-repo : le journal. Mémoire projet : fiche-sortie-cell-omits-manifest-by-design.md. run_ci 33 PASS·0 FAIL·0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|
|
21f55a9ed7 |
[DTP-Worker 20260805_231404] CURRENCY canal stakeholder porté au HEAD 8903a4b · le rapport roadmap 2026-08-05 attestait à cb3de78 (session 211340) et ne reflétait pas 2 jalons plus tardifs du même jour — d6a8d73 (221354, SWEEP bijection INVERSE out/ = 0 orphelin) et 8903a4b (224359, FIX comment-vs-code ci/validate_json.sh = parse-only, pas de contrôle $schema). Section « Mise à jour de currency · fin de journée (HEAD 8903a4b) » : tableau des 2 jalons (nature + opposabilité) + état de vérif indépendant. Verif primaire = chasse docstring↔code (classe RECURRING) sur tous *_gen.py + helpers *lib/ (sorties/flags/comportement) → CLEAN, 0 dérive haute-confiance ; non-défauts connus ré-écartés (placeholder #6, compat validate -o OUT self-consistant). Structure gate INCHANGÉE : run_ci 33 PASS = 8 statiques (git ls-files ci/*.sh hors lib.sh = 8) + 25 suites, aucun jalon n'ajoute de job. 0 prod, 0 artefact rebuild, 0 gate ajouté (#5), 0 chiffre saisi (#6 — 8/33 recomputés), 0 VPS (#8). run_ci 33 PASS·0 FAIL·0 SKIP.
|
||
|
|
8903a4b774 |
[DTP-Worker 20260805_224359] FIX comment-vs-code — commentaire fantôme dans le gate ci/validate_json.sh
Le gate valide la bonne-formation JSON SEULEMENT (parse strict), mais l.27 portait un commentaire orphelin annonçant un contrôle de conformité $schema/draft que le code n'implemente jamais (branche then imprime juste le check). Nouvelle sous-classe comment-vs-code : les scripts de GATE eux-memes, jamais couverts par les sweeps docstring-vs-code (scopes aux generateurs de prod + helpers *lib/). Isolement verifie : sweep des 8 scripts ci/*.sh + lib.sh = 0 autre derive. Fix 2 volets : (1) suppression de la ligne fantome ; (2) en-tete PERIMETRE explicite (bonne-formation seule ; conformite $schema = oracle jsonschema optionnel de check_regression.sh, 17 skips par design) -> le commentaire retire devient une affirmation positive et vraie du perimetre. 0 changement de logique executable, 0 artefact rebuild, 0 gate ajoute (#5, FIX pas controle neuf), 0 chiffre saisi (#6), 0 VPS (#8). run_ci 33 PASS / 0 FAIL / 0 SKIP. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
d6a8d73aec |
[DTP-Worker 20260805_221354] SWEEP vérification — bijection INVERSE des artefacts out/ (0 fichier commité orphelin) · 0 édition de production
Repo VERT/convergé à l'ouverture (run_ci 33 PASS·0 FAIL·0 SKIP). Balayage lecture-seule multi-surface avant tout travail (anti-gate-N+1 #5) : 24/24 modules CI-câblés+régression-couverts+fiche-documentés ; docstring↔code CLEAN (3 classes, sous-agent Explore) ; registre décisions ouvertes D-01..D-05 encore ouverts + citations file:line encore exactes (re-vérifiées) ; publiciste build/ gitignore-d, fiche exacte ; sweep CWD-hétérogène écarté (faux positifs — gate exécute les gen depuis leur module par conception). FINDING — axe robustesse non couvert : check_artifacts prouve la direction AVANT (produit⊆commité, itère les fichiers produits l.71-93) mais JAMAIS l'INVERSE (un out/ commité orphelin, plus émis par build, passerait silencieusement). Sweep exécuté (lecture seule, rejouable) : 58 fichiers out/ commités, 57 reproduits par build. Le seul « orphelin » = qa/regression/out/regression_run.json, BY DESIGN artefact d'EXÉCUTION (run, pas build) exclu du contrat build (docstring check_artifacts l.21-24) et byte-gaté séparément par check_regression.sh → 0 orphelin réel, bijection inverse tient. PAS un gate (#5) : AVANT déjà gaté ; INVERSE empiriquement propre + transitivement attrapé (tout consommateur reproductible lisant un out/ périmé casse check_artifacts). Consigné comme sweep rejouable, sibling des sweeps hash-seed/locale-TZ/forward-compat. Portée : 0 prod, 0 artefact rebuild, 0 gate ajouté (#5), 0 chiffre saisi (#6 — 8/24/33/58/57 recomputés), 0 VPS (#8). Seule édition : le journal. run_ci 33 PASS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
d4f9289586 |
[DTP-Worker 20260805_214344] CURRENCY canal stakeholder porté au HEAD cb3de78 · le rapport roadmap 2026-08-05 attestait à 27c7d20 (session 201339) et ne reflétait pas 1 jalon plus tardif du même jour — cb3de78 (211340, gate fiche-enumeration-completeness 2ᵉ locus = table §1 de ci/README.md, jumeau ungaté de la fiche QA fermée afa6165)
Canal roadmap (distinct du journal activity_log per discipline « deux canaux ») porté au HEAD courant. Section « Mise à jour de currency · fin de journée (HEAD |
||
|
|
cb3de786f8 |
[DTP-Worker 20260805_211340] GATE — complétude de l'énumération des gates dans la TABLE §1 de ci/README.md (jumeau ungaté de la fiche QA)
La table §1 « Ce que fait le pipeline » de ci/README.md est LA doc canonique des jobs
statiques (une ligne par gate ci/*.sh). Sa complétude était le jumeau exact de la fiche QA
fermée par
|
||
|
|
9c7791f23a |
[DTP-Worker 20260805_204339] CURRENCY canal stakeholder porté au HEAD · le rapport roadmap 2026-08-05 attestait à 1a44dfe (session 181325, 18:13) et ne reflétait pas 2 jalons plus tardifs du même jour — afa6165 (194334, gate neuf fiche-enumeration-completeness) et 27c7d20 (201339, attestation chaîne d'intégrité des constantes) ; canal (distinct du journal activity_log per discipline « deux canaux ») porté au HEAD. Précédent identique 1b99917. Section « Mise à jour de currency · fin de journée (HEAD 27c7d20) » : tableau des 2 jalons (nature + opposabilité au merge) + état de vérification indépendant + portée. Structure du gate INCHANGÉE — run_ci 33 PASS = 8 gates statiques (git ls-files ci/*.sh hors lib.sh = 8) + 25 suites, aucun jalon n'ajoute de job. Balayage lecture-seule multi-surface préalable, 0 dérive : docstring↔code 25 générateurs (sorties+comportement CLEAN) · comptes tests par fiche (CRM 81=trio 25+31+25 + financement 35 · ecf 39 · confotur 44 · seo 36 · portails 19 · chat 31, concordants+gatés) · ancrage #9/#10 (check_readme_claims:5355+ re-dérive 3%/8.5%/52% de CLAUDE.md) · Expo 51 actuel/54 cible cohérent partout · regression 624 ran = 650 méthodes − 26 (suite qa-regression exclue de son méta-run, byte-gaté check_artifacts) · fiche QA cite 8/8 gates. 0 prod, 0 artefact rebuild (rapport non scoré audit_4big), 0 gate ajouté (#5), 0 chiffre saisi (#6 — 8/33/624 recomputés), 0 VPS (#8). run_ci 33 PASS·0 FAIL·0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
27c7d20449 |
[DTP-Worker 20260805_201339] ATTESTATION bout-en-bout · chaîne d'intégrité des constantes mandataires CLOSE CLEAN · 0 édition de production
Roadmap livrée+gatée, baseline verte (33 PASS) : plutôt qu'un gate marginal (#5), preuve end-to-end que la classe de bug latent la plus coûteuse — un générateur figeant une constante du mandat en littéral (précédent réel bancable_gen.py 0.52→finance._pct) — n'a AUCUN maillon hardcodé ni ungaté. 3 sondes : (1) Explore fan-out 05_deliverables_mvp/** → 0 littéral non-sourcé ; tous les générateurs lisent 2 sources canoniques uniques (genlib/model.py CANONICAL 6 valeurs #9/#10 ; publiciste/lib/branding.py 4 tokens #4). (2) ces 2 sources sont elles-mêmes ancrées à CLAUDE.md dans check_readme_claims.sh (bloc l.5427 model.py↔#9/#10 ; bloc l.6958 branding.py↔#4 + docstring + README + oracle test + renderer._CANONICAL_MARKERS) → boucle fermée sans trou. (3) les 2 ancres-pivots MORDENT, mutation-prouvé : MUT1 branding COLOR_ACCENT #f0b429→#e0a420 → RED nommant l'écart ; MUT2 model.py marketing 8.5%→9% → RED ; restauration ciblée git checkout -- <path> (JAMAIS git clean) → tree propre, gate re-vert. Faux-positif écarté (settled) : daily 2026-08-05 tête « 624 passés · 0 skip » vs artefact 607/17 = dated-snapshot déjà reconcilié §CURRENCY l.146-171, LAISSÉ. 0 prod, 0 gate (#5), 0 artefact reconstruit, 0 chiffre saisi (#6), 0 VPS (#8). run_ci 33 PASS · 0 FAIL · 0 SKIP · git status propre. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
afa61657cb |
[DTP-Worker 20260805_194334] GATE NEUF classe fiche-enumeration-completeness : le tableau des gates statiques de la fiche QA se déclare « l'état courant » de git ls-files 'ci/*.sh' mais OMETTAIT le 8ᵉ gate check_mobile_workflow.sh (livré le jour même, cité NULLE PART dans la fiche · grep=0) — check_ci_integrity verrouille le CÂBLAGE CI (ci/*.sh↔gate.needs) mais ignore la fiche, check_readme_claims ne recomputait aucune énumération de gates → surface ungatée. Fix 2 volets : (1) ajout de la ligne manquante (rôle fidèle à l'en-tête du gate, placée après check_ci_integrity) ; (2) extension de check_readme_claims.sh (bloc Python avant sys.exit, réutilise subprocess/bad/good, 0 nouveau gate #5) re-dérivant l'ensemble de git ls-files 'ci/*.sh' (hors lib.sh, #6) et exigeant que chaque basename soit cité (backtické) dans la fiche ; un gate absent échoue. Teeth mutation-prouvés 2 axes : MUT1 retrait de la ligne → RED nommant check_mobile_workflow ; MUT2 ajout d'un 9ᵉ ci/*.sh factice (index seul) → RED (forward-protection : le prochain gate ne pourra être omis) puis --cached retiré, arbre byte-restauré (JAMAIS git clean). Doc ci/README §2 sous check_readme_claims. 0 prod, 0 artefact rebuild (aucun out/ ni doc scoré audit_4big), 0 chiffre saisi (#6, le « 8 » recompté de git ls-files), 0 VPS (#8). run_ci 33 PASS·0 FAIL·0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
c14305c170 |
[DTP-Worker 20260805_191333] Audit COMPLÉTUDE fiches AGENT.md (25 modules ↔ 13 fiches) — CLOSE CLEAN · 0 édition de production
run_ci = 33 PASS au démarrage, arbre propre, roadmap intégralement livrée/gatée. Deux sondes préalables NÉGATIVES : (a) Explore very-thorough dérive prose/docstring sur tout 05_deliverables_mvp = 0 dérive ungatée ; (b) méta-gate check_ci_integrity relu (INV-A gate.needs · INV-B tout ci/*.sh câblé · INV-C PYTHONUTF8) = câblage exhaustif, risque « gate orphelin » déjà fermé. Bascule sur la COMPLÉTUDE des fiches. Énumération réelle des modules (tests/ + test*.py) = 25 (le MEMORY disait « 22 » : écart réconcilié = split rbac en 4 sous-générateurs apply_plan/fixtures_gen/ roleprofile_gen/userperm_gen + rbac racine ; PAS 3 modules neufs non-fichés). Cross-check : 25/25 cités dans ≥1 fiche · 24 comme LIGNES de table. Faux-positif « pie/manifest manque une ligne » RÉFUTÉ à la source : documenté en PROSE délibérée (faisabilite §40-52, « les comptes exacts font foi dans le README du module — cet agent en est la source, pas la copie ») → une ligne de table à cellule Tests réintroduirait un compte recopié (#6) + duperait la source (#5). demo/scenarios = ligne source-unique délibérément côté fiche CRM (§Sprint 7), cross-ref depuis faisabilité (#5). Complétude fiches CONFIRMÉE CLOSE, compteur mémoire réaligné 22→25. 0 fichier de production édité · 0 gate ajouté (#5) · 0 chiffre saisi à la main (#6, tous recomptés) · aucune commande VPS (#8) · aucune plateforme git externe. Deliverable = ce log (+ màj memory fiche-accuracy-audit-closed). run_ci 33 PASS·0·0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
1b99917f21 |
[DTP-Worker 20260805_184329] CURRENCY canal stakeholder : baseline régression corrigée (faux-vert jsonschema neutralisé) + 2ᵉ incident RED consigné
Le daily_report/2026-08-05.md s'arrêtait à la session 144304 (HEAD |
||
|
|
1a44dfe1c0 |
[DTP-Worker 20260805_181325] Auto exec · session 20260805_181325
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Reproductibilité des artefacts out/ (build == commité) (push) Has been cancelled
CI / Fraîcheur matrice de régression (run == commité) (push) Has been cancelled
CI / Intégrité du câblage CI (gate agrège tout · gates statiques verrouillés) (push) Has been cancelled
CI / Intégrité des chiffres du README (valeur == artefact cité · (push) Has been cancelled
CI / Intégrité mobile-build.yml (gating portable · activation différée · (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / CRM · Financement Bancaire (gate hypothécaire RD) (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / QA · Audit 4Big (95+/100 sur 100% deliverables) (push) Has been cancelled
CI / Démo · Scénarios (run-sheet P07 banquier / P05 client) (push) Has been cancelled
CI / QA · Matrice de régression exhaustive (Sprint 8) (push) Has been cancelled
CI / DevOps · Run-book de déploiement VPS unifié (Sprint 8) (push) Has been cancelled
CI / QA · Matrice d'acceptation / traçabilité MVP (Sprint 8) (push) Has been cancelled
CI / Mobile · config app Expo/EAS (navigation par rôle) (push) Has been cancelled
CI / PIE · manifest de dépendances (Annexe 12 · V10.1) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled
|
||
|
|
1441693e25 |
[DTP-Worker 20260805_174324] GATE NEUF classe claude-md-constant-anchor : prose #9 des modules bancable + commissions ancrée sur CLAUDE.md. Mutation #9 (8.5%→9%) mordait DÉJÀ les 8 surfaces generator/template mais 4 copies restaient périmées EN SILENCE dans DEUX modules distincts, chacune se réclamant « (#9) »/« CLAUDE.md #9/#10 » (corriger le generator ne les touche pas → invention #6 latente) : (a) bancable/README.md + (b) banclib/finance.py docstring « 3% édition/8.5% marketing (#9) » · (c) banclib/deps.py « CLAUDE.md #9/#10 (3%/8.5%/52%·USD+DOP·Cardnet·Letter US) » 6 marqueurs · (d) crm/commissions/README.md « pourcentages canoniques (3% édition·8.5% marketing·52% équilibre) ». Extension du bloc d'ancrage existant (check_readme_claims.sh, après Template canonique) RÉUTILISANT exp (zéro re-parse). Teeth mutation-vérifiés : 8.5%→9% mord les 4 · 52%→55% mord (c)+(d) SEULS (a/b ne citent qu'édition+marketing = ciblage précis) · #10 Cardnet→Azul mord l'énum (c) ; arbre restauré = vert. Doc ci/README §2. 0 prod, 0 artefact rebuild (aucun out/ ni doc scoré audit_4big), 0 chiffre saisi (#6, recomputés de CLAUDE.md), 0 VPS (#8). run_ci 33 PASS·0 FAIL·0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
db91a6bb5b |
[DTP-Worker 20260805_171321] SWEEP docstring-vs-code étendu aux helpers *lib/ (surface qu'un scope *_gen.py rate) : Explore fan-out scopé seolib/publiciste-lib/deploylib/dvlib/finlib/wflib/commlib/ecflib/genlib, directions A+B → 0 dérive réelle. Faux-positif neuf réfuté : finlib/gate.py:58 « taux (20% résident RD, 30% étranger) » n'est PAS un hardcode — illustration des valeurs COURANTES du spec (vérifiées =financement_spec.json resident_rd=20/etranger=30), reflète la l.8 de la même docstring, cadre spec-driven posé l.15-18 ; code lit cfg.taux_apport_pct. LAISSÉ (#5). Classe RÉCURRENTE docstring-vs-code, nouvelle sous-surface (helpers) close CLEAN ce jour. 0 prod, 0 artefact, 0 gate (#5), 0 chiffre saisi (#6), 0 VPS (#8). run_ci 33 PASS·0 FAIL·0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
9fa464dc84 |
[DTP-Worker 20260805_164319] FIX régression check-artifacts RED : quality_report.json périmé après édition doc regression/README (+11 l, 4396→4948 o) non suivie d'un rebuild audit_4big. L'audit 4Big score le contenu des docs → champ evidence byte-count dérivé. Rebuild → 1 ligne modifiée, verdict inchangé PASS 24/24 min100 coverage.ok. Classe connue rebuild-after-doc-edits ; tree HEAD 9d30939 commité RED (32 PASS·1 FAIL) rattrapé → 33 PASS·0 FAIL·0 SKIP. 0 prod, 0 gate (#5, dérive déjà gatée), 0 chiffre saisi (#6), 0 VPS (#8).
|
||
|
|
731ff6b65d |
[DTP-Worker 20260805_154314] SWEEP neuf indépendance LOCALE/TIMEZONE : les 21 générateurs build rejoués × 5 combos LANG/LC_ALL/TZ (C·UTC → de_DE·Kolkata → POSIX·Kiritimati) = 105 rejeux diff vs commité → CLEAN 0 dérive. 3e axe déterminisme après hash-seed (PYTHONHASHSEED) et forward-compat (-W error), même famille « le runner n'est pas ton poste », cause différente (locale/fuseau).
Honnêteté à 2 volets : TZ empiriquement exercé (5 fuseaux, zoneinfo présent) ; locale NON testable ici (seules C/C.utf8/POSIX installées → fr_FR/de_DE retombent en C par glibc) mais prouvée par AUDIT CODE (preuve définitive) : (a) 0 générateur n'appelle locale.setlocale → json/float reste '.' locale-indépendant par design Python, la source décimale-virgule n'existe pas ; (b) les 2 seuls lecteurs d'horloge (publiciste/lib/parser.py, faisabilite/generator/faisabilite_gen.py) n'ont AUCUN out/ commité + forcent timezone.utc (doublement TZ-safe) ; (c) regression_run.json sans champ horloge. Runner robuste sous toute locale/fuseau. 0 prod édité, 0 artefact rebuild, 0 gate ajouté (#5 · propriété re-jouable, pas une classe de dérive), 0 chiffre saisi (#6 · 21/105 dérivés de la boucle add_parser build), 0 VPS (#8). Audit fan-out docstring-vs-code + prose-vs-numérique = CLEAN au passage. run_ci 33 PASS. Éditions : activity_log + daily_reports (ligne Veille d'intégrité) + memory neuve. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
a39c05aeda |
[DTP-Worker 20260805_151312] SWEEP neuf déterminisme hash-seed : les 21 générateurs build (57 artefacts) rejoués sous 5 PYTHONHASHSEED (1/7/42/1000/random) + regression_run.json sous 6 rejeux → diff vs commité = CLEAN 57 byte-identiques, 0 dépendance à l'ordre d'itération set/dict.
Classe absente de la mémoire, orthogonale aux axes teeth ET au sweep forward-compat warnings : même famille faux-vert FORWARD, cause différente (ordre de hash vs API dépréciée). check_artifacts/check_regression prouvent le rebuild byte-identique MAIS ne tournent QU'UNE fois, sous LE seed que le runner Gitea donne (randomisé par défaut depuis Python 3.3). Un seul générateur sérialisant un set/dict en ordre d'itération → gate VERT aujourd'hui, ROUGE au hasard demain sur le runner. Sweep prouve : aucun ne le fait → les deux gates de reproductibilité sont robustes au hash-seed randomisé. Harnais auto-vérifié (57 comparés · 1 skip = regression_run.json sous la passe build-only = l'exclusion documentée de check_artifacts, pas un skip silencieux). 0 fichier de prod édité (rebuilds → /tmp), 0 artefact reconstruit, 0 gate ajouté (#5 · propriété re-jouable via commande, pas classe de dérive), 0 chiffre saisi (#6 · 21/57 dérivés de find+décompte), 0 VPS (#8 · 100% local lecture seule). run_ci 33 PASS. Éditions : activity_log + daily_report (table veille) + mémoire neuve. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
2337833e5a |
[DTP-Worker 20260805_144304] CURRENCY canal stakeholder + consignation d'un incident d'intégrité absent du daily_report
Le daily_report 2026-08-05 s'arrêtait à la session 054200 et laissait croire à une journée VERTE ininterrompue. Or 7 commits ont suivi, dont UN matériel pour le stakeholder : |
||
|
|
f311a1bad9 | [DTP-Worker 20260805_141301] SWEEP neuf forward-compat warnings : 25 suites de gate.needs rejouées sous -W error (Deprecation/Syntax/Pending/Resource promus en erreurs) → CLEAN 25/25 · 624 tests · 0 warning latent sous Python 3.10.12. Classe absente de la mémoire, orthogonale aux axes teeth : un warning émis silencieusement aujourd'hui reste VERT (warning != erreur) mais casse tout seul au prochain bump d'interpréteur = faux-vert FORWARD invisible aux tables de currency. Corpus prêt au durcissement d'interpréteur sans régression silencieuse (aucune API dépréciée, aucun handle fuité). Root tests/ = Playwright e2e (job manuel hors gate) → 0 test python attendu. 0 prod, 0 artefact rebuild, 0 gate ajouté (#5 · propriété re-jouable via la commande, pas une classe de dérive), 0 chiffre saisi (#6), 0 VPS (#8). run_ci 33 PASS. Editions : activity_log + memory neuve. | ||
|
|
48b19b9a52 |
[DTP-Worker 20260805_134254] SWEEP read-only docstring-vs-code drift sur 26 modules → CLEAN
Balayage lecture seule de la SEULE classe que la mémoire marque `RECURRING / not-closed` (docstring-vs-code-drift) : fan-out Explore sur les 26 modules générateurs (*_gen.py + lib/*.py + textes argparse embarqués), directions A (advertise non-implémenté) ET B (omet un output réel) couvertes. Résultat : 0 dérive réelle. L'unique item remonté est EXACTEMENT le faux-positif déjà refermé 2× (deploy_runbook_gen.py:28 `validate [-o OUT]`, help="ignoré (compat)" :288) — re-signalé une 3e fois par un Explore neuf MALGRÉ l'amorce de SKIP. Vérifié en source (L26-29 + L288) : la ligne `validate` décrit ce que fait validate (régénère en mémoire, valide) et ne prétend jamais que -o écrit ; seul `build` (:27) revendique l'écriture, ce que le code fait. Bijection parfaite self-cohérente → NON-défaut, LEAVE (#5), 0 édition doc. Portée : 0 fichier de prod édité, 0 artefact reconstruit, 0 gate ajouté (#5), 0 chiffre inventé (#6), 0 commande VPS (#8), sweep 100% lecture. Seule édition : activity_log. Vérif : ./run_ci.sh → 33 PASS · 0 FAIL · 0 SKIP. Mémoire docstring-vs-code-drift enrichie (3e récurrence documentée : faux-positif essentiellement insupprimable par amorce — l'attendre comme unique hit et confirmer-puis-écarter, ne pas le traiter comme signal). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
1321983dc3 |
[DTP-Worker 20260805_131244] FIX régression gate constraints-guard : tree committé RED (32 PASS·1 FAIL) malgré « 33 PASS » annoncé par 127ef6f
Au démarrage ./run_ci.sh échouait sur constraints-guard : ligne 1206 de l'activity_log 2026-08-05 cite « aucun `git clean` » (#1) sans marqueur ; le `ci-allow` posé par la session précédente était sur la ligne 1207 (paragraphe hard-wrappé) alors que scan_forbidden fait grep -in LIGNE PAR LIGNE → l'escape doit être SUR la ligne fautive, une ligne voisine est inerte. 3e récurrence de la sous-classe `aucun git clean` mais 1re variante « marqueur mal placé » (les 2 précédentes = marqueur absent). FIX (journal only, 0 prod, 0 artefact, 0 gate) : escape fusionné INLINE sur la ligne fautive + suppression du comment orphelin. Le journal-de-correction lui-même re-mord (il cite `git clean`) → escapé inline aussi. Vérif : grep -inE 'git +clean' filtré PROHIBITION+ci-allow = 0 hit résiduel ; ./run_ci.sh → 33 PASS · 0 FAIL · 0 SKIP (avec ce log inclus). Réflexe [[ci-gate-verification-method]] : re-jouer les gates sur le tree AVEC le nouveau log staged, pas seulement après l'édition de code. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
127ef6f7fc |
[DTP-Worker 20260805_124241] FIX test-precision (surface neuve) : test_audit_4big.py figeait totals["pass"] = 18 - fail alors que le périmètre a grandi à 24 modules → le rapport « bad » de test_failing_module_forces_global_fail déclenchait INV7 (visé) MAIS AUSSI 2× INV8 (pass+fail=18≠24 modules ET min/max incohérents), contredisant son propre commentaire « rapport cohérent en interne ». Test relâché passant pour de mauvaises raisons + constante latente périmée. FIX (test only, 0 prod, 0 artefact rebuild) : totaux dérivés du vrai bad["modules"] (pass=len-fail, min/max=min/max(scores)) → rapport réellement cohérent, seul INV7 mord ; assertion resserrée any("< seuil") → all("INV7")+any("< seuil") prouve l'isolation. Preuve : rejeu de l'ancien 18 renvoie bien [INV7, INV8, INV8] et la nouvelle assertion échouerait dessus (dents réelles). 34 tests OK, 33 PASS CI. 0 gate ajouté (#5), 0 chiffre saisi (#6), 0 VPS (#8).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
9b6ec60783 | [DTP-Worker 20260805_121234] RÉ-ATTESTATION read-only du canal stakeholder : recompute python3 indépendant des 5 dimensions launch-readiness du daily_report 2026-08-05 (4Big 24/24@100 · régression 24 suites/624 ran/0-0-0 · recette 15/15 in_repo + 36 ci_job→0 orphelin vérifié BIDIRECTIONNEL vs les 33 vrais jobs gate.needs · structure 33=8 statiques+25 suites) → toutes CONCORDANTES, canal exact et courant. 0 fichier de prod édité, 0 gate ajouté (check_ci_integrity couvre déjà l'intégrité #5), 0 chiffre saisi à la main (#6), 0 commande VPS (#8). Restes roadmap S3/S5/S6 = refactor BIM/builds EAS/dépôts ONAPI/déploiement prod hors périmètre worker. 33 PASS CI. Seule édition : activity_log. | ||
|
|
a205fa64f2 |
[DTP-Worker 20260805_114227] AUDIT read-only roadmap↔repo (cross-refs numériques + liens) → CLEAN + clôture d'un faux-positif « 7 dashboards vs 6 »
Roadmap intégralement livrée/gatée, CI 33 PASS, daily_report du jour déjà écrit → audit ciblé de la classe peu balayée « cohérence chiffres/liens roadmap vs état réel du dépôt » (table Gains + Métriques MVP), via Explore + vérif manuelle. Un seul candidat remonté, vérifié NON-défaut : la roadmap annonce « 7 dashboards uniformes » (L39/L83) alors que L36 énumère « clone /waf-home sur 5 entités ». Arithmétique naïve 1+5=6 → fausse : le 7e est wag-home, page-home DÉJÀ existante distincte de waf-home (attestée GAP_ANALYSIS_SPRINT1.md:91 « pages Frappe www/ (wag-home, waf-home, …) »). Donc wag-home + waf-home + 5 clones = 7 ; « 7 » sourcé et cohérent roadmap L39/L83 ET GAP L93 ; aucune occurrence littérale « 6 » → 0 contradiction interne. WAG (parent d'Helios RD, §Entités) a légitimement son dashboard. Dashboards = pages front VPS hors-repo, aucun générateur/artefact `dashboard` in-repo (seule livraison frontend gatée = portails/ 5 Workspaces rôle, classe distincte) → aucune source in-repo n'autorise un recompte. Éditer 7→6 inventerait une correction fausse (#6) + churn (#5) → LEAVE. Reste CLEAN : RBAC 50 recompté=50, 5 portails, Expo 51 vs cible 54, 0 lien markdown cassé (03_agents/*/AGENT.md + 05_deliverables_mvp/*/README.md ; seuls non-résolus = chemins VPS + code-spans par design), 0 auto-contradiction ailleurs. 0 fichier de production édité, 0 gate ajouté, 0 chiffre inventé, 0 commande VPS, aucun git clean. Éditions : activity_log + mémoire de skip roadmap-7-dashboards-not-drift (pour que les futurs sweeps ne re-signalent pas). run_ci.sh 33 PASS/0 FAIL/0 SKIP. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
e0858f279b |
[DTP-Worker 20260805_111224] SWEEP read-only 3 classes de dérive doc → CLEAN + clôture d'une RÉCURRENCE de faux-positif de l'audit docstring-vs-code : le flag compat -o sur le sous-parser validate est un NON-défaut (bijection PARFAITE 8-vs-13 entre docstring validate [-o OUT] et argparse qui ajoute -o help="ignoré (compat)" — chaque module self-cohérent, zéro dérive). Décision LEAVE (anti-churn #5) : distinct de la convention de code de sortie harmonisée par 6b61ff8 (celle-ci avait une conséquence fonctionnelle main()->None vs 0 ; -o sur validate n'en a AUCUNE — flag ignoré, validate n'écrit pas), et hors OPEN_DECISIONS_REGISTER (réservé aux arbitrages produit de Michel). Classes 2+3 aussi CLEAN : 11 sous-comptes prose recomputés exacts, et classe NEUVE README/AGENT/docstring output-filenames ↔ out/ réel = 22/22 concordants (bancable excepté, pas d'out/ commité). 0 fichier de production édité, 0 gate ajouté, 0 chiffre inventé, 33 PASS CI. Mémoire docstring-vs-code-drift enrichie pour que les futurs sweeps Explore SKIPent le [-o OUT] (2e session qu'il est re-signalé à tort comme "7-8 défauts").
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
6b61ff8b68 |
[DTP-Worker 20260805_104219] FIX de COHÉRENCE 4Big : acceptance_gen.py était le SEUL des 23 générateurs à rompre la convention universelle de code de sortie (main() -> None + appel nu main() vs -> int + raise SystemExit(main()) chez les 22 autres) → aligné (cmd_build/cmd_validate/main -> int, return 0, SystemExit(main())) ; le paramètre argv que tous exposent pour la testabilité renvoyait None au lieu de 0 à un appelant programmatique. Comportement inchangé (chemin d'échec _validate_or_die -> sys.exit(1) préservé, succès=0/échec=1), artefacts byte-identiques, 37 tests OK, 33 PASS CI. Classe docstring-vs-code auditée end-to-end aujourd'hui (23 gen + *lib/ helpers) = exacte par ailleurs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
11e1cdd183 |
[DTP-Worker 20260805_101214] FIX RÉEL : la fiche MOBILE présentait oto_module_mobile_api.py comme source sans qualificatif alors que seul le .pyc existe — annotation « (compilé pyc) » perdue vs sa source citée AGENTS_EXISTING_ASSETS.md §8:59 (et convention sœur §9) → annotée pyc-only sur la seule ligne concernée, 4 sources réelles laissées intactes
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
fbe298ffd0 |
[DTP-Worker 20260805_094211] FIX RÉEL : le README module SEO annonçait « 36 tests (dont 8 injections négatives) » alors que la suite compte 10 méthodes test_negative_* (faux depuis le commit d'origine 0d3b242, sous-compte non gaté — le gate ne recompute que le total 36) → corrigé 8→10
Vérité-terrain : grep -c def test_negative_ = 10 (réparties Keywords/SchemaOrg/Hreflang/Manifest, PAS de classe dédiée) ; git show
|
||
|
|
5a96fc32d9 |
[DTP-Worker 20260805_091204] FIX de COUVERTURE doc : la fiche MOBILE omettait son propre livrable in-repo gaté crm→mobile/app_config (générateur de config app · 5 fichiers out · job mobile-app-config-tests dans gate.needs · CLI build|validate · 22 tests) — elle n'ancrait le rôle que sur RBAC + acceptance S5 (« deux artefacts in-repo »), jamais sur le générateur
Dernier des 22 modules livrés orphelin de fiche (grep -rl sur 03_agents/*/AGENT.md). Mirroir exact du pattern CRM 071201 : sous-section dédiée + 1 ligne de table AUTO-GATÉE par 3 gates indépendants de check_readme_claims (résolution par cible de lien mobile/app_config ∈ plan.suites) — cellule Tests 22==source · job CI mobile-app-config-tests==ci.yml · verbes CLI build|validate==subparsers. Pas de piège des 2 cadres de sprint : S5 dans les deux (acceptance evidence_modules S5 · roadmap ## SPRINT 5 ligne Mobile L56) → cité L56. 3 énumérations « ancrage in-repo » réconciliées (sinon contradiction avec la nouvelle section), toutes sourcées. 0 out/ régénéré (git status = fiche seule) · 0 gate ajouté (#5) · 0 édition d'autorité · 0 chiffre inventé (#6, 22 lu dans regression_plan) · CI 33 PASS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
d7dbda9e2b |
[DTP-Worker 20260805_084202] FIX RÉEL : « 6 sections » périmé dans les 2 docs d'IMPLÉMENTATION de crm/financement_bancaire alors que le module en livre 7
Classe prose FACT count ungated (prose-facts-vs-numeric-drift). Défaut : README:9 « la structure des 6 sections » + fiche CRM AGENT.md:47 « cœur du gate + 6 sections » décrivaient le livrable avec un compte périmé. Le bon compte = 7 est triple-sourcé et byte-gaté : out/MANIFEST.json counts.sections=7 · financement_spec.json bloc sections=7 (apport_initial,info_achat,choix_banque,formulaires,exigences,autorisations,envoi) · et le README se contredisait lui-même (L49 énumère 7, L57 « 7 sections » annotée source=MANIFEST). Origine du 6 : la DIRECTIVE originale énumérait 6 sections non-gating puis fut amendée pour ajouter apport_initial (gating, pos.1) → 7 ; spec+module ont suivi, les 2 prose L9/L47 non. Correctif 6→7 sur les 2 SEULES surfaces d'implémentation. Les 4 « 6 sections » restantes sont des snapshots directive gelés (DIRECTIVE_FINANCEMENT L106/122/131 + DIRECTIVE_WORKFLOW_V10 L22/47) — input-specs datés de Michel, jamais réécrits (directive-vs-implementation · spec=authority) ; leur « 6 » est exact au cadre pré-amendement → INTACTS. 0 gate ajouté (#5 · un gate structuré ne mordrait pas la prose L9, hors-cible ; SIGNAL surfacé : financement seul module dont MANIFEST.counts n'est pas recompté par check_readme_claims). 0 chiffre inventé (#6). 0 production éditée. 0 commande VPS (#8). run_ci.sh 33 PASS 0 FAIL 0 SKIP. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
d6cc09da0d |
[DTP-Worker 20260805_081202] FIX RÉEL : le module crm/financement_bancaire s'auto-étiquetait « Sprint 5 » dans une CITATION ROADMAP-GLOBALE (roadmap L52) alors que L52 ∈ Sprint 4 → label corrigé S5→S4 sur ses 2 seules surfaces manuscrites (README:3 prose + gen.py:4 docstring) · clôt le SIGNAL surfacé non tranché par la session 071201
- Finding : ligne 3 du README « Sprint 5 · roadmap L52 (workflow vente end-to-end · volet financement) » = citation roadmap-GLOBALE (cite L52 + reprend le texte du deliverable S4), PAS un cadre agent-interne → tranchée fausse par 4 autorités concordantes : · fichier roadmap : ## SPRINT 4 = L48, deliverable L52 ; ## SPRINT 5 = L54 « ONAPI + Compliance + Mobile » (rien à voir) → « Sprint 5 · roadmap L52 » auto-contradictoire · autorité byte-gatée acceptance_spec.json (partition INV5) : crm/financement_bancaire ∈ S4 · roadmap_line 52 · 3 modules frères du bucket S4 tous « Sprint 4 » (workflow_vente/dossier_vente/commissions · L51-52) → financement seul outlier · fiche 03_agents/crm/AGENT.md liste déjà « 4 (roadmap L52) » → le module contredisait sa propre fiche - Provenance surfacée non éditée : DIRECTIVE Michel :140 cadre « [Sprint 5 · Financement] » (son snapshot d'entrée) transcrit à tort dans un slot roadmap-global ; directive laissée INTACTE (input immuable, comme daily_reports) - Balayage exhaustif : exactement 2 surfaces manuscrites (README:3 + gen.py:4) ; aucun spec/artefact/out/gate ne porte de champ sprint → build ne régénère aucun artefact (check_artifacts vert) - 0 gate ajouté (#5 · label sprint = piège à 2 cadres légitimes, gate aveugle = faux positifs sur frames agent-internes) · 0 édition d'autorité (acceptance disait déjà S4) · 0 chiffre inventé (#6) · 0 commande VPS (#8) · CI 33 PASS Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
a39dc28f59 |
[DTP-Worker 20260805_074202] FIX de COUVERTURE : le livrable transverse demo/scenarios (Sprint 7 · CRM+Faisabilité) manquait des DEUX fiches co-porteuses → recensé, une seule source gatée
Complétude≠exactitude (même classe que le fix CRM/financement précédent). Diff
05_deliverables_mvp/*/ vs tables des 13 fiches : demo/scenarios est un livrable
produit (générateur demo_scenario_gen.py · 39 tests · out/{run_sheet,MANIFEST} ·
README déjà gaté · job CI demo-scenario-tests) mais recensé dans AUCUNE fiche
(grep demo|scenario sur 03_agents/*/AGENT.md = 0). Livrable transverse SANS agent
propre : README « Sprint 7 (CRM+Faisabilité) » + roadmap L68 l'assignent aux DEUX.
- Fiche CRM : sous-section « Livrable transverse · Sprint 7 » + table 1-ligne
AUTO-GATÉE (label scenarios/ · chemin demo/scenarios ∈ plan.suites · cellule
Tests recomputée depuis regression_plan.json par le row_re générique de
check_readme_claims — la ligne HÉRITE du gate, 0 gate ajouté #5). Framée honnête :
PAS un livrable CRM propre mais méta-générateur qui COMPOSE l'amont, source
distincte du trio + du financement (laissés INTACTS).
- Fiche Faisabilité : cross-réf en prose (0 chiffre redupliqué #5) vers la fiche CRM
+ README module ; bancable alimente S-P07-BANQUIER.
Auto-gates franchis (3 axes) : Tests 39==source(39) · verbes build|validate==
subparsers · citation roadmap l.68==roadmap · job CI==ci.yml · check_docs cross-refs OK.
2 fichiers touchés + log. 0 chiffre inventé (#6) · 0 production éditée · 0 gate ajouté
(#5) · 0 commande VPS (#8). CI 33 PASS · 0 FAIL · 0 SKIP.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|
|
f73404a6a4 |
[DTP-Worker 20260805_071201] FIX de COUVERTURE doc : la fiche CRM omettait son 4e module livré crm/financement_bancaire (absent des 13 fiches agents) → sous-section dédiée + ligne de table AUTO-GATÉE par 3 gates indépendants de check_readme_claims (cellule Tests 35==source · job CI crm-financement-bancaire-tests==ci.yml · verbes CLI build|validate==subparsers, résolution par cible de lien crm/financement_bancaire∈auth) · trio pipeline + agrégat gaté « Total CRM 81 tests » laissés INTACTS (financement ne partage pas la source unique workflow_vente_spec → hors-trio, sinon faux sémantiquement + gate cassé) · Sprint 4·L52 lu dans acceptance_spec.json (autorité roadmap-globale, PAS le Sprint 5 agent-interne du README module) · 35 tests lu dans regression_plan · SIGNAL surfacé non tranché : README module « Sprint 5 » vs S4 acceptance (piège des 2 cadres de sprint, édition spec+regen coordonnée requise) · 0 édition d'autorité · 0 gate ajouté (#5) · 0 chiffre inventé (#6) · CI 33 PASS
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
caa3b90556 |
[DTP-Worker 20260805_064201] FIX RÉEL : fenêtre de sprint roadmap-globale de faisabilite/generator corrigée S2→S3
Défaut (1re vraie édition de prod après plusieurs sessions de sondes « 0 édition ») :
quality_spec.json:66 attribuait au générateur de faisabilité 4 volets la fenêtre roadmap
« S2 » avec un source falsifiable-faux (« roadmap Sprint 2 · Faisabilité… »), alors que la
roadmap n'a AUCUNE faisabilité au Sprint 2 (Console/CRM/RBAC) et place « génération 4 volets »
au Sprint 3 (L43, livrable L46 « P07 faisabilité complète auto-générée »). Cause racine :
confusion de 2 cadres de sprint — le label agent-interne « S2 » (AGENT.md §130-133 : phases
S1 template/S2 générateur/S3 versioning, toutes ancrées roadmap Sprint 3) recopié dans le
champ roadmap-global (seul quality_spec le porte, toutes ses entrées sourcent « roadmap
Sprint N »). Effet : le livrable-phare S3 était prouvé SANS son propre générateur, ce dernier
mal-classé comme preuve du S2 (dashboards/CRM/RBAC) sans rapport.
Correctif coordonné 2-spec + régénération byte-gatée :
- quality_spec.json:66 : sprint S2→S3 + source recitée « roadmap Sprint 3 » (style aligné sur
le jumeau bancable, déjà S3).
- acceptance_spec.json : generator retiré de evidence_modules S2, ajouté à S3
(sinon invariant 5 « partition exacte » casse : want lu dans quality_spec ≠ have déclaré).
- régénération audit_4big PUIS acceptance (lit la fenêtre depuis quality_spec).
Vérif : partition_ok=True · bijective=True · S2=6 (publiciste+5 rbac) · S3={bancable,generator}
· run_ci 33 PASS · score 4Big générateur inchangé 100/100 (le champ sprint ne sert qu'au tri+méta,
pas d'oracle de scoring). Portée honnête : 5 fichiers (2 specs + 3 artefacts régénérés) + log.
0 doc de module éditée (les ~10 « S2 » ailleurs = cadre agent-interne, corrects, #5) · daily_reports
= historique non réécrit · 0 gate ajouté (déjà gaté par inv5) · 0 chiffre inventé (#6) · 0 VPS (#8).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|
|
40ddab05af |
[DTP-Worker 20260805_061201] Sweep REPO-WIDE de la classe « chemin fantôme en code-span backtick » (ungated) : étend l'audit d'exactitude des 13 fiches à TOUT le markdown suivi (~200 .md · READMEs, daily_reports, roadmap, ci/README, DIRECTIVE_*, logs) → résolution multi-ancre (doc-dir · repo-root · deliverables-root · sous-modules) → 0 fantôme réel · les ~180 hits = 3 formes bénignes vérifiées (runtime/VPS hors-dépôt · citations cross-module en prose dont le backtick est le libellé d'un vrai lien validé par check_docs · narratif d'historique + non-chemins pédagogiques ./inexistant + /tmp/suite_teeth harnais) · 2 axes de câblage CI re-confirmés structurellement clos (run_ci dérive gate.needs · check_ci_integrity INV-B attrape un ci/*.sh orphelin) · 0 défaut réel → 0 édition de production (#5) · 0 gate ajouté (backticks volontairement neutralisés + gate lisant /opt/oto non-portable côté runner Gitea) · 0 chiffre inventé (#6) · aucune commande VPS (#8) · CI 33 PASS
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
b8447363ff |
[DTP-Worker 20260805_054200] Currency canal STAKEHOLDER : consigner la clôture des DEUX axes de « dents » dans daily_reports/2026-08-05.md
Le rapport stakeholder du jour (session 004112) s'arrêtait au jalon 33 jobs et PRÉCÉDAIT toute la série d'attestation teeth des suites de MODULE (BATCH 1→4, 034144→051154, clôture 25/25). Le canal daily_reports ne captait donc aucun des deux axes de « dents ». Section « fin de journée » ajoutée : · axe A — 8/8 gates statiques mutation-prouvés (9fe8bf1/031134) · axe B — 25/25 suites de module mutation-prouvées (6+6+6+7) Chaque chiffre sourcé sur une structure commitée (ls ci/*.sh=8 · gate.needs=25 · série de commits) — 0 saisi à la main (#6). Message : les tables prouvent la CI VERTE, les attestations teeth prouvent qu'elle MORD (gate/suite toujours-vert = faux vert invisible). Avant de choisir : chasse docstring↔code drift sur les 21 générateurs (classe récurrente) → 0 contradiction réelle ; les « docstrings sans liste-sorties » sont des faux positifs (sorties documentées dans Sous-commandes), uniformiser = churn écartée (#5). 0 édition de production · 0 gate ajouté (#5) · aucune commande VPS (#8) · aucun git clean · CI 33 PASS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
986d29362c |
[DTP-Worker 20260805_051154] Attestation des DENTS des suites de MODULE — BATCH 4 (FINAL) : mutation-test les 7 dernières suites → CLÔTURE 25/25 · 7 BITES · 0 TOOTHLESS
6 mutations de LOGIQUE de générateur (sortie re-assertée en mémoire) : portails roles_couverts sum +1 · audit-4big totals.fail len(below) +1 · demo duree_min sum +1 · regression test_methods sum -1 · deploy couverture-bijective gated_set-mapped_set → | · acceptance exact want==have → !=. 2 mutations proposées par Explore étaient INERTES (and→or sur 'not [] and not []' reste True) — remplacées par des mutations qui font BASCULER la sortie observée (leçon (b) désambiguïsation test-édenté vs mutation-inerte appliquée en direct). 1 sous-classe DISTINCTE : rbac-aggregate (test_rbac.py) n'a pas de builder/out — il valide le CONTRAT rbac_50_roles.json (schéma, ==50, unicité, 5 portails, set_user_permissions #6), structurellement non-echo ; dent prouvée par dérive du contrat cible 50→49 (test_exactement_50_roles). Axe contrat signalé honnêtement ≠ axe logique-générateur. Clôture 25/25 des suites de MODULE mordantes + 8/8 gates STATIQUES = Sprint 8 'regression tests exhaustifs' attesté sur ses deux axes de DENTS. Harnais /tmp read-only (baseline verte → cp → str.replace unicité → run suite seule → assert exit≠0 → restore cp+cmp), trap EXIT, jamais git clean/checkout, arbre byte-pristine. 0 gate ajouté (#5) · 0 chiffre inventé (#6) · 0 édition prod · aucune commande VPS (#8) · CI 33 PASS Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
e38dd933c6 |
[DTP-Worker 20260805_044153] Attestation des DENTS des suites de MODULE — BATCH 3 : mutation-test generator-logic sur 6 nouvelles suites (18/25 prouvées) → 6 BITES · 0 TOOTHLESS
Continuation de l'axe des DENTS des suites de MODULE ([[module-suite-teeth-mutation]]) : batches 034144+041149 avaient prouvé 12/25 ; ce batch 3 en couvre 6 de plus → 18/25 · 7 restantes non-couvertes ≠ édentées (pas de plafond silencieux). 6 BITES (chaque suite mord sur une dérive de LOGIQUE de son générateur, jamais un écho d'artefact) : - rbac/fixtures_gen builder:43 if_owner ==→!= (test_if_owner_reflete_scope_own) - rbac/userperm_gen builder:43 by_mechanism += 1→+=2 (sum==50) - rbac/apply_plan aggregator:174 chaîne bijective 2e ==→!= (assertTrue couverture_bijective) - mobile/app_config builder:105 roles=sorted(...)+reverse=True (==sorted(roles_map[portail])) - qa/audit_5d builder:60 count(_FAIL)→count(_PASS) (totals fail:0→13) - frontend/chat_otoia builder:114 sum(nb_roles)→sum(1) (test_44_roles_couverts 44→~5) Axe distinct des DENTS des 8 gates STATIQUES (031134, 8/8) : une suite qui rechargerait out/*.json contre elle-même serait édentée = faux vert Sprint 8 · les suites reconstruisent en mémoire depuis le contrat. LEÇON réappliquée (désambiguïser TOOTHLESS-test vs mutation INERTE) : le 1er pick mobile (:192 roles_couverts sum→len) était édenté pour la suite de MODULE (agrégat jamais ré-asserté en mémoire) ; basculé sur :105 (tri, réellement contraint). Idem fixtures :68 → :43. Harnais /tmp read-only, remplacement d'octets littéral (assert 1 occurrence), run de la seule suite, restore byte-exact cp+cmp, trap EXIT, jamais git clean, arbre pristine · 0 gate ajouté (#5) · 0 chiffre inventé (#6) · 0 édition prod · CI 33 PASS Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
d25da28d9c |
[DTP-Worker 20260805_041149] Attestation des DENTS des suites de MODULE — BATCH 2 : mutation-test generator-logic sur 6 nouvelles suites (12/25 prouvées) → 6 BITES · 0 TOOTHLESS
Continuation honnête de l'axe DENTS-des-suites (034144 : 6/25, 19 non-couvertes≠édentées). Batch 2 couvre 6 de plus → 12/25. Chaque suite doit sortir NONZERO sur une dérive de LOGIQUE de son générateur (jamais un écho d'artefact) : scorer completude 20*filled, bancable point-équilibre math.ceil, workflow-vente tri-déterminisme .sort, dossier is_submittable seuil, financement apport /100.0, publiciste _fmt_usd séparateur espace. LEÇON : un verdict TOOTHLESS doit être désambiguïsé — (a) test réellement édenté vs (b) mutation comportementalement INERTE pour la donnée du contrat. 2 mutations ont d'abord lu TOOTHLESS mais étaient (b), PAS des défauts : dossier >= '1'→>'1' inerte car max doc_status='2' (les 2 branches donnent 1) → une mutation qui FAIT BASCULER le résultat (>= '3') mord ; publiciste min→max inerte car _prix_depuis n'alimente que la gate is-not-None, sa valeur min n'est jamais affichée (obs. honnête, pas un défaut #5/#6) → on mute une logique observée (_fmt_usd). Règle : confirmer que la mutation change la SORTIE pour la fixture avant de croire un TOOTHLESS. Axe distinct des DENTS des 8 gates STATIQUES (031134, 8/8). Portée honnête : 13 restantes non-couvertes≠édentées (pas de plafond silencieux). Harnais /tmp read-only, restore byte-exact cp+cmp, trap EXIT, jamais git clean, arbre pristine. 0 gate ajouté (#5) · 0 chiffre inventé (#6) · 0 édition prod · CI 33 PASS Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
98f3f56c3a |
[DTP-Worker 20260805_034144] Attestation des DENTS des suites de test de MODULE : mutation-test generator-logic sur 6 des 25 suites unittest (chacune doit sortir NONZERO sur une dérive de LOGIQUE de son générateur — commission base*taux, _statut gated/a_construire, e-NCF zfill(10), nb_roles, dédup SEO, séparateur options confotur — jamais un écho d'artefact) → 6 BITES · 0 TOOTHLESS · axe distinct des DENTS des 8 gates STATIQUES (031134, 8/8) : une suite qui rechargerait out/*.json contre lui-même serait édentée = faux vert Sprint 8 comme un gate édenté · les suites reconstruisent en mémoire depuis le contrat, prouvé qu'elles contraignent la LOGIQUE · portée honnête = 6/25 échantillonnées pour diversité, 19 restantes non-couvertes≠édentées (pas de plafond silencieux) · harnais /tmp read-only, restore byte-exact cp+cmp, jamais git clean, arbre pristine · 0 gate ajouté (#5) · 0 chiffre inventé (#6) · 0 édition prod · CI 33 PASS
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|
|
9fe8bf1feb |
[DTP-Worker 20260805_031134] Attestation launch-readiness des DENTS du gate : mutation-test de suite complète des 8 gates statiques (chacun doit sortir NONZERO sur sa dérive dédiée) → 8 BITES · 0 TOOTHLESS · aucun édenté malgré +1 gate (8ᵉ check-mobile-workflow) et ~3j d'éditions depuis la dernière suite-mutation (7/7 le 08-02) · axe distinct des attestations de CONTENU (run_ci prouve PASS, pas FAIL — un gate toujours-vert = faux vert launch-readiness) · harnais /tmp read-only, restore byte-exact par cp (jamais git clean), arbre pristine · 0 gate ajouté (#5) · 0 chiffre inventé (#6) · 0 édition prod · CI 33 PASS
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |