Skip to content

feat: promote maven and nuget to fully available — retire the SOCKET_EXPERIMENTAL_* gates - #170

Merged
Mikola Lysenko (mikolalysenko) merged 3 commits into
mainfrom
feat/maven-nuget-ga
Aug 13, 2026
Merged

feat: promote maven and nuget to fully available — retire the SOCKET_EXPERIMENTAL_* gates#170
Mikola Lysenko (mikolalysenko) merged 3 commits into
mainfrom
feat/maven-nuget-ga

Conversation

@mikolalysenko

@mikolalysenko Mikola Lysenko (mikolalysenko) commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

Maven and NuGet were the last two ecosystems behind runtime opt-ins: the SOCKET_EXPERIMENTAL_MAVEN / SOCKET_EXPERIMENTAL_NUGET env gates silently dropped them from discovery in every flow — scan (all modes), apply, get, rollback, vendor, repair, vex, setup. This PR retires the gates entirely: both ecosystems now crawl and patch unconditionally, like everything else. Setting the old env vars is harmless but does nothing.

Product changes

  • ecosystem_dispatch.rs: the gates, the "N patch(es) skipped — support is experimental" warnings, and env_truthy are deleted. Maven/NuGet become plain scan_ecosystem! / crawl! branches. crawl_covers_purl now only exempts pkg:<type>/s this build has no crawler for (the newer-CLI-in-a-committed-manifest case).
  • Prune GC: scan --prune/--sync now judges maven/nuget manifest entries like any other ecosystem's. While the gate was closed they were exempt from pruning; with the crawl always on, "absent from the scan" genuinely means uninstalled.

Behavior notes

  • A default scan now walks the local Maven repository (~/.m2 / MAVEN_REPO_LOCAL) and the NuGet caches.
  • The in-place sidecar caveat is unchanged and now documented per mode in docs/ecosystems.md: agent-mode patching leaves Maven's .jar.sha1/.jar.md5 stale, and NuGet's post-apply fixup deletes .nupkg.metadata + raises an advisory for the signed-package .nupkg.sha512 marker. The vendored/hosted modes never touch the caches.
  • Follow-up worth considering: Maven has no entry in patch/sidecars/ (not even advisory-only, unlike pypi/gem/go) — with in-place maven apply now ungated, an advisory-only maven fixup would give downstream tooling the same structured signal nuget emits.

Tests

  • The four #[ignore = "experimental ecosystem"] dispatch e2e tests (dispatch_branch_{maven,nuget}, rollback_dispatch_branch_{maven,nuget}) are un-ignored — they now gate CI and pass.
  • Every SOCKET_EXPERIMENTAL_* export/set is stripped from the suites: docker capstones, the setup-matrix driver (run-case.sh), and the rollback / remote-apply / safety-advisory / dispatch fixtures.
  • New pins:
    • crawl_all_includes_every_ecosystem_unconditionally — a resurrected runtime gate turns this red.
    • find_packages_resolves_maven_without_any_opt_in — the PURL-lookup path resolves a local-repo maven artifact with no env.
    • detect_prunable_judges_maven_and_nuget_like_any_ecosystem — replaces the old gate-exemption GC test.
    • scan_discovers_maven_and_nuget_in_every_mode (in-process) — default, --mode hosted, and --mode vendored scans all POST the maven/nuget purls to the batch endpoint with no opt-in.

Docs

README, docs/ecosystems.md (matrix rows now unconditional with the sidecar caveat; the "discovery gate" blockquote replaced), CLI_CONTRACT.md env-table rows removed, both crates' Cargo.toml comments, and a CHANGELOG entry (two older [Unreleased] passages amended so the section doesn't contradict itself at release time).

Verification

  • Full workspace test suite: green. Clippy: clean.
  • All four maven/nuget docker capstones pass against freshly built images (the suites bake the binary at image-build time, so stale local images still carry the gated binary — rebuild Dockerfile.base before running them locally):
    • maven_install_full_apply_chain, nuget_{local,global}_install_full_apply_chain — agent-mode scan→apply→vex chains, now with no -e SOCKET_EXPERIMENTAL_* in the container env.
    • maven_vendor_fresh_checkout_install_and_revert, nuget_vendor_fresh_checkout_install_and_revert — vendor capstones with the exports removed from the stage scripts.

🤖 Generated with Claude Code


Note

Medium Risk
Behavior change for operators who relied on gates to skip maven/nuget crawls and prune exemptions; in-place agent apply for those ecosystems still leaves cache checksum sidecars stale, now reachable without opt-in.

Overview
Maven and NuGet are always discovered and patched — the SOCKET_EXPERIMENTAL_MAVEN / SOCKET_EXPERIMENTAL_NUGET runtime gates are removed from ecosystem_dispatch.rs (including experimental skip warnings and env_truthy). scan, apply, get, rollback, vendor, repair, vex, and setup now crawl ~/.m2 / MAVEN_REPO_LOCAL and NuGet caches like other ecosystems; setting the old env vars has no effect.

Prune/sync behavior changes: crawl_covers_purl no longer exempts maven/nuget when gates were off, so scan --prune / --sync can drop manifest entries for maven/nuget packages absent from the crawl.

Tests and docs: Four maven/nuget dispatch e2e tests are un-#[ignore] for CI; docker/setup-matrix and other suites drop experimental env exports. New regression tests pin unconditional crawl, maven lookup without opt-in, prune GC for maven/nuget, and batch discovery in default/hosted/vendored scan modes. README, docs/ecosystems.md, CLI_CONTRACT.md, and CHANGELOG reflect full availability and document unchanged in-place cache sidecar caveats (vendored/hosted still avoid touching caches).

Reviewed by Cursor Bugbot for commit 38a389b. Configure here.

…EXPERIMENTAL_* gates

Maven and NuGet were the last two ecosystems behind runtime opt-ins:
the SOCKET_EXPERIMENTAL_MAVEN / SOCKET_EXPERIMENTAL_NUGET env gates
silently dropped them from discovery in every flow (scan in all modes,
apply, get, rollback, vendor, repair, vex, setup). The gates are gone;
both ecosystems now crawl and patch unconditionally, like everything
else.

Product:
- ecosystem_dispatch: delete the gates, the "N patch(es) skipped —
  support is experimental" warnings, and env_truthy; maven/nuget become
  plain scan_ecosystem!/crawl! branches; crawl_covers_purl now only
  exempts ecosystems this build has no crawler for.
- scan --prune/--sync now judges maven/nuget manifest entries like any
  other ecosystem's (they were exempt from pruning while the gate was
  closed).

Tests:
- Un-ignore the four "experimental ecosystem" dispatch e2e tests
  (dispatch_branch_{maven,nuget}, rollback_dispatch_branch_{maven,nuget})
  — they now gate CI and pass.
- Strip every SOCKET_EXPERIMENTAL_* export/set from the suites (docker
  capstones, setup-matrix driver, rollback / remote-apply / advisory /
  dispatch fixtures).
- New pins: crawl_all_includes_every_ecosystem_unconditionally,
  find_packages_resolves_maven_without_any_opt_in,
  detect_prunable_judges_maven_and_nuget_like_any_ecosystem, and an
  in-process scan test proving default + hosted + vendored scans all
  POST the maven/nuget purls with no opt-in.

Docs: README, docs/ecosystems.md (matrix rows now unconditional, with
an honest in-place sidecar caveat: maven .jar.sha1/.md5 left stale;
nuget fixup deletes .nupkg.metadata and advises on .nupkg.sha512),
CLI_CONTRACT env-var rows removed, both Cargo.toml comments, CHANGELOG
entry (+ two older Unreleased passages amended to match).

Verified: full workspace suite green, clippy clean, and the four
maven/nuget docker capstones (agent apply chains + vendor fresh-checkout
/ revert) pass against freshly built images.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y layout

The fixture laid the package out as packages/Foo/1.0.0/, which is
neither the legacy packages.config layout (packages/Foo.1.0.0/, dotted,
case-preserved) nor the global-cache layout (both segments lowercased).
The crawler's lowercase global-cache probe only matched it on
case-insensitive filesystems — green on macOS/Windows, red on Linux CI,
which is exactly why this test sat behind #[ignore] before the
promotion. Write the dotted legacy dir the exact-case probe matches on
every filesystem.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mikolalysenko
Mikola Lysenko (mikolalysenko) merged commit 123135c into main Aug 13, 2026
42 checks passed
@mikolalysenko
Mikola Lysenko (mikolalysenko) deleted the feat/maven-nuget-ga branch August 13, 2026 21:22
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