windmill-labs/windmill · warning
Warning: ${normalizedPath} depends on something inside "${fo
Error message
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. What it means
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.
Source
Thrown at cli/src/commands/generate-metadata/generate-metadata.ts:646
const isRelevant = (item: StaleItem) => {
if (isInsideFolder(item)) return true;
if (item.type === "dependencies") return true;
const treePath = (item.type === "script"
? item.path.replace(/\.[^/.]+$/, "")
: item.folder).replaceAll("\\", "/");
return touchesFolder(treePath);
};
if (opts.strictFolderBoundaries) {
// Strict mode: only items inside the folder
filteredItems = staleItems.filter(isInsideFolder);
// Warn about stale items outside the folder that would be included by default
const excludedStale = staleItems.filter((item) => !isInsideFolder(item) && isRelevant(item) && item.type !== "dependencies");
for (const item of excludedStale) {
const normalizedPath = item.path.replaceAll("\\", "/");
log.warn(colors.yellow(
`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.`
));
}
} else {
// Default: include items inside the folder and any stale importers that transitively depend on it
filteredItems = staleItems.filter(isRelevant);
}
}
// === Show stale items and confirm ===
if (filteredItems.length === 0) {
log.info(colors.green("All metadata up-to-date"));
// Turning `dedupeLockfiles` on in a repo whose metadata is already current
// is exactly the case where nothing is stale, and the conversion still has
// to happen — the sync compares against a deduplicated remote either way.
await maybeDedupeLockfiles(opts, workspace, codebases, ignore, rawWorkspaceDependencies, tree, folder);
return;
}View on GitHub (pinned to e474e8803c)
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.
Example fix
// before: outside importer skipped, stays stale wmill generate-metadata --folder u/shared --strict-folder-boundaries // after: include transitive stale importers wmill generate-metadata --folder u/shared
Defensive patterns
Strategy: validation
Validate before calling
// before using --strict-folder-boundaries, find cross-folder importers
import fg from 'fast-glob';
const outside = (await fg(['**/*.script.ts', '**/*.flow.yaml'], { ignore: [`'${folder}'/**`] }))
.filter(f => readFileSync(f, 'utf8').includes(folder));
if (outside.length) console.warn('outside-folder importers:', outside); // run without the flag or per folder Type guard
null
Try / catch
null
Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Invalid language: ${language}
- Skipping ${label}: ${err instanceof Error ? err.message : er
- Runnable ${runnableId} content is still an !inline reference
- This command is deprecated. Use "wmill generate-metadata" in
- No metadata generated yet for ${filePath}. Run 'wmill genera
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/9a28a9441a3811b1.
Report an issue: GitHub.