{"record":{"id":"02c72a1565baf6ca","repo":"windmill-labs/windmill","slug":"item-item-kind-item-path-is-workspace-specif","errorCode":null,"errorMessage":"${item.item_kind} ${item.path} is workspace-specific on the remote but not flagged in wmill.yaml's specificItems — consider adding it.","messagePattern":"(.+?) (.+?) is workspace-specific on the remote but not flagged in wmill\\.yaml's specificItems — consider adding it\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"cli/src/commands/sync/sync.ts","lineNumber":3795,"sourceCode":"\n  log.info(\n    `remote (${workspace.name}) -> local: ${changes.length} changes to apply`,\n  );\n\n  // Warn about items the server marks ws_specific that aren't covered by\n  // wmill.yaml's specificItems patterns — but only for items affected by\n  // this pull (changes list), so unrelated server-flagged items don't\n  // spam the log. The merge above already ensures correctness for the\n  // pull itself; this is a heads-up that the user's config drifts from\n  // the remote and a future push from another machine without that config\n  // would push the item as non-ws_specific.\n  if (wsSpecificMerge.serverItems && wsSpecificMerge.serverItems.length > 0) {\n    const changedPaths = new Set(changes.map((c) => c.path));\n    for (const item of wsSpecificMerge.serverItems) {\n      const filePath = `${item.path}.${item.item_kind}.yaml`;\n      if (!changedPaths.has(filePath)) continue;\n      if (!isSpecificItem(filePath, localSpecificItems)) {\n        log.warn(\n          `${item.item_kind} ${item.path} is workspace-specific on the remote ` +\n            `but not flagged in wmill.yaml's specificItems — consider adding it.`,\n        );\n      }\n    }\n  }\n\n  // Handle JSON output for dry-run\n  if (opts.dryRun && opts.jsonOutput) {\n    const result = {\n      success: true,\n      changes: changes.map((change) => ({\n        type: change.name,\n        path: change.path,\n        ...(change.name === \"edited\" && change.codebase\n          ? { codebase_changed: true }\n          : {}),\n        ...(specificItems && isSpecificItem(change.path, specificItems)","sourceCodeStart":3777,"sourceCodeEnd":3813,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/sync/sync.ts#L3777-L3813","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Add the reported `${item.path}.${item.item_kind}.yaml` path to `specificItems` for that workspace in wmill.yaml and commit it.","Cross-check with teammates who made the item workspace-specific to confirm the intended scope.","Re-run the sync after updating the YAML; the warning disappears.","Audit other items with `wmill sync pull --dry-run` to catch similar unflagged items."],"exampleFix":"// before (wmill.yaml)\nworkspaces:\n  prod:\n    specificItems: []\n// after\nworkspaces:\n  prod:\n    specificItems:\n      - \"u/admin/etl_job.script.yaml\"","handlingStrategy":"validation","validationCode":"const changedPath = `${item.path}.${item.item_kind}.yaml`;\nif (remoteWorkspaceSpecific.includes(changedPath) &&\n    !(cfg.workspaces?.[ws]?.specificItems ?? []).includes(changedPath)) {\n  throw new Error(`${changedPath} is workspace-specific on remote; add to specificItems in wmill.yaml`);\n}","typeGuard":"function isSpecificItem(p: string, specific: string[] | undefined): boolean {\n  return !!specific?.includes(p);\n}","tryCatchPattern":"try {\n  await wmill.sync.push(...);\n} catch (e) {\n  if (String(e).includes(\"not flagged in wmill.yaml's specificItems\")) {\n    console.error(\"Add the path to specificItems for this workspace, commit, re-run\");\n  } else throw e;\n}","preventionTips":["When toggling workspace-specific on an item in the UI, update wmill.yaml specificItems in the same PR.","Run `wmill sync pull --dry-run` in CI to surface unflagged workspace-specific items.","Review wmill.yaml in PRs touching scripts/flows to keep specificItems in sync."],"tags":["cli","config","specific-items","sync","wmill-yaml"],"backgroundTag":"specific-items-not-flagged","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}