# Delta 0.1.0-0-pre.5.fix.1 ## Base Base déclarée : `0.1.0-0-pre.5`, non validée. ## Validation du delta précédent L'utilisateur a exécuté les gates de `0.1.0-0-pre.5` le 2026-09-16. La validation a échoué avant toute compilation SDL3 exploitable. ### Échec Cargo metadata Le `Cargo.toml` racine livré par `0-pre.5` avait remplacé des métadonnées workspace existantes au lieu de les préserver. Erreur observée : ```text error inheriting `authors` from workspace root manifest's `workspace.package.authors` `workspace.package.authors` was not defined ``` Cette erreur empêchait : - `cargo fmt --all` ; - `cargo fmt --all -- --check` ; - `cargo check --workspace` ; - Clippy ; - les tests ciblés ; - les runners Desktop. ### Échec des audits Rust L'audit Rust a relevé 31 violations dans les nouveaux fichiers de `0-pre.5`, notamment : - attributs crate-root manquants ; - rustdoc de réexport manquante ; - `use` ordinaires interdits par les règles du projet ; - réexport interne non préfixé par `self::` ; - groupement d'import interdit ; - ordre/imports non conformes ; - lignes blanches interdites dans les fonctions. L'audit Markdown était propre : `1 table(s), 39 file(s)`. `0.1.0-0-pre.5` n'est donc pas considéré validé. ## Correctifs ### Workspace Cargo Le manifest racine est reconstruit à partir de la dernière baseline validée et conserve : - `repository` ; - `authors` ; - `publish` ; - les versions déjà retenues pour `tracing`, `tracing-appender` et `tracing-subscriber` ; - les lints Rust et Clippy du workspace. SDL3 est ajouté sans supprimer ces métadonnées : ```toml sdl3 = { version = "0.16.1", features = ["build-from-source"] } ``` L'option `build-from-source` évite de dépendre obligatoirement d'une installation système préalable de SDL3 sur la machine Desktop. ### engine-v1-sdl Le runtime SDL3 est corrigé pour respecter les API réelles déjà présentes dans le workspace : - `FixedStepRunner::new` reçoit un `std::time::Duration` ; - `InputState::none()` est utilisé comme snapshot initial ; - `GameAction::Primary` est activé via `with_action` ; - aucun `?`, `unwrap()` ou `expect()` n'est utilisé ; - les erreurs SDL3 sont propagées explicitement ; - aucun `use` ordinaire n'est nécessaire ; - le réexport crate-root est documenté et passe par `self::runtime::SdlRuntime` ; - la boucle limite provisoirement sa cadence avec `std::thread::sleep`. ### Runners Desktop Les manifests existants sont étendus au lieu d'être remplacés. Les runners utilisent les types réels : - `game_reflex_poc::ReflexState` ; - `game_snake_poc::SnakeState`. Ils conservent également : - `engine-v1-common` ; - `engine-v1-platform-api` ; - `game-logging-lib` ; - `tracing` ; - la désactivation explicite de la monétisation Desktop pour ce POC. ### Tests Le test de configuration SDL3 reste sous `unit_tests/`. Le glue de test sous `src/` ne contient aucun corps de test et référence explicitement le fichier externe conformément aux règles du workspace. Le test utilise le helper de tracing commun. ## Vérifications effectuées avant livraison du fix Dans l'environnement de génération : ```text General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) games.sasedev workspace audit: clean Markdown table audit: clean (1 table(s), 39 file(s)) Cargo.toml parsing: clean ``` Les commandes Cargo finales restent volontairement à exécuter par l'utilisateur. ## Validation à exécuter par l'utilisateur Ce fix modifie du code 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 ``` Tests ciblés : ```bash 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 ``` Smokes Desktop interactifs : ```bash cargo run -p game-reflex-poc-desktop cargo run -p game-snake-poc-desktop ``` Pour chaque runner : - une fenêtre SDL3 doit s'ouvrir ; - `Escape` doit fermer proprement la fenêtre ; - le bouton de fermeture système doit fermer proprement la fenêtre ; - `Space` doit être capturé comme `GameAction::Primary` sans panic ; - les événements de démarrage/arrêt doivent apparaître via `tracing`. ## Règle de transition Si toutes ces validations sont propres, `0.1.0-0-pre.5.fix.1` 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.2`.