diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index 0fa8476..5bdeacd 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -706,3 +706,48 @@ production.** Sweep lecture-seule, occurrence-zéro, rejouable → **pas un gate (#5), **0 chiffre saisi à la main** (#6 — `57`/`6`/comptes distincts recomputés par balayage), **0 commande VPS** (#8). `./run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** (inchangé). Seules éditions : ce journal + mémoire `artifact-internal-set-semantics` (extension « no-recurrence sweep »). + +## Session `20260806_084514` — VÉRIF axe neuf « dents de l'ORACLE jsonschema » (26 `*.schema.json`) → CLEAN 26/26, détecteurs à dents prouvées + +**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` **intégralement livrée** (8 sprints, 22 modules gatés, métriques MVP +atteintes) ; **0 marqueur `TODO`/`FIXME`/`NotImplemented`** en production (recompté — tous les hits +`placeholder` sont le motif de design #6 « jamais 0 inventé ») ; currency du canal stakeholder déjà +écartée par `def4706`/`081509` (commits depuis `e786c12` = doc/commentaire, 0 sortie changée). Plutôt +qu'un énième re-sweep déjà catalogué, **chasse d'un défaut RÉEL sur un axe non encore audité**. + +**Axe neuf : les dents de la couche ORACLE elle-même.** ~20 modules embarquent un `test_schema_oracle` +qui fait `jsonschema.validate(, schema)`. Il valide le build **frais** (qui conforme +toujours par construction) contre un `*.schema.json` **commité**. Si un schéma était **vide** +(`{}` ou `{"type":"object"}` sans `required`/contrainte) ou **malformé**, cet oracle serait +**faux-vert** — acceptant tout, ne prouvant rien. Le byte-repro et les suites ne regardent jamais la +**force** du schéma → classe réellement ungatée. (NB l'oracle **tourne** sous `run_ci` en `python3` +nu, pas `-S` ; les 17 skips sont propres au harnais regression `python -S` — cf. +`regression-baseline-17-skips-by-design`.) + +**Méthode.** Pour chacun des **26** `*.schema.json` : (1) `jsonschema.check_schema()` — est-il un +schéma Draft-N **valide** ? (2) heuristique de dents — déclare-t-il `required` OU (`properties` + ≥2 +mots-clés de contrainte parmi required/enum/pattern/minItems/minimum/const/minLength/ +additionalProperties) ? **Résultat : 26/26 valides, 0 WEAK.** Tous portent required+properties réels +(kw 3..103 ; le plus maigre `faisabilite/generator/brief.schema.json` req=1 props=10 kw=3 reste +non-vide). + +**Dents de l'AUDIT prouvées** (une CLEAN d'un détecteur sans dents ne vaut rien) : le détecteur de +validité **mord** un schéma malformé (`required:"str"`, `properties.x:123`) ; le détecteur de dents +**mord** `{}` et `{"type":"object"}` ; aucun faux positif sur `rbac.schema.json` réel. + +**Contrôles connexes (même session, tous CLEAN).** +- **Mapping `role_id → erpnext_role_name` = fonction** sur les 57 artefacts : **0 conflit** (un + `role_id` ne résout jamais deux libellés distincts — sinon ERPNext créerait deux rôles). Complète + `role-portail-referential-integrity-sweep` (qui résolvait les slugs, pas l'égalité des libellés). +- **Oracle jsonschema exécuté, pas skippé, sous `run_ci`** — vérifié sur `pie/manifest` + (`test_schema_oracle ... ok`), `jsonschema 3.2.0` importable en `python3` nu. + +**Verdict.** Couche oracle **genuinely constraining** ; **aucun défaut de production**. Balayage +lecture-seule, occurrence-zéro, rejouable → **pas un gate** (#5), sibling de +`runtime-encoding-integrity-sweep` / `role-portail-referential-integrity-sweep`. + +**Portée / anti-churn.** **0 fichier de production édité**, **0 artefact reconstruit**, **0 gate ajouté** +(#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`).