windmill-labs/windmill · error

A variable was created at ${path} while this setup was runni

Error message

A variable was created at ${path} while this setup was running. Choose another path and try again.

What it means

writeSecret claims a variable path and, if the claim holds, updates the existing variable. Before updating it re-verifies via stillOurs that the variable found at the path is the one this setup claimed; if someone else created/took the path in the meantime, it throws pathTakenLate('variable', path) — this exact message.

Source

Thrown at frontend/src/lib/components/workspaceSettings/addDataTableModel.ts:485

		return 'kept'
	}
}

/**
 * The read answers both questions at once: whether anything is there, and who last wrote it.
 * Replacing this run's own work is required for Try again; replacing anyone else's loses a
 * generated Supabase password, which Supabase never shows twice.
 */
async function writeSecret(
	deps: RunDeps,
	claims: Claims,
	path: string,
	value: string,
	description: string
): Promise<Claims> {
	const held = await secretMark(deps, path)
	if (held) {
		if (!stillOurs(claims, 'secret', path, held)) throw new Error(pathTakenLate('variable', path))
		await VariableService.updateVariable({
			workspace: deps.workspace,
			path,
			requestBody: { value, is_secret: true }
		})
	} else {
		await VariableService.createVariable({
			workspace: deps.workspace,
			requestBody: { path, value, is_secret: true, description, is_oauth: false }
		})
	}
	return claim(claims, 'secret', path, (await secretMark(deps, path)) ?? deps.username)
}

/**
 * A revision, not an author: the same person editing the variable in another tab leaves
 * `edited_by` unchanged, and that write is no more ours to discard than a stranger's.
 * `undefined` when nothing is there.

View on GitHub (pinned to e474e8803c)

Solutions

  1. Pick a different variable path for the secret and rerun the setup
  2. Remove or rename the conflicting variable (or ask its owner to) and rerun the setup
  3. Serialize workspace setup: only one admin runs the wizard at a time
Defensive patterns

Strategy: retry

Validate before calling

const existing = await VariableService.getVariable({ workspace, path }).catch(() => null)
if (existing && !isOurClaim(existing)) console.warn(`Variable '${path}' already exists — choose another path`)

Try / catch

try {
  await runSetup(...)
} catch (e) {
  if (String(e.message).includes('A variable was created at')) {
    // prompt for a new variable path and retry the setup
  }
}

Prevention

When it happens

Trigger: Another admin creates a variable at the same path while the add-data-table setup is running, between the setup's initial secretMark claim and the VariableService.updateVariable call.

Common situations: Two admins running the data-table setup concurrently; an automation or teammate creating the same variable path (e.g. u/root of the database) mid-setup.

Related errors


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/1674d3a6be04482f. Report an issue: GitHub.