Files
games/deltas/0.3.0/0-pre.5.md
2026-09-20 13:58:13 +02:00

5.4 KiB

Delta 0.3.0-0-pre.5

Objectif

Fermer l'intégration plateforme du premier POC Snake Web direct après validation de 0-pre.4.fix.3 : lifecycle/resize navigateur, assets runtime, logging frontend structuré, provenance Web/Wasm/Browser et non-régression du runner Desktop SDL3.

État précédent validé

0-pre.4.fix.3 a été accepté par l'utilisateur le 2026-09-20 : build Vite propre et smoke visuel/fonctionnel conforme, y compris Canvas portrait, contrôles et scroll SimpleBar du shell KSP-derived. Le résultat est consigné sous history/0.3.0/0-pre.4.fix.3.md.

Lifecycle et resize

Le host Web ne laisse plus une boucle requestAnimationFrame implicite posséder tout le lifecycle :

  • SnakeWebSession expose pause, resume, renderNow, refreshDeviceClass et dispose ;
  • visibilitychange et pagehide suspendent les ticks ;
  • la reprise réinitialise l'origine temporelle et l'accumulateur afin d'éviter un rattrapage massif après un onglet caché ;
  • pageshow reprend et redessine ;
  • ResizeObserver redessine le Canvas et rafraîchit la classe d'appareil sans faire avancer la simulation ;
  • la destruction de page libère l'instance WASM.

Le fixed-step gameplay reste dans Rust/WASM et aucun événement lifecycle n'est ajouté à game-snake-poc.

Assets Web

Le package Vite déclare vite-plugin-static-copy et package explicitement les deux assets-sondes depuis les sources canoniques :

assets/common/data/runtime.json      -> common/data/runtime.json
assets/game-snake-poc/data/game.json -> game/data/game.json

frontend/ts/assets.ts charge et valide les deux JSON avant le démarrage WASM. Le shell affiche ensuite un statut d'assets afin que le smoke confirme le chargement réel. Aucune copie source durable n'est créée sous Web/.

Logging navigateur

frontend/ts/logging.ts centralise les diagnostics Web sous forme d'événements level / target / action / fields vers la console du navigateur.

Ce logging est spécifique au frontend navigateur direct :

  • il ne dépend pas de Tauri ;
  • il ne remplace pas tracing dans le code Rust ;
  • les runners natifs continuent d'utiliser game-logging-lib.

Provenance runtime

game-snake-poc-wasm dépend désormais de engine-v1-platform-api et conserve une RuntimeProvenance réelle.

Dimensions fixes :

PlatformFamily = Web
ExecutionModel = Wasm
RuntimeHost = Browser

Le host renseigne ensuite la classe Desktop/Phone/Tablet/Unknown et le profil d'entrée Unknown/KeyboardMouse/Touch/Mixed selon les capacités et inputs observés. Ces dimensions sont exposées par le bridge WASM et affichées dans le shell.

La crate de gameplay game-snake-poc reste sans dépendance plateforme.

Règles et documentation

  • GAME-ASSET-007 fixe le packaging Web common/ + game/ sans copie source ;
  • GAME-TRACE-005 distingue logging frontend navigateur et tracing Rust ;
  • GAME-PLATFORM-024 fixe pause/reprise sans catch-up massif ;
  • GAME-PLATFORM-025 fixe la provenance navigateur via engine-v1-platform-api ;
  • l'architecture assets/provenance, la documentation tracing/frontend et les gates sont réconciliées ;
  • audit_distribution_layout.py vérifie désormais les fichiers et branchements statiques de cette intégration.

Non modifié

  • règles de gameplay Snake ;
  • runner Snake Desktop SDL3 ;
  • moteur SDL3 ;
  • Android/Tauri ;
  • ROADMAP et CHANGELOG, réservés à la consolidation prévue par le plan.

Validation demandée

Depuis la racine :

cargo fmt --all
cargo fmt --all -- --check
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android Web deltas history
python3 scripts/audit_distribution_layout.py
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p engine-v1-platform-api --all-targets --all-features
cargo test -p game-snake-poc-wasm --all-targets --all-features
cargo build -p game-snake-poc-wasm --target wasm32-unknown-unknown
wasm-bindgen ../builds/sasedev-games/target/wasm32-unknown-unknown/debug/game_snake_poc_wasm.wasm --target web --out-dir ../builds/sasedev-games/game-snake-poc-web/wasm --out-name game_snake_poc_wasm
cargo tree -p game-snake-poc-wasm --edges normal
(cd Web/game-snake-poc && npm install && npm run build && npm run dev)

Smoke navigateur sur http://127.0.0.1:1434/main.html :

  1. vérifier que Assets passe à snake / engine-v1 avant le statut Prêt ;
  2. vérifier que la provenance affiche web / browser / wasm / ... / ... ;
  3. utiliser clavier/souris puis tactile si disponible et vérifier l'évolution du profil d'entrée (keyboard-mouse, touch ou mixed) ;
  4. masquer l'onglet quelques secondes puis revenir : Snake ne doit pas accélérer pour rattraper le temps caché ;
  5. redimensionner la fenêtre : Canvas et provenance device doivent rester cohérents sans saut de gameplay ;
  6. revalider SimpleBar, clavier et contrôles pointer/tactiles.

Puis vérifier la non-régression Desktop :

cargo run -p game-snake-poc-desktop

Suite

Si cette gate ne révèle ni duplication structurante ni défaut de frontière, la tranche conditionnelle 0-pre.6 est omise et la version peut entrer directement en 2-beta.1. Sinon, 0-pre.6 ne traite que la correction/extraction prouvée par cette validation.