Repository navigation
feat(manifest): version pinning, piece 1 — pins only (see Consiliency/pmcp#294) - #319
Merged
Merged
Conversation
Implements the plan merged in #317 (.consiliency/plans/detailed-294-pin-core-20260929-0822.md): the embedded patch and test file, applied as-is and cmp-identical to the verified spike. A manifest entry's `version:` or an overlay's `server_version:` holds an npx-launched server at one exact version. load_manifest writes it into the package slot of args and every platform's install argv, keeping the package name, all or nothing. It refuses, leaving the entry unchanged, a value that is not one exact version, a slot that is not a plain same-name registry spec, a launcher that is not bare npx, and an entry env that could redirect npm. Refusal warnings are fixed text and name a server only if pmcp ships it. update_server keeps main's reporting and adds pinned_version for a materialised pin; `pmcp update` prints [PINNED]. Adds the README section and CHANGELOG entry the plan specifies, plus one README sentence that an install argv's launcher is judged by the host's rule whatever its platform key. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RiabTgWZRfuqiUQ9siEegF
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.
Summary
This implements piece 1 of the additive split of #294: version pins only.
The plan merged in #317:
.consiliency/plans/detailed-294-pin-core-20260929-0822.md.Its embedded patch and test file were extracted with the plan's own rule and applied as-is.
They are
cmp-identical to the spike the plan's numbers were measured on.A manifest entry's
version:, or an overlay'sserver_version: {<server>: <version>}, holds annpx-launched MCP client at one exact version:
What it guarantees
argsand every platform'sinstallargv, all or nothing, with the package name kept. The provision gate's_config_runs_exactly(entry, "firecrawl-mcp@3.25.5")is true.is_valid_package_version(no ranges,dist-tags, build metadata or specs);
npx(npx.cmd/npx.exeare allowed on Windows only);keys, and npm logging/timing keys are allowed.
a package or an exception message, and they name a server only if pmcp's shipped manifest
defines it.
gateway.update_serverkeeps main's reporting. It addspinned_versiononly for a pinthat pmcp materialised, when the config runs exactly that argv, with no cwd and no env that
could redirect npm.
pmcp updateprints[PINNED] <server>: pinned at <version>. Every other line ismain's.
.npmrc, npm cache and inherited workingdirectory are trusted.
What is piece 2 (not here)
#295 remains piece 2's reference. Piece 2 covers:
The plan's Non-goals list the 21 board-round finding classes that piece 2 must address.
Docs
for the round-3 claude seat's N2: an install argv's launcher is judged by the rules of the
host pmcp runs on, whatever its platform key.
npx.bat/npx.ps1stay refused) needs no change.Gates (read from the logs of this branch at
c470ff7, origin/main4c5a961)Recorded in the plan (measured on the identical tree):
1,617,455 slots and 41,472 pin values;
🤖 Generated with Claude Code
https://claude.ai/code/session_01RiabTgWZRfuqiUQ9siEegF
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.