This commit is contained in:
2026-09-21 20:02:02 +02:00
parent f270ed8f86
commit bf9ead329a
10 changed files with 179 additions and 20 deletions

View File

@@ -1,8 +1,20 @@
<!-- file: CHANGELOG.md -->
<!-- version: 19 -->
<!-- version: 20 -->
# Changelog
## 0.3.4 — 2026-09-21
- publication stable de la première baseline realtime, avec `game-realtime-transport-lib` comme contrat binaire transport-neutral et `game-realtime-websocket-lib` comme backend Tokio/tokio-tungstenite ;
- client `ws://`, listener serveur, split send/receive, close propre, limites message/frame/write-buffer, deadlines connect/send/close et erreurs transport-neutral validés sans runtime ni task backend privé ;
- robustesse validée par tests loopback et négatifs : payloads hors limite, Text interdit, peer drop abrupt, handshake silencieux borné et mappings capacité/backpressure ;
- smoke runtime `game-realtime-websocket-smoke: PASS` validé hors harness de test sur localhost avec port éphémère, échange binaire bidirectionnel et fermeture propre ;
- `0.3.4-beta.1` a validé le workspace complet avec 53 tests et l'arbre inverse a confirmé que seul le launcher de smoke dépend du backend WebSocket ; `0.3.4-rc.1` a ensuite repassé audits, check/Clippy, 18 tests realtime ciblés, smoke et frontière de dépendances sans défaut ;
- documentation durable des deux crates realtime livrée et prompt `0.3.5` préparé pour évaluer WebTransport/QUIC sur la même frontière avec WebSocket comme baseline/fallback ;
- aucun TLS direct, wire codec final, protocole session, synchronisation gameplay, simulation authoritative ou serveur Uroburas n'est introduit dans `0.3.4`.
Les détails des phases `alpha`, `beta`, `rc` et du correctif `alpha.3.fix.1` restent dans `deltas/0.3.4/` et `history/0.3.4/`.
## 0.3.4-rc.1 — 2026-09-21
- gel fonctionnel de la baseline realtime : `game-realtime-transport-lib` porte le contrat binaire transport-neutral et `game-realtime-websocket-lib` son backend Tokio/tokio-tungstenite, sans dépendance transport dans les moteurs ou le gameplay ;

View File

@@ -1,5 +1,5 @@
# file: Cargo.toml
# version: 93
# version: 94
[workspace]
resolver = "3"
@@ -24,7 +24,7 @@ members = [
]
[workspace.package]
version = "0.3.4-rc.1"
version = "0.3.4"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/games"

View File

@@ -1,5 +1,5 @@
<!-- file: README.md -->
<!-- version: 61 -->
<!-- version: 62 -->
# games.sasedev
@@ -25,11 +25,11 @@ Workspace expérimental puis productif pour des jeux multiplateformes principale
## Baseline
Version stable de référence : `0.3.3`.
Version stable de référence : `0.3.4`.
Version candidate active : `0.3.4-rc.1`. `0.3.2` reste différée.
Prochaine version planifiée : `0.3.5-alpha.1`. `0.3.2` reste différée.
La stable `0.3.3` livre la voie Android SDL3 native multi-ABI : build Gradle/Cargo sans orchestrateur Python, APK Debug universal et AAB Release pour `arm64-v8a`, `armeabi-v7a`, `x86_64` et `x86`, `minSdk 21` réellement fumé et compatibilité pages mémoire 16 KB validée sur les ABI 64 bits. `0.3.4-beta.1` a validé la baseline realtime sur le workspace complet : contrat transport-neutral, backend WebSocket Tokio/tokio-tungstenite, limites/timeouts, tests loopback et robustesse, smoke runtime public et frontières de dépendances. `0.3.4-rc.1` gèle ce comportement et consolide la documentation de publication sans ouvrir de nouveau scope.
La stable `0.3.4` livre la première baseline realtime : contrat binaire transport-neutral, backend WebSocket Tokio/tokio-tungstenite, limites et deadlines, tests loopback/robustesse, smoke runtime localhost public et frontières de dépendances empêchant moteurs et gameplay de dépendre d'un backend concret. La RC a été validée sans défaut de publication, puis promue mécaniquement en stable. `0.3.5` est réservée au POC WebTransport/QUIC et à sa comparaison avec WebSocket, sans rouvrir dans `0.3.4` les couches wire/session/synchronisation.
Les deux premiers jeux sont des POC structurels : `game-reflex-poc` et `game-snake-poc`. Ils existent d'abord pour valider les frontières du workspace, le moteur, les assets et le packaging multiplateforme.

View File

@@ -1,5 +1,5 @@
<!-- file: ROADMAP.md -->
<!-- version: 26 -->
<!-- version: 27 -->
# Roadmap
@@ -49,7 +49,7 @@ Le détail historique des prereleases `0.1.0-*` reste dans `deltas/0.1.0/` et `h
- (x) `0.3.1` — Snake Tauri Android livré comme POC de référence réutilisant la baseline Web/WASM ; la production Android reste orientée SDL3 natif.
- (d) `0.3.2` — Tauri Desktop + Snake est différé tant quune solution de monétisation desktop/WebView, notamment vidéo récompensée, nest pas démontrée techniquement et contractuellement ; ne pas créer cette distribution seulement pour réutiliser le host Web.
- (x) `0.3.3` — Android SDL3 natif multi-ABI livré avec Cargo/Gradle natifs, APK universal pour tests, AAB comme cible de distribution, `minSdk 21` fumé et compatibilité 16 KB 64 bits validée, sans script Python de build.
- ( ) `0.3.4` — API de transport realtime + WebSocket/tokio-tungstenite baseline, sans serveur Uroburas Mode 3.
- (x) `0.3.4` — API de transport realtime + WebSocket/tokio-tungstenite baseline livrée, sans serveur Uroburas Mode 3.
- ( ) `0.3.5` — POC WebTransport/QUIC sur le même protocole, avec comparaison mesurée et fallback WebSocket.
- ( ) `0.3.6` — consolidation des POC plateforme/réseau et préparation de la baseline `0.4.x`.

64
deltas/0.3.4/rel.001.md Normal file
View File

@@ -0,0 +1,64 @@
<!-- file: deltas/0.3.4/rel.001.md -->
<!-- version: 1 -->
# Delta 0.3.4 — release stable
## Base
Base validée : `0.3.4-rc.1`.
## Objet
Promouvoir mécaniquement la candidate validée vers `0.3.4` sans introduire de nouveau comportement.
## Changements
La release stable :
- passe `workspace.package.version` de `0.3.4-rc.1` à `0.3.4` ;
- positionne `README.md` sur `0.3.4` comme stable de référence et `0.3.5-alpha.1` comme prochaine version planifiée ;
- marque `0.3.4` terminée dans `ROADMAP.md` ;
- ajoute l'entrée stable `0.3.4` dans `CHANGELOG.md` ;
- enregistre la validation effective de la RC dans `history/0.3.4/rc.1.md` ;
- clôt `docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md` et ses deux entrées d'index ;
- ajuste mécaniquement `prompts/006-V0_3_5_START_PROMPT.md` afin qu'il parte explicitement de la stable taggée `v0.3.4` et des validations réellement acquises.
## Frontière de release
Aucun fichier Rust, test Rust, manifeste de crate realtime, dépendance tierce, frontend, Android, gameplay, moteur, comportement WebSocket, limite, timeout ou contrat transport n'est modifié après la RC.
La stable conserve notamment :
- `game-realtime-transport-lib` transport-neutral ;
- `game-realtime-websocket-lib` comme backend WebSocket de référence ;
- `game-realtime-websocket-smoke` comme preuve runtime localhost ;
- l'absence de dépendance du backend dans `crates/games/` et `crates/engines/` ;
- WebTransport/QUIC, TLS produit, wire/session, synchronisation et simulation authoritative hors scope de `0.3.4`.
## Validation proportionnelle
La gate RC complète a déjà été validée sur un état fonctionnellement identique : audits propres, check/Clippy, 18 tests realtime ciblés, smoke runtime `PASS` et arbre inverse conforme. `beta.1` avait en outre validé `cargo test --workspace --all-targets --all-features` avec 53 tests réussis.
La promotion stable demande uniquement les contrôles proportionnels aux changements de version et de documentation :
```bash
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
```
Clippy strict, suites de tests et smoke runtime ne sont pas répétés par cérémonie puisque la promotion stable ne modifie aucun code ni comportement. Tout échec de la gate ci-dessus doit néanmoins être corrigé avant publication.
## Publication
Après validation de ce delta :
- commit de release ;
- tag stable unique `v0.3.4` ;
- archive ZIP du tag utilisée comme baseline autoritaire de la session suivante ;
- démarrage de `0.3.5` uniquement depuis `v0.3.4` avec `prompts/006-V0_3_5_START_PROMPT.md` ;
- première tranche suivante : `0.3.5-alpha.1`, audit/recherche WebTransport/QUIC et création du plan `docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md`.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/000-README.md -->
<!-- version: 33 -->
<!-- version: 34 -->
# Documentation games.sasedev
@@ -18,7 +18,7 @@
- [`plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md`](plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md) — plan clôturé de `0.3.0`, premier POC Snake Web direct.
- [`plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md`](plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md) — plan clôturé de `0.3.1`, second host Snake Tauri Android.
- [`plans/003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md`](plans/003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md) — plan clôturé de `0.3.3`, pipeline Android SDL3 natif Gradle/Cargo multi-ABI.
- [`plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md`](plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md) — plan actif de `0.3.4`, API de transport realtime et baseline WebSocket Tokio/tokio-tungstenite.
- [`plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md`](plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md) — plan clôturé de `0.3.4`, API de transport realtime et baseline WebSocket Tokio/tokio-tungstenite.
## Architecture

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/000-README.md -->
<!-- version: 5 -->
<!-- version: 6 -->
# Plans de versions games.sasedev
@@ -14,4 +14,4 @@ Le `ROADMAP.md` reste la trajectoire macroscopique du projet ; les deltas décri
- [`001-V0_3_0_WEB_SNAKE_POC_PLAN.md`](001-V0_3_0_WEB_SNAKE_POC_PLAN.md) — plan clôturé de `0.3.0`, baseline Snake et premier POC Web direct.
- [`002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md`](002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md) — plan clôturé de `0.3.1`, second host Snake Tauri Android.
- [`003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md`](003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md) — plan clôturé de `0.3.3`, pipeline Android SDL3 natif Gradle/Cargo multi-ABI.
- [`004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md`](004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md) — plan actif de `0.3.4`, API de transport realtime et baseline WebSocket Tokio/tokio-tungstenite.
- [`004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md`](004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md) — plan clôturé de `0.3.4`, API de transport realtime et baseline WebSocket Tokio/tokio-tungstenite.

View File

@@ -1,13 +1,13 @@
<!-- file: docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md -->
<!-- version: 8 -->
<!-- version: 9 -->
# Plan 0.3.4 — transport realtime et baseline WebSocket
## Statut
Plan actif créé pendant `0.3.4-alpha.1` à partir de l'archive taggée `v0.3.3`.
Plan clôturé avec la publication stable `0.3.4` le 2026-09-21. Il a été créé pendant `0.3.4-alpha.1` à partir de l'archive taggée `v0.3.3` et reste désormais une référence historique.
Les tranches `alpha.1`, `alpha.2`, `alpha.3.fix.1`, `alpha.4`, `alpha.5` et `beta.1` ont été validées le 2026-09-21. `alpha.3` avait été rejetée avant compilation à cause d'un héritage Cargo invalide de `default-features`; son fix a ensuite validé le backend WebSocket, le round-trip localhost et le graphe sans TLS. `alpha.4` a fermé les limites, timeouts, cas négatifs et lifecycle, puis `alpha.5` a fourni le smoke runtime hors harness de test. `beta.1` a enfin validé le workspace complet avec 53 tests, le smoke `PASS` et l'arbre inverse montrant que seul le launcher de smoke consomme le backend. La tranche active est désormais `0.3.4-rc.1` : comportement gelé, consolidation de publication uniquement.
Les tranches `alpha.1`, `alpha.2`, `alpha.3.fix.1`, `alpha.4`, `alpha.5`, `beta.1` et `rc.1` ont été validées le 2026-09-21. `alpha.3` avait été rejetée avant compilation à cause d'un héritage Cargo invalide de `default-features`; son fix a ensuite validé le backend WebSocket, le round-trip localhost et le graphe sans TLS. `alpha.4` a fermé les limites, timeouts, cas négatifs et lifecycle, `alpha.5` a fourni le smoke runtime hors harness de test, puis `beta.1` a validé le workspace complet avec 53 tests et les frontières de dépendances. `rc.1` a repassé les gates de publication ciblées, 18 tests realtime, le smoke `PASS` et l'arbre inverse sans défaut. La stable est une promotion mécanique de cette RC gelée.
## Mission
@@ -555,7 +555,7 @@ Un défaut fermé produit `beta.1.fix.N`. Une capacité manquante réouvre une a
### `0.3.4` — stable
Promotion mécanique : version stable, historique RC, changelog stable, clôture du plan, delta final et ajustement mécanique du prompt suivant.
Promotion mécanique réalisée : version `0.3.4`, historique RC, changelog stable, roadmap clôturée, plan clôturé, delta `rel.001` et prompt `0.3.5` ajusté sur la stable effectivement publiée.
## Consolidation documentaire RC

83
history/0.3.4/rc.1.md Normal file
View File

@@ -0,0 +1,83 @@
<!-- file: history/0.3.4/rc.1.md -->
<!-- version: 1 -->
# Historique 0.3.4-rc.1
## Statut
`0.3.4-rc.1` a été validée par l'utilisateur le 2026-09-21. La candidate gelée passe les audits, la compilation workspace, Clippy strict, les suites realtime ciblées, le smoke runtime et le contrôle inverse des dépendances sans défaut de publication.
Aucun `rc.1.fix.N` n'est requis. La candidate peut être promue mécaniquement vers la stable `0.3.4`.
## Gates statiques et compilation
La sortie utilisateur confirme :
```text
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
games.sasedev workspace audit: clean
Markdown table audit: clean (5 table(s), 277 file(s))
Distribution layout audit: clean (50 required path(s), 8 forbidden path(s) absent)
cargo fmt --all: clean
cargo fmt --all -- --check: clean
cargo check --workspace: clean
cargo clippy --workspace --all-targets --all-features -- -D warnings: clean
```
Le workspace compilé porte `0.3.4-rc.1`, y compris les deux crates realtime et le launcher de smoke.
## Tests realtime
Le contrat transport-neutral passe :
```text
cargo test -p game-realtime-transport-lib --all-targets --all-features
7 passed; 0 failed
```
Le backend WebSocket passe ses trois ensembles de tests :
```text
unit tests: 5 passed; 0 failed
loopback: 1 passed; 0 failed
robustness: 5 passed; 0 failed
```
La RC valide donc **18 tests realtime ciblés, 0 échec**. Le full workspace de 53 tests avait déjà été validé en `beta.1` et n'a pas été répété puisque la RC n'a modifié aucun code Rust ni dépendance fonctionnelle.
## Smoke runtime
La commande :
```bash
cargo run -p game-realtime-websocket-smoke
```
passe hors harness `#[test]` et affiche :
```text
game-realtime-websocket-smoke: PASS
```
Le log fourni montre un bind loopback éphémère, l'accept serveur, la connexion cliente, l'échange prévu et la fermeture propre. Le port observé `46581` est propre à cette exécution ; le smoke continue de binder `127.0.0.1:0`.
## Frontière de dépendances
L'arbre inverse :
```bash
cargo tree -i game-realtime-websocket-lib --workspace --edges normal
```
ne contient qu'un consommateur workspace :
```text
game-realtime-websocket-smoke
```
Aucune crate moteur ou gameplay ne dépend donc du backend WebSocket.
## Conclusion RC
Le comportement realtime et sa documentation de publication sont gelés et validés. La stable peut se limiter aux changements mécaniques de version, changelog, roadmap, clôture du plan, historique RC et delta final.

View File

@@ -1,5 +1,5 @@
<!-- file: prompts/006-V0_3_5_START_PROMPT.md -->
<!-- version: 1 -->
<!-- version: 2 -->
# Prompt de démarrage `0.3.5` — POC WebTransport/QUIC et fallback WebSocket
@@ -11,7 +11,7 @@ Partir uniquement de la version stable/taggée :
v0.3.4
```
Si ce prompt est lu avant la publication effective de `0.3.4`, terminer d'abord la RC puis la release stable `0.3.4`. Une archive annoncée comme téléchargement ZIP du tag Gitea est autoritaire conformément à `CMD-GIT-003` et `CMD-GIT-004` ; l'absence de `.git` n'est pas un défaut.
Ce prompt est destiné à être utilisé depuis la stable taggée `v0.3.4`. Une archive annoncée comme téléchargement ZIP du tag Gitea est autoritaire conformément à `CMD-GIT-003` et `CMD-GIT-004` ; l'absence de `.git` n'est pas un défaut.
Version cible :
@@ -99,7 +99,7 @@ future wire/session layers
- `game-realtime-websocket-smoke` comme preuve runtime localhost hors harness `#[test]` ;
- aucune politique TLS directe, aucun wire codec final, aucune session joueur/room et aucune simulation authoritative.
À la rédaction de ce prompt pendant la RC `0.3.4`, `beta.1` a déjà validé le workspace complet, le smoke et les frontières de dépendances. Ne présenter cependant aucune validation future de `0.3.4-rc.1` ou de la stable comme acquise avant sa sortie réelle.
La stable `0.3.4` hérite des validations réellement obtenues pendant `beta.1` et `rc.1` : workspace complet validé en beta, gates de publication realtime ciblées validées en RC, smoke runtime `PASS` et frontière de dépendances confirmée. Relire `history/0.3.4/` et `deltas/0.3.4/rel.001.md` comme preuves détaillées au lieu d'inventer ou d'extrapoler des validations supplémentaires.
## 4. Mission 0.3.5