diff --git a/05_activity_log/2026-08-03.md b/05_activity_log/2026-08-03.md index e54033f..a46a915 100644 --- a/05_activity_log/2026-08-03.md +++ b/05_activity_log/2026-08-03.md @@ -1383,3 +1383,57 @@ critiques (20/30 · 4-conditions · banques) sont déjà transitivement protég + Invariants 2/7). `./run_ci.sh` en clôture = **32 PASS · 0 FAIL · 0 SKIP** (inchangé). Zéro module créé · zéro gate ajouté (#5) · zéro chiffre inventé (#6). Aucune commande VPS (#8) · aucun `git clean` . + +## Session `20260803_170724` · Sprint 8 QA · directive-vs-implémentation, 2e couple (`DIRECTIVE_MOBILE_STORES` → `mobile/app_config`) + +**But.** Étendre la classe d'audit NEUVE [[directive-vs-implementation]] (caractérisée +session `163724` sur `financement_bancaire`) à un second couple directive↔module : la +`DIRECTIVE_MOBILE_STORES_20260803.md` (input-spec daté de Michel) vs le module qu'elle +pilote, `05_deliverables_mvp/mobile/app_config/`. + +**Intégrité gatée d'abord — verte.** `app_config_gen.py build` puis `validate` → +`git status --porcelain out/ mobile_spec.json` **vide** (out/ byte-identique, repro prouvée +par `check-artifacts`) · `✅ Validation OK — 5 onglets, 44 rôles, schéma + 15 invariants +verts`. `./run_ci.sh` = **32 PASS · 0 FAIL · 0 SKIP** (inchangé). Aucune dérive gatée. + +**Deux couches de marque distinctes (existant runtime vs cible rebuild) — PAS une dérive.** +Même dédoublement que [[project-brand-vs-codename-not-drift]] et surtout +[[mobile-runtime-actual-vs-rebuild-target]] : +- Directive = **app EXISTANTE** (`/opt/oto/mobile/native/`, audit runtime) : nom `OTOV7`, + iOS/Android `com.otov7.app`, Expo SDK **51.0.0**. +- Spec = **cible de REBUILD** : `name` « OTO Enterprise OS » (source = titre CLAUDE.md), + `slug` « oto-enterprise-os », `scheme` « otoos », `expo_sdk_major` **54** (source = roadmap + l.56 « Rebuild Expo 54 »). +Les deux couches sont **légitimes et séparées** ; le spec ne prétend nulle part que le runtime +est déjà en 54 / renommé — il porte la CONFIG versionnable de la cible. Décision Expo 51→54 +(directive P0) déjà couverte par [[mobile-runtime-actual-vs-rebuild-target]]. **CLEAN.** + +**Identifiants de store `null · a_confirmer` — par design, pas une dérive.** Le spec null'e +`bundleIdentifier`/`package`/`version`/`projectId`/credentials avec raison #8 (« déposé hors +repo lors des builds/submissions ») — exactement la posture anti-invention #6/#8, même logique +que les `null`+« à confirmer » de `financement_bancaire`. Aucun chiffre fabriqué. ✅ + +**⚠️ SIGNAL à Michel (tension RÉELLE, à SURFACER — pas de réécriture).** Le `a_confirmer` de +`app_config.expo.ios.bundleIdentifier` porte la raison « identité App Store #32 — **jamais +fabriquée** (#6/#8) ». Or la directive documente cet identifiant comme **déjà connu et +existant** : `com.otov7.app` (l.15-16). Sur Apple, le **bundle identifier d'une app publiée +est immuable** : l'« App Store #32 » ciblée par la roadmap l.56 existe déjà sous +`com.otov7.app`. Donc cette valeur n'est pas « à fabriquer / inconnue » — c'est un identifiant +**fixe existant qui DOIT être réutilisé** pour *mettre à jour* l'app #32. Le renommage +`OTOV7` → « OTO Enterprise OS » + le changement de `slug`/`scheme` **compose** ce risque : si +le rebuild adopte un nouveau bundle id, il devient une **NOUVELLE app** (nouvelle fiche), pas +une mise à jour de #32. **Question produit à trancher par Michel** : le rebuild met-il à jour +l'app #32 (⇒ réutiliser `com.otov7.app` + garder la fiche) ou crée-t-il une nouvelle fiche ? + +**Pourquoi ne PAS éditer.** Le spec est la **source d'autorité** du module ; la directive +datée `20260803` est un **snapshot d'intention** (comme `daily_reports/`), pas un oracle +vivant → **aucun gate directive↔spec (#5)**. Garder le bundle id `null` dans la config +versionnable est **légitime (#8** : la valeur concrète est déposée hors repo au build). La +nuance de wording du `raison` (« jamais fabriquée » vs « existant à réutiliser ») est trop +fine pour justifier de figer un spec piloté-par-snapshot ; c'est la **décision de continuité +de fiche** qui mérite l'arbitrage explicite de Michel, pas une réécriture de doc. + +**Résultat : 0 dérive gatée, 0 édition (prod/doc/gate).** Classe [[directive-vs-implementation]] +étendue au **2e couple** (mobile) = **CLEAN** + **1 signal de continuité produit** surfacé à +Michel (bundle id `com.otov7.app` immuable ↔ App Store #32). Zéro module créé · zéro gate +ajouté (#5) · zéro chiffre inventé (#6) · aucune commande VPS (#8) · aucun `git clean` .