# `ksp-app-backfill-desk` `ksp-app-backfill-desk` est l'application desktop spécialisée de contrôle d'un backfill historique `RawTransaction` KSP. Elle reste une couche de composition Tauri : Config sélectionne les profils, Transport possède les endpoints/rôles/retry/rate-limit, Store possède la persistence et le backend, et `ksp-job-backfill-lib` possède découverte, hydratation, frontier/checkpoint et lifecycle du job. ## Package ```text package : ksp-app-backfill-desk lib : ksp_app_backfill_desk_lib bin : ksp-app-backfill-desk ``` Le binaire est un launcher mince. La bibliothèque applicative possède le bootstrap, l'état Rust single-run, les DTOs Tauri, les commands et le bridge latest-value vers le frontend. ## Composition ```text ksp-config-lib -> composite, profils, secrets et runtime packagé ksp-core-lib -> erreurs, Pubkey et registre Program IDs ksp-onchain-transport-lib -> HTTP pool, rôles, admission, retry/rate-limit ksp-store-lib -> façade Store backend-neutral ksp-job-api -> lifecycle Job commun ksp-job-backfill-lib -> request/runtime/checkpoint/snapshots Backfill ksp-logging-lib -> logging/tracing applicatif ksp-app-backfill-desk -> orchestration Tauri + projections sûres ``` L'application ne dépend pas directement de `ksp-store-api`, `ksp-store-postgres-lib`, `tokio-postgres`, `reqwest`, `tonic` ou `yellowstone-grpc-proto`. ## Capacités La surface utilisateur comprend : - quatre scopes : latest address, before address, after address et explicit signatures ; - engagements `finalized` et `confirmed` ; - sélection d'un rôle HTTP logique compatible avec `getSignaturesForAddress` et `getTransaction` ; - bornes page/candidats/concurrence validées côté Rust par le contrat Backfill ; - validation de la requête avant Start ; - un seul run actif ; - monitoring latest-value par événement `ksp-backfill-status` avec resynchronisation explicite ; - Cancel ciblé par JobId backend et idempotent ; - Resume in-session lorsqu'un checkpoint terminal est disponible ; - autocomplete libre des Program IDs provenant du registre canonique `ksp-core-lib`. L'autocomplete n'est jamais une allow-list : une adresse Solana valide non enregistrée reste saisissable. ## Checkpoint et Resume Le checkpoint concret ne traverse jamais IPC. Le backend conserve uniquement en mémoire Rust le dernier terminal compatible et la requête nécessaire à une reprise dans la même session. Un Resume crée un nouveau JobId backend. `ksp-job-backfill-lib` valide le checkpoint contre la requête d'origine puis le réémet pour ce nouveau Job sans modifier le scope fingerprint ni la frontier. Il n'existe pas de checkpoint durable de Backfill Desk après redémarrage de l'application. ## Config et réseaux Le composite dédié est : ```text cfg.composite.ksp-app-backfill-desk ``` Les profils committed couvrent `mainnet`, `devnet` et `testnet`. Mainnet est le profil par défaut. Transport et Store doivent sélectionner exactement le même réseau avant que la composition soit déclarée ready. Les profils Store committed utilisent actuellement TLS PostgreSQL `disabled`; cette politique de profil n'enlève pas le support `verify_full` du Store/schema. Le frontend ne reçoit jamais URI Store, URL RPC, credential provider, secret Config ou backend physique. ## Monitoring et sécurité Le monitoring expose des compteurs et codes sûrs : lifecycle, phase, boundary, candidats, entités/observations, missing/conflicts/holes, concurrence maximale, frontier contiguë, présence de checkpoint et éventuel domain/code d'échec. Il n'expose pas : - payload RAW ; - adresse ou signatures de campagne ; - checkpoint/cursor concret ; - endpoint URL ou credential ; - contexte d'erreur arbitraire. Le frontend ne possède ni accès direct filesystem/réseau, ni persistence navigateur de données Backfill. Les capabilities Tauri guest restent `core:default` et `tracing:default`. ## Ports et développement ```text Vite HTTP : 1436 Vite WS : 1437 ``` Lancement : ```bash (cd crates/ksp-app-backfill-desk && cargo tauri dev) ``` Build production : ```bash (cd crates/ksp-app-backfill-desk && cargo tauri build) ``` Voir également [`USAGE.md`](USAGE.md), [`../ksp-job-backfill-lib/README.md`](../ksp-job-backfill-lib/README.md), [`../../docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md`](../../docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md) et [`../../docs/validation/024-V0_3_7_BACKFILL_DESK.md`](../../docs/validation/024-V0_3_7_BACKFILL_DESK.md).