chore: release 0.21.27 + move ledger-solana to an optional [solana] extra - #2542
Merged
Conversation
…xtra open-aea-ledger-solana sat in the top-level dependency table, so every install pulled solana<0.34.0, which caps websockets<12.0. That cannot co-resolve with any modern-websockets consumer -- google-genai>=1.0 requires websockets>=13.0 -- so downstream image builds failed with ResolutionImpossible, or resolution-too-deep on pip>=26.2, even for services that never touch Solana. Only packages/valory/contracts/squads_multisig imports the plugin, reached solely from the Solana skills and agent; nothing under autonomy/ imports it. Keeping it out of [all] is load-bearing: open-aea-test-autonomy pins open-autonomy[all,docker], which would otherwise reimpose the cap on every downstream test environment. Solana users install open-autonomy[solana]. The dev environment is unaffected -- make new_env runs poetry install --all-extras, so the repo's own Solana tests keep their plugin. Verified against the reported reproducer: installing the built wheel alongside google-genai==1.17.0 now resolves, while [all,docker] stays free of the websockets cap and [solana] still delivers the plugin. Release 0.21.27 bumps the version across all eight pin sites. Two of them were missed by the 0.21.26 release and needed follow-up commits afterwards: the assertion in tests/test_base.py, and the open-aea-test-autonomy pin in transaction_settlement_abci/skill.yaml. That YAML pin cascades through autonomy packages lock into the eight dependent package hashes and on into docs/package_list.md. abstract_round_abci is untouched, so the hash constant in autonomy/constants.py stays in sync. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adamantios
previously approved these changes
Aug 13, 2026
DIvyaNautiyal07
previously approved these changes
Aug 13, 2026
Five points from review, all local to this change's blast radius. Correct the dependency-table comment. It claimed setup.py was the authoritative manifest for the published wheel, which is backwards: make dist runs python -m build, which resolves the poetry-core backend and renders requires_dist from pyproject.toml. Left as-is, the comment contradicted this branch's diff and would read as evidence the change was broken. The root setup.py is not unused -- the legacy make install target still invokes it -- so the comment now draws that distinction rather than calling it dead. Wrap the aea_ledger_solana import in squads_multisig/contract.py. With the plugin optional, loading a Solana skill without the extra raised a bare ModuleNotFoundError with no hint. It now raises an ImportError naming `pip install open-autonomy[solana]`. Pre-existing code, but making the plugin optional is what makes it bite. Reword the note beside open-aea-ledger-cosmos. "Belongs here too" read as an invitation to move the plugin back into the main table, which would silently restore the websockets<12 cap. Add a superseded callout inside the 0.21.20 upgrading section. The superseding note lived ~180 lines away, so a reader deep-linking to 0.21.20 still found the affirmative advice to let open-autonomy[all] supply the plugin. Add test_solana_plugin_stays_an_opt_in_extra, asserting the plugin is optional, reachable via [solana], and absent from [all]. Verified by mutation: folding it into [all], and dropping optional = true, each fail with the message naming the consequence. Hashes relocked for squads_multisig and its three dependents. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
OjusWiZard
dismissed stale reviews from DIvyaNautiyal07 and Adamantios
via
August 13, 2026 11:08
a303566
DIvyaNautiyal07
approved these changes
Aug 13, 2026
Adamantios
approved these changes
Aug 13, 2026
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.
Proposed changes
open-aea-ledger-solanasat inopen-autonomy's top-level dependency table, so every install pulledsolana<0.34.0, which capswebsockets<12.0. That cap cannot co-resolve with any modern-websockets consumer —google-genai>=1.0requireswebsockets>=13.0— so downstream builds failed withResolutionImpossible, or the less obviousresolution-too-deeponpip>=26.2, even for services that never touch Solana.This moves the plugin to an optional
[solana]extra, deliberately excluded from[all].Two facts made this the right shape:
packages/valory/contracts/squads_multisigimports the plugin, reached solely fromskills/squads_transaction_settlement_abci,skills/test_solana_tx_abciandagents/solana_transfer_agent. Nothing underautonomy/imports it, so it was never a framework-level requirement.[all]exclusion is load-bearing:open-aea-test-autonomypinsopen-autonomy[all,docker], which would otherwise reimpose the cap on every downstream test environment. Same rationale that already keeps[hwi]and[docker]out of[all].Solana users install
open-autonomy[solana]. The dev environment is unaffected —make new_envrunspoetry install --all-extras, so the repo's own Solana tests keep their plugin (poetry.lockstill resolveswebsockets 11.0.3for dev).Also cuts release 0.21.27, bumping the version across all eight pin sites. Two of those were missed by the 0.21.26 release and needed follow-up commits afterwards — the assertion in
tests/test_base.py(db5690f3e) and theopen-aea-test-autonomypin intransaction_settlement_abci/skill.yaml(26e8966b7). Both are covered here. That YAML pin cascades throughautonomy packages lockinto eight dependent package hashes and on intodocs/package_list.md;abstract_round_abciis untouched, soABSTRACT_ROUND_ABCI_SKILL_WITH_HASHinautonomy/constants.pystays in sync.Fixes
Fixes #2541.
Types of changes
Breaking only for consumers that actually use the Solana packages — they must switch to
open-autonomy[solana](or[all,solana]). For everyone else this is strictly unblocking. Documented indocs/upgrading.md. Note the precedent — the identical[hwi]extraction in 0.21.18 shipped as a patch release — so0.21.27follows that, but flagging it in case a minor bump is preferred.Checklist
mainbranch (left side). Also you should start your branch off ourmain.One box left deliberately unticked — AI agents not run locally: no runtime behaviour changed, and the dev environment resolves identically (
poetry install --all-extrasstill installs the plugin, so the repo's Solana packages are exercised as before).Review feedback addressed
All five review comments are applied in
a303566ef:setup.pyis authoritative" comment that contradicted this diff. Note the nuance:setup.pyis not dead,make installstill invokes it; it is simply off the publishing path. The comment now draws that distinction.aea_ledger_solanaimport insquads_multisig/contract.py, so a missing plugin now raisesImportError: The Solana ledger plugin is required by the squads_multisig contract … pip install open-autonomy[solana]instead of a bareModuleNotFoundError.open-aea-ledger-cosmos— "belongs here too" read as an invitation to move it back.!!! warningcallout inside the 0.21.20 section, so deep-linked readers see it (admonitionis enabled inmkdocs.yml, so it renders).test_solana_plugin_stays_an_opt_in_extra, asserting the plugin is optional, in[solana], and not in[all].The new guard was mutation-tested rather than merely observed passing — folding the plugin into
[all], and droppingoptional = true, each fail with a message naming the consequence.Further comments
Verification
Built the wheel from this branch and ran the reproducer from the issue:
0.21.26+google-genai==1.17.0ResolutionImpossible— reproducedgoogle-genai==1.17.0[all,docker]+google-genai==1.17.0[solana]open-aea-ledger-solana 2.2.9/solana 0.33.0/websockets 11.0.3— unchanged for Solana userswebsocketsfree to float to15.0.1Confirmed the change actually ships:
release.ymlrunsmake dist→python -m build→ PEP 517 →poetry-core, sopyproject.tomlis authoritative for the published wheel.Passing locally:
check-hash,check-packages,check-dependencies,check-api-docs,check-doc-links-hashes,check-abciapp-specs,check-abci-docstrings,black-check,isort-check,flake8,mypy,pylint,bandit,liccheck,fix-copyright,poetry check --lock, andtests/test_base.py(59 passed).Pre-existing failure, not from this branch
darglintcrashes with'FunctionDescription' object has no attribute 'docstring'on Python 3.14. I checked out cleanmain(605cee976) in a scratch worktree and it fails identically there, so it is already onmainrather than introduced here. Worth a separate issue.Why not bump
solanaupstream insteadThat remains the better long-term fix, but it is not available yet and is not a one-line widening.
open-aea-ledger-solanacurrently allowssolana<0.34.0;solana 0.34.xand0.35.0still pinwebsockets<12.0. The first release acceptingwebsockets>=13is 0.36.2, and it also movessoldersfrom<0.22to>=0.23. That needs anopen-aeachange plus a release before this repo can consume it, whereas this PR unblocks downstreams now. The comment inpyproject.tomlflags the revisit condition.Unrelated diff noise
poetry lockalso correctedopen-aea-test-autonomy0.21.25→0.21.26inpoetry.lock— pre-existing staleness against that plugin's ownsetup.py, surfaced by the re-lock rather than caused by it.Separate cleanup worth filing
setup.pyis dead metadata. It omitsopen-aea-ledger-solanaentirely and putsopen-aea-cli-ipfsininstall_requires, yet the published0.21.26metadata matchespyproject.tomlexactly on all 18 entries — because the build goes throughpoetry-core. The comment at the top ofpyproject.toml's dependency table still claimssetup.pyis "the authoritative manifest used for the published wheel", which is backwards and would send the next person fixing a dependency bug to a file that ships nothing. Left out of scope here.