From caa3b90556b14962fb9cb058c9e1a536028556b2 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Wed, 5 Aug 2026 06:56:32 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260805=5F064201]=20FIX=20R?= =?UTF-8?q?=C3=89EL=20:=20fen=C3=AAtre=20de=20sprint=20roadmap-globale=20d?= =?UTF-8?q?e=20faisabilite/generator=20corrig=C3=A9e=20S2=E2=86=92S3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- 05_activity_log/2026-08-05.md | 53 ++++++++++++++ .../qa/acceptance/acceptance_spec.json | 5 +- .../qa/acceptance/out/MANIFEST.json | 8 +-- .../qa/acceptance/out/acceptance_matrix.json | 14 ++-- .../qa/audit_4big/out/quality_report.json | 72 +++++++++---------- .../qa/audit_4big/quality_spec.json | 2 +- 6 files changed, 103 insertions(+), 51 deletions(-) diff --git a/05_activity_log/2026-08-05.md b/05_activity_log/2026-08-05.md index 64efe7c..8984209 100644 --- a/05_activity_log/2026-08-05.md +++ b/05_activity_log/2026-08-05.md @@ -629,3 +629,56 @@ pour que la prochaine session ne rejoue pas ce sweep à froid ni ne re-flague ce log ; aucun fichier de code gaté). **0 chiffre inventé (#6) · faux positifs backtick écartés par résolution multi-ancre + inspection · 0 édition de production · 0 gate ajouté (#5) · aucune commande VPS (#8) · aucun `git clean`.** + +--- + +## Session 20260805_064201 · FIX RÉEL — la fenêtre de sprint *roadmap-globale* de `faisabilite/generator` était fausse (S2 → S3) + +**Défaut trouvé (première vraie édition de production depuis plusieurs sessions de sondes « 0 édition »).** +Le registre de l'auditeur 4Big attribuait au **générateur de faisabilité 4 volets** une fenêtre +de sprint **roadmap-globale erronée** : + +- `05_deliverables_mvp/qa/audit_4big/quality_spec.json:66` + → `"sprint": "S2"`, `"source": "roadmap Sprint 2 · Faisabilité générateur 4 volets …"`. + +Or la roadmap **ne contient AUCUNE faisabilité au Sprint 2** (`04_roadmap/…:35-39` = Console / +CRM / RBAC). La **« génération 4 volets <1h »** est explicitement au **Sprint 3** +(`…:43`, livrable `…:46` « P07 Aqua Terra faisabilité complète auto-générée »). La citation +`source` était donc **falsifiable et fausse** (classe [[prose-facts-vs-numeric-drift]] · sous-classe +*citation mal-attribuée* + [[roadmap-anchor-gate]]). + +**Cause racine — confusion de deux cadres de « sprint ».** +1. **Cadre agent-interne** (phases de construction par agent) : `03_agents/faisabilite/AGENT.md` + §130-133 définit S1 = template · **S2 = générateur 4 volets** · S3 = version tracking — le tout + **ancré à la roadmap Sprint 3** (L41-46). Ce cadre est repris tel quel dans les docs de module + (`generator/README.md` H1 « Sprint 2 », `TEMPLATE_…:216`, `GAP_ANALYSIS_SPRINT1.md:74-75`, + `publiciste/README.md:26`, `daily_reports/*`). **Cohérent dans son cadre — laissé intact.** +2. **Cadre roadmap-global** (autorité de la recette) : le champ `sprint` de `quality_spec.json` + — **toutes** les autres entrées le sourcent « roadmap Sprint N ». C'est le **seul** endroit qui + doit porter le sprint roadmap-global. Il avait recopié le label agent-interne « S2 ». + +**Conséquence corrigée.** Le livrable-phare **S3** « P07 faisabilité complète auto-générée » +était prouvé **sans** le module qui la génère (`faisabilite/generator`), tandis que ce dernier +était compté comme preuve du **S2** (« 7 dashboards · CRM · RBAC ») — auquel il n'a **aucun** +rapport. La preuve la plus directe du livrable-phare était mal-classée. + +**Correctif (édition coordonnée 2-spec + régénération byte-gatée).** +- `quality_spec.json:66` : `"sprint"` **S2 → S3**, `source` recitée « roadmap Sprint 3 · Faisabilité + générateur 4 volets → data_room/PXX » (aligné sur le style de son jumeau `bancable`, ligne 71, + déjà S3). +- `acceptance_spec.json` : `faisabilite/generator` **retiré** de `evidence_modules` S2, **ajouté** + à S3 (`["faisabilite/bancable", "faisabilite/generator"]`) — sinon l'**invariant 5 « partition + exacte »** casse (`want` lu dans `quality_spec` ≠ `have` déclaré). Édition des DEUX specs + obligatoire et suffisante. +- Régénération : `audit_4big` (report) **puis** `acceptance` (lit la fenêtre depuis `quality_spec`). + +**Vérifications.** `partition_ok=True · bijective=True` · S2 = 6 modules (publiciste + 5 rbac, +exact) · S3 = {bancable, generator} (exact). `./run_ci.sh` → **33 PASS · 0 FAIL · 0 SKIP**. +Score 4Big du générateur **inchangé 100/100** (le champ `sprint` ne sert qu'au tri + méta du +report, pas d'oracle de scoring vérifié dans `q4lib/scoring.py`). + +**Portée honnête / anti-churn.** **5 fichiers** touchés (2 specs + 3 artefacts régénérés) + ce log. +**Zéro** doc de module éditée : les ~10 « S2 » du générateur ailleurs sont le **cadre agent-interne** +(ancré Sprint 3), corrects — les churner serait de la dérive #5. `daily_reports/*` = historique, +non réécrit. **0 gate ajouté** (surface déjà gatée par invariant 5 · [[verify-uncovered-before-gating]]), +**0 chiffre inventé** (#6, tout dérivé du roadmap), **0 commande VPS** (#8), **aucun `git clean`**. diff --git a/05_deliverables_mvp/qa/acceptance/acceptance_spec.json b/05_deliverables_mvp/qa/acceptance/acceptance_spec.json index 1b0078d..d41f423 100644 --- a/05_deliverables_mvp/qa/acceptance/acceptance_spec.json +++ b/05_deliverables_mvp/qa/acceptance/acceptance_spec.json @@ -41,8 +41,7 @@ "rbac/fixtures_gen", "rbac/userperm_gen", "rbac/roleprofile_gen", - "rbac/apply_plan", - "faisabilite/generator" + "rbac/apply_plan" ], "evidence_artifacts": [], "out_of_scope": [ @@ -59,7 +58,7 @@ "roadmap_line": 46, "statement": "P07 Aqua Terra faisabilité complète auto-générée en <1h", "status": "in_repo", - "evidence_modules": ["faisabilite/bancable"], + "evidence_modules": ["faisabilite/bancable", "faisabilite/generator"], "evidence_artifacts": [], "out_of_scope": [ { diff --git a/05_deliverables_mvp/qa/acceptance/out/MANIFEST.json b/05_deliverables_mvp/qa/acceptance/out/MANIFEST.json index 02070f4..a7f00ea 100644 --- a/05_deliverables_mvp/qa/acceptance/out/MANIFEST.json +++ b/05_deliverables_mvp/qa/acceptance/out/MANIFEST.json @@ -33,7 +33,6 @@ { "sprint": "S2", "expected": [ - "faisabilite/generator", "publiciste", "rbac", "rbac/apply_plan", @@ -42,7 +41,6 @@ "rbac/userperm_gen" ], "cited": [ - "faisabilite/generator", "publiciste", "rbac", "rbac/apply_plan", @@ -57,10 +55,12 @@ { "sprint": "S3", "expected": [ - "faisabilite/bancable" + "faisabilite/bancable", + "faisabilite/generator" ], "cited": [ - "faisabilite/bancable" + "faisabilite/bancable", + "faisabilite/generator" ], "missing": [], "extra": [], diff --git a/05_deliverables_mvp/qa/acceptance/out/acceptance_matrix.json b/05_deliverables_mvp/qa/acceptance/out/acceptance_matrix.json index 774c438..fbeb04d 100644 --- a/05_deliverables_mvp/qa/acceptance/out/acceptance_matrix.json +++ b/05_deliverables_mvp/qa/acceptance/out/acceptance_matrix.json @@ -62,11 +62,6 @@ "module": "rbac/apply_plan", "ci_job": "rbac-applyplan-tests", "gated": true - }, - { - "module": "faisabilite/generator", - "ci_job": "faisabilite-gen-tests", - "gated": true } ], "artifacts": [], @@ -76,7 +71,7 @@ "source": "CLAUDE.md #8 (VPS) · #1 (ERPNext natif = priorité — import via bench par agent Backend)" } ], - "n_modules": 7, + "n_modules": 6, "all_modules_gated": true, "all_artifacts_exist": true, "has_evidence": true @@ -93,6 +88,11 @@ "module": "faisabilite/bancable", "ci_job": "bancable-tests", "gated": true + }, + { + "module": "faisabilite/generator", + "ci_job": "faisabilite-gen-tests", + "gated": true } ], "artifacts": [], @@ -102,7 +102,7 @@ "source": "CLAUDE.md #8 (VPS) — le rendu 3D/BIM tourne hors repo (bim-cloud.otov7.com)" } ], - "n_modules": 1, + "n_modules": 2, "all_modules_gated": true, "all_artifacts_exist": true, "has_evidence": true diff --git a/05_deliverables_mvp/qa/audit_4big/out/quality_report.json b/05_deliverables_mvp/qa/audit_4big/out/quality_report.json index 5d391f1..07d90ce 100644 --- a/05_deliverables_mvp/qa/audit_4big/out/quality_report.json +++ b/05_deliverables_mvp/qa/audit_4big/out/quality_report.json @@ -40,42 +40,6 @@ } ], "modules": [ - { - "id": "faisabilite-generator", - "path": "faisabilite/generator", - "sprint": "S2", - "archetype": "data_room", - "applicable_weight": 80, - "earned_weight": 80, - "score": 100, - "verdict": "PASS", - "checks": [ - { - "criterion": "DOC", - "weight": 20, - "passed": true, - "evidence": "README.md (4797 octets)" - }, - { - "criterion": "CONTRAT", - "weight": 20, - "passed": true, - "evidence": "brief.schema.json" - }, - { - "criterion": "TESTS", - "weight": 25, - "passed": true, - "evidence": "16 méthodes test_* dans 1 fichier(s) (seuil 8)" - }, - { - "criterion": "CLI", - "weight": 15, - "passed": true, - "evidence": "faisabilite_gen.py (argparse + __main__)" - } - ] - }, { "id": "publiciste", "path": "publiciste", @@ -340,6 +304,42 @@ } ] }, + { + "id": "faisabilite-generator", + "path": "faisabilite/generator", + "sprint": "S3", + "archetype": "data_room", + "applicable_weight": 80, + "earned_weight": 80, + "score": 100, + "verdict": "PASS", + "checks": [ + { + "criterion": "DOC", + "weight": 20, + "passed": true, + "evidence": "README.md (4797 octets)" + }, + { + "criterion": "CONTRAT", + "weight": 20, + "passed": true, + "evidence": "brief.schema.json" + }, + { + "criterion": "TESTS", + "weight": 25, + "passed": true, + "evidence": "16 méthodes test_* dans 1 fichier(s) (seuil 8)" + }, + { + "criterion": "CLI", + "weight": 15, + "passed": true, + "evidence": "faisabilite_gen.py (argparse + __main__)" + } + ] + }, { "id": "crm-commissions", "path": "crm/commissions", diff --git a/05_deliverables_mvp/qa/audit_4big/quality_spec.json b/05_deliverables_mvp/qa/audit_4big/quality_spec.json index 58580bd..edfd04f 100644 --- a/05_deliverables_mvp/qa/audit_4big/quality_spec.json +++ b/05_deliverables_mvp/qa/audit_4big/quality_spec.json @@ -63,7 +63,7 @@ "modules": [ { "id": "publiciste", "path": "publiciste", "sprint": "S2", "archetype": "parser", "source": "roadmap Sprint 2 · Publiciste (parser faisabilité → projets_master.json) · ci.yml publiciste-tests" }, { "id": "rbac", "path": "rbac", "sprint": "S2", "archetype": "contract", "source": "roadmap Sprint 2 · RBAC 50 rôles (contrat rbac_50_roles.json) · ci.yml rbac-tests" }, - { "id": "faisabilite-generator", "path": "faisabilite/generator", "sprint": "S2", "archetype": "data_room", "source": "roadmap Sprint 2 · Faisabilité générateur 4 volets → data_room/PXX · ci.yml faisabilite-gen-tests" }, + { "id": "faisabilite-generator", "path": "faisabilite/generator", "sprint": "S3", "archetype": "data_room", "source": "roadmap Sprint 3 · Faisabilité générateur 4 volets → data_room/PXX · ci.yml faisabilite-gen-tests" }, { "id": "rbac-fixtures", "path": "rbac/fixtures_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · fixtures Role + Custom DocPerm · ci.yml rbac-fixtures-tests" }, { "id": "rbac-userperm", "path": "rbac/userperm_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · plan User Permission · ci.yml rbac-userperm-tests" }, { "id": "rbac-roleprofile", "path": "rbac/roleprofile_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · Role Profile par portail · ci.yml rbac-roleprofile-tests" },