Skip to content

D-164: one coordinate, one PURL — the maven identity seam for the asserted tier - #134

Merged
MoSLoF merged 1 commit into
mainfrom
claude/assess-outstanding-branches-yc5chi
Aug 28, 2026
Merged

D-164: one coordinate, one PURL — the maven identity seam for the asserted tier#134
MoSLoF merged 1 commit into
mainfrom
claude/assess-outstanding-branches-yc5chi

Conversation

@MoSLoF

@MoSLoF MoSLoF commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

What

Fixes the Maven purl-separator inconsistency the elastic-agent validation flagged at the asserted tier's merge fallback — a defect left open from D-162/D-163, verified against the source before writing the fix:

  • With no Declarer seam for maven, mergeResolved's fallback names a deps.dev-asserted child pkg:maven/org.postgresql:postgresql@42.7.4 (colon kept in the name) while the adapter's observed node is pkg:maven/org.postgresql/postgresql@42.7.4 (namespace form). Two IDs for one package: observed-beats-asserted dedupe can't match, the same direct dependency re-enters as a colon-form twin, and advisories/registry data split across the pair — the D-15 identity leak, one tier up, exactly what the Identify contract doc says the seam exists to prevent.
  • Compounding it: the walk skips ecosystems without a declarer as expansion candidates, so D-162's "-expand can deepen Clojure trees" held only through the asserted tier — whose merged children then carried the malformed IDs.

Fix

clojure.WalkSource — an identity-only Declarer for ecosystem maven:

  • Identify splits group:artifact into the adapter's own purl.NewMaven namespace form (bare name → group==artifact, the Leiningen convention).
  • Declared is honest-empty: reading a Maven package's declared dependencies means fetching and interpreting poms (parents, properties, dependencyManagement) — the pom.xml problem, its own decision. The walk's contract counts an absent coordinate as not read, which is the true state — disclosed, never presumed. Real transitive resolution stays with the asserted (deps.dev) tier, whose children this seam now names correctly.
  • Registered in the -expand source list.

Validation

  • Identify pinned against the adapter's emitted node for the same manifest — one coordinate, one PURL, whichever tier names it first.
  • An asserted-merge test through the real Walker with a deps.dev-shaped stub: the queried dep dedupes against the observed node, the asserted child lands at the namespace-form PURL with asserted truth, and no colon-form ID exists.
  • The mutation half is permanently encoded: the same scenario run without the seam reproduces the split (with a skip-and-revisit note should the engine's raw fallback ever learn purl grammar).
  • Full suite green (35 packages), -race clean, gofmt/vet silent. D-164 entry in docs/DECISIONS.md.

Residuals

The registration is one literal inside the inline -expand source construction — no cheap seam to pin it from a test without a refactor this bug fix shouldn't smuggle in; coverage is the encoded contrast. Declared stays empty until pom reading is its own decision. The engine's raw fallback still writes pkg:eco/name@version for any future ecosystem that gains asserted resolution before its identity seam — this seam is the pattern to copy.


🤖 Generated with Claude Code


Generated by Claude Code

…erted tier

The elastic-agent validation flagged a Maven purl-separator inconsistency
in the asserted tier's merge fallback; verified real: with no Declarer for
"maven", mergeResolved names deps.dev-asserted children
pkg:maven/group:artifact@v (colon kept) while the adapter's observed nodes
carry pkg:maven/group/artifact@v — two IDs for one package, so
observed-beats-asserted dedupe fails and the same dependency re-enters as
a colon-form twin with advisories split across the pair (the D-15 leak,
one tier up). The walk also skipped maven nodes as expansion candidates
entirely.

Fix: clojure.WalkSource, an identity-only Declarer for ecosystem "maven" —
Identify splits group:artifact into the adapter's purl.NewMaven namespace
form (bare name: group == artifact, the Leiningen convention); Declared is
honest-empty (reading Maven declarations means pom interpretation, its own
decision), which the walk's contract counts as unread — disclosed, never
presumed. Registered in the -expand source list.

Validation: Identify pinned against the adapter's emitted node for the
same manifest; an asserted-merge test through the real Walker and a
deps.dev-shaped stub (queried dep dedupes against the observed node,
child lands at the namespace-form PURL with asserted truth, no colon-form
ID exists); the mutation half permanently encoded — the same scenario
without the seam reproduces the split. Full suite green (35 packages),
-race clean. D-164 entry appended to docs/DECISIONS.md.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018d8nb38Prtn8dzwep6jaH9
@MoSLoF
MoSLoF merged commit 6232a65 into main Aug 28, 2026
11 checks passed
@MoSLoF
MoSLoF deleted the claude/assess-outstanding-branches-yc5chi branch August 30, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants