Repository navigation
feat(manifest): name failing JVM dependencies and remedies the command accepts - #1638
Merged
Jeppe Fredsgaard Blaabjerg (jfblaa) merged 5 commits intoOct 22, 2026
Merged
Conversation
…d accepts When dependency resolution fails, the report now names the dependency that failed, the subproject and scope that needed it, and only remedies the invoking command actually accepts: - Single-build manifest commands suggest their flags; `socket manifest dynamic-sbom-inference` gains --ignore-unresolved; scan/fix/auto-manifest point at the failing build's own socket.json and its setup wizard. - Maven no longer reports a dependency-graph failure as a `graph` configuration against the module itself: it names the failing dependency and the scope it has in the graph, so excluding that scope clears it. - Unresolved dependencies are reported and left out of the facts for Maven, Gradle and sbt alike. sbt retries leniently instead of excluding modules, so an unresolved dependency no longer empties the whole project. - socket.json `verbose` is honored on the dynamic-sbom-inference path, a build tool that cannot start says why, and scan create/reach warn about build flags they read from socket.json instead.
The sbt launcher runs java from PATH and ignores JAVA_HOME, so every sbt row ran on whatever JDK came first on PATH (and sbt 0.13 failed on a modern one).
Jeppe Fredsgaard Blaabjerg (jfblaa)
requested a review
from Martin Torp (mtorp)
October 22, 2026 10:52
…t warning A build root outside the shell's directory got a socket.json hint that climbed to the filesystem root; it now gets the absolute path. A failed last build root no longer warns that the remaining roots cannot be classified.
Martin Torp (mtorp)
approved these changes
Oct 22, 2026
Martin Torp (mtorp)
left a comment
Contributor
There was a problem hiding this comment.
[agent] Reviewed 4943bad19d37. All 36 focused tests passed, and the live Maven and sbt failure fixtures passed. The two numbered inline comments cover the remaining JSON output and sbt diagnostic-size issues.
With verbose set in socket.json, Maven's log was inherited onto stdout and broke --json output. Streamed build output is a diagnostic, so it now goes to stderr on every path.
Every failure carried the whole batch resolve message, so the records grew quadratically with the number of failed modules. Each failure now keeps only its module's part of the message.
Jeppe Fredsgaard Blaabjerg (jfblaa)
deleted the
jfblaa/dsi-resolution-hints
branch
October 22, 2026 12:07
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.
LLM Description written by Claude Code:claude-opus-5-5
When JVM dependency resolution failed under
--dynamic-sbom-inference, the CLI told users to re-run with flags the command silently ignores, suggested excluding agraphconfiguration that does not exist, and named the user's own module instead of the dependency that broke. This makes the report accurate and the remedies actionable, and makes Maven, Gradle and sbt report failures the same way.Reporting
graphconfiguration). Excluding that scope now clears it.socket manifest <tool>,--ignore-unresolved(new) forsocket manifest dynamic-sbom-inference, and the failing build's ownsocket.jsonplus its setup wizard for scan, fix and auto-manifest.socket scan createandsocket scan reachwarn about--ignore-unresolved,--exclude-configs,--include-configsand--verbose, which they read fromsocket.json.verboseinsocket.jsonis honored on the dynamic-sbom-inference path, and a build tool that cannot start says why (e.g.spawn mvn ENOENT).Facts output
updatenow retries leniently (missingOk) instead of excluding the named modules. Previously, when Coursier named a missing parent POM, the exclusion retry failed too and the whole project was silently emitted empty.Where the tools don't give us more
--with-filesis still reported by Maven but only logged by Gradle; aligning that would add new blocking failures for Gradle users.Testing
maven-compat/smoke-test-graph-failure.sh(scopes, excluded scope, failed nodes not emitted) andsbt-compat/smoke-test-failure.sh(project survives, failures not emitted). Maven matrix 3.2.5 to 4.0.0-rc-6 and sbt 0.13.18 to 1.9.9 pass.run-compat.shnow puts each row's JDK onPATH: the sbt launcher ignoresJAVA_HOME, so sbt rows ran on whatever JDK was first onPATH.socket jsontests (also failing onv1.x) and twosocket fixtests that need network access.Note
Medium Risk
Changes how unresolved JVM dependencies affect facts SBOM output and exit behavior across Maven, Gradle, and sbt; incorrect handling could under-report dependencies in scans, but changes are targeted at error reporting and fail-closed semantics with added tests.
Overview
Improves JVM manifest / dynamic SBOM inference when dependencies fail to resolve: errors name the failing coordinate, subproject, and scope where applicable, and remediation text only suggests options the command you ran actually supports (CLI flags vs each build's
socket.json).CLI behavior
--ignore-unresolvedtosocket manifest dynamic-sbom-inference(overrides per-rootsocket.json).verbosefrom cascadedsocket.jsonand passes build-option hints so resolution errors point at the failing root'ssocket.jsonandsocket manifest setup --dynamic-sbom-inference.socket scan create/socket scan reachwarn when users pass--ignore-unresolved, config filters, or--verbose(those are read fromsocket.jsononly).mvn).Facts pipeline (Maven, Gradle, sbt)
graphfailures and attributes collection errors to the artifact and scopes in the graph.Tests
Reviewed by Cursor Bugbot for commit faa3bcc. Configure here.