v0.3.7-pre.011
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_contract.rs
|
||||
// version: 12
|
||||
// version: 13
|
||||
|
||||
//! Structural desktop contract checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -305,7 +305,7 @@ fn pre_008_start_installs_handle_before_non_blocking_spawn_and_keeps_single_run_
|
||||
let frontend = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
assert!(state.contains("BackfillJobRuntime::new(mapped)"));
|
||||
let handle_index = state.find("let handle = runtime.handle();");
|
||||
let install_index = state.find("self.backfill_runs.install(job_id.clone(), handle)");
|
||||
let install_index = state.find("self.backfill_runs.install(job_id.clone(), handle, retained_request)");
|
||||
assert!(handle_index.is_some());
|
||||
assert!(install_index.is_some());
|
||||
if let (std::option::Option::Some(handle_index), std::option::Option::Some(install_index)) = (handle_index, install_index) {
|
||||
@@ -374,3 +374,33 @@ fn pre_010_cancel_is_targeted_idempotent_and_shutdown_requests_cooperative_cance
|
||||
assert!(frontend.contains("backfill_cancel"));
|
||||
assert!(frontend.contains("{ jobId: status.jobId }"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_011_resume_reissues_rust_only_checkpoint_for_new_backend_job_without_ipc_checkpoint_material() {
|
||||
let root = app_root();
|
||||
let workspace = root.join("../..");
|
||||
let checkpoint = read_text(workspace.join("crates/ksp-job-backfill-lib/src/checkpoint.rs").as_path());
|
||||
assert!(checkpoint.contains("reissue_for_job"));
|
||||
let request = read_text(workspace.join("crates/ksp-job-backfill-lib/src/request.rs").as_path());
|
||||
assert!(request.contains("pub fn resume_for_job"));
|
||||
assert!(request.contains("validate_request_checkpoint"));
|
||||
assert!(request.contains("checkpoint.reissue_for_job(job_id.clone())"));
|
||||
let run = read_text(root.join("src/backfill_run.rs").as_path());
|
||||
for required in ["TerminalBackfillRun", "request: ksp_job_backfill_lib::BackfillRequest", "snapshot().checkpoint()", "resume_for_job(job_id, checkpoint)"] {
|
||||
assert!(run.contains(required), "missing Rust-only Resume ownership marker {required}");
|
||||
}
|
||||
let state = read_text(root.join("src/app_state.rs").as_path());
|
||||
for required in ["prepare_backfill_resume", "options.composition_ready", "store_network_matches", "role_available"] {
|
||||
assert!(state.contains(required), "missing Resume admission marker {required}");
|
||||
}
|
||||
let tauri = read_text(root.join("src/tauri.rs").as_path());
|
||||
assert!(tauri.contains("backfill_resume"));
|
||||
assert!(tauri.contains("spawn_backfill_launch"));
|
||||
let frontend = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
assert!(frontend.contains("resumeBackfillRun"));
|
||||
assert!(frontend.contains("checkpointPresent"));
|
||||
assert!(frontend.contains("backfill_resume"));
|
||||
let html = read_text(root.join("frontend/main.html").as_path());
|
||||
assert!(html.contains("resumeBackfillRun"));
|
||||
assert!(html.contains("Reprendre"));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_security.rs
|
||||
// version: 13
|
||||
// version: 14
|
||||
|
||||
//! Security and dependency-boundary checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -104,7 +104,7 @@ fn pre_002_tauri_commands_remain_centralized() {
|
||||
assert_eq!(count, 0, "{} declares a Tauri command outside tauri.rs", path.display());
|
||||
}
|
||||
}
|
||||
assert_eq!(command_count, 8);
|
||||
assert_eq!(command_count, 9);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -295,3 +295,47 @@ fn pre_010_cancel_surface_targets_backend_job_identity_without_business_payloads
|
||||
assert!(!cancel_source.contains(forbidden), "Cancel tracing includes forbidden campaign payload marker {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_011_resume_surface_exposes_only_new_job_acknowledgement_and_never_checkpoint_payload() {
|
||||
let root = app_root();
|
||||
let dto_source = read_text(root.join("src/dto_backfill.rs").as_path());
|
||||
let dto = struct_source(dto_source.as_str(), "BackfillResumeResponseDto");
|
||||
for required in ["accepted", "job_id", "state"] {
|
||||
assert!(dto.contains(required), "Resume acknowledgement missing safe field {required}");
|
||||
}
|
||||
for forbidden in [
|
||||
"pub(crate) address:",
|
||||
"pub(crate) signature:",
|
||||
"pub(crate) endpoint:",
|
||||
"pub(crate) provider:",
|
||||
"pub(crate) credential:",
|
||||
"pub(crate) token:",
|
||||
"pub(crate) checkpoint:",
|
||||
"pub(crate) payload:",
|
||||
"pub(crate) network:",
|
||||
] {
|
||||
assert!(!dto.contains(forbidden), "Resume acknowledgement leaks forbidden field marker {forbidden}");
|
||||
}
|
||||
let tauri = read_text(root.join("src/tauri.rs").as_path());
|
||||
let resume_marker = tauri.find("fn backfill_resume");
|
||||
assert!(resume_marker.is_some());
|
||||
let resume_source = match resume_marker {
|
||||
std::option::Option::Some(index) => &tauri[index..std::cmp::min(index + 1300, tauri.len())],
|
||||
std::option::Option::None => "",
|
||||
};
|
||||
for forbidden in ["BackfillCheckpoint", "checkpoint:", "address:", "signature:", "provider:", "endpoint:"] {
|
||||
assert!(!resume_source.contains(forbidden), "Resume IPC command leaks forbidden marker {forbidden}");
|
||||
}
|
||||
let frontend = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
let resume_marker = frontend.find("Backfill Desk in-session Resume requested");
|
||||
assert!(resume_marker.is_some());
|
||||
let resume_source = match resume_marker {
|
||||
std::option::Option::Some(index) => &frontend[index..std::cmp::min(index + 1100, frontend.len())],
|
||||
std::option::Option::None => "",
|
||||
};
|
||||
assert!(resume_source.contains("backfill_resume"));
|
||||
for forbidden in ["checkpoint:", "address:", "anchorSignature:", "explicitSignatures:", "minContextSlot:"] {
|
||||
assert!(!resume_source.contains(forbidden), "Resume frontend sends or logs forbidden payload marker {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user