[DTP-Worker 20260803_170724] Log session · directive-vs-implémentation 2e couple (DIRECTIVE_MOBILE_STORES → mobile/app_config) → CLEAN 0 dérive/0 édition · byte-repro + 15 invariants verts · 2 couches marque distinctes (runtime OTOV7/com.otov7.app/Expo51 vs rebuild OTO Enterprise OS/slug oto-enterprise-os/Expo54) NON-dérive · store IDs null=légit #8 · SIGNAL Michel : bundle id com.otov7.app IMMUABLE/existant (App Store #32) ≠ « jamais fabriquée » → rename rebuild risque de forker une NOUVELLE fiche (continuité produit à trancher, pas édition #5) · run_ci 32 PASS
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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é).
|
+ 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
|
Zéro module créé · zéro gate ajouté (#5) · zéro chiffre inventé (#6). Aucune commande VPS
|
||||||
(#8) · aucun `git clean` <!-- ci-allow : mention de l'interdit absolu, jamais exécuté -->.
|
(#8) · aucun `git clean` <!-- ci-allow : mention de l'interdit absolu, jamais exécuté -->.
|
||||||
|
|
||||||
|
## 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` <!-- ci-allow : mention de l'interdit absolu, jamais exécuté -->.
|
||||||
|
|||||||
Reference in New Issue
Block a user