Files
2026-09-02 12:01:35 +02:00

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 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 :

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-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

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 :

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.