diff --git a/.yoi/tickets/00001KXDTPXFD/item.md b/.yoi/tickets/00001KXDTPXFD/item.md index cb6b8845..f010664b 100644 --- a/.yoi/tickets/00001KXDTPXFD/item.md +++ b/.yoi/tickets/00001KXDTPXFD/item.md @@ -1,8 +1,8 @@ --- title: 'Stabilize cleanup plan ordering' -state: 'inprogress' +state: 'done' created_at: '2026-07-13T13:29:51Z' -updated_at: '2026-07-13T13:30:39Z' +updated_at: '2026-07-13T13:38:25Z' assignee: null queued_by: 'yoi ticket' queued_at: '2026-07-13T13:30:39Z' diff --git a/.yoi/tickets/00001KXDTPXFD/thread.md b/.yoi/tickets/00001KXDTPXFD/thread.md index e276e8f1..34d5ddea 100644 --- a/.yoi/tickets/00001KXDTPXFD/thread.md +++ b/.yoi/tickets/00001KXDTPXFD/thread.md @@ -39,4 +39,44 @@ Ticket を `yoi ticket` が queued にしました。 State changed to `inprogress`. +--- + + + +## Implementation report + +Stabilized cleanup plan candidate ordering and verified the not-found Workdir deletion endpoint. + +Root cause: +- Cleanup plan digest includes worker/workdir candidate arrays. +- Candidate order was not normalized before digest calculation, so GET `/cleanup-plan` and POST `/cleanup-executions` could compute different digests for the same target set. +- The POST then failed with `workspace_cleanup_plan_stale`, preventing `workdir_record_delete` execution. + +Changes: +- Sort worker cleanup candidates by `target_id` before digest calculation. +- Sort Workdir cleanup candidates by `target_id` before digest calculation. + +Endpoint verification: +- Fetched `GET /api/w/0197a949-4b6b-7f2a-9d9a-1f87e3a4c5b6/runtimes/arc/cleanup-plan`. +- Posted the returned revision/digest and all `file_status: not_found` Workdir target ids to `POST /cleanup-executions`. +- Received HTTP 200 and four `workdir_record_delete` results with `status: deleted`. + +Validation: +- `cargo fmt --check` +- `git diff --check` +- `cargo check -q` +- `cargo test -q -p yoi-workspace-server` +- targeted cleanup plan test +- `nix build .#yoi --no-link` + + +--- + + + +## State changed + +State changed to `done`. + + --- diff --git a/crates/workspace-server/src/server.rs b/crates/workspace-server/src/server.rs index ddbcfe30..1c767bd9 100644 --- a/crates/workspace-server/src/server.rs +++ b/crates/workspace-server/src/server.rs @@ -1810,6 +1810,8 @@ fn build_runtime_cleanup_plan( estimated_reclaim_bytes: None, }); } + worker_candidates.sort_by(|left, right| left.target_id.cmp(&right.target_id)); + workdir_candidates.sort_by(|left, right| left.target_id.cmp(&right.target_id)); diagnostics.truncate(16); let generated_at = now_registry_timestamp(); let digest = cleanup_plan_digest(&worker_candidates, &workdir_candidates)?;