D-163: Maven Central release history — the temporal axis reaches maven nodes - #133
Merged
Merged
Conversation
…n nodes D-162 gave maven-coordinate nodes advisory coverage while registry metadata stayed dark: no release timeline, so VC-004 and the temporal axis never evaluated for the dependency class that motivated the adapter. This adds a RegistrySource for ecosystem "maven" via the existing Spec framework: Maven Central's solrsearch gav core, one page of 200 versions newest-first, epoch-milli timestamps decoded to UTC. - Clojars is deliberately absent: its API serves no per-version publish timestamps, and a zero-time Release would read as a 55-year dormancy awakening on every package — a fabricated timeline is worse than a disclosed absence. Clojars-hosted artifacts 404 on Central and count as NotFound: disclosed coverage. - Central is immutable, so Yanked stays false as a registry fact and the VC-012 yank-lure shape is structurally impossible from this source (pinned); no per-version publishers exist, so VC-011 declines to evaluate rather than claim continuity (pinned). Validation: two-sided parser tests (zero/negative timestamps and duplicate docs drop; malformed JSON errors); the request URL pinned fragment-by- fragment through the shared client with a fake doer (search.maven.org is egress-blocked in this environment); 404 pinned as NotFound-not-failure; a registration pin covering every emitting ecosystem's release-history source (fails on unwiring, mutation-checked); a consumer-side pin that a maven history fires VC-004 identically to npm. Live-fired: the built binary issued the exact expected solrsearch query per jepsen dependency and disclosed "degraded data source(s): maven-central-registry ... NOT an all-clear" under denied egress. Full suite green (35 packages), -race clean. D-163 entry appended to docs/DECISIONS.md. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018d8nb38Prtn8dzwep6jaH9
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.
What
Closes D-162's residual: maven-coordinate nodes had advisory coverage (VC-008) but no release timeline, so VC-004 dormancy and the temporal axis silently never evaluated for the dependency class that motivated the Clojure adapter. This adds
registry.NewMaven— aRegistrySourcefor ecosystemmaventhrough the existing Spec framework (shared cache/concurrency/stats machinery unchanged).Source: Maven Central's solrsearch gav core —
q=g:"group" AND a:"artifact", one page of 200 versions newest-first, epoch-millitimestampdecoded to UTC. Names arrive as thegroup:artifactform maven nodes already carry (bare name → group==artifact, the Leiningen convention).Why no Clojars (a data-honesty constraint, not effort)
Clojars' artifact API serves no per-version publish timestamps, and a
Releasewith a zero time poisons every temporal computation downstream — a "dormancy gap" measured from the Unix epoch reads as a 55-year awakening on every package. A fabricated timeline is strictly worse than a disclosed absence, so a Clojars-hosted artifact (jepsen'scom.taoensso/carmine) 404s on Central and counts as NotFound in stats: disclosed coverage, like any other registry miss. Reaching Clojars honestly needs per-version pom probing or an upstream API with dates — its own decision, named in the entry.Registry semantics, stated not assumed
Yankedstays false as a registry fact; the VC-012 yank-lure shape is structurally impossible from this source (pinned in test).Publishersempty; VC-011's honesty predicate declines to evaluate rather than claim continuity (pinned).ReleaseHistoryconsumers.Validation
search.maven.orgis egress-blocked in this environment — same posture as D-162's OSV mapping); 404 pinned as NotFound-not-failure.TestRegistrySourcesCoverEmittedEcosystems): fails if any emitting ecosystem loses its release-history source — mutation-checked by unwiringNewMaven.TestDormancyFiresOnMavenHistory): a maven history fires VC-004 identically to npm, guarding the check layer's ecosystem neutrality.degraded data source(s): maven-central-registry … NOT an all-clear.-raceclean, gofmt/vet silent. D-163 entry indocs/DECISIONS.md.Residuals
One page of 200 versions bounds the old end of a very long history (recent history — what the temporal checks read — stays intact); pagination is the named follow-up. Clojars as above. First scan from a network reaching both
api.osv.devandsearch.maven.orgremains the outstanding live confirmation for the D-162/D-163 chain.🤖 Generated with Claude Code
Generated by Claude Code