Delivery blocker: https://github.com/stacksjs/bun-query-builder/issues/1201. Related relative-only graph repair: #3090. Source-first framework gate: https://github.com/stacksjs/stacks/issues/2958 and application adoption https://github.com/stacksjs/the-settlers-iii-remake/issues/25.
Real public strict-consumer failure exposes a reusable dtsx boundary gap. bun-query-builder@0.3.34 source 6b7d73439f38676ba579f04cf1d65fe5e6d5d176 emits seven actual public type imports from private @/types, @/migrations, @/seeder. A normal isolated installation with empty consumer paths, strict:true and skipLibCheck:false fails with exactly seven TS2307 diagnostics. All89 installed files match the original accepted public tar; no lifecycle trust override or runtime SDK execution was used. Public0.3.35/sourcef1c16d4c0c48ebae2a34efd3289210e9a9423072 still contains the same imports.
The package caller uses the public bun-plugin-dtsx dts plugin with root/src entrypoints from its package directory. Its package tsconfig extends the repository config, whose @/* mapping points into package-local src. dtsx documents this supported contract in docs/MIGRATION.md (Handling Path Aliases) and docs/TROUBLESHOOTING.md (Path Aliases Not Resolving), with tsconfigPath defaulting to ./tsconfig.json. No caller-side rewrite/suppression is an acceptable replacement.
Current owning source at0fcc75dc4d097d3eaacdd4b721d5b79d6f5ad2f9:
- packages/bun-plugin/src/index.ts delegates to @stacksjs/dtsx/generator.
- packages/dtsx/src/generator.ts rewriteRelativeDeclarationSpecifiers only matches relative specifiers.
- packages/dtsx/src/module-graph.ts skips non-relative specifiers during declaration reachability.
- tsconfigPath currently informs isolated-declarations detection; the shared generation path does not resolve local path mappings into portable emitted declaration edges.
Acceptance:
- At the owning shared generator boundary, honor actual effective tsconfig/baseUrl/extends and resolve only aliases to package-local authored sources. Reuse established parser/resolver APIs where available; do not invent an @/ special case or a parallel scanner.
- Include eligible local alias targets in the same declaration reachability graph, and emit portable relative declaration specifiers through the existing output mapping. Cover aliases in import/export/type-import positions and transitive local edges.
- Preserve legitimate public bare names such as @stacksjs/foo, declared external dependencies, builtins, self exports and package imports, even when a monorepo tsconfig maps public names into sibling source. Never emit outside-package private paths or copy other workspaces into a package. An unresolvable configured local alias must produce an actionable owning build error where required, not a false portable artifact.
- Maintain real public plugin/packed strict-consumer regressions with no consumer paths and skipLibCheck:false. Include inherited config/custom tsconfig, package-local transitive alias, sibling-workspace/public-package negatives, unchanged external/builtin/self/package-import specifiers, and unresolved/private-target failure.
- Preserve no-TypeScript-5 generation compatibility. The existing optional checker uses TS5 APIs, but the current TS7 toolchain exposes no compiler API. Resolve API reuse intentionally before adding dependencies; do not silently add a second compiler or host-only import.
- Review both axes, run all owning gates, release the emitter/plugin normally, verify exact source/gates/actual public payloads, then rebuild/release the owning query-builder package and repeat the original strict public consumer before Stacks adoption.
Read-only evidence/proposal is retained under /tmp/bun-query-builder-0.3.34-verification. Implementation is not authorized until the frozen ownership proposal is reviewed. No emitter/package/runtime source edits have been made.