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
- 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.
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 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.
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
- Found ${wrongFormatPaths.length} directory(ies) using ${foun
- Could not find a workspace mapped to branch \`${opts.fromBra
- ⚠️ Workspace '${wsNameForConfig}' is not defined in the 'wo
- .wmillignore is not supported anymore, switch to wmill.yaml
- Workspace folder not found, are you in the right directory?
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/02c72a1565baf6ca.
Report an issue: GitHub.