fix(deps): ship harbor[cloud] extras by default#48
Merged
Conversation
Use harbor[cloud] instead of bare harbor so --harbor-env daytona|modal|e2b|runloop|gke works out-of-the-box after `uv tool install nasde-toolkit`. Previously these flags raised Harbor's MissingExtraError at runtime and required users to know the `uv tool install --reinstall --with 'harbor[daytona]' nasde-toolkit` workaround. Trade-off: ~113 MB extra in the tool venv (daytona-sdk, e2b, modal, runloop, kubernetes, tensorlake, islo and their transitive deps). Local-Docker users pay the disk cost too, but surfacing a setup wall to every cloud user was worse. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
szjanikowski
pushed a commit
that referenced
this pull request
May 9, 2026
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
szjanikowski
added a commit
that referenced
this pull request
May 9, 2026
* docs(changelog): record Windows compat + skill bundling under [Unreleased] Captures everything that landed since v0.3.2 (PRs #42, #43, #44, #45) so the release notes are queued up. Keeps the section under [Unreleased] deliberately — more fixes are still expected before cutting v0.3.3, and release docs say the version header should be added at release-cut time. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(changelog): record .gitattributes LF enforcement (#47) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(changelog): record harbor[cloud] dependency switch (#48) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: release v0.3.3 Cuts v0.3.3 from the accumulated [Unreleased] section. Patch bump (pre-1.0 policy): no breaking changes to user-facing CLI, nasde.toml schema, or benchmark project layout — Windows compat, OAuth-script bundling, harbor[cloud] dep switch are all transparent to users. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Szymon Janikowski <szymon.janikowski@itlibrium.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
harbor>=0.6,<0.7→harbor[cloud]>=0.6,<0.7inpyproject.tomluv.lockrefreshed: daytona, e2b, modal, runloop, kubernetes, tensorlake, islo + transitive deps now lockednasde run --harbor-env daytona|modal|e2b|runloop|gkeworks after a plainuv tool install nasde-toolkit, no--with 'harbor[daytona]'workaround neededContext
Issue (Severity: High): any
--harbor-envother thandockerfailed at runtime with Harbor'sMissingExtraError, becausepyproject.tomldeclaredharborwithout the[cloud]extra. Cross-platform issue, but compounded with the Windows path bug from #43 it produced a particularly opaque crash.We considered dynamic post-install fetching of cloud SDKs (the way
uv run --withworks ad-hoc), but foruv tool installthe venv is closed and isolated — there is no clean runtime path that doesn't either reinstall the entire tool venv or reimplement pip-style resolution. Trading 113 MB of disk for "it just works" was the right call.Trade-off
~113 MB extra in the tool venv (measured: 550 MB → 663 MB in a Python 3.13 baseline). Local-Docker users pay the disk cost they don't directly use, but the alternative — every cloud user hitting a setup wall on first run — was worse.
Test plan
uv syncsucceeds against the new lockfiledaytona,e2b,modal,runloop_api_client,kubernetesimport cleanlyharbor.environments.daytona.DaytonaEnvironmentimports withoutMissingExtraErrormainafter this merges (kept apart to avoid changelog-branch conflicts)🤖 Generated with Claude Code