Skip to content

uv installs silently resolve to 5.3.0 because newer releases depend on pre-release-only toon_format #324

Description

@Nynir

Summary

Every limacharlie release since 5.3.1 declares toon_format>=0.9.0b1,<1.0.
The toon-format package has no stable release in that range (PyPI has only
0.1.0 and 0.9.0b1), so the constraint is only satisfiable by a pre-release.

uv refuses pre-releases of transitive dependencies unless
--prerelease=allow is passed. Instead of erroring, its resolver silently
backtracks to the newest version with no pre-release dependency — 5.3.0
(April 2026). pip/pipx honor the pre-release specifier per PEP 440 and
install the current release, so the recommended install paths now produce
very different CLIs.

Reproduction (2026-07-25, uv 0.11.32)

$ uvx limacharlie --version
limacharlie, version 5.3.0        # latest on PyPI is 5.5.4

$ uv tool install limacharlie     # same result: 5.3.0

$ uv tool upgrade limacharlie
Nothing to upgrade                # a stranded install self-reports as current

$ uvx --from 'limacharlie==5.5.4' limacharlie --version
  × No solution found when resolving tool dependencies:
  ╰─▶ Because only toon-format<0.9.0b1 is available and limacharlie>=5.5.4
      depends on toon-format>=0.9.0b1, ...
hint: `toon-format` was requested with a pre-release marker, but
pre-releases weren't enabled (try: `--prerelease=allow`)

Impact

This affects a documented install path: the official docs list
uv tool install limacharlie as a supported installation method
(https://docs.limacharlie.io/6-developer-guide/mcp-server/#installation)
with no --prerelease flag or minimum-version note, so users following
the docs today get 5.3.0.

This has already bitten downstream: the lc-essentials Claude Code plugin's
CLI auto-install was stranded on 5.3.0 the same way (refractionPOINT/lc-ai#111),
worked around in refractionPOINT/lc-ai#112 by forcing --prerelease=allow and
a 5.4.0 version floor in the installer. A packaging fix removes the need for
per-consumer workarounds like that one.

Users who installed via uv are pinned to 5.3.0 with no error and no upgrade
path, and miss ~3 months of fixes. Notably, 5.3.0 still contains the
hive enable/disable bug fixed in 5.4.0 (GET /mtd returns "data": {},
the round-tripped record then routes Hive.set() to the /data endpoint with
data={}, and enabling any D&R rule fails with the misleading
lc_error_code:INVALID - edr rules require "event" or "events" at the detection root — the validator is rejecting the empty payload, not the stored
rule). That fix never appeared in the CHANGELOG, which made this hard to
diagnose from the outside.

Suggested fixes

Any one of these resolves it:

  1. Make toon_format an optional extra (PR attached — the code already
    treats it as optional at runtime).
  2. Publish or depend on a stable toon-format release.
  3. Document that uv installs require --prerelease=allow.

Note that exact-pinning ==0.9.0b1 would not help: uv only honors
pre-release specifiers on direct requirements, never transitive ones.

Also worth adding the 5.4.0 get_metadata()/hive enable fix to the
CHANGELOG retroactively so stranded 5.3.0 users can find it.

Environment

  • uv 0.11.32 (Homebrew, aarch64-apple-darwin), macOS 15
  • Reproduced against PyPI as of 2026-07-25

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions