5.9 KiB
Delta 0.3.7-pre.008 — runtime et Start réel Backfill
1. Base requise
0.3.7-pre.007-fix.001
workspace.package.version = 0.3.7-pre.7.fix.1
2. Objectif
Ouvrir l'exécution réelle d'une campagne Backfill HTTP à partir du contrat strictement validé en pre.007, avec un seul run actif, handle installé avant spawn et réponse Start minimale, sans encore ouvrir le monitoring latest-value, Cancel ou Resume.
3. Admission single-run
Le JobId est généré exclusivement côté backend sous la forme bornée backfill-desk-<sequence>. Le frontend ne fournit aucune identité Job.
BackfillRunState retient un unique BackfillJobHandle et refuse tout second Start via l'erreur stable backfill_run_active. BackfillJobRuntime::handle() est obtenu puis installé dans ce slot avant que le command handler ne lance tauri::async_runtime::spawn.
Le Start réutilise map_backfill_request() sans divergence : réseau dérivé du Store, rôle HTTP revalidé et bornes/scope/commitment validés par BackfillRequest::new restent les seules entrées autoritaires.
4. Ressources d'exécution
HttpTransportPool est cloné depuis TransportRuntime et conserve toute la topologie provider/URL/retry dans ksp-onchain-transport-lib.
Le Store backend-neutre n'est pas clonable. Backfill Desk le retire temporairement de son slot Rust, le déplace dans le task du run et le restaure après le résultat terminal avant de libérer le slot single-run. Aucune dépendance directe ksp-store-api, PostgreSQL, reqwest, tonic ou Yellowstone n'est ajoutée.
La fermeture de l'application pendant un run actif reste une limite transitoire : le couloir pre.010 ajoutera la demande d'annulation coopérative et traitera explicitement les races shutdown/Cancel/terminal.
5. IPC et frontend
La commande Tauri backfill_start retourne uniquement :
job_id
state = created
Le formulaire conserve Valider la requête et ajoute Démarrer le backfill. Start est activé seulement lorsque composition_ready = true. Après admission, le bouton Start est verrouillé côté frontend jusqu'à l'arrivée du monitoring détaillé en pre.009.
Les logs Start contiennent seulement JobId backend, rôle logique/scope/commitment ou états techniques sûrs. Adresse, signature, ancre et valeur min_context_slot ne sont jamais journalisées.
6. Autocomplete Program IDs — exigence reportée au polish
Le besoin UX enregistré pendant cette tranche est réservé à pre.012 : l'input adresse restera libre mais proposera un datalist HTML alimenté depuis le registre canonique ksp-core-lib::entries() et ProgramIdEntry. Aucune liste Program ID ne sera copiée/hardcodée dans le frontend. Le comportement recherché reprend uniquement le principe fonctionnel de l'ancien dataset ks-program-ids de kbot3, sans reprise de code.
7. Version
workspace.package.version = 0.3.7-pre.8
label = 0.3.7-pre.008
8. Fichiers ajoutés
crates/ksp-app-backfill-desk/src/backfill_run.rs
crates/ksp-app-backfill-desk/unit_tests/backfill_run.rs
deltas/0.3.7/pre.008.md
9. Fichiers modifiés
Cargo.toml
crates/ksp-app-backfill-desk/frontend/main.html
crates/ksp-app-backfill-desk/frontend/ts/main.ts
crates/ksp-app-backfill-desk/src/app_state.rs
crates/ksp-app-backfill-desk/src/constants.rs
crates/ksp-app-backfill-desk/src/dto_backfill.rs
crates/ksp-app-backfill-desk/src/errors.rs
crates/ksp-app-backfill-desk/src/lib.rs
crates/ksp-app-backfill-desk/src/store_runtime.rs
crates/ksp-app-backfill-desk/src/tauri.rs
crates/ksp-app-backfill-desk/src/transport_runtime.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_backfill.rs
docs/plans/028-V0_3_7_BACKFILL_DESK_PLAN.md
docs/validation/024-V0_3_7_BACKFILL_DESK.md
10. Fichiers supprimés
Aucun.
11. Gate précédent acquis
Le replay opérateur de 0.3.7-pre.007-fix.001 est propre : audits Rust/Markdown, cargo check --workspace, Clippy, toutes les suites ksp-job-backfill-lib, toutes les suites Backfill Desk et arbres Cargo passent. Le smoke cargo tauri dev confirme aussi le profil Mainnet, les trois routes HTTP logiques et le tracing frontend ; le Store non joignable laisse correctement le shell disponible en mode diagnostic.
12. 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 :
- syntaxe TypeScript par transpilation locale ;
- handle construit et installé avant le spawn Start ;
- admission single-run et JobId backend-only ;
- absence de payload métier dans la réponse Start et les logs Start ;
- dépendances/capabilities inchangées hors surfaces déjà autorisées ;
- prêt/restauration du Store backend-neutre ;
- absence de gRPC/WS dans le contrat Backfill V1 ;
- contrôle différentiel strict et reconstruction par application du delta.
13. Validations non exécutées dans l'environnement d'assemblage
cargo et rustfmt ne sont pas disponibles dans l'environnement d'assemblage. Gate opérateur obligatoire avant pre.009 :
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-job-backfill-lib
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
14. Suite
pre.009 ajoutera le bridge latest-value : source de snapshots, DTO de statut complet, resynchronisation par commande et événements coalescés. Cancel et races terminales restent en pre.010.