133 lines
7.1 KiB
Markdown
133 lines
7.1 KiB
Markdown
<!-- 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.
|