{"record":{"id":"19a4b9392134ef5d","repo":"windmill-labs/windmill","slug":"dedupelockfiles-is-on-but-this-checkout-still-hold","errorCode":null,"errorMessage":"dedupeLockfiles is on but this checkout still holds one lockfile per script. Run 'wmill generate-metadata' (or pull) to convert it — until then every script reads as changed.","messagePattern":"dedupeLockfiles is on but this checkout still holds one lockfile per script\\. Run 'wmill generate-metadata' \\(or pull\\) to convert it — until then every script reads as changed\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/src/commands/sync/sync.ts","lineNumber":4974,"sourceCode":"    }\n    if (referrers.length === 0) continue;\n    log.info(\n      colors.gray(\n        `${change.path} changed: re-pushing the ${referrers.length} script(s) sharing it`,\n      ),\n    );\n    for (const metaPath of referrers) {\n      if (changedPaths.has(metaPath)) continue;\n      changes.push({\n        name: \"edited\",\n        path: metaPath,\n        before: localMap[metaPath],\n        after: localMap[metaPath],\n      });\n    }\n  }\n  if (unconvertedTree) {\n    log.warn(\n      colors.yellow(\n        `dedupeLockfiles is on but this checkout still holds one lockfile per script. Run 'wmill generate-metadata' (or pull) to convert it — until then every script reads as changed.`,\n      ),\n    );\n  }\n\n  // After the shared-lock pass, which reads a shared lockfile's deletion as the\n  // signal that this checkout is not deduplicated — an advisory about the local\n  // tree that holds whether or not remote items are being kept.\n  if (opts.keepDeleted) {\n    dropDeletions(changes, \"remote\");\n  }\n\n  const autoRegenerate = !!(opts as any).autoMetadata;\n  const staleScripts: string[] = [];\n  const staleFlows: string[] = [];\n  const staleApps: string[] = [];\n","sourceCodeStart":4956,"sourceCodeEnd":4992,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/sync/sync.ts#L4956-L4992","documentation":"Error \"dedupeLockfiles is on but this checkout still holds one lockfile per script. Run 'wmill generate-metadata' (or pull) to convert it — until then every script reads as changed.\" thrown in windmill-labs/windmill.","triggerScenarios":"Thrown at cli/src/commands/sync/sync.ts:4974 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Run 'wmill generate-metadata' to convert the checkout to shared/deduped lockfiles","Or run 'wmill pull' to re-sync metadata from the remote","Keep dedupeLockfiles off in wmill.yaml until the checkout is converted"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}