Skip to content

chore: unpin soldr in .clud/settings.json so clud stops downgrading the global soldr #1436

Description

@zackees

Context

.clud/settings.json on main pins soldr:

"optimize": {"rust": {"install_soldr": true, "soldr_version": "0.7.11", "use_soldr_shims": true}}
  • The pin was added on 2026-06-16 in 31e28e2 ("optimize"). clud optimize wrote it at a time when its --soldr-version flag had a hardcoded default of 0.7.11 (zackees/clud PR fix(zccache): bound ensure_running with a 30s timeout (#346) #349, commit 83ea446). Nobody chose that version on purpose. soldr 0.7.11 was released on 2026-04-23, and 0.7.55 was already out when the pin was written.
  • The pin was dormant at first because clud only installed soldr when it was missing. That changed in zackees/clud commit 09b4fc0 (2026-08-25, clud issue pybuild: upgrade PyO3 to 0.29 and remove Windows import-library workaround #1025). Since then, clud's soldr activation (crates/clud-bin/src/soldr_activate.rs) checks an explicit pin on every launch. If the installed soldr doesn't match the pin, it runs uv tool install --force soldr==0.7.11.
  • As a result, starting clud in this repo downgrades the user's global soldr, and every other project on the machine shares that soldr. On 2026-09-14, a clud launch in fbuild replaced soldr 0.9.15 with 0.7.11.

Proposal

Delete only the soldr_version key from .clud/settings.json. Keep install_soldr: true and use_soldr_shims: true. With no pin, clud floats: it uses whatever soldr is already installed and installs the latest soldr only if none is present.

Add a small guard test so a later clud optimize run can't quietly bring the pin back.

Out of scope: the uv.lock dev-group entry for soldr (currently 0.8.30). It only sets soldr inside the project venv (pyproject.toml requires >=0.8.19) and never changes the global uv tool, so it doesn't cause this downgrade.

Acceptance criteria

  • .clud/settings.json has no soldr_version key at any depth, and install_soldr / use_soldr_shims are still true.
  • A guard test in ci/ fails while the pin is present (RED) and passes after it is removed (GREEN). The PR includes both outputs.
  • CI runs the guard.

Decisions

  • Float instead of bumping the pin. Any fixed version goes stale and then downgrades every newer global install. Floating matches clud's default behavior.
  • Separate PR. PR fix(esp32): build what the ini pins, and match PlatformIO's ESP32-S3 size (#1432) #1434 (commit ab6569c) makes the same settings change, but it's bundled with unrelated ESP32-S3 work. This standalone fix doesn't have to wait for that PR. The settings hunk is identical in both, so they merge cleanly in either order.
  • The guard is a stdlib unittest in ci/, like ci/test_rust_toolchain_pins.py, so it runs with uv run --no-project and no extra dependencies.

Activity

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

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions