diff --git a/05_activity_log/2026-08-06.md b/05_activity_log/2026-08-06.md index 6f3ec58..c6e5556 100644 --- a/05_activity_log/2026-08-06.md +++ b/05_activity_log/2026-08-06.md @@ -1,5 +1,53 @@ # Activity Log · 2026-08-06 · Claude Code DTP Worker +## Session `20260806_044449` — VÉRIF indépendante · NOUVEL axe objectif « re-dérivation des champs-compte MANIFEST depuis le payload réel » + clés JSON dupliquées → CLEAN · 0 édition de production + +**Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre. +Roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` intégralement livrée/gatée. Les 3 derniers +commits sont vérification-only (`4bc9819` intégrité slugs, `b274958` currency, `243523c` multi-axes). +Pour éviter le churn, **chasse à un vrai défaut ungaté sur deux axes objectifs réellement neufs**, +non couverts par les sweeps passés (mémoire : hash-seed, locale/TZ, forward-compat, intégrité +référentielle rôle/portail = *résolution de slugs*, bijection inverse, docstring↔code, liens md). + +**Axe 1 — clés JSON dupliquées (classe neuve).** `json.load` garde silencieusement la **dernière** +valeur sur clé dupliquée ; la byte-repro est **aveugle** à ce défaut sémantique. Parse strict des +**114** fichiers JSON commités avec `object_pairs_hook` levant sur doublon → **0 clé dupliquée**, +0 erreur de parse. CLEAN. + +**Axe 2 — re-dérivation des champs-compte MANIFEST depuis le payload réel (classe neuve).** +Distincte de « artifact internal set-semantics » (un dup ponctuel, 48276ee) et de « intégrité +référentielle slugs » (4bc9819, qui teste la *résolution* de chaque slug, **pas** la +*re-dérivation* d'un compte). Ici : chaque `nb_*`/`_total` d'un MANIFEST recomputé depuis la +liste réelle du **fichier-payload voisin**. Un bug générateur (comme le dup financement) serait +silencieux à la byte-repro mais tomberait ici. Résultats : +- **frontend/portails** — `nb_liens`/`nb_cartes`/`nb_roles` par workspace (5×3) + agrégats + (`liens_total`=53, `raccourcis_total`=20) recomputés de `workspace.json` → **0 écart**. + ⚠️ Faux positif initial écarté : `nb_liens` ≠ `len(links)` car le tableau ERPNext `links` + mélange lignes `type=='Card Break'` (= cartes) **et** `type=='Link'` (= vrais liens) ; + `nb_liens`=Σ(type==Link), `nb_cartes`=Σ(type==Card Break) — **par design**, écart initial + (15−4=11…) = exactement le nb de cartes ; confirmé sur le champ `type`. `link_count` de + chaque Card Break = nb de Links sous la carte. +- **frontend/chat_otoia** — `nb_roles`/`nb_knowledge_doctypes` (5×2) vs `chat_mount.json` + (`roles_allowed`/`knowledge_scope`) → **0 écart**. +- **mobile/app_config** — `nb_roles` (5) vs `role_navigation.json` (`roles_allowed`) → **0 écart**. +- **rbac/roleprofile_gen** — `nb_roles` (6, dont Plateforme=6) vs `role_profile.json` + (`roles`, matché par `role_profile`) → **0 écart**. +- **qa/audit_5d** — `controls_total`=17 vs Σ(`dimensions[].controls_total`)=4+3+3+4+3 → **0 écart** + (les dimensions ne portent pas de liste de contrôles ; le sous-compte est l'autorité, gaté par + la suite du module). + +**Verdict.** Repo **CLEAN** sur les deux axes neufs. **Aucun défaut de production.** Le seul +« mismatch » apparent (nb_liens) était une convention ERPNext Card-Break/Link que mon `len()` +naïf lisait mal — re-dérivé correctement = concordance totale. + +**Portée / anti-churn.** **0 fichier de production édité**, **0 artefact reconstruit**, +**0 gate ajouté** (#5 — ces re-dérivations sont couvertes en substance par les suites de module ; +je ne fige pas un énième gate pour un axe qui sort CLEAN), **0 chiffre saisi à la main** (#6 — +tout recomputé depuis les payloads et `run_ci.sh`), **aucune commande VPS** (#8). Seule édition : +ce journal `05_activity_log/`. + +--- + ## Session `20260806_041444` — VÉRIF indépendante · NOUVEL axe objectif « intégrité référentielle des slugs de rôles & portails inter-artefacts » → CLEAN · 0 édition de production **Choix de tâche.** `./run_ci.sh` au démarrage = **33 PASS · 0 FAIL · 0 SKIP**, arbre propre.