Repository navigation
fix(manifest): report the Maven POMs that Maven only warns about - #1646
Merged
Jeppe Fredsgaard Blaabjerg (jfblaa) merged 6 commits intoOct 23, 2026
Conversation
Jeppe Fredsgaard Blaabjerg (jfblaa)
added this pull request to stack #1651
October 23, 2026 12:11
Jeppe Fredsgaard Blaabjerg (jfblaa)
removed this pull request from stack #1651
October 23, 2026 12:11
Jeppe Fredsgaard Blaabjerg (jfblaa)
added this pull request to stack #1652
October 23, 2026 12:12
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
Bugbot Autofix is ON, but none of the reported issues met your autofix severity threshold.
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 506d191. Configure here.
Jeppe Fredsgaard Blaabjerg (jfblaa)
force-pushed
the
jfblaa/maven-facts-tolerated-poms
branch
from
October 23, 2026 12:43
53cb658 to
cb4b585
Compare
Martin Torp (mtorp)
approved these changes
Oct 23, 2026
Martin Torp (mtorp)
left a comment
Contributor
There was a problem hiding this comment.
[agent] Approving, with three inline notes on scope placement.
Separately, this PR makes jar-only artifacts, POMs Maven tolerates as invalid, and system dependencies with a missing systemPath (like jdk.tools on JDK 9+) block the scan, even though the build itself passes. I left a note on #1647 about that policy for the whole stack.
Maven's default descriptor policy tolerates a missing or invalid POM: the node stays, its dependencies are lost, and no collection error is raised. The resolver also caches a failed POM build-wide, so only the first module to reach it saw the failure. The facts extension now observes the repository events of collection to report both in every module that uses them, places a failure absent from the graph in the scope Maven would have given it, and materializes system-scope jars.
…cached POM failure Replaying another module's cached POM failure matched any version-range declaration of the same artifact, so a module whose range resolved to a healthy version inherited the failure. A direct dependency never loses a conflict, so one still among the graph's direct children resolved.
…its parent The collector reuses a parent's children for every later instance of its artifact, so a failing collect step ran only under the first instance; when that instance lost a conflict, the failure was dropped. Any classpath instance of the parent now places it. A scope the module manages is kept as Maven's conflict resolver keeps it, not derived. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… parent's children An instance of the parent with its own exclusions gets its own child list, so matching the parent by coordinate placed a failure that Maven excludes from the classpath instance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he keys on Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jeppe Fredsgaard Blaabjerg (jfblaa)
force-pushed
the
jfblaa/maven-facts-tolerated-poms
branch
from
October 23, 2026 17:09
cb4b585 to
31fb09c
Compare
Jeppe Fredsgaard Blaabjerg (jfblaa)
merged commit Oct 23, 2026
18ed2ae
into
v1.x
12 of 14 checks passed
Jeppe Fredsgaard Blaabjerg (jfblaa)
deleted the
jfblaa/maven-facts-tolerated-poms
branch
October 23, 2026 17:24
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
Maven's default descriptor policy tolerates a missing or invalid POM: the node stays, its dependencies are lost, and no collection error is raised. The resolver also caches a failed POM build-wide, so only the first module to reach it saw the failure.
CoanaFactsEventSpy→CollectionObserver) so both cases are reported in every module that uses the POM.excludeConfigsand version-conflict losers no longer over-block.system-scope jars get their files.Testing: new
descriptor-failurecompat suite,graph-failureexpectations updated for scope placement; both pass on Maven 3.2.5–4.0.0-rc-6. New classification unit tests.🤖 Generated with Claude Code
Note
Medium Risk
Changes how Maven dependency failures are detected, scoped, and emitted into Socket facts, which directly affects whether scans block, what reaches reachability analysis, and multi-module reporting accuracy across Maven 3.2–4.x.
Overview
Maven Socket facts collection now surfaces dependency problems Maven’s resolver often only warns about or caches silently, so manifest and reachability runs get accurate failure records instead of incomplete graphs.
A new
CoanaFactsEventSpy/CollectionObserverpath listens to Aether repository events during collection and feedsSocketFactsRecordsEngine, which reports missing or invalid POMs in every reactor module that uses them (including when a prior module already cached the failure). Failures absent from the graph are attributed to the right scope (with Maven 3.9+ collect-step tracing where available), soexcludeConfigsand version-conflict losers no longer block unrelated scopes.system-scope artifacts are included in file materialization again.CLI resolution reporting gains Maven-specific classification (HTTP blocker, offline mode, tolerated invalid POMs, repository prefix filters), plus a
descriptor-failurecompat smoke test and updatedgraph-failureexpectations.Reviewed by Cursor Bugbot for commit 506d191. Configure here.