chore(mcp): publish postern-mcp v1.4.1 (fixes advertised serverInfo version) - #581
Conversation
…ersion) @skyphusion/postern-mcp@1.4.0 on npm advertises the WRONG version: unpacking the published tarball shows package/dist/index.js hardcodes `version: "1.2.0"` while package/package.json in the same tarball reads 1.4.0. Every agent connecting to this server reads 1.2.0. The fix (#573, mcp/src/version.ts single-sourcing VERSION plus a drift-guard test) merged to main but was never published -- npm is immutable, so 1.4.0 cannot be corrected in place and has to ship as a new version. Bumps mcp/package.json and mcp/src/version.ts to 1.4.1 together (verified via a negative control that the guard test in mcp/test/version.test.ts actually catches a one-sided bump; see PR body). mcp/package-lock.json synced via `npm install --package-lock-only`, no dependency changes. No CHANGELOG section: this repo's CHANGELOG.md states postern-mcp-v* tags "get no section here" (npm is that train's ledger). Does not touch inbound/, clients/python/, or any v*-train pin -- MCP track only. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adversarial security auditGenerated 2026-08-07T23:18:00.306Z · Diff contains only version bumps; no authz, injection, SSRF, secret, or tenant leak issues were introduced by this change set.
|
Mackaye (skyphusion-mackaye)
left a comment
There was a problem hiding this comment.
Approving. Verified independently rather than from the report.
Scope is exactly right: three files, nothing else. I diffed every package entry in mcp/package-lock.json against main -- only the root version field moved, no dependency added, removed, or bumped. No CHANGELOG section, correctly, per that file's own rule that postern-mcp-v* tags get none. No inbound/, clients/python/, or v*-train pin touched.
Both halves of the drift pair move together: mcp/package.json and mcp/src/version.ts are both 1.4.1, which is what the shared tag preflight gates postern-mcp-v* against.
The negative control is the reason this is approvable. Reverting only version.ts to 1.4.0 while leaving package.json at 1.4.1 -- the exact one-sided shape the guard exists to catch -- turned the test red with expected '1.4.0' to be '1.4.1', then restored clean. That guard had never been watched fail before tonight. It has now.
What this actually fixes, and why the guard alone would not have been enough: @skyphusion/postern-mcp@1.4.0 is published to npm advertising version: "1.2.0" in its dist/index.js while package.json in the same tarball reads 1.4.0. Every agent that has ever connected reads 1.2.0. #573 fixed the source and was never published; npm is immutable so 1.4.0 cannot be corrected in place. This is the publish.
The judgment call I want on the record: the author declined to run the acceptance test and said so, because nothing is published yet to unpack. That is correct and it is the whole point of this task. The 1.2.0 drift survived three separate published tags precisely because a green publish job was accepted as evidence of what the artifact contains. A green PR gate is not artifact verification, and refusing to blur the two is the behaviour that makes the fix real rather than ceremonial.
Acceptance remains outstanding until the tag publishes and npm pack @skyphusion/postern-mcp@1.4.1 unpacks to show 1.4.1 in dist/index.js. I will run that against the published tarball, not the workflow.
Why
@skyphusion/postern-mcp@1.4.0on npm advertises the wrong version.Unpacked the published tarball to confirm:
package/dist/index.jshardcodesname: "postern-mcp", version: "1.2.0"whilepackage/package.jsonin thesame tarball reads
1.4.0. Every agent connecting to this server reads1.2.0. The fix landed in #573 (mcp/src/version.tssingle-sourcingVERSION, guarded bymcp/test/version.test.tsagainstpackage.jsondrift) but was merged, never published. npm is immutable:
1.4.0cannot becorrected in place, so the fix has to ship as a new version.
What changed (MCP track only)
mcp/package.jsonversion->1.4.1mcp/src/version.tsVERSION->1.4.1mcp/package-lock.jsonrootversionfields synced vianpm install --package-lock-only(no dependency changes -- diffed, onlythe two
versionlines moved)No CHANGELOG section:
CHANGELOG.md's own header statespostern-mcp-v*tags "get no section here" (npm is that train's ledger). Did not touch
inbound/,clients/python/, or anyv*-train pin.Gate
Repo-wide em-dash/en-dash scan (
git ls-files -z | xargs -0 grep -lP '[\x{2013}\x{2014}]'): zero files matched.Negative control (required -- the guard test has to actually catch a one-sided bump)
Temporarily reverted ONLY
mcp/src/version.tsback to"1.4.0", leavingmcp/package.jsonat1.4.1(the one-sided-drift shape the guard exists tocatch), reran the guard test:
Restored
version.tsto1.4.1, reran: 2/2 green, full suite back to85/85. The guard test does observe the exact drift it exists to prevent.
Acceptance (per your instructions, not mine to verify here)
You're cutting the tag, not me. Once
postern-mcp-v1.4.1publishes, theacceptance test is unpacking the published tarball:
expected to print
1.4.1. I have not run this (nothing to unpack until thetag publishes) and will not claim it passed.
Status
Head SHA: a0f4154
Not merged, no tag cut, per your instruction. Nothing else in flight.