[DTP-Worker 20260806_104533] FIX couverture · oracle orphelin brief.schema.json câblé à un test → le SEUL des 26 *.schema.json non enforced
Constat: faisabilite/generator/brief.schema.json, documenté « Contrat d'entrée » et sibling de version/projets_master (tous deux test-enforced), n'était validé par AUCUN test — _validate_brief() ne garde que le code projet, jamais la forme complète du brief; un brief drifté hors contrat passait inaperçu. Fix (teeth): test_input_briefs_validate_against_brief_schema valide les 2 fixtures contre brief.schema.json via le validateur maison Publiciste (zéro-pip, toujours exécuté, pas de skip sous python -S). Conformité pré-vérifiée sous validateur maison ET oracle jsonschema. L'« incomplet » est conforme au sens schéma (null admis) — incomplet seulement au sens sémantique (prix→placeholders #6). Cascade régénérée (générateurs, jamais à la main #6): regression_plan/run/MANIFEST 16→17 · totaux 624→625 exécutés / 607→608 passés / 17 skippés · quality_report evidence 16→17. Prose gatée réalignée (le gate check-readme-claims a mordu): README module + fiches faisabilite/qa/erpnext_backend. Prose ungatée: GAP_ANALYSIS 16→17 + nouveau bloc daily_report (blocs currency antérieurs = snapshots datés, non réécrits). 0 gate ajouté (#5) · 0 chiffre à la main (#6) · 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>
This commit is contained in:
@@ -882,3 +882,55 @@ lecture-seule, occurrence-zéro, rejouable → **pas un gate** (#5), sibling de
|
||||
(#5), **0 chiffre saisi à la main** (#6 — `26`/`57` recomputés par balayage), **0 commande VPS** (#8).
|
||||
`./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé). Seules éditions : ce journal + mémoire
|
||||
`schema-oracle-teeth-audit` (+ pointeur `MEMORY.md`).
|
||||
|
||||
---
|
||||
|
||||
## Session `20260806_104533` — FIX couverture · oracle orphelin `brief.schema.json` câblé à un test (le seul des 26 schémas non enforced) · +1 test · 4 artefacts régénérés · CI verte
|
||||
|
||||
**Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre,
|
||||
roadmap `ROADMAP_8_WEEKS_OR_LESS.md` livrée/gatée, `OPEN_DECISIONS_REGISTER.md` = 3 arbitrages
|
||||
produit appartenant à Michel (non éditables worker). Plutôt qu'un énième sweep zéro-trouvaille,
|
||||
recherche d'une **lacune de couverture réelle et corrigeable**.
|
||||
|
||||
**Axe.** Câblage des 26 oracles `*.schema.json` aux tests (distinct du *teeth-audit* qui prouvait
|
||||
la non-vacuité des schémas, et de la *closedness* : ici « le schéma valide-t-il réellement
|
||||
quelque chose ? »). Balayage `grep -rl <basename>.schema.json --include='*.py'` sur tout le dépôt :
|
||||
**25/26 schémas référencés par au moins un `.py`** ; **1 orphelin** →
|
||||
`faisabilite/generator/brief.schema.json` (**0 référence** dans aucun `.py`).
|
||||
|
||||
**Constat — orphelin authentique, pas by-design.**
|
||||
- Le README du module documente `brief.schema.json` comme **« Contrat d'entrée »** (avec lien) et
|
||||
ses deux siblings (`version.schema.json`, `projets_master.schema.json`) SONT test-enforced
|
||||
(`test_version_json_validates_against_schema`, `test_full_pipeline_master_validates`).
|
||||
- Le garde-fou runtime `faisabilite_gen.py::_validate_brief()` ne vérifie QUE le code `projet`
|
||||
(`P01..P09`), **jamais** la forme complète du brief (masterplan/architecture/typologies…).
|
||||
- Donc un brief drifté hors contrat (type erroné, clé renommée/droppée) passait **inaperçu** :
|
||||
l'asymétrie vs les 2 siblings est le tell.
|
||||
|
||||
**Correction (teeth, pas churn).** Ajout de `test_input_briefs_validate_against_brief_schema`
|
||||
dans `tests/test_generator.py` : valide `brief_complete.json` **et** `brief_incomplete.json` contre
|
||||
`brief.schema.json` via le **validateur maison Publiciste** (zéro-pip → toujours exécuté, **pas** de
|
||||
skip sous `python -S`, donc `skipped` reste 17). Vérifié empiriquement AVANT d'écrire le test : les
|
||||
deux fixtures conforment sous le validateur maison **ET** l'oracle `jsonschema` (`errs=[]` / OK).
|
||||
L'« incomplet » est conforme au **sens schéma** (null/champ absent admis, seul `projet` requis) ; il
|
||||
n'est « incomplet » qu'au **sens sémantique** (prix→placeholders/rétrogradation · anti-invention #6).
|
||||
|
||||
**Cascade gatée régénérée** (générateurs, jamais à la main · #6) :
|
||||
- `count_tests` (faits disque) → `regression_plan.json` : `faisabilite/generator` 16→**17**.
|
||||
- `regression_gen.py build` + `run` → `regression_run.json` + `MANIFEST.json` : totaux
|
||||
**624→625** exécutés · **607→608** passés · **17** skippés inchangés · 24/24 vertes · PASS byte-repro.
|
||||
- `audit_4big_gen.py build` → `quality_report.json` : evidence « 16 méthodes test_* » → **17** (24/24 ≥95).
|
||||
|
||||
**Prose gatée réalignée** (le gate `check-readme-claims` a mordu, comme prévu, sur 4 surfaces) :
|
||||
README module (`16 tests`→`17`, + mention du contrat d'entrée), fiches
|
||||
`03_agents/faisabilite/AGENT.md:22` (col Tests 16→17), `03_agents/qa/AGENT.md` (624/607→625/608),
|
||||
`03_agents/erpnext_backend/AGENT.md` (624→625). **Prose ungatée present-tense réalignée** :
|
||||
`GAP_ANALYSIS_SPRINT1.md` (16→17 tests). **Canal stakeholder** : nouveau bloc de session appendé à
|
||||
`daily_reports/2026-08-06.md` (les 3 blocs de currency antérieurs = snapshots datés à leur HEAD,
|
||||
**non réécrits** — leur 624/607 était juste à leur instant).
|
||||
|
||||
**Portée / anti-churn.** **0 gate ajouté** (#5 — le gate `check-readme-claims` existant a suffi à
|
||||
prouver la cohérence, il a mordu sur les 4 fiches/README stales) · **0 chiffre saisi à la main**
|
||||
(#6 — tous recomputés par les générateurs) · **0 commande VPS** (#8). `./run_ci.sh` =
|
||||
**33 PASS · 0 FAIL · 0 SKIP**. Fichiers touchés : 1 test (+1 méthode) · 4 artefacts régénérés ·
|
||||
5 surfaces prose · ce journal.
|
||||
|
||||
Reference in New Issue
Block a user