[DTP-Worker 20260806_141554] VÉRIF axe NEUF « accord numérique INTER-artefacts d'un concept-singleton partagé » (out/*.json ↔ out/*.json, distinct de l'intra-artefact et du code/prose↔artefact) → CLEAN · 0 édition de prod
Question neuve : quand un même concept-singleton plateforme apparaît comme scalaire dans deux out/*.json indépendants, les valeurs s'accordent-elles ? Une divergence silencieuse ship verte car aucun gate ne compare deux artefacts entre eux. Détecteur teeth-prouvé (57 fichiers ; position GLOBALE sans indice [i] = singleton vs PER-ROW = compte-de-ligne) : mutation cible_rbac_roles 50→49 dans un manifest → MORD. Résultat CLEAN : tous les singletons plateforme s'accordent (cible_rbac_roles=50, ci_modules_count/modules/suites=24, portails=5, doctypes_uniques=45, custom_docperm=116, role_profiles=6, min_score=100, pass_score=95). TRAP documenté : « même nom = même concept » sur-signale — fields/data_fields/permissions/roles/sections/pass divergent car chacun décrit SON propre DocType/suite (per-module-local, pas un singleton). Seul nom SURCHARGÉ divergent = roles_couverts 50 (tous les role-profiles) vs 44 (rôles des 5 portails business = 50 − 6 plateforme) = by-design, les deux re-dérivés de rbac_50_roles.json. 0 gate ajouté (#5, occurrence-zéro rejouable), 0 commande VPS (#8), run_ci 33 PASS 0 FAIL 0 SKIP. Canal stakeholder daily_reports porté 3710253→HEAD. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,49 @@
|
||||
# Activity Log · 2026-08-06 · Claude Code DTP Worker
|
||||
|
||||
## Session `20260806_141554` — VÉRIF · axe NEUF « accord numérique INTER-artefacts d'un concept-singleton partagé » → CLEAN · 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 de Michel
|
||||
(non éditables). Objectif : un **axe teeth encore jamais balayé**.
|
||||
|
||||
**Axe NEUF (absent de la mémoire).** Les axes numériques existants sont soit **intra-artefact**
|
||||
(`[[manifest-count-field-payload-rederivation]]` : chaque `MANIFEST.nb_*` re-calculé depuis SON payload
|
||||
voisin), soit **code/prose ↔ artefact** (`[[doc-numeric-claims-gate]]`, `[[prose-facts-vs-numeric-drift]]`).
|
||||
Angle orthogonal jamais couvert : **artefact ↔ artefact** — quand un même *concept-singleton* plateforme
|
||||
apparaît comme scalaire dans **deux `out/*.json` indépendants**, les deux valeurs s'accordent-elles ?
|
||||
Une divergence silencieuse (un manifest dit 50, un autre 44) *ship* verte car aucun gate ne compare deux
|
||||
artefacts entre eux.
|
||||
|
||||
**Détecteur (teeth-prouvé).** Balayage des **57 `out/*.json`** : collecte des clés-scalaires int en
|
||||
**position GLOBALE** (chemin sans indice de liste `[i]` = concept singleton, ≠ position PER-ROW dans un
|
||||
`[i]` = compte-de-ligne légitimement variable). Une clé globale partagée par >1 fichier avec valeurs
|
||||
divergentes = candidat-conflation. **Preuve de dents** : mutation `cible_rbac_roles` 50→49 dans un seul
|
||||
manifest en mémoire → le détecteur **signale** aussitôt la divergence (BITES).
|
||||
|
||||
**Résultat empirique → CLEAN.** Les concepts-singletons plateforme s'accordent tous cross-fichier :
|
||||
`cible_rbac_roles`=50 (4 fichiers), `ci_modules_count`/`modules`/`suites`=24 (3), `portails`=5,
|
||||
`doctypes_uniques`=45, `custom_docperm`=116, `user_permission_templates`=28, `role_profiles`=6,
|
||||
`min_score`=100, `pass_score`=95 — zéro divergence.
|
||||
|
||||
**TRAP documenté (comme les KEY-traps de `[[manifest-count-field-payload-rederivation]]`).** L'heuristique
|
||||
naïve « même nom de clé = même concept » **sur-signale** : `fields`/`data_fields`/`permissions`/`roles`/
|
||||
`sections`/`pass` divergent entre modules (`dossier_vente` 30 fields vs `confotur` 18 ; `audit_4big`
|
||||
pass=24 vs `audit_5d` pass=13) — mais chacun décrit **son propre DocType/suite** = per-module-local, PAS
|
||||
un singleton plateforme. Le seul **nom SURCHARGÉ** portant deux sens cross-famille est `roles_couverts`
|
||||
(**50** dans `rbac/roleprofile_gen` vs **44** dans `frontend/portails`, `frontend/chat_otoia`,
|
||||
`mobile/app_config`) — et c'est **by-design**, les DEUX re-dérivés du canonique `rbac_50_roles.json` :
|
||||
- **50** = tous les rôles reçoivent un role-profile (`len(roles)`=50) ;
|
||||
- **44** = rôles surfacés dans les **5 portails business** (ventes 12 · construction 10 · compta 8 ·
|
||||
direction 9 · achat 5) = 50 − **6** rôles `plateforme` (`devops`, `rbac-admin`, `qa`, `otoia`,
|
||||
`mobile`, `bi`) sans portail business. Cohérent avec `[[role-portail-referential-integrity-sweep]]`,
|
||||
`[[roles-couverts-transitively-single-sourced]]`, `[[roadmap-7-dashboards-not-drift]]` (les 6 `plateforme`).
|
||||
|
||||
**Décision.** **Aucune édition de production** (l'axe est CLEAN) · **aucun gate ajouté** (#5 —
|
||||
occurrence-zéro d'une vraie conflation ; détecteur rejouable, non-déterministe-safe) · aucune commande
|
||||
VPS (#8). `run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP**. Canal stakeholder `daily_reports/2026-08-06.md`
|
||||
porté au HEAD (currency `3710253`→`04f4c21` + cette session).
|
||||
|
||||
## 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
|
||||
|
||||
@@ -197,3 +197,29 @@ sémantique (prix→placeholders). Confirmé par les **deux** validateurs (maiso
|
||||
`regression_run.json`, `regression/out/MANIFEST.json`, `audit_4big/out/quality_report.json`.
|
||||
**Prose gatée réalignée** : README module (`17 tests`), fiches `03_agents/{faisabilite,qa,erpnext_backend}`.
|
||||
`run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP** · **0 gate ajouté** (#5) · **aucune commande VPS** (#8).
|
||||
|
||||
---
|
||||
|
||||
## Currency canal stakeholder — `3710253` → HEAD `04f4c21` (+ session `141554`)
|
||||
|
||||
Depuis le jalon *brief.schema* ci-dessus, **six sessions lecture-seule** ont ajouté chacune un **axe
|
||||
de vérification objectif encore jamais balayé** — toutes **CLEAN, 0 édition de production, 0 gate
|
||||
ajouté** (#5). La **structure du gate de merge reste inchangée** : `run_ci.sh` = **33 PASS · 0 FAIL ·
|
||||
0 SKIP** (8 gates statiques + 25 suites) à chaque commit. Aucune n'est opposable au merge — seul le
|
||||
journal `05_activity_log/` est touché — sauf **un durcissement de test** (session `124544`).
|
||||
|
||||
| Commit (session) | Axe NEUF vérifié | Résultat |
|
||||
|---|---|---|
|
||||
| `27cfe2f` (`111534`) | Intégrité référentielle interne des `$ref` des 26 oracles-schémas | CLEAN 108/108 refs |
|
||||
| `6c05538` (`114542`) | Le skip `python -S` de l'oracle jsonschema masque-t-il un écart enum/const ? | CLEAN (1 phantom `{WAG}` = by-design) |
|
||||
| `4aea5bd` (`121542`) | Cohérence interne des 26 oracles (required-vacuité + auto-contradiction const/enum/default) | CLEAN 26/26 (1405 nœuds) |
|
||||
| `bea5d49` (`124544`) | Atteignabilité transitive d'une assertion (aucun test run-only faux-vert) | CLEAN 0/651 **+ 1 durcissement** (implicite→explicite) |
|
||||
| `1839f52` (`131551`) | Cohérence draft/keyword des 26 oracles-schémas (`$schema` vs idiomes cross-draft) | CLEAN 26/26 (tous draft-07) |
|
||||
| `04f4c21` (`134554`) | L'artefact **commité sur disque** conforme à son schéma (≠ objet en-mémoire) | CLEAN 57/57 |
|
||||
|
||||
**Session courante `141554` — axe NEUF « accord numérique INTER-artefacts »** (`out/*.json` ↔ `out/*.json`,
|
||||
distinct de l'intra-artefact et du code/prose↔artefact). Les concepts-singletons plateforme s'accordent
|
||||
tous cross-fichier (`cible_rbac_roles`=50, `ci_modules_count`/`modules`/`suites`=24, `portails`=5…). Seul
|
||||
nom **surchargé** divergent = `roles_couverts` **50** (tous les role-profiles) vs **44** (rôles des 5
|
||||
portails business = 50 − 6 `plateforme`) — **by-design, les deux re-dérivés de `rbac_50_roles.json`**.
|
||||
**CLEAN · 0 édition de production · 0 gate** (#5) · `run_ci.sh` = **33 PASS · 0 FAIL · 0 SKIP**.
|
||||
|
||||
Reference in New Issue
Block a user