fix(runtime): cancel de background task immédiat et fiable depuis le workstate (#199, QA verte)
Transforme l'annulation d'une background task en contrat immédiat, observable et non-best-effort: - domain/background_task: états Cancelling/Cancelled/CancelFailed et transitions idempotentes; un kill PTY qui échoue est surfacé en CancelFailed plutôt qu'en succès silencieux. - infrastructure/runner + store: cancel effectif de la task ciblée, reconcile marque Cancelling même sans live handle, et départage CancelFailed des tâches pending au boot. - application/background + workstate + orchestrator/wake: chemin de cancel initié depuis le workstate, projection synchronisée de l'état (pas d'attente d'un cycle ambigu). - frontend: projection workstate de l'état cancelled/cancelling/cancelFailed (cancellingRow/cancelFailedRow/cancelButtons), normalization et services. Tests QA verts: background_task_cancel, background_task_runner cancel_wins_even_if_output_is_still_available, background_task_store reconcile_marks_cancelling_without_live_handle_cancel_failed_and_pending, workstate.test.tsx.
This commit is contained in:
@ -134,6 +134,11 @@ fn allowed_non_terminal_transitions_update_timestamp() {
|
||||
.transition(BackgroundTaskState::Running, 140)
|
||||
.unwrap();
|
||||
assert_eq!(running_again.state, BackgroundTaskState::Running);
|
||||
|
||||
let cancelling = running_again
|
||||
.transition(BackgroundTaskState::Cancelling, 150)
|
||||
.unwrap();
|
||||
assert_eq!(cancelling.state, BackgroundTaskState::Cancelling);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -245,6 +250,18 @@ fn result_variants_determine_terminal_state() {
|
||||
.state,
|
||||
BackgroundTaskState::Expired
|
||||
);
|
||||
assert_eq!(
|
||||
running
|
||||
.transition(BackgroundTaskState::Cancelling, 125)
|
||||
.unwrap()
|
||||
.complete(BackgroundTaskResult::CancelFailed {
|
||||
finished_at_ms: 130,
|
||||
error: "kill failed".into(),
|
||||
})
|
||||
.unwrap()
|
||||
.state,
|
||||
BackgroundTaskState::CancelFailed
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user