# Delta 0.1.0-0-pre.4 ## Base Base déclarée : `0.1.0-0-pre.3` validée par l'utilisateur le 2026-09-16. ## Validation du delta précédent L'utilisateur a exécuté : ```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 cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings cargo test --workspace --all-targets --all-features cargo run -p game-reflex-poc-desktop cargo run -p game-snake-poc-desktop ``` Résultat communiqué : toutes les gates sont propres. Les tests workspace ont validé les deux tests `engine-v1-common`, le test `engine-v1-platform-api`, les deux tests Reflex et les deux tests Snake. Les smokes ont produit : ```text Reflex POC desktop runner: score=3 frames=3 Snake POC desktop runner: length=4 frames=3 ``` `0.1.0-0-pre.3` est donc accepté comme base de ce delta. ## Objectifs - sortir tous les corps de tests unitaires de `src/` selon le modèle KSP ; - réserver `unit_tests/` aux tests unitaires rattachés aux modules et `tests/` aux tests d'intégration/environnement/smoke ; - rendre cette séparation mécaniquement vérifiable ; - rendre `cargo fmt --all` obligatoire lorsqu'un delta a modifié du Rust, avant la gate `--check` ; - remplacer les tests workspace systématiques par une sélection ciblée par défaut ; - introduire le socle de diagnostics structurés fondé sur `tracing`, `tracing-subscriber` et `tracing-appender` ; - utiliser ce socle dans les runners et dans les tests sans initialisations globales concurrentes. ## Tests hors `src/` Les tests unitaires existants sont déplacés vers les répertoires `unit_tests/` des crates concernées. Les modules de production utilisent désormais le pattern : ```rust #[cfg(test)] #[path = "../unit_tests/module.rs"] mod tests; ``` Le nouvel audit projet refuse un corps `#[test]` sous `src/` et exige qu'un `#[cfg(test)]` de production référence un fichier externe sous `unit_tests/`. ## Tracing La nouvelle crate `crates/common/game-logging-lib` fournit : - `init_console_tracing()` pour les applications ; - un writer non bloquant via `tracing-appender` ; - `LoggingWorkerGuard` pour conserver le worker vivant ; - `with_test_tracing()` pour installer un subscriber local au test sans conflit de subscriber global. Les deux runners Desktop initialisent désormais le tracing et les tests unitaires utilisent le helper de test commun. ## Politique des tests La suite suivante n'est plus requise à chaque delta : ```bash cargo test --workspace --all-targets --all-features ``` Elle reste requise au démarrage d'une nouvelle version `X.Y.Z`, à la fin d'une phase/version, après un changement transversal important ou lorsqu'il existe un doute sur la portée des tests ciblés. ## Validation exécutée pendant la préparation Les audits Python et contrôles de structure disponibles dans l'environnement de génération sont exécutés. Les commandes Cargo finales restent exécutées par l'utilisateur. ## Commandes de validation à exécuter par l'utilisateur Le delta modifie du Rust ; commencer obligatoirement par le formatage mutatif puis sa vérification : ```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 cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings ``` Tests ciblés requis pour ce delta : ```bash cargo test -p game-logging-lib --all-targets --all-features cargo test -p engine-v1-common --all-targets --all-features cargo test -p engine-v1-platform-api --all-targets --all-features cargo test -p game-reflex-poc --all-targets --all-features cargo test -p game-snake-poc --all-targets --all-features ``` La suite workspace complète n'est pas demandée pour `0-pre.4`, car elle vient d'être exécutée proprement sur `0-pre.3` et l'impact de ce delta est borné par les tests ciblés ci-dessus. Les runners ont changé pour initialiser le tracing ; rejouer également : ```bash cargo run -p game-reflex-poc-desktop cargo run -p game-snake-poc-desktop ``` Les lignes fonctionnelles finales attendues restent : ```text Reflex POC desktop runner: score=3 frames=3 Snake POC desktop runner: length=4 frames=3 ``` Des événements `tracing` supplémentaires peuvent apparaître autour de ces lignes. ## Règle de transition Si les validations demandées sont propres, `0.1.0-0-pre.4` est accepté et le travail passe automatiquement à `0.1.0-0-pre.5`, consacré à l'intégration SDL3 Desktop réelle. Si une validation échoue, ne pas passer à `0-pre.5` : produire `0.1.0-0-pre.4.fix.1`, puis incrémenter le suffixe de fix si nécessaire.