{"record":{"id":"9a28a9441a3811b1","repo":"windmill-labs/windmill","slug":"warning-normalizedpath-depends-on-something-in","errorCode":null,"errorMessage":"Warning: ${normalizedPath} depends on something inside \"${folder}\" but is outside it — skipped due to --strict-folder-boundaries. Next generate-metadata will not detect it as stale.","messagePattern":"Warning: (.+?) depends on something inside \"(.+?)\" but is outside it — skipped due to --strict-folder-boundaries\\. Next generate-metadata will not detect it as stale\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"cli/src/commands/generate-metadata/generate-metadata.ts","lineNumber":646,"sourceCode":"\n    const isRelevant = (item: StaleItem) => {\n      if (isInsideFolder(item)) return true;\n      if (item.type === \"dependencies\") return true;\n      const treePath = (item.type === \"script\"\n        ? item.path.replace(/\\.[^/.]+$/, \"\")\n        : item.folder).replaceAll(\"\\\\\", \"/\");\n      return touchesFolder(treePath);\n    };\n\n    if (opts.strictFolderBoundaries) {\n      // Strict mode: only items inside the folder\n      filteredItems = staleItems.filter(isInsideFolder);\n\n      // Warn about stale items outside the folder that would be included by default\n      const excludedStale = staleItems.filter((item) => !isInsideFolder(item) && isRelevant(item) && item.type !== \"dependencies\");\n      for (const item of excludedStale) {\n        const normalizedPath = item.path.replaceAll(\"\\\\\", \"/\");\n        log.warn(colors.yellow(\n          `Warning: ${normalizedPath} depends on something inside \"${folder}\" but is outside it — skipped due to --strict-folder-boundaries. Next generate-metadata will not detect it as stale.`\n        ));\n      }\n    } else {\n      // Default: include items inside the folder and any stale importers that transitively depend on it\n      filteredItems = staleItems.filter(isRelevant);\n    }\n  }\n\n  // === Show stale items and confirm ===\n  if (filteredItems.length === 0) {\n    log.info(colors.green(\"All metadata up-to-date\"));\n    // Turning `dedupeLockfiles` on in a repo whose metadata is already current\n    // is exactly the case where nothing is stale, and the conversion still has\n    // to happen — the sync compares against a deduplicated remote either way.\n    await maybeDedupeLockfiles(opts, workspace, codebases, ignore, rawWorkspaceDependencies, tree, folder);\n    return;\n  }","sourceCodeStart":628,"sourceCodeEnd":664,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/generate-metadata/generate-metadata.ts#L628-L664","documentation":"With `--strict-folder-boundaries`, `generateMetadata` only includes stale items inside the given folder, even if an item outside the folder transitively depends on something inside it. Each such excluded stale importer is warned about, because the next run will not see it as stale and it can silently keep outdated metadata.","triggerScenarios":"Running `wmill generate-metadata --folder <folder> --strict-folder-boundaries` when a script/flow/app outside the folder depends on a stale item inside it; the outside item is filtered out of the update set.","commonSituations":"Monorepos partitioned by folder where cross-folder imports exist (shared utils referenced from sibling folders); team splits a repo and moves consumers out of a folder; shared dependency folder with consumers across the tree.","solutions":["Drop `--strict-folder-boundaries` so transitive stale importers are included.","Run generate-metadata again per consuming folder, or once without the folder flag to cover everything.","Restructure so the dependency lives with its consumers (or in a folder that is generated together).","Treat the warning as a checklist: manually regenerate metadata for each listed path."],"exampleFix":"// before: outside importer skipped, stays stale\nwmill generate-metadata --folder u/shared --strict-folder-boundaries\n// after: include transitive stale importers\nwmill generate-metadata --folder u/shared","handlingStrategy":"validation","validationCode":"// before using --strict-folder-boundaries, find cross-folder importers\nimport fg from 'fast-glob';\nconst outside = (await fg(['**/*.script.ts', '**/*.flow.yaml'], { ignore: [`'${folder}'/**`] }))\n  .filter(f => readFileSync(f, 'utf8').includes(folder));\nif (outside.length) console.warn('outside-folder importers:', outside); // run without the flag or per folder","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Run generate-metadata once without --strict-folder-boundaries after big refactors.","Keep dependency folders co-located with their consumers.","Review the 'skipped due to --strict-folder-boundaries' warnings every run and regenerate the listed paths."],"tags":["cli","metadata","folder-boundaries","stale-metadata"],"backgroundTag":"stale-metadata-skipped","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"}