Skip to content

[v0.9.0] install.ps1 expects codebase-memory-mcp.payload.exe missing from release archive #1218

Closed

Description

@GaboDot

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.exe
  • codebase-memory-mcp.payload.exe
  • LICENSE
  • install.ps1
  • THIRD_PARTY_NOTICES.md

However, the actual codebase-memory-mcp-windows-amd64.zip from v0.9.0 only contains 4 files:

  • codebase-memory-mcp.exe
  • LICENSE
  • install.ps1
  • THIRD_PARTY_NOTICES.md

The codebase-memory-mcp.payload.exe file is missing from the release archive.

Reproduction

  1. Run install.ps1 on Windows
  2. Script downloads codebase-memory-mcp-windows-amd64.zip
  3. Script validates zip contents
  4. 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:

  1. Re-release v0.9.0 with the payload.exe included, OR
  2. Update install.ps1 to handle the v0.9.0 archive structure, OR
  3. 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

  1. RithvikReddy0-0 commented on Jul 23, 2026

    @RithvikReddy0-0
    Contributor

    The v0.9.0 archive isn't missing a file : install.ps1 on main moved ahead of the latest release.

    install.ps1 hardcodes a five-entry bundle contract:

    $WindowsArchiveNames = @($BinName, $PayloadName, "LICENSE", "install.ps1", "THIRD_PARTY_NOTICES.md")
    

    and downloads from:

    $BaseUrl = ... else { "https://github.com/$Repo/releases/latest/download" }
    

    Nothing couples the two. The script tracks main; the archive tracks the latest published release. Any change to the archive shape on main therefore breaks the documented Windows path (irm .../main/install.ps1) until the next release ships. Users running the install.ps1 bundled inside a release archive get a matched pair and are unaffected, only the raw-from-main path 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's install.ps1 against the same v0.9.0 archive on Windows amd64 and succeeds :

    Downloading codebase-memory-mcp-windows-amd64.zip...
    Checksum verified.
    Extracting...
    Installed: codebase-memory-mcp 0.9.0
    

    Same script, same release, same platform, no allowlist failure. So the four-file archive was acceptable to main a 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 as unsafe or incomplete release archive conflates "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's install.ps1 against 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.sh structured the same way (latest-release download against a hardcoded manifest)? If so the check should cover both platforms.

  2. dyy1991 commented on Jul 24, 2026

    @dyy1991

    Image still happening

  3. added
    bugSomething isn't working
    ux/behaviorDisplay bugs, docs, adoption UX
    securitySecurity vulnerabilities, hardening
    priority/highNeeds near-term maintainer attention; high-impact bug, regression, safety issue, or release blocker.
    on Jul 24, 2026
  4. added this to the 0.9.1-rc milestone on Jul 24, 2026
  5. DeusData commented on Jul 24, 2026

    @DeusData
    Owner

    Confirmed. The current install.ps1 consumes the latest release asset while enforcing the newer five-file payload contract, but the v0.9.0 Windows 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 for 0.9.1-rc under #394.

  6. DeusData commented on Sep 26, 2026

    @DeusData
    Owner

    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.ps1 expects exactly the four files the release archive contains. The current install.ps1 and the v0.11.0 archive match. Could you confirm that irm .../install.ps1 | iex installs 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.

  7. added
    awaiting-reporterWaiting on the reporter for info/repro; stale bot will warn then close
    on Sep 26, 2026
  8. github-actions commented on Sep 26, 2026

    @github-actions

    Thanks for the report! To move this forward we need a bit more so we can reproduce it ourselves:

    • the codebase-memory-mcp --version you're on
    • the exact steps or command you ran
    • a public repo (or a small dummy snippet) that shows the problem — please don't paste proprietary code

    Once that's here we'll pick it straight back up. Heads-up: issues left awaiting-reporter are automatically closed after a few weeks of silence, but a comment reopens the door anytime.

  9. DeusData commented on Oct 19, 2026

    @DeusData
    Owner

    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.

  10. DeusData commented on Oct 25, 2026

    @DeusData
    Owner

    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.

  11. RithvikReddy0-0 commented on Oct 25, 2026

    @RithvikReddy0-0
    Contributor

    Confirmed: current main install.ps1 (at 4a1e6d11) 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 --version both reported codebase-memory-mcp 0.12.1, and the installer exited 0.

    To keep it off my real profile I ran it with --skip-config and pointed --dir, LOCALAPPDATA, APPDATA, USERPROFILE and CBM_CACHE_DIR at a throwaway folder, so this exercised the same download, verify and install path as irm | 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\path splits the argument at the colon, so the script receives --dir=C. It then installs into a relative C folder and adds C to 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.

  12. DeusData commented on Oct 25, 2026

    @DeusData
    Owner

    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.

  13. removed
    awaiting-reporterWaiting on the reporter for info/repro; stale bot will warn then close
    on Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority/highNeeds near-term maintainer attention; high-impact bug, regression, safety issue, or release blocker.securitySecurity vulnerabilities, hardeningux/behaviorDisplay bugs, docs, adoption UXwindowsWindows-specific issues

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions