# Prompt de démarrage `0.3.1` — second host Snake Tauri Android ## 1. Base exacte et autorité de la reprise Partir uniquement de la version stable/taggée : ```text v0.3.0 ``` Si ce prompt est lu avant la publication effective de `0.3.0`, ne pas ouvrir `0.3.1`. Terminer d'abord la RC puis la release stable `0.3.0`. Lorsqu'une archive est fournie comme téléchargement du tag `v0.3.0`, elle constitue la baseline autoritaire même si elle ne contient pas `.git`. Appliquer `CMD-GIT-003` et `CMD-GIT-004` : vérifier la cohérence interne des versions et des fichiers, ne pas inventer un état Git inaccessible. Version cible : ```text 0.3.1 ``` Première tranche obligatoire : ```text 0.3.1-0-pre.1 ``` `0-pre.1` est un gate de lecture, audit, requirements, sizing, validation et planification. Ne pas commencer directement par le scaffold Android/Tauri ou par la copie du POC Reflex. ## 2. Sources de vérité — ordre de lecture obligatoire Lire intégralement, dans cet ordre : ```text RULES.md ROADMAP.md CHANGELOG.md docs/000-README.md ``` Puis lire les règles directement pertinentes : ```text docs/rules/RULES_GENERAL.md docs/rules/RULES_RUST.md docs/rules/RULES_PROJECT.md docs/rules/RULES_DOCUMENTATION.md docs/rules/FILE_CONTRACTS.md docs/rules/VERSION_WORKFLOW.md docs/rules/RULES_COMMANDS.md docs/rules/RULES_VALIDATION_MATRIX.md docs/rules/RULES_SESSION_PLANNING.md docs/rules/PROMPT_STRUCTURE.md ``` Le prompt résume les garde-fous nécessaires à `0.3.1`; les règles restent normatives en cas de détail absent ici. Lire ensuite la transmission `0.3.0` : ```text docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md docs/architecture/015-PLATFORM_POC_ARCHITECTURE.md docs/architecture/018-V0_3_0_WEB_SNAKE_BASELINE.md docs/testing/004-V0_3_0_RC_VALIDATION_MATRIX.md history/0.3.0/ deltas/0.3.0/ ``` Enfin auditer les implémentations réellement concernées : ```text crates/games/game-snake-poc/ crates/apps/game-snake-poc-wasm/ Web/game-snake-poc/ crates/apps/game-snake-poc-desktop/ crates/apps/game-reflex-poc-tauri/ crates/apps/game-reflex-poc-wasm/ Android/ assets/ ``` Ne pas déduire l'état d'une crate depuis ce prompt lorsque le code stable `0.3.0` dit autre chose. ## 3. État hérité attendu de `0.3.0` La stable `0.3.0` doit avoir validé au minimum : ```text Snake gameplay indépendant des hosts runner Desktop SDL3 fonctionnel adapter Snake WASM dédié host navigateur direct Vite/TypeScript shell HTML Bootstrap 5 / Bootswatch / SimpleBar Canvas respectant le ratio logique Snake clavier + contrôles pointer/tactiles lifecycle navigateur fixed-step sans catch-up massif assets common/game packagés depuis assets/ logging frontend structuré RuntimeProvenance Web / Browser / Wasm build WASM release + wasm-bindgen build Vite production + preview ``` Cette liste est un handoff attendu, pas une validation à réexécuter aveuglément au premier instant. Confirmer l'état réel de la stable puis définir les non-régressions nécessaires à `0.3.1`. ## 4. Mission de `0.3.1` `0.3.1` doit produire le second host Snake : Tauri Android. Le but est de vérifier que la baseline Web/WASM de `0.3.0` peut être réutilisée dans un WebView mobile Tauri sans recopier le gameplay, sans dupliquer inutilement le bridge WASM et sans créer un framework abstrait avant preuve d'un besoin partagé. Résultat attendu : ```text Snake exécutable dans un host Tauri Android build Android piloté par les outils Tauri/Android natifs retenus lifecycle mobile cohérent input tactile et comportement WebView cohérents assets accessibles dans le package final logging Rust/Tauri/frontend cohérent RuntimeProvenance distincte du navigateur direct non-régression du host Web direct 0.3.0 non-régression Desktop SDL3 si une frontière partagée change ``` ## 5. `0.3.1-0-pre.1` — cadrage obligatoire Avant tout développement lourd, produire un audit réel de la stable `0.3.0` et de l'environnement disponible. ### 5.1 Baseline Snake Auditer : ```text game-snake-poc game-snake-poc-wasm Web/game-snake-poc game-snake-poc-desktop engine-v1-common engine-v1-platform-api assets communs et Snake ``` Identifier explicitement : - ce qui est réutilisable tel quel ; - ce qui est spécifique au navigateur direct ; - ce qui appartient déjà à l'adapter WASM ; - ce qui deviendrait réellement partagé entre navigateur et WebView Tauri ; - toute duplication prouvée avant extraction. ### 5.2 Référence Tauri existante Auditer intégralement : ```text crates/apps/game-reflex-poc-tauri/ crates/apps/game-reflex-poc-wasm/ docs/development/008-WASM_TAURI_POC.md ``` Le POC Reflex est une référence technique de structure, de bridge Tauri, de frontend et de logging. Il n'est pas un template à copier aveuglément si sa baseline historique contredit les règles `0.3.x`. Vérifier notamment : ```text src/lib.rs comme façade/reexports src/tauri.rs comme assemblage Tauri et pont Web/Rust modules propriétaires séparés tauri.conf.json / capabilities / permissions hooks frontend Vite tauri-plugin-tracing / @fltsci/tauri-plugin-tracing organisation frontend HTML/Sass/TypeScript ``` ### 5.3 Android existant Auditer `Android/` et les documents Android existants pour distinguer : ```text baseline Android SDL3/Java/JNI host Tauri Android de 0.3.1 ``` Ils peuvent partager des contraintes plateforme, SDK/NDK ou documentation, mais ne doivent pas être confondus ni couplés artificiellement. ### 5.4 Toolchains réelles Inventorier ce qui est réellement disponible dans l'environnement utilisateur : ```text Rust targets Android nécessaires Tauri CLI/version réellement utilisée Android SDK Android NDK Java/JDK Gradle/tooling éventuellement piloté par Tauri adb émulateur/AVD éventuel appareil réel éventuel Node/npm ``` Ne pas déclarer un smoke appareil/émulateur possible avant de confirmer qu'une cible est effectivement accessible. ### 5.5 Sizing et plan Créer ou réviser obligatoirement le plan de `0.3.1` sous : ```text docs/plans/ ``` Le plan doit contenir : - objectif et scope ; - décisions acquises ; - risques/dépendances utiles ; - hors-périmètre ; - validations prévues ; - découpage prévisionnel souple jusqu'à `0.3.1` stable ; - tranche de validation large ; - tranche de consolidation documentaire ; - RC gelée ; - release stable mécanique. Si le sizing montre que Tauri Android complet ne tient pas raisonnablement dans une session, réduire ou scinder le scope avant l'implémentation lourde. ## 6. Contraintes architecturales gelées Préserver les frontières suivantes : ```text game-snake-poc gameplay et règles de jeu engine-v1-common contrats moteur portables engine-v1-platform-api provenance/capabilities plateforme game-snake-poc-wasm adaptation WASM Snake host Web direct / host Tauri lifecycle, DOM/WebView, inputs physiques, packaging et UI ``` Règles spécifiques : - `game-snake-poc` reste indépendant de Tauri, Android, DOM, Canvas et providers ; - ne pas copier le gameplay dans TypeScript, Java ou le backend Tauri ; - conserver `game-snake-poc-wasm` comme adapter WASM tant qu'un besoin réel ne justifie pas une extraction ; - ne pas généraliser `Web/game-snake-poc` avant observation du second consommateur ; - une extraction commune Web/WebView n'est autorisée que si deux consommateurs réels prouvent sa valeur ; - `lib.rs` d'une app Tauri reste une façade/reexport ; - `tauri.rs` assemble Tauri et délègue aux modules propriétaires ; - les traces frontend Tauri utilisent le bridge tracing prévu par les règles, pas des `console.*` applicatifs dispersés ; - ne pas réintroduire d'orchestrateur Python de build ; - ne pas utiliser `scripts/build_reflex_tauri_wasm.py` pour le nouveau chemin `0.3.x` ; - ne pas introduire réseau realtime, Uroburas, ads, billing ou leaderboard dans `0.3.1`. ## 7. Frontend Tauri et commandes Web Le frontend Tauri peut reprendre les conventions de shell déjà éprouvées dans les applications Desk KSP et dans le POC existant lorsque cela reste pertinent : ```text Vite TypeScript HTML/Sass Bootstrap 5 / thème retenu Font Awesome SimpleBar + ResizeObserver si le layout le nécessite ``` Pour une application Tauri, `npm` sert seulement à gérer les dépendances frontend lorsqu'une dépendance doit être ajoutée/retirée (`npm i`, `npm i -D`, etc.). Ne pas utiliser `npm run dev` ou `npm run build` comme gates Tauri manuelles : les hooks Tauri possèdent Vite/TypeScript/WASM. Le smoke courant utilise : ```bash (cd && cargo tauri android dev) ``` Le packaging est réservé aux phases finales prévues par le plan : ```bash (cd && cargo tauri android build) ``` Ne pas traiter le host Tauri comme le host navigateur direct de `0.3.0` : le mode de lancement, le packaging, les permissions et les smokes sont différents. ## 8. Provenance attendue Le host Tauri Android doit produire une provenance distincte du navigateur direct. `0-pre.1` doit auditer les enums/contrats réels de `engine-v1-platform-api` avant de fixer les valeurs exactes, mais préserver les dimensions : ```text platform family runtime host execution model device class input profile ``` Ne pas ajouter une identification matérielle fine uniquement pour ce POC. ## 9. Documentation des crates/packages Pendant `0-pre.1`, appliquer `DOC-CRATE-*` à tout composant créé ou finalisé. La question doit être explicitement tranchée pour la nouvelle app Tauri : ```text README.md ? responsabilité / frontières / architecture locale / points d'entrée USAGE.md ? prérequis / commandes / installation / lancement / smoke opérateur ``` Ne pas créer des fichiers vides ou redondants. Si la documentation centrale couvre réellement un petit adapter, le plan peut documenter pourquoi un fichier local séparé n'apporte rien. Lors de la consolidation finale, refaire cette revue pour chaque crate/package considéré durable dans `0.3.1`. ## 10. Deltas, history et état validé Ne pas confondre : ```text deltas// décrit la livraison candidate base requise fichiers ajoutés/modifiés/supprimés décisions validations à exécuter validations non exécutées history// décrit un jalon effectivement validé résultats réellement fournis par l'utilisateur défauts acceptés/corrigés état transmis au jalon suivant ``` Une entrée `history/` n'est jamais pré-écrite pour le delta courant. Après validation utilisateur, le delta suivant ou son fix crée l'entrée historique du jalon accepté conformément à `DOC-HIST-*`. Les anciens fichiers de `deltas/` et `history/` restent immuables sur le fond. ## 11. CHANGELOG, ROADMAP, plan et prompt suivant Appliquer ces responsabilités sans les mélanger : ### Plan `docs/plans/` porte le suivi fin et vivant de `0.3.1`. Il est créé/révisé en `0-pre.1` puis réconcilié lorsqu'un résultat réel modifie la trajectoire. ### ROADMAP `ROADMAP.md` reste macroscopique. Le modifier lorsqu'un scope est ajouté, réalisé, reporté ou annulé ; ne pas ajouter une ligne pour chaque prerelease/fix. ### CHANGELOG `CHANGELOG.md` est une synthèse de publication. Les `pre`, `alpha`, `beta` et fixes ne créent normalement pas d'entrée. Écrire la synthèse candidate à partir de la RC, puis la synthèse stable lors de la release. ### Prompt de la version suivante Rédiger le prompt suivant pendant la consolidation finale de `0.3.1` lorsque la cible `0.3.2` est suffisamment connue. La première RC gelée vérifie/complète le prompt à partir de l'état réellement candidat à publication. Ne jamais présenter dans ce prompt futur une validation RC/stable qui n'a pas encore été exécutée. ## 12. Commandes et matrice de validation Ne pas inventer une procédure de commandes parallèle dans le prompt. Sources normatives : ```text docs/rules/RULES_COMMANDS.md docs/rules/RULES_VALIDATION_MATRIX.md ``` `RULES_COMMANDS.md` définit quand utiliser les audits, Cargo, Web, Android, Tauri et les smokes. `RULES_VALIDATION_MATRIX.md` définit les IDs `CMD-*`, leurs dépendances et leurs déclencheurs. Chaque delta sélectionne les commandes proportionnelles à son scope. Une commande non exécutée n'est jamais déclarée PASS. Les audits Python sont choisis selon les fichiers touchés : ne pas exécuter systématiquement les trois audits si un seul est pertinent. Dès qu'un delta touche du code Rust, un manifeste Cargo, une feature ou une dépendance Rust, la base obligatoire est : ```bash cargo fmt --all cargo fmt --all -- --check # audits Python applicables au scope cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings ``` Les tests normaux sont ciblés : ```bash cargo test -p --all-targets --all-features ``` Ajouter les tests ciblés des consommateurs uniquement lorsque leur contrat est affecté. `cargo test --workspace --all-targets --all-features` reste une gate rare, planifiée un petit nombre de fois dans la version/session (initiale si utile, préfinale/finale, ou portée transverse incertaine). Ne lancer `cargo tree` que si les dépendances/features changent ou qu'un diagnostic de frontière le justifie. Ne pas le mettre automatiquement dans chaque log de validation. Toute commande nécessitant un changement de répertoire est englobée dans un sous-shell : ```bash (cd && ) ``` Pour Tauri, utiliser `cargo tauri android dev` pour les smokes Android et réserver `cargo tauri android build` aux phases finales de packaging Android ; `npm` n'est utilisé directement que pour gérer les dépendances frontend. ## 13. Qui exécute quoi Le générateur peut exécuter les audits statiques en lecture seule afin de préparer un delta. Les validations de build/runtime restent côté utilisateur : ```text cargo check workspace + Clippy workspace strict lorsqu'un delta touche Rust/dépendances tests cargo ciblés par défaut test workspace complet seulement aux jalons planifiés/portées incertaines (cd && cargo tauri android dev) pour les smokes Tauri (cd && cargo tauri android build) pour les validations finales de packaging Tauri Gradle/SDK/NDK lorsque le chemin Tauri les invoque installation émulateur/appareil smoke mobile smoke Web direct de non-régression smoke Desktop SDL3 si requis ``` Ne jamais annoncer un build ou un smoke comme réussi uniquement parce que le code paraît correct. Une gate utilisateur propre permet de passer automatiquement à la tranche planifiée suivante sauf instruction contraire. Une gate en échec reste normalement dans un `.fix.N` de la tranche courante. ## 14. Forecast initial souple Le forecast suivant est une hypothèse à confirmer ou corriger en `0-pre.1`. ### `0-pre.1` — audit / requirements / sizing / plan - audit stable `0.3.0` ; - audit Reflex Tauri/WASM ; - audit environnement Tauri Android ; - matrice réutilisation vs duplication ; - stratégie de build/smoke ; - positionnement explicite des rares gates `cargo test --workspace --all-targets --all-features` dans le plan ; - plan `0.3.1` ; - décision README/USAGE attendue pour les nouveaux composants. ### `0-pre.2` — host Tauri Android Snake minimal - nouvelle app Tauri Android au bon emplacement ; - consommation de l'adapter WASM Snake existant ou adaptation minimale justifiée ; - premier build natif reproductible ; - aucune généralisation prématurée. ### `0-pre.3` — lifecycle / input / assets / provenance / logging - lifecycle WebView/mobile ; - tactile/input ; - assets ; - provenance ; - tracing Rust/Tauri/frontend ; - erreurs de runtime visibles et sûres. ### `0-pre.4` — extraction conditionnelle Créer uniquement si le second host révèle une duplication partagée réelle entre navigateur direct et Tauri WebView. Sinon omettre la tranche. ### `2-beta.1` — validation large - workspace complet ; - `(cd && cargo tauri android build)` pour le packaging Tauri Android ; - smoke via `(cd && cargo tauri android dev)` puis émulateur/appareil disponible ; - non-régression Web direct ; - non-régression Desktop SDL3 lorsque nécessaire ; - vérification dépendances/package/distribution. ### `2-beta.2` — consolidation documentaire - documentation durable ; - README/USAGE réellement nécessaires ; - plan réconcilié ; - history ; - ROADMAP selon le scope réellement livré ; - préparation du prompt `0.3.2` ; - matière de CHANGELOG prête sans créer une entrée beta artificielle. ### `3-rc.1` — candidate gelée - scope fonctionnel gelé ; - entrée RC du `CHANGELOG.md` ; - matrice RC ; - reproductibilité packaging ; - prompt `0.3.2` vérifié/complété ; - seulement bugs/release blockers ensuite. ### `0.3.1` — stable Release mécanique de la RC validée : versions finales, synthèse stable, delta/release et tag selon le workflow applicable. La numérotation est révisable. Les responsabilités ne doivent pas être fusionnées uniquement pour raccourcir artificiellement la version. ## 15. Hors-périmètre explicite Ne pas ouvrir dans `0.3.1` sans décision de replanification : ```text Tauri Desktop Snake comme nouveau produit refonte générale engine-v1 engine-v2 Android SDL3 multi-ABI supplémentaire nouveau framework frontend générique serveur realtime WebSocket/WebTransport/QUIC gameplay Uroburas ads/billing leaderboard/auth refactor massif de Reflex mise à niveau opportuniste des dépendances ``` Une dépendance peut être mise à jour uniquement si elle est nécessaire au chemin `0.3.1` et que le delta le documente. ## 16. Packaging et fichiers générés Respecter : ```text ../builds/sasedev-games/ ``` pour les sorties Cargo/Tauri/Vite et caches concernés. Ne pas livrer : ```text node_modules/ dist/ target/ bindings wasm générés caches secrets lockfiles interdits par les règles du dépôt ``` Le ZIP d'un delta contient uniquement les fichiers ajoutés/modifiés par la tranche plus son document de delta, et les suppressions éventuelles utilisent le manifest contractuel prévu. ## 17. Première séquence de travail de la session À l'ouverture de `0.3.1` : 1. vérifier que la base fournie correspond réellement à la stable `0.3.0` ; 2. lire les sources de vérité dans l'ordre indiqué ; 3. lire le dernier `history/0.3.0` et le delta/release stable ; 4. exécuter les audits statiques applicables à la baseline ; 5. auditer `game-reflex-poc-tauri` et le chemin Tauri Android disponible ; 6. auditer `game-snake-poc-wasm` et le host Web direct ; 7. inventorier SDK/NDK/Tauri/adb/AVD/appareil réellement accessibles ; 8. produire requirements, risques, hors-périmètre et sizing ; 9. créer le plan `0.3.1` sous `docs/plans/` ; 10. seulement ensuite ouvrir le premier delta de développement. ## 18. Condition de fin de session La session est dimensionnée pour fermer `0.3.1` jusqu'à sa stable. Une prerelease n'est pas une cible normale de fin de session. Si le sizing ou une contrainte externe rend l'objectif trop grand, reporter explicitement le scope non indispensable vers `0.3.2+` plutôt que prolonger indéfiniment `0.3.1`. La stable doit arriver avec : ```text scope validé builds/smokes applicables validés documentation durable réconciliée history complet des jalons acceptés ROADMAP cohérente CHANGELOG RC/stable cohérent prompt de la version suivante prêt et vérifié delta/release mécanique sans nouveau scope ```