5.8 KiB
Delta 0.3.7-pre.011 — checkpoint/frontier et Resume in-session
1. Base requise
0.3.7-pre.010
workspace.package.version = 0.3.7-pre.10
2. Objectif
Ouvrir Resume sans introduire de checkpoint durable ni affaiblir l'identité du checkpoint : conserver la requête terminale et son checkpoint uniquement dans Rust, réémettre le checkpoint vers un nouveau JobId backend après validation de son identité d'origine, puis relancer le même runtime/monitoring que Start.
3. Reprise contrôlée côté Job Backfill
BackfillCheckpoint reste opaque et lié au JobId qui l'a produit. ksp-job-backfill-lib ajoute BackfillRequest::resume_for_job :
- le checkpoint est validé contre le JobId et le scope fingerprint de la requête terminale d'origine ;
- seul le JobId est réémis pour le nouveau lifecycle ;
- scope fingerprint, completed prefix et éventuel cursor
beforerestent inchangés ; BackfillRequest::with_checkpointrevalide ensuite le checkpoint réémis contre la nouvelle requête.
Aucun constructeur public de checkpoint, aucune sérialisation et aucun cursor exposé ne sont ajoutés.
4. Ownership Rust-only côté Desk
BackfillRunState retient désormais avec le dernier terminal la BackfillRequest exacte qui a produit ce terminal. Cette requête reste exclusivement backend et n'est jamais projetée vers IPC.
resume_request(new_job_id) :
- refuse Resume lorsqu'un run actif possède le slot ;
- refuse l'absence de terminal ou de checkpoint ;
- extrait le checkpoint uniquement depuis le snapshot terminal retenu ;
- appelle
BackfillRequest::resume_for_jobavec le nouveau JobId backend.
5. Admission Resume
AppState::prepare_backfill_resume :
- refuse le shutdown en cours ;
- exige
composition_ready; - alloue un nouveau JobId backend ;
- reconstruit la requête via le checkpoint Rust-only ;
- revalide réseau Store et rôle HTTP contre la composition courante ;
- construit
BackfillJobRuntime, installe le handle single-run, acquiert Transport/Store puis retourneBackfillRunLaunch.
Start et Resume partagent ensuite spawn_backfill_launch, donc le monitoring latest-value et la restitution du Store restent identiques.
6. IPC et frontend
Nouvelle commande :
backfill_resume() -> BackfillResumeResponseDto
BackfillResumeResponseDto contient uniquement :
accepted
job_id
state
Le frontend expose Reprendre seulement pour un snapshot terminal avec checkpoint_present=true. La commande Resume n'envoie aucun argument métier. Aucun checkpoint, adresse, signature, ancre, provider, endpoint, credential, network ou payload RAW ne traverse IPC.
7. Version
workspace.package.version = 0.3.7-pre.11
label = 0.3.7-pre.011
8. Fichiers ajoutés
deltas/0.3.7/pre.011.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/backfill_run.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/tauri.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/backfill_run.rs
crates/ksp-app-backfill-desk/unit_tests/dto_backfill.rs
crates/ksp-job-backfill-lib/src/checkpoint.rs
crates/ksp-job-backfill-lib/src/request.rs
crates/ksp-job-backfill-lib/unit_tests/request.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.010 est intégralement propre : audits Rust/Markdown, cargo check --workspace, Clippy, 49 tests unitaires Job Backfill et toutes les suites Backfill Desk passent. Le smoke Tauri Mainnet confirme aussi le Cancel ciblé, le passage en cancelling, la terminalisation puis la libération du slot avant shutdown.
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 :
resume_for_jobvalide le checkpoint d'origine puis réémet uniquement le JobId ;- scope fingerprint, frontier et cursor interne restent inchangés ;
- requête terminale/checkpoint restent Rust-only ;
- Resume refuse run actif ou checkpoint absent ;
- réseau Store + rôle HTTP revalidés avant admission ;
- DTO Resume limité aux métadonnées sûres ;
- frontend Resume sans payload de campagne/checkpoint ;
std.store.jsoninchangé par le delta ;- aucune dépendance/feature Cargo modifiée ;
- syntaxe TypeScript par transpilation locale ;
- contrôle différentiel des headers et reconstruction stricte 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.012 :
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
Aucun cargo tree n'est requis pour cette tranche : dépendances et features Cargo sont inchangées.
14. Suite
pre.012 terminera le frontend fonctionnel/polish, notamment l'autocomplete libre de Program IDs alimenté depuis ksp-core-lib::entries()/ProgramIdEntry, sans liste hardcodée ni checkpoint durable.