v0.3.7-pre.009

This commit is contained in:
2026-09-02 17:40:03 +02:00
parent ed72aaba67
commit ec8875e864
15 changed files with 699 additions and 21 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/024-V0_3_7_BACKFILL_DESK.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# Validation v0.3.7 — Backfill Desk
@@ -420,3 +420,27 @@ Le correctif ajoute un helper de test qui extrait uniquement la déclaration de
- [X] audits statiques Rust/Markdown rejoués dans l'environnement d'assemblage ;
- [ ] replay opérateur `cargo fmt/check/clippy/test` de `pre.008-fix.003` à exécuter ; aucun `cargo tree` requis car dépendances/features inchangées.
## 21. `pre.009` — monitoring latest-value et resynchronisation
Le replay opérateur de `pre.008-fix.003` ferme le couloir Start : audits Rust/Markdown, `cargo check --workspace`, Clippy, les 49 tests unitaires `ksp-job-backfill-lib` et toutes les suites Backfill Desk passent. Aucun `cargo tree` supplémentaire n'était requis pour ce dernier fix test-only sans changement de dépendances/features.
`pre.009` branche directement la source latest-value déjà possédée par `BackfillJobHandle`. `BackfillRunLaunch` conserve une `BackfillSnapshotSource` indépendante avant déplacement du runtime dans le task, tandis que `BackfillRunState` conserve le handle actif et retient la dernière notification terminale après `finish`. La commande `backfill_status` retourne donc soit la valeur active courante, soit le dernier terminal retenu, ce qui fournit une resynchronisation explicite sans dépendre de l'historique des événements frontend.
Le bridge Tauri attend `JobSnapshotSource::wait_for_change` et émet `ksp-backfill-status`. Cette primitive latest-value coalesce les mises à jour intermédiaires : aucun event queue métier supplémentaire ni polling de logs n'est introduit. `BackfillRunStatusDto` expose uniquement des métadonnées sûres et bornées : JobId/kind, sequence en texte décimal, lifecycle/completion, phase/scope/boundary, compteurs candidates/entities/observations, missing/conflicts/cancelled/holes, maximum in-flight, `checkpoint_present`, `contiguous_completed` et éventuel `failure_domain/failure_code`. Adresse, signatures, endpoint/provider, payload RAW, contexte d'erreur et checkpoint concret restent backend-only.
Le frontend installe le listener avant la resynchronisation startup, rend le dernier snapshot complet, propose un bouton manuel de resynchronisation et réactive Start lorsque le snapshot devient terminal. Cancel, état cancelling piloté par l'UI et races fermeture/Cancel/terminal restent réservés à `pre.010`.
### Gate statique local `pre.009`
- [X] monitoring branché sur `JobSnapshotSource`, sans parsing de logs ;
- [X] événement latest-value coalescé `ksp-backfill-status` ;
- [X] commande `backfill_status` de resynchronisation ;
- [X] dernier terminal retenu après libération du slot single-run ;
- [X] sequence `u64` projetée comme texte décimal ;
- [X] compteurs complets projetés avec conversion bornée vers `u32` ;
- [X] checkpoint projeté seulement par présence + frontier contigu ;
- [X] erreurs projetées seulement par domaine/code stables ;
- [X] aucun payload métier, URL/provider/credential ou checkpoint concret exposé ;
- [X] frontend réactive Start sur terminal et garde un resync manuel ;
- [X] aucun Cancel/Resume ajouté prématurément ;
- [ ] `cargo fmt/check/clippy/test` de `pre.009` à rejouer par l'opérateur ; `cargo`/`rustfmt` restent absents du sandbox.