0.3.4-beta.1

This commit is contained in:
2026-09-21 19:38:00 +02:00
parent 74cdb177e9
commit 881d5afacd
5 changed files with 202 additions and 8 deletions

View File

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

View File

@@ -1,5 +1,5 @@
<!-- file: README.md --> <!-- file: README.md -->
<!-- version: 59 --> <!-- version: 60 -->
# games.sasedev # games.sasedev
@@ -27,9 +27,9 @@ Workspace expérimental puis productif pour des jeux multiplateformes principale
Version stable de référence : `0.3.3`. Version stable de référence : `0.3.3`.
Version candidate active : `0.3.4-alpha.5`. `0.3.2` reste différée. Version candidate active : `0.3.4-beta.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-alpha.4` a validé la robustesse de la baseline realtime : configuration WebSocket explicite, limites message/frame/write-buffer, deadlines connect/send/close et principaux cas négatifs. `0.3.4-alpha.5` ajoute le smoke runtime manquant sous la forme d'un launcher Cargo dédié qui exerce uniquement l'API publique sur un vrai socket loopback, échange dans les deux sens et valide le close handshake avant l'entrée en beta. 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-alpha.4` a validé la robustesse de la baseline realtime, puis `0.3.4-alpha.5` a fermé la preuve runtime avec un smoke public sur vrai socket loopback, échange bidirectionnel et close propre. `0.3.4-beta.1` n'ajoute aucun scope : elle ouvre la validation large du workspace avant consolidation de publication.
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. 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.

106
deltas/0.3.4/beta.1.md Normal file
View File

@@ -0,0 +1,106 @@
<!-- file: deltas/0.3.4/beta.1.md -->
<!-- version: 1 -->
# Delta 0.3.4-beta.1
## Objectif
Entrer en beta après fermeture de la phase alpha : contrat transport-neutral, backend WebSocket, robustesse, tests localhost et smoke runtime public sont tous validés.
Cette tranche n'ajoute aucune fonctionnalité. Elle synchronise la version technique, historise `alpha.5` et ouvre la validation large prévue avant la consolidation de publication.
## Baseline acceptée
`0.3.4-alpha.5` est validée par l'utilisateur le 2026-09-21.
La baseline acceptée comprend :
- audits Rust/workspace, Markdown et distribution propres ;
- `cargo check --workspace` et Clippy workspace strict propres ;
- sept tests du contrat transport-neutral ;
- cinq tests unitaires WebSocket ;
- un test loopback WebSocket ;
- cinq tests de robustesse WebSocket ;
- smoke runtime hors harness `#[test]` avec bind `127.0.0.1:0`, échange binaire bidirectionnel, close propre et sortie `game-realtime-websocket-smoke: PASS` ;
- graphe normal du launcher conforme aux frontières prévues.
`history/0.3.4/alpha.5.md` consigne le détail.
## Changements
- passage de `workspace.package.version` à `0.3.4-beta.1` ;
- ajout de l'historique validé `alpha.5` ;
- promotion du plan actif vers la phase beta ;
- précision de la gate beta : test workspace complet, smoke runtime séparé et arbres de dépendances direct/inverse ;
- aucune modification de code réseau, contrat transport, gameplay, moteur, SDL, Android, Tauri, WASM, asset ou dépendance tierce.
`CHANGELOG.md` et `ROADMAP.md` restent inchangés : la consolidation publiée et le gel de publication sont réservés aux tranches suivantes.
## Fichiers
Modifiés :
```text
Cargo.toml
README.md
docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md
```
Ajoutés :
```text
history/0.3.4/alpha.5.md
deltas/0.3.4/beta.1.md
```
## Validation beta — statique et workspace
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 --workspace --all-targets --all-features
```
La suite workspace complète est volontairement exécutée ici : `beta.1` constitue la première gate transverse de `0.3.4`.
## Smoke beta
Le smoke runtime reste une gate distincte du test workspace :
```bash
cargo run -p game-realtime-websocket-smoke
```
Résultat attendu :
```text
game-realtime-websocket-smoke: PASS
```
avec code de sortie zéro.
## Frontières et dépendances
Revalider le graphe direct du backend puis ses consommateurs workspace :
```bash
cargo tree -p game-realtime-websocket-lib --edges normal
cargo tree -i game-realtime-websocket-lib --workspace --edges normal
```
L'arbre inverse ne doit révéler aucune dépendance depuis `crates/games/` ni `crates/engines/`. Le launcher de smoke est un consommateur attendu.
## Transition
Si la gate workspace, le smoke et les graphes sont propres, aucune beta supplémentaire n'est créée par cérémonie. La tranche suivante doit effectuer la consolidation finale exigée par `VER-PHASE-010` : documentation durable, `CHANGELOG.md`, `ROADMAP.md`, prompt de la version/session suivante et préparation du gel RC.
Toute régression imputable au projet produit d'abord `0.3.4-beta.1.fix.N`. Une capacité fonctionnelle manquante réouvre une alpha.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md --> <!-- file: docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md -->
<!-- version: 6 --> <!-- version: 7 -->
# Plan 0.3.4 — transport realtime et baseline WebSocket # Plan 0.3.4 — transport realtime et baseline WebSocket
@@ -7,7 +7,7 @@
Plan actif créé pendant `0.3.4-alpha.1` à partir de l'archive taggée `v0.3.3`. Plan actif créé pendant `0.3.4-alpha.1` à partir de l'archive taggée `v0.3.3`.
Les tranches `alpha.1`, `alpha.2`, `alpha.3.fix.1` et `alpha.4` 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. La revue post-gate a toutefois identifié une preuve encore absente : un smoke runtime exécuté hors harness de test. La tranche active `alpha.5` ajoute donc ce smoke avant toute entrée en beta. Les tranches `alpha.1`, `alpha.2`, `alpha.3.fix.1`, `alpha.4` et `alpha.5` 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 ensuite fourni le smoke runtime hors harness de test : bind loopback réel, échange binaire bidirectionnel, close propre et sortie `PASS`. Les critères d'entrée en beta sont donc satisfaits et la tranche active `beta.1` ouvre la validation large sans nouveau scope.
## Mission ## Mission
@@ -447,9 +447,12 @@ La beta est le jalon large retenu pour :
```bash ```bash
cargo test --workspace --all-targets --all-features cargo test --workspace --all-targets --all-features
cargo run -p game-realtime-websocket-smoke
cargo tree -p game-realtime-websocket-lib --edges normal
cargo tree -i game-realtime-websocket-lib --workspace --edges normal
``` ```
Elle revalide également audits, format/check, Clippy, tests loopback et graphe de dépendances. Elle revalide également audits, format/check et Clippy. Le test workspace couvre les suites transport/WebSocket et leurs loopbacks ; le smoke reste exécuté séparément car un binaire runtime n'est pas remplacé par le harness `#[test]`. L'arbre inverse doit confirmer qu'aucune crate sous `crates/games/` ou `crates/engines/` ne dépend du backend WebSocket.
### RC ### RC

85
history/0.3.4/alpha.5.md Normal file
View File

@@ -0,0 +1,85 @@
<!-- file: history/0.3.4/alpha.5.md -->
<!-- version: 1 -->
# Historique 0.3.4-alpha.5
## Statut
`0.3.4-alpha.5` a été validée par l'utilisateur le 2026-09-21. La gate complète est propre et le smoke runtime WebSocket distinct du harness de test affiche explicitement `game-realtime-websocket-smoke: PASS` avec sortie zéro.
Aucun `alpha.5.fix.N` n'est requis. Les critères d'entrée en beta sont satisfaits ; la suite ouvre `0.3.4-beta.1` sans nouveau scope fonctionnel.
## Gates statiques et Rust
La gate fournie est propre :
```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), 269 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-alpha.5`, y compris le launcher `game-realtime-websocket-smoke`.
## Tests transport et WebSocket
Le contrat transport-neutral reste propre :
```text
cargo test -p game-realtime-transport-lib --all-targets --all-features
7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
```
Le backend WebSocket valide :
```text
unit tests: 5 passed; 0 failed
loopback: 1 passed; 0 failed
robustness: 5 passed; 0 failed
```
Les scénarios couvrent notamment les invariants de configuration, les mappings capacité/backpressure, le round-trip binaire, le close propre, les tailles hors limite, Text interdit, peer drop abrupt et timeout de handshake silencieux.
## Smoke runtime
La commande :
```bash
cargo run -p game-realtime-websocket-smoke
```
s'exécute avec succès hors harness `#[test]` sur un port loopback éphémère. Le log fourni montre :
```text
realtime WebSocket smoke started
WebSocket listener bound address=127.0.0.1:42419
loopback endpoint bound endpoint="ws://127.0.0.1:42419/"
WebSocket peer accepted peer=127.0.0.1:42388
WebSocket client connected endpoint="ws://127.0.0.1:42419/"
game-realtime-websocket-smoke: PASS
realtime WebSocket smoke passed
```
Le port est alloué dynamiquement ; les valeurs ci-dessus décrivent uniquement cette exécution de validation.
## Graphe du smoke
`cargo tree -p game-realtime-websocket-smoke --edges normal` confirme que le launcher dépend directement de :
- `game-logging-lib` ;
- `game-realtime-transport-lib` ;
- `game-realtime-websocket-lib` ;
- Tokio ;
- tracing.
Le backend WebSocket reste sur Tokio `1.53.1`, `tokio-tungstenite 0.30.0` et Tungstenite `0.30.0`. Aucune pile TLS n'apparaît dans le graphe normal fourni.
## Conclusion alpha
La phase alpha a désormais produit et validé le contrat transport-neutral, le backend WebSocket, la robustesse, les cas négatifs et la preuve runtime publique. La beta peut se limiter à la validation large et à la recherche de régressions, conformément au plan actif.