windmill-labs/windmill · warning

${item.item_kind} ${item.path} is workspace-specific on the

Error message

${item.item_kind} ${item.path} is workspace-specific on the remote but not flagged in wmill.yaml's specificItems — consider adding it.

What it means

A consistency warning during pull/push diffing. An item was found to be workspace-specific on the remote (wsSpecificMerge.serverItems) and is part of the current changeset, but the local wmill.yaml does not list it under specificItems. Without the flag, future syncs may wrongly merge/overwrite the item across workspaces.

Source

Thrown at cli/src/commands/sync/sync.ts:3795

  log.info(
    `remote (${workspace.name}) -> local: ${changes.length} changes to apply`,
  );

  // Warn about items the server marks ws_specific that aren't covered by
  // wmill.yaml's specificItems patterns — but only for items affected by
  // this pull (changes list), so unrelated server-flagged items don't
  // spam the log. The merge above already ensures correctness for the
  // pull itself; this is a heads-up that the user's config drifts from
  // the remote and a future push from another machine without that config
  // would push the item as non-ws_specific.
  if (wsSpecificMerge.serverItems && wsSpecificMerge.serverItems.length > 0) {
    const changedPaths = new Set(changes.map((c) => c.path));
    for (const item of wsSpecificMerge.serverItems) {
      const filePath = `${item.path}.${item.item_kind}.yaml`;
      if (!changedPaths.has(filePath)) continue;
      if (!isSpecificItem(filePath, localSpecificItems)) {
        log.warn(
          `${item.item_kind} ${item.path} is workspace-specific on the remote ` +
            `but not flagged in wmill.yaml's specificItems — consider adding it.`,
        );
      }
    }
  }

  // Handle JSON output for dry-run
  if (opts.dryRun && opts.jsonOutput) {
    const result = {
      success: true,
      changes: changes.map((change) => ({
        type: change.name,
        path: change.path,
        ...(change.name === "edited" && change.codebase
          ? { codebase_changed: true }
          : {}),
        ...(specificItems && isSpecificItem(change.path, specificItems)

View on GitHub (pinned to e474e8803c)

Solutions

  1. Add the reported `${item.path}.${item.item_kind}.yaml` path to `specificItems` for that workspace in wmill.yaml and commit it.
  2. Cross-check with teammates who made the item workspace-specific to confirm the intended scope.
  3. Re-run the sync after updating the YAML; the warning disappears.
  4. Audit other items with `wmill sync pull --dry-run` to catch similar unflagged items.

Example fix

// before (wmill.yaml)
workspaces:
  prod:
    specificItems: []
// after
workspaces:
  prod:
    specificItems:
      - "u/admin/etl_job.script.yaml"
Defensive patterns

Strategy: validation

Validate before calling

const changedPath = `${item.path}.${item.item_kind}.yaml`;
if (remoteWorkspaceSpecific.includes(changedPath) &&
    !(cfg.workspaces?.[ws]?.specificItems ?? []).includes(changedPath)) {
  throw new Error(`${changedPath} is workspace-specific on remote; add to specificItems in wmill.yaml`);
}

Type guard

function isSpecificItem(p: string, specific: string[] | undefined): boolean {
  return !!specific?.includes(p);
}

Try / catch

try {
  await wmill.sync.push(...);
} catch (e) {
  if (String(e).includes("not flagged in wmill.yaml's specificItems")) {
    console.error("Add the path to specificItems for this workspace, commit, re-run");
  } else throw e;
}

Prevention

When it happens

Trigger: A colleague (or a previous run) marked an item workspace-specific on the server; you pull a changed version of that item but your wmill.yaml's `specificItems` for that workspace doesn't include the `${path}.${kind}.yaml` file.

Common situations: Merging branches where one added server-side workspace-specificity; forgetting to commit the wmill.yaml update alongside the item; someone toggled the workspace-specific flag in the UI without updating the repo config.

Related errors


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