From bf9ead329a8a8ff5f016d7c1649e0257db029a19 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Mon, 21 Sep 2026 20:02:02 +0200 Subject: [PATCH] 0.3.4 --- CHANGELOG.md | 14 +++- Cargo.toml | 4 +- README.md | 8 +- ROADMAP.md | 4 +- deltas/0.3.4/rel.001.md | 64 ++++++++++++++ docs/000-README.md | 4 +- docs/plans/000-README.md | 4 +- ...0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md | 8 +- history/0.3.4/rc.1.md | 83 +++++++++++++++++++ prompts/006-V0_3_5_START_PROMPT.md | 6 +- 10 files changed, 179 insertions(+), 20 deletions(-) create mode 100644 deltas/0.3.4/rel.001.md create mode 100644 history/0.3.4/rc.1.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c70712..20fc2a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,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 ; diff --git a/Cargo.toml b/Cargo.toml index 6342aa0..33bcd1e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" diff --git a/README.md b/README.md index 474585d..7336191 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # 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. diff --git a/ROADMAP.md b/ROADMAP.md index 55d3603..241c709 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,5 @@ - + # 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 qu’une solution de monétisation desktop/WebView, notamment vidéo récompensée, n’est 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`. diff --git a/deltas/0.3.4/rel.001.md b/deltas/0.3.4/rel.001.md new file mode 100644 index 0000000..f2b19b4 --- /dev/null +++ b/deltas/0.3.4/rel.001.md @@ -0,0 +1,64 @@ + + + +# 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`. diff --git a/docs/000-README.md b/docs/000-README.md index 7d9cdba..c523200 100644 --- a/docs/000-README.md +++ b/docs/000-README.md @@ -1,5 +1,5 @@ - + # 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 diff --git a/docs/plans/000-README.md b/docs/plans/000-README.md index 54bfa0d..903a467 100644 --- a/docs/plans/000-README.md +++ b/docs/plans/000-README.md @@ -1,5 +1,5 @@ - + # 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. diff --git a/docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md b/docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md index c31fe41..c4f0d7a 100644 --- a/docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md +++ b/docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md @@ -1,13 +1,13 @@ - + # 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 diff --git a/history/0.3.4/rc.1.md b/history/0.3.4/rc.1.md new file mode 100644 index 0000000..dfea8ca --- /dev/null +++ b/history/0.3.4/rc.1.md @@ -0,0 +1,83 @@ + + + +# 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. diff --git a/prompts/006-V0_3_5_START_PROMPT.md b/prompts/006-V0_3_5_START_PROMPT.md index 88b7083..6d58023 100644 --- a/prompts/006-V0_3_5_START_PROMPT.md +++ b/prompts/006-V0_3_5_START_PROMPT.md @@ -1,5 +1,5 @@ - + # 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