mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-05 16:03:47 +00:00
The wizard kept a note in `sessionStorage` — "this run created workspace X" — so a reload could tell that a create had already happened. A note is a second copy of a fact the instance already holds, and it could outlive the workspace it named: the comment on `createdWorkspace` said a parked id might point at a workspace someone else made at that id afterwards, and that there was no way to tell, because a workspace carries no discriminator. It carries `owner`. It is set to the creator's email at `INSERT INTO workspace`, `listWorkspaces` already selects it, and the generated `Workspace` type already has it. So the question the note was answering can simply be asked: `probeWorkspace` returns whether a workspace with the plan's id exists among the caller's, and whether they own it. Ownership is what makes adopting one safe — an id that exists but belongs to someone else is not this run's work. `parking.ts` and its test are gone. Nothing in the wizard writes storage now: the plan is in the URL, what exists is in the instance, and what is in flight is in memory, which is where in-flight things belong. `probe.ts` also carries the two reads the follow-up needs — which of the paths an import would write are already there, and whether a migration's tables exist. The second is the ground truth for "did this migration run", covering both paths `applyOneMigration` takes: it records a migration when the data table has them enabled, and otherwise runs the SQL as a job nothing remembers. The tables outlive both. It returns `undefined` rather than `false` when it cannot tell, since "not there" invites a caller to run the migration and "cannot tell" does not. Verified against a real reload mid-run: the second attempt makes no `createWorkspace` call, one `workspaces/list` call, and carries on to the fetch. 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