The scheduled dependency update in the Settlers application failed before it could open its non-major update PR: run 40450092261.
Package discovery follows storage/framework/defaults, a generated directory link into the installed node_modules/@stacksjs/defaults package. It then proposes an update to storage/framework/defaults/package.json, which is not an owned repository file. The Git writer correctly refuses to create that missing update target after refreshing the branch. Its safety check must remain intact.
A public PackageScanner.scanProject() regression with a real filesystem reproduces the problem: an owned root manifest, an owned workspace manifest and an installed framework directory link produce three manifests instead of the two owned ones. Separate real-file cases reproduce linked manifest admission in adapter discovery and workspace-catalog discovery.
Source owner: Buddy package, adapter and catalog discovery. Application ignore rules are not the correction, because the link can have any name and must not become a writable update target.
Acceptance:
- Preserve the public scanner, adapter and catalog red regressions with real directory/file links and no filesystem mocks.
- Exclude symbolic-link manifests and aliased directories from discovery, including
.githuband workflow directory components. Avoid recursive cycles and dangling-link disruption. - Keep real workspace, vendored/defaults, catalog and workflow manifests discoverable. Do not weaken missing-target or write-boundary checks.
- Run focused and complete tests, lint, types, documentation claims and build checks.
- Publish through the existing patch-release command, verify the released package and release gates, run installed-package checks against real Stacks/application checkouts and rerun the affected application workflow successfully.
This changes source discovery ownership. It grants no new token permissions and does not change dependency version policy or auto-merge rules.