Repository navigation
Description
Version
codebase-memory-mcp v0.9.0
Platform
- OS: Windows 11 Pro
- Version: 10.0.26200
- Architecture: 64-bit (amd64)
- Build: 26100.1.amd64fre.ge_release.240331-1435
Install channel
GitHub release archive / install.ps1
Binary variant
standard
What happened, and what did I expect?
The install.ps1 script fails with the following error:
error: unsafe or incomplete release archive: archive must contain exactly one codebase-memory-mcp.payload.exe
The script validates that the zip contains 5 files:
codebase-memory-mcp.execodebase-memory-mcp.payload.exeLICENSEinstall.ps1THIRD_PARTY_NOTICES.md
However, the actual codebase-memory-mcp-windows-amd64.zip from v0.9.0 only contains 4 files:
codebase-memory-mcp.exeLICENSEinstall.ps1THIRD_PARTY_NOTICES.md
The codebase-memory-mcp.payload.exe file is missing from the release archive.
Reproduction
- Run
install.ps1on Windows - Script downloads
codebase-memory-mcp-windows-amd64.zip - Script validates zip contents
- Fails with
archive must contain exactly one codebase-memory-mcp.payload.exe
Expected behavior
The release archive should contain codebase-memory-mcp.payload.exe as expected by the install script, OR the install script should be updated to match the v0.9.0 archive structure.
Root cause analysis
PR #1139 ("feat: coordinate concurrent CBM sessions") introduced a launcher/payload architecture for Windows. The install.ps1 on main branch expects this new structure, but the v0.9.0 release was published without including codebase-memory-mcp.payload.exe in the archive.
Suggested fix
Either:
- Re-release v0.9.0 with the
payload.exeincluded, OR - Update
install.ps1to handle the v0.9.0 archive structure, OR - Publish v0.9.1 with the complete archive
Confirmations
- I searched existing issues and this is not a duplicate.
- My reproduction uses shareable code (a dummy snippet or a public OSS repository), not proprietary code.
Activity
RithvikReddy0-0 commentedon Jul 23, 2026
The v0.9.0 archive isn't missing a file :
install.ps1onmainmoved ahead of the latest release.install.ps1hardcodes a five-entry bundle contract:and downloads from:
Nothing couples the two. The script tracks
main; the archive tracks the latest published release. Any change to the archive shape onmaintherefore breaks the documented Windows path (irm .../main/install.ps1) until the next release ships. Users running theinstall.ps1bundled inside a release archive get a matched pair and are unaffected, only the raw-from-mainpath breaks, which is the one the README and docs site recommend.Dated evidence that this is recent: the installer transcript in #1180 (filed ~Jul 19) runs
main'sinstall.ps1against the same v0.9.0 archive on Windows amd64 and succeeds :Same script, same release, same platform, no allowlist failure. So the four-file archive was acceptable to
maina few days ago and is not now; the archive itself never changed.One thing worth separating in the error path: checksum verification runs before namespace validation and passes. By the time the allowlist check fails, the script has already proven the archive is the genuine published artifact, a tampered one would have exited at
CHECKSUM MISMATCH. Reporting it asunsafe or incomplete release archiveconflates "tampered" with "older bundle shape," which are opposite diagnoses needing opposite user responses. Worth a distinct, actionable message for the authenticated-but-stale case (still exiting non-zero, nothing relaxed).The mismatch resolves itself once 0.9.1 ships with the launcher/payload archive, so the durable fix is probably a release-archive contract check in CI: extract the published archive, run the validation block from
main'sinstall.ps1against it, fail the release job on divergence. That closes the class rather than this instance.Happy to open a PR for the CI check, the error-path split, or both whichever fits. Is
install.shstructured the same way (latest-release download against a hardcoded manifest)? If so the check should cover both platforms.dyy1991 commentedon Jul 24, 2026
DeusData commentedon Jul 24, 2026
Confirmed. The current
install.ps1consumes the latest release asset while enforcing the newer five-file payload contract, but thev0.9.0Windows archive has the older four-file layout. A passing checksum only proves that the older archive is authentic; it does not make that archive compatible with the newer installer. We should keep the allowlist fail-closed and make the error distinguish authenticated-but-incompatible release layout from tampering. The Unix installer does not use this payload-launcher contract, but release-to-installer compatibility still needs coverage on every platform. High priority for0.9.1-rcunder #394.DeusData commentedon Sep 26, 2026
Thank you, @GaboDot, for the precise file listing, and @RithvikReddy0-0 for spotting that the script and the archive had drifted apart. That diagnosis was exactly right!
We've since removed the Windows launcher/payload split entirely (a54ea95, released in v0.10.0). Windows now ships one binary, like Linux and macOS, and
install.ps1expects exactly the four files the release archive contains. The currentinstall.ps1and the v0.11.0 archive match. Could you confirm thatirm .../install.ps1 | iexinstalls v0.11.0 cleanly? The archive check stays strict on purpose. Clearer wording that tells "genuine but older layout" apart from tampering is a fair follow-up.github-actions commentedon Sep 26, 2026
Thanks for the report! To move this forward we need a bit more so we can reproduce it ourselves:
codebase-memory-mcp --versionyou're onOnce that's here we'll pick it straight back up. Heads-up: issues left
awaiting-reporterare automatically closed after a few weeks of silence, but a comment reopens the door anytime.DeusData commentedon Oct 19, 2026
Thank you again for separating authentic archive contents from an incompatible installer contract. The last update requested installation confirmation after removal of the launcher/payload split. I have no new result for your Windows environment; the strict archive validation is not being relaxed here.
DeusData commentedon Oct 25, 2026
Thank you again for the installer/archive comparison. Could you confirm installation after the launcher split was removed, as requested above? No new archive contents or full reproduction are needed.
RithvikReddy0-0 commentedon Oct 25, 2026
Confirmed: current
maininstall.ps1(at4a1e6d11) installs the latest release (v0.12.1) cleanly on Windows 11 (build 26200), under both Windows PowerShell 5.1.26100 and PowerShell 7.6.7. In both runs the checksum verified, the four-file archive passed the strict layout check, the candidate probe and the post-install--versionboth reportedcodebase-memory-mcp 0.12.1, and the installer exited 0.To keep it off my real profile I ran it with
--skip-configand pointed--dir,LOCALAPPDATA,APPDATA,USERPROFILEandCBM_CACHE_DIRat a throwaway folder, so this exercised the same download, verify and install path asirm | iex, not a default-location install with agent registration.One thing I hit while doing this, separate from this issue:
pwsh -File install.ps1 --dir=C:\some\pathsplits the argument at the colon, so the script receives--dir=C. It then installs into a relativeCfolder and addsCto the user PATH. Windows PowerShell 5.1 passes the argument through intact, and so does calling the script inside a pwsh session (& .\install.ps1 --dir=C:\some\path). Happy to open a separate issue if useful.The wording follow-up you mentioned (telling a checksum-verified layout mismatch apart from an unsafe archive) is in #2766.
install.ps1: report checksum-verified layout mismatch separately from…
DeusData commentedon Oct 25, 2026
The wording follow-up is now on main in 07e73a3 (#2766). When a checksum-verified archive has a different file set than the installer expects, install.ps1 now reports a layout mismatch and tells you how to fix it. Unsafe paths and duplicate entries are still reported as an unsafe archive. Validation stays strict, and both cases still exit 1. With the launcher/payload removal in a54ea95 (v0.10.0) and the clean v0.12.1 install confirmed above, this issue is resolved. Thank you, @GaboDot, for the precise report, and @RithvikReddy0-0 for the diagnosis, the install confirmation and the fix.