99 lines
3.6 KiB
Markdown
99 lines
3.6 KiB
Markdown
<!-- file: docs/architecture/010-RUNTIME_PROVENANCE.md -->
|
|
<!-- version: 3 -->
|
|
|
|
# Provenance d'environnement d'exécution
|
|
|
|
## Objectif
|
|
|
|
Une session de jeu doit pouvoir décrire son environnement sans en déduire automatiquement une règle de classement.
|
|
|
|
Cette provenance servira notamment aux futurs leaderboards, Hall of Fame, analytics, replays et diagnostics.
|
|
|
|
## Dimensions V1
|
|
|
|
`engine-v1-platform-api` expose cinq dimensions indépendantes.
|
|
|
|
`PlatformFamily` décrit la famille de plateforme : Android, Desktop ou Web.
|
|
|
|
`DeviceClass` décrit la forme physique pertinente pour l'interaction : Phone, Tablet, Desktop ou Unknown.
|
|
|
|
`ExecutionModel` distingue le code natif du WebAssembly.
|
|
|
|
`RuntimeHost` distingue un processus natif, un navigateur et une WebView Tauri.
|
|
|
|
`InputProfile` décrit le mode de contrôle principal : Touch, KeyboardMouse, Gamepad, Mixed ou Unknown.
|
|
|
|
## Exemples
|
|
|
|
Un Galaxy S9+ exécutant l'APK actuel peut être décrit comme :
|
|
|
|
```text
|
|
PlatformFamily = Android
|
|
DeviceClass = Phone
|
|
ExecutionModel = Native
|
|
RuntimeHost = Native
|
|
InputProfile = Touch
|
|
```
|
|
|
|
Un runner SDL Desktop natif :
|
|
|
|
```text
|
|
PlatformFamily = Desktop
|
|
DeviceClass = Desktop
|
|
ExecutionModel = Native
|
|
RuntimeHost = Native
|
|
InputProfile = KeyboardMouse
|
|
```
|
|
|
|
Un host Tauri Desktop/WASM :
|
|
|
|
```text
|
|
PlatformFamily = Desktop
|
|
DeviceClass = Desktop
|
|
ExecutionModel = Wasm
|
|
RuntimeHost = TauriWebView
|
|
InputProfile = KeyboardMouse
|
|
```
|
|
|
|
Le POC Tauri Android de `0.3.1` doit au contraire utiliser :
|
|
|
|
```text
|
|
PlatformFamily = Android
|
|
DeviceClass = Phone ou Tablet
|
|
ExecutionModel = Wasm
|
|
RuntimeHost = TauriWebView
|
|
InputProfile = Touch ou Mixed selon les entrées réellement observées
|
|
```
|
|
|
|
Une version Web dans un navigateur de téléphone pourra être `PlatformFamily = Web`, `DeviceClass = Phone`, `ExecutionModel = Wasm`, `RuntimeHost = Browser`, `InputProfile = Touch`.
|
|
|
|
## Classements et équité
|
|
|
|
La provenance ne contient aucune méthode du type `is_fair`, `difficulty` ou `comparable_with`.
|
|
|
|
La difficulté relative des contrôles dépend du jeu. Un jeu de réflexe, un Snake, un puzzle et un jeu au gamepad peuvent produire des conclusions différentes.
|
|
|
|
Le futur backend de score pourra donc conserver une provenance complète et appliquer une politique par jeu : classement commun, classement séparé par profil d'entrée, filtres par plateforme, ou catégories multiples.
|
|
|
|
L'identité joueur reste orthogonale. Un score pourra appartenir à un utilisateur authentifié ou anonyme tout en conservant exactement la même provenance runtime.
|
|
|
|
## Données et vie privée
|
|
|
|
La provenance V1 décrit des catégories techniques générales. Elle ne requiert ni modèle précis de téléphone, ni identifiant matériel, ni adresse réseau.
|
|
|
|
Un besoin futur de diagnostic plus fin devra être ajouté explicitement plutôt que d'élargir silencieusement cette structure.
|
|
|
|
## POC Snake Web direct
|
|
|
|
À partir de `0.3.0-0-pre.5`, `game-snake-poc-wasm` consomme réellement `engine-v1-platform-api` et conserve une `RuntimeProvenance` pour la session navigateur. Les dimensions fixes du host sont :
|
|
|
|
```text
|
|
PlatformFamily = Web
|
|
ExecutionModel = Wasm
|
|
RuntimeHost = Browser
|
|
```
|
|
|
|
Le frontend observe la classe d'appareil à partir des capacités de pointeur et de la taille logique de l'écran sans collecter de modèle matériel. Le profil d'entrée commence à `Unknown`, devient `KeyboardMouse` ou `Touch` lors de l'utilisation réelle et passe à `Mixed` si les deux familles sont observées pendant la même session.
|
|
|
|
Cette provenance est affichée dans le shell et émise dans les diagnostics frontend afin de rendre le smoke vérifiable. Elle reste descriptive et ne modifie ni le gameplay ni le score.
|