v0.3.7-pre.008

This commit is contained in:
2026-09-02 16:56:11 +02:00
parent 6e406a6b84
commit 48d26b43f9
19 changed files with 693 additions and 30 deletions

130
deltas/0.3.7/pre.008.md Normal file
View File

@@ -0,0 +1,130 @@
<!-- file: deltas/0.3.7/pre.008.md -->
<!-- version: 1 -->
# Delta `0.3.7-pre.008` — runtime et Start réel Backfill
## 1. Base requise
```text
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 :
```text
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
```text
workspace.package.version = 0.3.7-pre.8
label = 0.3.7-pre.008
```
## 8. Fichiers ajoutés
```text
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
```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/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
```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 ;
- 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` :
```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
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`.