Skip to content

fix(packaging): make openjarvis-rust a uv-only group to unblock pip install openjarvis[desktop]#624

Merged
ElliotSlusky merged 2 commits into
mainfrom
fix/desktop-rust-uv-only
Jul 1, 2026
Merged

fix(packaging): make openjarvis-rust a uv-only group to unblock pip install openjarvis[desktop]#624
ElliotSlusky merged 2 commits into
mainfrom
fix/desktop-rust-uv-only

Conversation

@jonsaadfalcon

Copy link
Copy Markdown
Collaborator

Problem

#615 added openjarvis-rust to the published desktop optional-dependency so uv sync --extra desktop builds the native PyO3 extension for the desktop app. But openjarvis-rust isn't on PyPI, and [tool.uv.sources] (the local path) is stripped from published wheel metadata. So the wheel's desktop extra carried Requires-Dist: openjarvis-rust; extra == 'desktop', and pip install openjarvis[desktop] from PyPI failed at install trying to resolve openjarvis-rust (the #584 PyPI-rust gap surfacing at install time).

Fix

Move openjarvis-rust from the published desktop extra into a uv desktop-native dependency group (PEP 735). Dependency groups are excluded from wheel metadata, so pip installs from PyPI never see it — while uv sync from a source checkout still builds it from the local path source. The desktop app now runs uv sync --extra desktop --group desktop-native.

Only the packaging metadata changes; the extension is still built the same way for the desktop app.

Verification

  • Built the wheel and confirmed openjarvis-rust is nowhere in the published metadata — the desktop extra's Requires-Dist is now just fastapi/uvicorn/pydantic/python-multipart/faster-whisper. So pip install openjarvis[desktop] installs cleanly.
  • uv.lock still resolves openjarvis-rust under the desktop-native group with its local path source (directory = "rust/crates/openjarvis-python").
  • New tests/deployment/test_packaging.py guards the split; deployment suite: 29 passed; ruff clean.

Scope note

This unblocks pip install openjarvis[desktop]. It does not put openjarvis-rust on PyPI, so base pip install openjarvis still lacks the extension at runtime — that deeper #584 closure (publishing multi-platform maturin wheels) is a separate, larger effort.

🤖 Generated with Claude Code

…ock pip[desktop])

#615 added openjarvis-rust to the published `desktop` extra so
`uv sync --extra desktop` builds the native PyO3 extension for the desktop
app. But openjarvis-rust is not on PyPI and `[tool.uv.sources]` is stripped
from published wheel metadata, so `pip install openjarvis[desktop]` from PyPI
failed at install trying to resolve openjarvis-rust from PyPI (#584).

Move openjarvis-rust into a uv `desktop-native` dependency group (PEP 735 —
excluded from wheel metadata) and sync it in the desktop app via
`uv sync --group desktop-native`. The extension is still built from the local
path source; only the published metadata changes.

Verified: the built wheel no longer lists openjarvis-rust in any Requires-Dist
(nowhere in the metadata), and uv.lock still resolves it from the local path
source under the group. Adds tests/deployment/test_packaging.py to guard the
split (not in the published extra, present in the group, path source, and the
desktop app syncs the group).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ElliotSlusky ElliotSlusky merged commit 26bc7ef into main Jul 1, 2026
12 checks passed
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.

2 participants