v0.3.7-pre.005

This commit is contained in:
2026-09-02 12:01:35 +02:00
parent 46a4ad7487
commit 500b87ef57
19 changed files with 686 additions and 29 deletions

132
deltas/0.3.7/pre.005.md Normal file
View File

@@ -0,0 +1,132 @@
<!-- file: deltas/0.3.7/pre.005.md -->
<!-- version: 1 -->
# Delta `0.3.7-pre.005` — Store readiness et cohérence réseau de Backfill Desk
## 1. Base requise
```text
0.3.7-pre.004
workspace.package.version = 0.3.7-pre.4
```
Le replay opérateur de `pre.004` est propre : audits Rust/Markdown, `cargo check --workspace`, Clippy, suite complète `ksp-app-backfill-desk` et arbres de dépendances ne rapportent aucun échec. Le lancement réel `cargo tauri dev` confirme également le profil Logging de développement `supertrace`, le profil Transport `devnet_public`, un réseau unique, un rôle compatible, `transport_ready = true` et le tracing `DEBUG` des interactions frontend.
## 2. Objectif
Ouvrir uniquement la readiness Store de Backfill Desk : résoudre le Store sélectionné par le composite, prouver la cohérence exacte Store/Transport avant toute ouverture physique, ouvrir la façade backend-neutre `ksp-store-lib::Store`, exécuter un health probe borné, projeter une readiness sûre puis fermer explicitement le Store lors de la fermeture de l'application. Aucun runtime Job Backfill n'est ouvert dans cette tranche.
## 3. Implémentation
- ajouter uniquement la dépendance backend `ksp-store-lib` à Backfill Desk ;
- créer `store_runtime.rs`, propriétaire de la résolution Store, de la cohérence réseau, du health probe et du close explicite ;
- dériver le réseau Store depuis `ResolvedStoreConfig::settings()` et le réseau Transport depuis le pool déjà construit ;
- exiger exactement un réseau Transport puis une égalité stricte avec le réseau Store **avant** `Store::open` ;
- ne pas ouvrir Store lorsque Transport ne permet pas de déterminer un réseau unique ou lorsque les réseaux divergent ;
- exécuter `Store::health()` une fois après ouverture et conserver le Store côté Rust même lorsqu'il est `NotReady`, afin de permettre sa fermeture explicite ;
- étendre `BackfillDeskOptionsDto` avec `store_network`, `network_coherent`, `store_ready`, `composition_ready` et un diagnostic Store sûr ;
- conserver hors IPC toute URI, identité backend physique, détail de pool, provider, URL ou credential ;
- intercepter `CloseRequested` de la fenêtre principale, empêcher la fermeture immédiate, exécuter le close Store one-shot puis quitter l'application ;
- conserver les capabilities Tauri à `core:default + tracing:default` et le tracing de développement Backfill à `supertrace` / fallback `trace` ;
- ne pas ajouter `ksp-job-backfill-lib`, `BackfillRequest`, `BackfillJobRuntime`, Start, Cancel ou Resume.
## 4. Version
Cette tranche modifie le runtime et ouvre une nouvelle dépendance fonctionnelle. Conformément à `VER-ID-009` :
```text
workspace.package.version = 0.3.7-pre.5
label = 0.3.7-pre.005
```
## 5. Fichiers ajoutés
```text
crates/ksp-app-backfill-desk/src/store_runtime.rs
crates/ksp-app-backfill-desk/unit_tests/store_runtime.rs
deltas/0.3.7/pre.005.md
```
## 6. Fichiers modifiés
```text
Cargo.toml
crates/ksp-app-backfill-desk/Cargo.toml
crates/ksp-app-backfill-desk/src/app_state.rs
crates/ksp-app-backfill-desk/src/constants.rs
crates/ksp-app-backfill-desk/src/dto_common.rs
crates/ksp-app-backfill-desk/src/errors.rs
crates/ksp-app-backfill-desk/src/lib.rs
crates/ksp-app-backfill-desk/src/tauri.rs
crates/ksp-app-backfill-desk/src/transport_runtime.rs
crates/ksp-app-backfill-desk/tests/config_composition.rs
crates/ksp-app-backfill-desk/tests/desktop_contract.rs
crates/ksp-app-backfill-desk/tests/desktop_security.rs
crates/ksp-app-backfill-desk/unit_tests/dto_common.rs
crates/ksp-app-backfill-desk/unit_tests/transport_runtime.rs
docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md
docs/validation/024-V0_3_7_BACKFILL_DESK.md
```
## 7. Fichiers supprimés
Aucun.
## 8. Invariants conservés
- Config reste propriétaire des profils, variables d'environnement et secrets ;
- Transport reste propriétaire du routage physique, retry, pacing et endpoint selection ;
- Store est consommé uniquement via `ksp-store-lib`, sans dépendance directe à `ksp-store-api` ou `ksp-store-postgres-lib` ;
- la comparaison réseau logique précède `Store::open` ;
- `BackfillDeskOptionsDto` ne projette aucun détail physique Transport/Store ;
- un Store non-ready ne produit jamais `composition_ready = true` ;
- le Store est fermé explicitement et au plus une fois lors de la fermeture de la fenêtre principale ;
- aucune capability Tauri réseau/fichier/dialog/shell n'est ajoutée ;
- le frontend, son gabarit commun et son instrumentation de clics/tabs restent inchangés ;
- `ksp-job-backfill-lib` reste fermé jusqu'à la tranche prévue ;
- le tracing de développement reste `supertrace` via Config devnet et `trace` en fallback Backfill Desk.
## 9. Validations exécutées dans l'environnement d'assemblage
```text
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.7
```
Contrôles ciblés supplémentaires :
- parse TOML des manifests racine et Backfill Desk ;
- parse JSON des capabilities et de la configuration Tauri ;
- vérification que la comparaison Store/Transport apparaît avant `Store::open` ;
- vérification de la frontière de dépendances : `ksp-store-lib` admis, backend/API Store et Job interdits ;
- vérification que les capabilities restent `core:default + tracing:default` ;
- vérification structurelle du lifecycle `CloseRequested -> prevent_close -> Store::close -> exit` ;
- vérification de la projection IPC sûre Store/Transport ;
- vérification statique de la cohérence réseau Config pour les profils `devnet`, `mainnet` et `testnet`, plus ajout du test Rust déterministe correspondant.
## 10. Validations non exécutées dans l'environnement d'assemblage
`cargo` et `rustfmt` ne sont pas disponibles dans cet environnement. Le gate opérateur `pre.005` reste à exécuter :
```text
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.7
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-app-backfill-desk
cargo tree -p ksp-app-backfill-desk --edges normal
cargo tree -p ksp-app-backfill-desk -e features
```
Un lancement `cargo tauri dev` avec un Store PostgreSQL de développement disponible est recommandé pour confirmer le health probe et la fermeture explicite dans le runtime réel ; ce live smoke n'est pas assimilé aux tests déterministes.
## 11. Décisions
`pre.005` sépare explicitement la readiness Store de l'exécution Backfill. Le fait qu'un Store soit ouvert et healthy ne suffit pas à autoriser une campagne : `composition_ready` requiert également Transport ready et une cohérence réseau exacte. Les DTO/request de campagne restent réservés à `pre.006`.
La fermeture de la fenêtre principale devient le point de lifecycle explicite du Store. Elle est one-shot afin d'éviter deux consommations concurrentes du handle `Store`, et le processus quitte après la tentative de close bornée même si celle-ci retourne une erreur, après émission d'un diagnostic backend sûr.
## 12. Questions ouvertes
Aucune.