mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-13 08:05:23 +00:00
**`resume` never rejected a run from a different plan.** The seed computed its tag from the plan being rendered, so `run.key === planKey` was true by construction and the guard could not fire — the comment claimed the opposite. Finishing an import into workspace X, stepping back to pick workspace Y, then returning showed X's finished checklist against Y's plan, with a Continue button, over an import into Y that never happened. `ImportExecution.planTag` now carries the plan the run was made for, and the seed uses that. **Abandoning mid-import still reported `done`.** `installProject` returns early when `stopped` goes true, and it returns exactly as it does on success, so the tail of `#import` could not tell the two apart: a run stopped after 3 of 10 items wrote `import: done — 3 items`, no error, `done = true`. Since the page hands that run back on return, the primary button became Continue rather than Retry and the seven skipped items were silently lost — breaking the promise the leave dialog makes. The tail now checks the flag and leaves the run failed and retryable. `abandon.test.ts` was a hand-written copy of the parking decision, which is why it guarded neither. It now drives a real `ImportExecution` with the install seam mocked, abandons from inside the write loop (the only way it happens — `run()` clears the flag on entry so a retry can proceed), and asserts `done`, the error, and both parking outcomes. `planTag` is covered too: different destination, different project, and that the editable folder does not change it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Windmill frontend
The Windmill frontend written in Svelte 5 + Tailwind CSS
The frontend is under AGPL, see the LICENSE file at the root of this repo