Files
khadhroony-solana-project/deltas/0.3.7/pre.011.md
2026-09-02 19:50:01 +02:00

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 before restent inchangés ;
  • BackfillRequest::with_checkpoint revalide 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_job avec 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 retourne BackfillRunLaunch.

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_job valide 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.json inchangé 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.