# Delta `0.3.7-pre.004` — Transport readiness de Backfill Desk ## 1. Base requise ```text 0.3.7-pre.003-fix.001 workspace.package.version = 0.3.7-pre.3.fix.1 ``` Le replay opérateur de `pre.003-fix.001` est propre : audits Rust/Markdown, `cargo check --workspace`, Clippy, suites Config/Config Desk/Wallet Desk/SOL Prices Desk/Backfill Desk et arbres de dépendances Backfill Desk ne rapportent plus d'échec. ## 2. Objectif Ouvrir uniquement la readiness HTTP Transport de Backfill Desk : résoudre le profil Transport sélectionné par le composite, construire `HttpTransportPool`, dériver des métadonnées réseau/rôle sûres, vérifier que chaque rôle exposé sait router `getSignaturesForAddress` et `getTransaction`, puis offrir cette readiness via IPC sans ouvrir Store ni Job Backfill. ## 3. Implémentation - ajouter la dépendance backend `ksp-onchain-transport-lib` à `ksp-app-backfill-desk` ; - créer `transport_runtime.rs`, propriétaire du pool HTTP et de la dérivation de readiness ; - collecter uniquement les labels de cluster des endpoints HTTP activés, sans URL ni provider ; - dédupliquer les rôles logiques à partir des snapshots sûrs Transport ; - ne conserver comme rôles compatibles que ceux pour lesquels `select_for_method()` réussit sur `getSignaturesForAddress` et `getTransaction` ; - considérer Transport ready uniquement avec un réseau distinct, au moins un rôle compatible et au moins un endpoint actuellement disponible ; - conserver le shell ouvrable lorsqu'une erreur Config/Transport empêche la construction du pool, en projetant uniquement un `CommandErrorDto` sûr ; - introduire `BackfillDeskOptionsDto` comme sous-contrat Transport du futur DTO complet et centraliser la commande Tauri `backfill_options` ; - maintenir les capabilities Tauri à `core:default + tracing:default` et le niveau de développement Backfill à `supertrace` / fallback `trace`. Le DTO complet avec commitments, scopes et bornes reste réservé à `pre.006`. `pre.004` n'ajoute aucune dépendance Store ou Job. ## 4. Version Cette tranche modifie du code/runtime et ajoute une dépendance fonctionnelle. Conformément à `VER-ID-009` : ```text workspace.package.version = 0.3.7-pre.4 label = 0.3.7-pre.004 ``` ## 5. Fichiers ajoutés ```text crates/ksp-app-backfill-desk/src/transport_runtime.rs crates/ksp-app-backfill-desk/unit_tests/transport_runtime.rs deltas/0.3.7/pre.004.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/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 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 l'unique propriétaire du choix de profil et des secrets/URLs physiques ; - Transport reste propriétaire du pool, du routage, retry, pacing, rate-limit et choix physique d'endpoint ; - aucun provider, URL, endpoint physique ou credential n'est sérialisé dans `BackfillDeskOptionsDto` ; - aucun rôle `history_backfill` n'est hardcodé ; les rôles proviennent des snapshots Transport ; - aucune dépendance `ksp-store-lib`, `ksp-store-api`, `ksp-store-postgres-lib` ou `ksp-job-backfill-lib` n'est ouverte ; - aucun `Store::open`, `BackfillRequest`, `BackfillJobRuntime` ou checkpoint n'est introduit ; - le frontend garde son gabarit, ses dependencies et son instrumentation de clics/tabs inchangés ; - 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 du manifeste Cargo modifié ; - vérification de la frontière de dépendances Backfill Desk ; - vérification du composite `devnet -> devnet_public` ; - vérification que `devnet_public`, `mainnet_public` et `publicnode_testnet` utilisent chacun un cluster unique et le rôle logique `default` wildcard ; - vérification que le DTO Transport ne projette aucun champ provider/URL/credential ; - vérification que les capabilities Tauri restent inchangées. ## 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.004` 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 ``` ## 11. Décisions `BackfillDeskOptionsDto` est introduit progressivement : `pre.004` possède uniquement la readiness Transport ; `pre.005` ajoutera la cohérence Store/réseau et `pre.006` ajoutera les paramètres de campagne. Cette progression évite d'ajouter `ksp-job-backfill-lib` avant sa tranche dédiée. La construction Transport ne rend pas le shell inutilisable lorsqu'elle échoue. L'AppState conserve alors seulement un diagnostic applicatif sûr et `backfill_options` retourne `transport_ready = false`. Une composition HTTP multi-cluster est également non-ready afin de préparer la vérification stricte Store/Transport de `pre.005`. ## 12. Questions ouvertes Aucune.