diff --git a/Cargo.toml b/Cargo.toml index 7e861db..99d050a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 "] 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" diff --git a/crates/common/game-logging-lib/Cargo.toml b/crates/common/game-logging-lib/Cargo.toml index f94777b..f0fd715 100644 --- a/crates/common/game-logging-lib/Cargo.toml +++ b/crates/common/game-logging-lib/Cargo.toml @@ -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 diff --git a/crates/engines/engine-v1-sdl/Cargo.toml b/crates/engines/engine-v1-sdl/Cargo.toml index 32c5e4f..d9310e9 100644 --- a/crates/engines/engine-v1-sdl/Cargo.toml +++ b/crates/engines/engine-v1-sdl/Cargo.toml @@ -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] diff --git a/crates/engines/engine-v1-sdl/src/runtime.rs b/crates/engines/engine-v1-sdl/src/runtime.rs index e14e527..180c9ed 100644 --- a/crates/engines/engine-v1-sdl/src/runtime.rs +++ b/crates/engines/engine-v1-sdl/src/runtime.rs @@ -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; diff --git a/deltas/0.1.0/0-pre.5.fix.3.md b/deltas/0.1.0/0-pre.5.fix.3.md new file mode 100644 index 0000000..607c21c --- /dev/null +++ b/deltas/0.1.0/0-pre.5.fix.3.md @@ -0,0 +1,130 @@ + + + +# 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`. diff --git a/docs/development/004-SDL3_DESKTOP_PREREQUISITES.md b/docs/development/004-SDL3_DESKTOP_PREREQUISITES.md index 462c6ba..3fc2bb8 100644 --- a/docs/development/004-SDL3_DESKTOP_PREREQUISITES.md +++ b/docs/development/004-SDL3_DESKTOP_PREREQUISITES.md @@ -1,5 +1,5 @@ - + # 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//libSDL3.so -/usr/lib//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. diff --git a/docs/rules/RULES_RUST.md b/docs/rules/RULES_RUST.md index b1f229d..ecdbe88 100644 --- a/docs/rules/RULES_RUST.md +++ b/docs/rules/RULES_RUST.md @@ -1,5 +1,5 @@ - + # 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