0.1.0-0-pre.5-fix.3

This commit is contained in:
2026-09-16 01:37:52 +02:00
parent a503975d36
commit 380a24681d
7 changed files with 173 additions and 43 deletions

View File

@@ -1,5 +1,5 @@
# file: Cargo.toml
# version: 10
# version: 11
[workspace]
resolver = "3"
@@ -15,7 +15,7 @@ members = [
]
[workspace.package]
version = "0.1.0-0-pre.5.fix.2"
version = "0.1.0-0-pre.5.fix.3"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/games"
@@ -23,10 +23,10 @@ authors = ["Sasedev <games@sasedev.com>"]
publish = false
[workspace.dependencies]
sdl3 = { version = "0.16.1", features = ["use-pkg-config"] }
sdl3 = "^0.20"
tracing = "0.1.44"
tracing-appender = "0.2.5"
tracing-subscriber = { version = "0.3.23", features = ["fmt"] }
tracing-subscriber = "0.3.23"
[workspace.lints.rust]
missing_docs = "warn"

View File

@@ -1,5 +1,5 @@
# file: crates/common/game-logging-lib/Cargo.toml
# version: 1
# version: 2
[package]
name = "game-logging-lib"
@@ -13,7 +13,7 @@ publish.workspace = true
[dependencies]
tracing.workspace = true
tracing-appender.workspace = true
tracing-subscriber.workspace = true
tracing-subscriber = { workspace = true, features = ["fmt"] }
[lints]
workspace = true

View File

@@ -1,5 +1,5 @@
# file: crates/engines/engine-v1-sdl/Cargo.toml
# version: 3
# version: 4
[package]
name = "engine-v1-sdl"
@@ -12,7 +12,7 @@ publish.workspace = true
[dependencies]
engine-v1-common = { path = "../engine-v1-common" }
sdl3.workspace = true
sdl3 = { workspace = true, features = ["use-pkg-config"] }
tracing.workspace = true
[lints]

View File

@@ -1,5 +1,5 @@
// file: crates/engines/engine-v1-sdl/src/runtime.rs
// version: 2
// version: 3
/// Minimal SDL3 runtime used by Desktop POC runners.
pub struct SdlRuntime {
@@ -62,7 +62,3 @@ impl SdlRuntime {
return std::result::Result::Ok(());
}
}
#[cfg(test)]
#[path = "../unit_tests/runtime.rs"]
mod tests;

View File

@@ -0,0 +1,130 @@
<!-- file: deltas/0.1.0/0-pre.5.fix.3.md -->
<!-- version: 1 -->
# Delta 0.1.0-0-pre.5.fix.3
## Base
Base déclarée : `0.1.0-0-pre.5.fix.2`, non validée intégralement.
## Validation du delta précédent
L'utilisateur a exécuté les validations de `0.1.0-0-pre.5.fix.2` le 2026-09-16.
Préflight SDL3 propre :
```text
pkg-config --modversion sdl3
3.2.10
```
et :
```text
pkg-config --cflags --libs sdl3
-I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2 -D_REENTRANT -I/usr/include/libdrm -I/usr/include/libdecor-0 -lSDL3
```
Résultats propres :
- `cargo fmt --all -- --check` ;
- audit Rust/workspace ;
- audit Markdown : `1 table(s), 42 file(s)` ;
- `cargo check --workspace` ;
- `cargo test -p engine-v1-sdl --all-targets --all-features` ;
- `cargo test -p game-reflex-poc --all-targets --all-features` ;
- `cargo test -p game-snake-poc --all-targets --all-features` ;
- smoke `game-reflex-poc-desktop` ;
- smoke `game-snake-poc-desktop`.
Les deux runners ont ouvert et fermé leur runtime SDL3 sans panic.
La gate Clippy a échoué sur une seule erreur projet :
```text
clippy::duplicate_mod
```
Le même fichier `unit_tests/runtime.rs` était chargé à la fois depuis `src/runtime.rs` et `src/unit_tests.rs`.
`0.1.0-0-pre.5.fix.2` n'est donc pas validé.
## Correctifs
### Tests SDL3
Le chargement direct du test depuis `src/runtime.rs` est supprimé.
Le seul point d'entrée reste :
```text
src/unit_tests.rs
-> ../unit_tests/runtime.rs
```
Le test n'est donc chargé qu'une fois.
### Version SDL3
La dépendance commune passe à :
```toml
sdl3 = "^0.20"
```
La série `0.20` est utilisée plutôt que de rester sur `0.16.x`.
### Features Cargo
La racine conserve uniquement les versions des dépendances partagées :
```toml
sdl3 = "^0.20"
tracing-subscriber = "0.3.23"
```
Les features sont déplacées vers les crates qui les utilisent :
```toml
# engine-v1-sdl
sdl3 = { workspace = true, features = ["use-pkg-config"] }
# game-logging-lib
tracing-subscriber = { workspace = true, features = ["fmt"] }
```
Cette règle devient normative dans `docs/rules/RULES_RUST.md`.
## Validation à exécuter par l'utilisateur
Le fix modifie du Rust :
```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 deltas history
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
```
Test ciblé principal :
```bash
cargo test -p engine-v1-sdl --all-targets --all-features
```
La montée de `sdl3` à `^0.20` touche le runtime Desktop ; rejouer également les deux smokes :
```bash
cargo run -p game-reflex-poc-desktop
cargo run -p game-snake-poc-desktop
```
Les tests des crates de gameplay ne sont pas requis à nouveau : leur code et leurs dépendances propres ne sont pas modifiés par ce fix.
## Règle de transition
Si toutes les validations sont propres, `0.1.0-0-pre.5.fix.3` est accepté et le travail passe automatiquement à `0.1.0-0-pre.6`.
Si une gate échoue, rester sur `0-pre.5` et produire `0.1.0-0-pre.5.fix.4`.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/development/004-SDL3_DESKTOP_PREREQUISITES.md -->
<!-- version: 1 -->
<!-- version: 2 -->
# Prérequis SDL3 Desktop
@@ -13,58 +13,59 @@ Elle ne définit pas le packaging Android ni Web :
- Web utilisera la cible Emscripten/WASM dédiée ;
- la présence de SDL3 système sur le poste Desktop n'implique aucune dépendance runtime identique sur Android ou Web.
## Version Rust SDL3
La version canonique est déclarée au workspace sans feature globale :
```toml
[workspace.dependencies]
sdl3 = "^0.20"
```
La crate d'adaptation SDL3 Desktop active elle-même la méthode de liaison dont elle a besoin :
```toml
sdl3 = { workspace = true, features = ["use-pkg-config"] }
```
Cette séparation suit la règle générale du workspace : version commune à la racine, features au niveau de la crate consommatrice.
## Stratégie Desktop Linux
Le workspace utilise la crate Rust `sdl3` avec la feature `use-pkg-config`.
Le build Desktop recherche une installation SDL3 système avec `pkg-config`.
Le build Desktop recherche donc une installation SDL3 système à travers `pkg-config`.
Cette stratégie est préférée au build vendored `build-from-source` pour la baseline actuelle, car la combinaison `sdl3 0.16.x` / `sdl3-sys 0.5.12` / `sdl3-src 3.4.16` peut échouer lorsque la source empaquetée active les tests CMake sans fournir le répertoire `test`.
Cette stratégie évite le défaut rencontré avec le build vendored de la série `sdl3 0.16.x` / `sdl3-sys 0.5.12`, où CMake tentait d'ajouter un répertoire `test` absent du package source utilisé.
## Debian 13 / Trixie
Installer les dépendances de développement :
Installer au besoin :
```bash
sudo apt update
sudo apt install pkg-config libsdl3-dev
```
Vérifier ensuite :
Préflight :
```bash
pkg-config --modversion sdl3
pkg-config --cflags --libs sdl3
```
Sur Debian 13/Trixie, `libsdl3-dev` fournit notamment :
La machine de validation a fourni SDL `3.2.10`.
```text
/usr/include/SDL3/
/usr/lib/<arch>/libSDL3.so
/usr/lib/<arch>/pkgconfig/sdl3.pc
```
## Règle de validation
Avant les premières gates Cargo SDL3 sur une nouvelle machine Desktop Linux, exécuter :
```bash
pkg-config --modversion sdl3
```
Si cette commande échoue, installer/configurer SDL3 avant de considérer un échec Cargo comme un défaut du code du projet.
`sdl3-sys 0.7.x` annonce la compatibilité avec SDL `3.1.3` et versions ultérieures ; certaines API particulières peuvent toutefois nécessiter une version SDL plus récente. Les API minimales actuellement employées par le POC doivent donc rester vérifiées par compilation et smoke runtime.
## Portabilité future
La dépendance système Desktop est une décision de développement, pas une contrainte universelle de distribution.
Cette décision concerne le développement Desktop Linux et ne préjuge pas du packaging final.
Les options futures restent ouvertes :
- bundle de SDL3 avec un package Desktop ;
- AppImage/Flatpak ;
- bundle SDL3 dans un package Desktop ;
- AppImage ou Flatpak ;
- package natif par distribution ;
- build statique si une justification apparaît ;
- distribution Tauri distincte si un shell Desktop riche est nécessaire.
- liaison statique si elle devient justifiée ;
- distribution Tauri distincte lorsqu'un shell Desktop riche est requis.
Toute évolution de stratégie doit être documentée explicitement avant modification des manifests.
Toute évolution de cette stratégie doit être documentée avant modification des manifests.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/rules/RULES_RUST.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Règles Rust générales
@@ -10,6 +10,9 @@
- **RUST-BASE-003** — Les lints communs sont déclarés au workspace et hérités par les crates.
- **RUST-BASE-004** — Le code `unsafe` est interdit sauf future exception normative extrêmement ciblée et justifiée.
- **RUST-BASE-005** — Tout fichier Rust possède les en-têtes `// file: ...` et `// version: N`.
- **RUST-DEP-001** — Une dépendance tierce partagée déclare uniquement sa contrainte de version canonique sous `[workspace.dependencies]`, sauf exception normative explicitement documentée.
- **RUST-DEP-002** — Les features d'une dépendance tierce sont activées dans le `Cargo.toml` de la crate qui en a réellement besoin, via `workspace = true`; elles ne sont pas activées globalement au workspace par commodité.
- **RUST-DEP-003** — Une feature plateforme, telle que `use-pkg-config`, reste portée par la crate d'adaptation plateforme concernée et ne contamine pas les crates qui consomment seulement les abstractions du moteur.
## Documentation et API