# Delta `0.3.7-pre.009` — monitoring latest-value Backfill Desk ## 1. Base requise ```text 0.3.7-pre.008-fix.003 workspace.package.version = 0.3.7-pre.8.fix.3 ``` ## 2. Objectif Projeter le flux latest-value déjà fourni par `ksp-job-backfill-lib` vers Backfill Desk, avec événement coalescé et commande de resynchronisation, sans parser les logs et sans encore ouvrir Cancel ou Resume. ## 3. Bridge latest-value `BackfillRunLaunch` conserve une `BackfillSnapshotSource` indépendante du runtime exécuté. Le command handler démarre un task de monitoring qui lit la valeur complète courante puis attend `JobSnapshotSource::wait_for_change`; les updates intermédiaires peuvent être coalescées par le contrat Job et chaque notification frontend reste une valeur complète. L'événement Tauri est `ksp-backfill-status`. Aucun event bus générique, queue métier ou parsing des logs n'est introduit. ## 4. Resynchronisation et terminal retenu `BackfillRunState` conserve le handle pendant l'activité et retient la dernière `JobNotification` terminale avant de libérer le slot single-run. `backfill_status` retourne la notification active courante ou ce dernier terminal retenu. L'UI peut ainsi se recaler au démarrage, après Start ou sur demande manuelle même si elle a manqué un événement. ## 5. DTO de statut sûr `BackfillRunStatusDto` expose uniquement : ```text active / terminal job_id / job_kind sequence (texte décimal) state / completion / phase / scope_kind / discovery_boundary candidates_selected / candidates_admitted / candidates_finished entities_inserted / entities_existing / entities_purged observations_inserted / observations_existing missing / conflicts / cancelled_candidates / holes maximum_in_flight / contiguous_completed checkpoint_present failure_domain / failure_code ``` Aucune adresse, signature, ancre, URL/endpoint/provider, credential, payload RAW, contexte d'erreur ou valeur de checkpoint ne traverse cette surface. ## 6. Frontend Le frontend installe le listener `ksp-backfill-status`, resynchronise via `backfill_status`, affiche le snapshot complet dans une carte dédiée et offre une action **Resynchroniser**. Le bouton Start reste verrouillé tant que le statut est actif et est réactivé sur terminal. Cancel, état cancelling piloté par l'opérateur et shutdown coopératif restent réservés à `pre.010`. ## 7. Version ```text workspace.package.version = 0.3.7-pre.9 label = 0.3.7-pre.009 ``` ## 8. Fichiers ajoutés ```text crates/ksp-app-backfill-desk/src/backfill_status.rs crates/ksp-app-backfill-desk/unit_tests/backfill_status.rs deltas/0.3.7/pre.009.md ``` ## 9. Fichiers modifiés ```text 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/backfill_run.rs crates/ksp-app-backfill-desk/src/lib.rs crates/ksp-app-backfill-desk/src/tauri.rs crates/ksp-app-backfill-desk/tests/desktop_contract.rs crates/ksp-app-backfill-desk/tests/desktop_security.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.008-fix.003` est intégralement propre : audits Rust/Markdown, `cargo check --workspace`, Clippy, `ksp-job-backfill-lib` et toutes les suites Backfill Desk passent. ## 12. 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 : - syntaxe TypeScript par transpilation locale ; - source latest-value et `wait_for_change` présents, sans log parsing ; - terminal retenu + commande de resynchronisation ; - DTO de monitoring sans payload métier/checkpoint concret ; - capabilities et dépendances inchangées ; - 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.010` : ```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-job-backfill-lib cargo test -p ksp-app-backfill-desk ``` ## 14. Suite `pre.010` ajoutera Cancel, état cancelling, fermeture coopérative et races Start/Cancel/terminal.