{ "generated_from": "rbac_50_roles.json (portails métier + rôles) · frontend/portails/portails_spec.json (labels + icônes) · seo/seo_spec.json (langues FR/EN/ES) · CLAUDE.md #4 (tokens de marque) / #10 (devises)", "spec_version": "1.0.0", "source_version": "1.0.0", "roadmap_ref": "04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md · Sprint 5 l.56-57 « Mobile : Rebuild Expo 54 + submit App Store #32 + Play Store »", "app": { "name": "OTO Enterprise OS", "slug": "oto-enterprise-os", "scheme": "otoos", "expo_sdk_major": 54 }, "counts": { "onglets": 5, "portails": 5, "roles_couverts": 44, "langues": 3, "identifiants_a_confirmer": 13 }, "brand": { "fond": { "valeur": "#0a0a12", "source": "CLAUDE.md #4" }, "accent": { "valeur": "#f0b429", "source": "CLAUDE.md #4" } }, "devises": { "primaire": "USD", "secondaire": "DOP", "source": "CLAUDE.md #10" }, "langues": { "liste": [ "fr", "en", "es" ], "defaut": "fr", "source": "seo/seo_spec.json · site.langs" }, "a_confirmer": [ { "champ": "app_config.expo.version", "raison": "version de l'app (release) — déposée hors repo au build (#8)" }, { "champ": "app_config.expo.ios.bundleIdentifier", "raison": "identité App Store #32 — jamais fabriquée (#6/#8)" }, { "champ": "app_config.expo.ios.buildNumber", "raison": "auto-incrément côté EAS au build (#8)" }, { "champ": "app_config.expo.android.package", "raison": "identité Play Store — jamais fabriquée (#6/#8)" }, { "champ": "app_config.expo.android.versionCode", "raison": "auto-incrément côté EAS au build (#8)" }, { "champ": "app_config.expo.icon", "raison": "asset image binaire — hors repo texte (#8)" }, { "champ": "app_config.expo.splash.image", "raison": "asset image binaire — hors repo texte (#8)" }, { "champ": "app_config.expo.extra.eas.projectId", "raison": "identifiant projet EAS — créé au premier build (#8)" }, { "champ": "eas_build.cli.version", "raison": "version CLI EAS — épinglée à l'installation runner (#8)" }, { "champ": "eas_build.submit.production.ios.appleId", "raison": "credential App Store Connect — hors repo (#6/#8)" }, { "champ": "eas_build.submit.production.ios.ascAppId", "raison": "identifiant app App Store #32 — hors repo (#6/#8)" }, { "champ": "eas_build.submit.production.ios.appleTeamId", "raison": "identifiant équipe Apple — hors repo (#6/#8)" }, { "champ": "eas_build.submit.production.android.serviceAccountKeyPath", "raison": "clé de service Google Play — secret hors repo (#6/#8)" } ], "identifiants_statut": "a_confirmer", "portails": [ { "portail": "ventes", "label": "OTO Ventes", "icon": "sell", "nb_roles": 12 }, { "portail": "construction", "label": "OTO Construction", "icon": "project", "nb_roles": 10 }, { "portail": "achat", "label": "OTO Achat", "icon": "buying", "nb_roles": 5 }, { "portail": "compta", "label": "OTO Compta", "icon": "accounting", "nb_roles": 8 }, { "portail": "direction", "label": "OTO Direction", "icon": "organization", "nb_roles": 9 } ], "hand_off": "Build Expo 54 + submit App Store #32 / Play Store exécutés hors de ce worker (agent Mobile · #8) : ce livrable ne produit que la config versionnable. Les identifiants/credentials `null` sont renseignés au build sur le poste/CI Mobile, jamais fabriqués ici (#6)." }