7.1 KiB
Delta 0.3.7-pre.005 — Store readiness et cohérence réseau de Backfill Desk
1. Base requise
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 estNotReady, afin de permettre sa fermeture explicite ; - étendre
BackfillDeskOptionsDtoavecstore_network,network_coherent,store_ready,composition_readyet un diagnostic Store sûr ; - conserver hors IPC toute URI, identité backend physique, détail de pool, provider, URL ou credential ;
- intercepter
CloseRequestedde 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:defaultet le tracing de développement Backfill àsupertrace/ fallbacktrace; - 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 :
workspace.package.version = 0.3.7-pre.5
label = 0.3.7-pre.005
5. Fichiers ajoutés
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
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-apiouksp-store-postgres-lib; - la comparaison réseau logique précède
Store::open; BackfillDeskOptionsDtone 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-libreste fermé jusqu'à la tranche prévue ;- le tracing de développement reste
supertracevia Config devnet ettraceen fallback Backfill Desk.
9. Validations exécutées dans l'environnement d'assemblage
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-libadmis, 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,mainnetettestnet, 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 :
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.