Skip to content

fix(installer): pass --prerelease=allow on every uv install path - #1353

Merged
phernandez merged 3 commits into
mainfrom
fix/prerelease-install-paths
Aug 28, 2026
Merged

phernandez merged 3 commits into
mainfrom
fix/prerelease-install-paths

Conversation

@phernandez

@phernandez phernandez commented Aug 28, 2026 •

Copy link
Copy Markdown
Member

Fixes #1338.

Problem

0.23.x pins fastmcp==4.0.0b1 and there is no stable FastMCP 4 on PyPI (latest stable 3.4.7; newest beta 4.0.0b5). uv accepts a pre-release of a transitive dependency only with --prerelease=allow, so on a cold cache:

command resolves to
uvx basic-memory 0.22.1
uvx "basic-memory>=0.23.2" (the bm hook install fallback launcher) fails to resolve

So every MCP-config example, both harness bootstraps, bm update's uv tool upgrade, and the hook launcher were quietly running the previous release or breaking.

Fix

We're staying on the FastMCP 4 beta, so this adds --prerelease=allow on every uv path we control:

  • code: bm hook install launcher (hook.py), auto-update command + hint (auto_update.py), Hermes bootstrap (integrations/hermes/__init__.py), OpenClaw bootstrap (index.ts) and setup-bm.sh
  • manifests: server.json (MCP registry, validated against the 2025-12-11 schema), plugins/codex/.mcp.json
  • docs: README (install + all MCP config snippets, with a short note on why), llms-install.md, SECURITY.md, plugin getting-started/skills, OpenClaw README/SECURITY, Hermes README, release runbook

The Claude Code / Codex hook scripts already declare fastmcp==4.0.0b1 as a direct dependency and needed no change.

Keeping the stable channel stable (Codex review)

--prerelease=allow also allows pre-releases of basic-memory itself, and there is no narrower opt-in that works on the uv versions in the field (--with fastmcp==… only resolves on uv ≥ 0.12; if-necessary/explicit fall back to 0.22.1). Two things were exposed and are handled here:

  1. Betas — just beta now refuses while pyproject.toml pins a FastMCP pre-release (explicit BASIC_MEMORY_ALLOW_BETA_WITH_PRERELEASE_DEPS=1 override); documented in AGENTS.md and the beta runbook.
  2. Dev builds — dev-release.yml published a .devN build to PyPI for every main commit, and a clean uv tool install basic-memory --prerelease=allow really installed 0.23.3.dev4 (while bm --version still printed 0.23.2, since the in-code version only changes at release). Nothing consumes those artifacts (cloud pins a git rev; docs never advertised them), so the workflow is removed. Follow-up outside this PR: yank 0.23.3.dev1–dev7 (and any dev build published before this merges) on PyPI — uv skips yanked versions unless pinned explicitly.

Verification

  • uvx --prerelease=allow "basic-memory>=0.23.2" --version on an empty UV_CACHE_DIR resolves (the launcher form that previously failed)
  • tests/cli/test_hook_command.py, test_auto_update.py, test_update_command.py — 146 passed; ty check clean
  • just package-check-claude-code, package-check-codex, package-check-hermes (269 passed), package-check-openclaw (typecheck, biome, build, bun tests, npm pack) — all pass
  • just --list parses with the new beta guard

Follow-up outside this repo: the install pages on docs.basicmemory.com need the same flag.

🤖 Generated with Claude Code

https://claude.ai/code/session_017STCpbNsYjZgUdftxgEAZ4

basic-memory 0.23 pins fastmcp==4.0.0b1, and no stable FastMCP 4 exists
on PyPI. uv only accepts pre-releases of transitive dependencies when
told to, so `uv tool install basic-memory` and `uvx basic-memory`
silently resolve to 0.22.1 — the last release without a pre-release
dependency — and `bm hook install`'s `uvx "basic-memory>=0.23.2"`
launcher fails to resolve at all on a cold cache.

Add the flag everywhere we run or document a uv install:

- `bm hook install` launcher fallback (uvx / uv tool run)
- the auto-update `uv tool upgrade` command and its manual hint
- Hermes and OpenClaw bootstrap installs and their setup script
- MCP registry manifest (server.json) and the Codex plugin .mcp.json
- README, llms-install.md, SECURITY.md, plugin docs and skills, and
  the release runbook

The Claude Code / Codex hook scripts already declare the fastmcp
pre-release as a direct dependency and are unaffected.

Fixes #1338

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017STCpbNsYjZgUdftxgEAZ4
Signed-off-by: phernandez <paul@basicmachines.co>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 28, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-08-28T22:42:32.433373Z 87911f9 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@phernandez

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4cdfae6bae

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/basic_memory/cli/auto_update.py Resolved
Codex review on the --prerelease=allow change: uv applies the flag to
basic-memory itself, so with a beta on PyPI every documented install
and `bm update` would pick it up instead of the stable release. uv has
no narrower opt-in that works on the versions in the field (a direct
`--with fastmcp==…` pin only resolves on uv >= 0.12; 0.8.x still
requires --prerelease=allow), so keep the stable channel stable by
policy: `just beta` refuses while pyproject pins a pre-release, with an
explicit override, and the release docs say why.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017STCpbNsYjZgUdftxgEAZ4
Signed-off-by: phernandez <paul@basicmachines.co>
@phernandez

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. What shall we delve into next?

Reviewed commit: 908c7d5e70

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 908c7d5e70

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread README.md Resolved
@phernandez
phernandez marked this pull request as draft August 28, 2026 22:28
With every documented install passing --prerelease=allow (required by
the FastMCP pre-release pin), uv also allows pre-releases of
basic-memory itself, and the `.devN` builds dev-release.yml published
for each main commit outranked the stable release: a clean
`uv tool install basic-memory --prerelease=allow` installed 0.23.3.dev4
while `bm --version` still printed 0.23.2. Nothing depends on those
artifacts — the cloud pins a git rev and the docs never advertised
them — so retire the workflow; unreleased main is installable from git.

The dev versions already on PyPI must be yanked separately; uv skips
yanked versions unless they are pinned explicitly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017STCpbNsYjZgUdftxgEAZ4
Signed-off-by: phernandez <paul@basicmachines.co>
@phernandez
phernandez marked this pull request as ready for review August 28, 2026 22:38
@phernandez

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit: 87911f9414

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@phernandez
phernandez merged commit 352f43f into main Aug 28, 2026
33 checks passed
@phernandez
phernandez deleted the fix/prerelease-install-paths branch August 28, 2026 23:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

uv install/upgrade silently resolves to 0.22.1 — 0.23.2 pins a prerelease (fastmcp==4.0.0b1)

1 participant