chore: pin every third-party version a preset installs - #59
Merged
Conversation
opencode resolves a plugin spec once and caches it keyed on the full spec string, then never re-checks. An unpinned ref therefore is not "tracks latest" — it freezes at whatever resolved on first run, differs per user, and cannot be named. Changing the spec string is the only thing that triggers a re-fetch, which makes an explicit pin the only working update path. - plugin-superpowers: pin the git spec to #v6.2.0 - plugin-litellm-pricing: 0.1.1 -> 0.2.0, picking up the startup-stall and localhost-probe fixes the shipped @description already described - mcp-playwright: @latest -> 0.0.78. npx re-resolves on every server start, so this one really did pull new upstream code continuously - jdtls-lombok: pin lombok 1.18.46 and verify it by sha256. The dest filename is versioned too: fetchAsset returns an existing dest untouched, so reusing the name would make a future bump a silent no-op Hash cross-checked against Maven Central (byte-identical jar, matching published sha1). Also bumps the transitive fast-uri to 3.1.4, clearing four high-severity advisories, and records the pinning rule in AGENTS.md so this is caught next time.
Merged
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.
Why
opencode resolves a plugin spec once and caches it keyed on the full spec string, then never re-checks:
So an unpinned ref is not "tracks latest" — it freezes at whatever resolved on first run, differs per user depending on install date, and can't be named without grepping the cache. Changing the spec string is the only thing that triggers a re-fetch, which makes an explicit pin the only working update path.
@fetchbehaved the same way:src/fetch-asset.tsreturns a cached file untouched when nosha256=is declared.Changes
plugin-superpowers#v6.2.0plugin-litellm-pricing@0.1.1@0.2.0mcp-playwright@latest@0.0.78jdtls-lomboklombok.jar, no checksumlombok-1.18.46.jar+sha256=Notes:
plugin-litellm-pricingwas two releases behind. 0.1.2 fixed a 20-second startup stall; 0.2.0 stopped probing localhost. Commit 00df0c4 had already rewritten this preset's@descriptionfor post-0.2.0 behaviour while the pin still shipped 0.1.1.mcp-playwrightwas the only genuinely floating one —npxre-resolves@lateston every MCP server start, so it pulled new unreviewed code into a browser-driving server continuously.jdtls-lombokversions the dest filename as well as the URL.fetchAssetreturns an existing dest untouched, so reusinglombok.jarwould make a future bump a silent no-op. Hash cross-checked against Maven Central: byte-identical jar, matching published sha1, manifest readsLombok-Version: 1.18.46.Also: transitive
fast-uri3.1.0 → 3.1.4, clearing four high-severity advisories (path traversal, host confusion ×3);AGENTS.mdgains the pinning rule that would have caught this, and its stale "one runtime dep" line is corrected.Verification
-javaagentpath tracks the versioned dest;validatepassespreserve 1, no backup writtenremoveprunes back to bare$schemasha256=is actually enforced rather than merely declaredOut of scope: migrating users who already installed these presets. This changes what new installs resolve to.