windmill-labs/windmill · warning

Argument not found!

Error message

Argument not found!

What it means

In AddPropertyV2.svelte, once the nested path is resolved, the top-level check confirms the argument exists in `modifiedProperties` before deleting it and cleaning up required/order arrays. Missing argument throws this error, caught and surfaced as a toast.

Source

Thrown at frontend/src/lib/components/schema/AddPropertyV2.svelte:143

				if (Object.keys(modifiedProperties).includes(property)) {
					modifiedObject = modifiedProperties[property]
					modifiedProperties = modifiedObject.properties as object
				} else {
					throw Error('Nested argument not found!')
				}
			})

			if (Object.keys(modifiedProperties).includes(argName)) {
				delete modifiedProperties[argName]

				if (modifiedObject.required) {
					modifiedObject.required = schema.required.filter((arg) => arg !== argName)
				}
				if (modifiedObject.order) {
					modifiedObject.order = modifiedObject.order.filter((arg) => arg !== argName)
				}
			} else {
				throw Error('Argument not found!')
			}
			syncOrders(modifiedObject)
			schema = $state.snapshot(modifiedObject)
		} catch (err) {
			sendUserToast(`Could not delete argument: ${err}`, true)
		}
	}

	const trigger_render = $derived(trigger)
</script>

<AddPropertyFormV2
	{noPopover}
	on:add={(e) => {
		try {
			handleAddOrEditArgument({
				...DEFAULT_PROPERTY,
				selectedType: 'string',

View on GitHub (pinned to e474e8803c)

Solutions

  1. Refresh the editor and retry the deletion
  2. Check exact argument spelling against the schema JSON
  3. Delete via direct JSON edit if UI state is inconsistent
  4. Debounce/disable the delete button to prevent duplicate dispatches

Example fix

// before
if (Object.keys(modifiedProperties).includes(argName)) { /* delete */ } else { throw Error('Argument not found!'); }
// after: idempotent delete
if (Object.keys(modifiedProperties).includes(argName)) { /* delete + syncOrders */ }
Defensive patterns

Strategy: validation

Validate before calling

if (!modifiedObject?.properties || !(argName in modifiedObject.properties)) {
  console.warn(`Argument "${argName}" not present — nothing to delete`);
  return;
}

Type guard

function canDelete(obj: any, argName: string): obj is { properties: Record<string, unknown>; required?: string[]; order?: string[] } {
  return !!obj?.properties && Object.prototype.hasOwnProperty.call(obj.properties, argName);
}

Try / catch

try { await handleDeleteArgument(argName); } catch (e) {
  if (/Argument not found/.test(String(e))) showInfo('Already removed');
  else throw e;
}

Prevention

When it happens

Trigger: Target argument is absent from the resolved properties object at delete time — duplicate delete dispatch, renamed argument, or outdated schema snapshot.

Common situations: Rapid delete clicks, rename-then-delete with the old name, or schema synced from server after another user removed the argument.

Related errors


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