fix(manifest): never suppress an escaping subprojectDir's own facts generation - #1485
Open
Jeppe Fredsgaard Blaabjerg (jfblaa) wants to merge 2 commits into
Conversation
…eneration A subprojectDir that escapes its declaring reactor's own directory (e.g. Maven's <module>../shared-lib</module>, or a Gradle projectDir relocation) was previously marked covered like any nested member, so whether it got its own independent facts generation depended purely on alphabetical discovery order relative to the reactor(s) that reference it. Such a path is independently locatable and potentially resolved differently on its own (e.g. a dependency version override the referencing reactor applies but a standalone build of the same directory would not), so it's a distinct, meaningful data point, not a redundant one. Only a genuine descendant of the reactor's own directory is now treated as covered.
… wizard's coverage tracker markWorkspaceCoverage (the interactive `socket manifest setup --dynamic-sbom-inference` wizard's own reactor-coverage tracker) had the identical bug as generateRecursiveManifests: a subprojectDir escaping its declaring candidate's own directory was marked covered unconditionally, so an escaping sibling could be silently skipped rather than offered its own socket.json entry, depending on discovery order. Same fix: only mark a subprojectDir covered when it's a genuine descendant of the candidate directory that declared it.
Jeppe Fredsgaard Blaabjerg (jfblaa)
requested a review
from Martin Torp (mtorp)
August 6, 2026 11:02
Martin Torp (mtorp)
approved these changes
Aug 6, 2026
Jeppe Fredsgaard Blaabjerg (jfblaa)
enabled auto-merge (squash)
August 6, 2026 11:25
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
generate-recursive-manifests.mts) and the interactivesocket manifest setup --dynamic-sbom-inferencewizard's own coverage tracker (setup-recursive-manifest-config.mts'smarkWorkspaceCoverage) both track per-ecosystem coverage from each root's ownprojects[].subprojectDir, to avoid re-invoking the build tool (or re-prompting) for a nested reactor member already discovered.<module>../shared-lib</module>, or a GradleprojectDirrelocation onto a sibling directory) — so whether the escaping directory got its own independent treatment depended purely on alphabetical discovery order relative to the reactor(s) referencing it.subprojectDiras covered when it's a genuine descendant of the declaring reactor's/candidate's own directory. An escaping subprojectDir is never suppressed, regardless of discovery order.Linear: REA-706 (related: REA-705)
Test plan
generate-recursive-manifests.test.mts:it.eachtest covering both alphabetical orderings (a sibling directory sorting before and after the reactor that references it) — proves the fix is order-independent, and fails without it.setup-recursive-manifest-config.test.mts: equivalent test formarkWorkspaceCoverage, also fails without the fix.pnpm test:unitacrosssrc/commands/manifest— 199/199 passpnpm run check:tsccleanpnpm run lintclean