0.3.0-0-pre.5
This commit is contained in:
118
deltas/0.3.0/0-pre.5.md
Normal file
118
deltas/0.3.0/0-pre.5.md
Normal file
@@ -0,0 +1,118 @@
|
||||
<!-- file: deltas/0.3.0/0-pre.5.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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 :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```bash
|
||||
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.
|
||||
Reference in New Issue
Block a user