From 04f4c217782e7d9a21202802a2d707ed35adfd60 Mon Sep 17 00:00:00 2001 From: Claude Code DTP Worker Date: Thu, 6 Aug 2026 13:53:07 +0000 Subject: [PATCH] =?UTF-8?q?[DTP-Worker=2020260806=5F134554]=20V=C3=89RIF?= =?UTF-8?q?=20axe=20NEUF=20=C2=AB=20l'artefact=20COMMIT=C3=89=20sur=20disq?= =?UTF-8?q?ue=20conforme=20=C3=A0=20son=20sch=C3=A9ma=20=3F=20=C2=BB=20(fi?= =?UTF-8?q?chier=20r=C3=A9el=20vs=20oracle,=20pas=20l'objet=20en-m=C3=A9mo?= =?UTF-8?q?ire=20reconstruit)=20=E2=86=92=20CLEAN=2057/57?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 8e axe-schéma : les 7 axes existants examinent LE SCHÉMA ; celui-ci examine LE FICHIER LIVRÉ. La mémoire notait le trou « jsonschema valide un objet en-mémoire, pas le flat out/ commité » — refermé ici. Chaîne de garde traçable pour les 57 payloads : schéma-whole · schéma-prop+byte-repro · wrap/split byte-repro d'un objet validé · ré-run byte-compare (regression_run via check_regression.sh l.53-70). Les 4 « no-fit » tous by-design (workflow.json wrap-liste fixtures Frappe · acceptance_matrix bundle moins manifest · run_sheet vue rendue · regression_run snapshot d'exécution). 0 fichier livré à forme non-gardée. Détecteur jsonschema 3.2.0 teeth-prouvé (clé-parasite additionalProperties:false → no-fit ; scalaire → no-fit, 2/2 MORDENT), rejouable /tmp hors réseau, 0 édition de production, 0 artefact touché, run_ci 33 PASS 0 FAIL 0 SKIP, pas de gate (#5, occurrence-zéro) Co-Authored-By: Claude Opus 4.8 (1M context) --- 05_activity_log/2026-08-06.md | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index 9d34531..9da06b8 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -1,5 +1,51 @@ # Activity Log · 2026-08-06 · Claude Code DTP Worker +## Session `20260806_134554` — VÉRIF · axe NEUF « l'artefact COMMITÉ sur disque conforme à son schéma ? » (fichier réel vs oracle, pas l'objet en-mémoire) → CLEAN 57/57 · 0 édition de production + +**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/gatée (Sprints 1→7 ; prod VPS / builds EAS / dépôts +ONAPI hors périmètre worker · #8). `OPEN_DECISIONS_REGISTER.md` = 3 arbitrages produit appartenant à +Michel (non éditables). Objectif : un **axe teeth encore jamais balayé**. + +**Axe NEUF (absent de la mémoire).** Les 7 axes-schéma existants (non-vacuité, closedness, wiring, `$ref`, +enum/const, cohérence interne, draft/keyword) examinent tous **le schéma**. La mémoire note un angle +jamais fermé : « *jsonschema oracles validate in-memory objects not flat out/ (no flat pair = 0-err, +by-design)* ». Question NEUVE et orthogonale : le **fichier `out/*.json` réellement commité et livré** +est-il conforme à son schéma — ou une régression de forme peut-elle *ship* verte parce que l'oracle ne +valide qu'un objet reconstruit en mémoire de forme différente ? Détecteur (jsonschema 3.2.0) : pour +chacun des **57 `out/*.json`**, valider le fichier sur disque contre le schéma du module — soit comme +objet-entier, soit comme **valeur d'une propriété top-level** du bundle validé. + +**Résultat empirique.** 5 fichiers valident **WHOLE** (pie_manifest, quality_report, audit_report, +regression_plan, + MANIFEST-scénario) ; la majorité valident comme **propriété de bundle** (le générateur +valide le bundle entier en mémoire puis écrit `bundle[""]` dans un fichier split). **4 « no-fit »** +investigués un par un — **tous by-design & couverts transitivement** : +- `crm/workflow_vente/out/workflow.json` : le générateur écrit `[bundle["workflow"]]` (l.192) — **wrap + liste 1-élément = convention fixtures Frappe** ; l'objet interne EST validé (prop `workflow`) et le + wrapper est byte-repro-épinglé (check_artifacts). +- `qa/acceptance/out/acceptance_matrix.json` = bundle `{matrix,verdict}` **moins** `manifest` (extrait + vers MANIFEST.json) ; sous-parties validées en mémoire + byte-repro. +- `demo/scenarios/out/run_sheet.json` : vue rendue distincte (`scenario.schema.json` garde en fait + **MANIFEST.json**) ; sortie `build` déterministe byte-repro'd + structure assertée par + `check_invariants` (lit `run_sheet["scenarios"]`, `sc["id"]`…). +- `qa/regression/out/regression_run.json` : snapshot d'EXÉCUTION (sous-ensemble du schéma-plan) — **seul + artefact hors byte-repro de check_artifacts**, MAIS forme épinglée autrement : `ci/check_regression.sh` + **ré-exécute `run` et byte-compare** au fichier commité (l.53-70). Aucune dérive de forme ne passe. + +**Chaîne de garde fermée.** Tout payload commité livré a sa forme gardée par une chaîne traçable : +`schéma-whole` · `schéma-prop + byte-repro` · `wrap/split byte-repro d'un objet schéma-validé` · +`ré-run byte-compare`. **0 fichier livré à forme non-gardée.** Le trou « in-memory vs commité » noté en +mémoire est comblé par byte-repro / ré-exécution, vérifié sur les 57. + +**Dents prouvées.** Sur un fichier qui matche une prop (`workflow_state.json`→`workflow_state`) : mutation +clé-parasite (props en `additionalProperties:false`) → **no-fit** ; mutation type-scalaire → **no-fit** +(2/2 MORDENT). Le détecteur discrimine une divergence de forme réelle. + +**Conclusion.** **CLEAN 57/57.** Axe teeth-prouvé, **rejouable** (`/tmp` jsonschema pur, hors réseau, +hors prod · #8). **0 édition de production**, 0 artefact touché, `./run_ci.sh` inchangé = **33 PASS · +0 FAIL · 0 SKIP**. **NON promu en gate** (#5, occurrence-zéro ; la chaîne byte-repro/ré-run garde déjà +la forme). Fichiers touchés : ce journal + 1 entrée mémoire (`committed-artifact-conforms-to-schema`). + ## Session `20260806_131551` — VÉRIF · axe NEUF « cohérence draft/keyword des 26 oracles-schémas » (déclaration `$schema` vs idiomes cross-draft) → CLEAN 26/26 · 0 édition de production **Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre,