[AAASM-4518] 🐛 (deps): Relax pydantic/protobuf floors for framework compatibility - #244
Conversation
AAASM-4434 pinned the runtime dependency floors to the then-resolved versions (pydantic>=2.13.4, protobuf>=6.33.6, grpcio>=1.82.1). Those are not minimums the SDK needs — they made agent-assembly un-co-installable with three mainstream frameworks, a regression vs rc.3: - CrewAI (caps pydantic<2.13) and Semantic Kernel (<2.12) vs >=2.13.4 - AutoGen (autogen-core caps protobuf<5.30) vs >=6.33.6 Restore the rc.3 floors (pydantic>=2.0.0, protobuf>=5, grpcio>=1.66) — the true minimums the code needs — and regenerate uv.lock (resolved versions unchanged; only the requires-dist specifiers move). Documents the pre-existing caveat that the checked-in gRPC stubs are gencode 6.31.1 (need a protobuf 6.x runtime for the optional OpControl path). Refs: AAASM-4518
Resolves agent-assembly's declared runtime floors (read live from [project.dependencies]) together with each supported framework at its current release floor (AutoGen / CrewAI / Semantic Kernel), via `uv pip compile` as an offline-metadata solve. Fails the PR if a floor excludes a framework's supported range — catching the class of floor-vs-framework regression that shipped in rc.4 (AAASM-4518) BEFORE the immutable wheel is published, instead of after. Refs: AAASM-4518
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
Claude Code review — AAASM-4518 (relax over-tightened dep floors + pre-publish resolver guard)1. CI — PASS. All required checks green (Analyze, unit/integration/contract tests, CodeQL, pip-audit, PEP 561, SonarCloud, docs). The new 2. Scope vs ticket — PASS, matches exactly. Floors relaxed to the true minimums with upper bounds kept: 3. Side effects — PASS. Relaxing floors only widens compatibility; no existing install can break. No dep is now under-constrained for the SDK's real API usage — it uses pydantic 4. Frontend — N/A. Deps + a CI script only; no UI surface, no Playwright. Overall: APPROVE. Fix is correct, minimal, in-scope, and adds a real pre-publish guard against this regression class. Ships in rc.5 — rc.4 is immutable on PyPI so the compat fix can't be retrofitted; examples#268 (sdk-versions bump) unblocks only once rc.5 publishes. Automated review by Claude Code. Not merging; no Jira transition. |



Description
The published, immutable
agent-assembly==0.0.1rc4sharply raised its runtimedependency floors, making it un-co-installable with three mainstream agent
frameworks — a compat regression vs rc.3 (surfaced by 3 red lanes on examples#268).
Root cause. Commit
0106ab9(AAASM-4434, "Pin pyproject.toml floors toexplicitly reflect resolved versions") pinned each floor to whatever the dev
lockfile happened to resolve to — not to a minimum the SDK actually needs:
>=2.0.0>=2.13.4>=2.0.0>=5>=6.33.6>=5>=1.66>=1.82.1>=1.66Those floors are unsatisfiable against current framework releases:
autogen-core>=0.7.5capsprotobuf>=5.29.3,<5.30vs rc.4>=6.33.6.crewai>=1.15.2capspydantic>=2.11.9,<2.13vs rc.4>=2.13.4.semantic-kernel>=1.30capspydantic<2.13vs rc.4>=2.13.4.Why relaxing is safe (necessary-vs-over-tighten verdict).
BaseModel/Field/model_dump(all stable since pydantic 2.0); grpcio's floor was never a realminimum. Restoring the rc.3 floors changes nothing the code relies on.
under
agent_assembly/proto/are gencode 6.31.1 and need a protobuf 6.xruntime to import (verified: protobuf 5.29 raises
VersionError). But those stubsare imported only by the optional OpControl gRPC transport (
op_control.py),never at package-import time — so mainstream framework quick-starts run fine under
protobuf 5.x, exactly as they did on rc.3, which also shipped 6.31.1 gencode under
a
>=5floor since 2026-05-21. This floor-vs-gencode nuance is pre-existing, notintroduced here; a user needing the OpControl gRPC path must have
protobuf>=6.31.1.Regenerating the stubs at 5.x gencode is a separate concern, out of scope for this
compat fix.
Pre-publish guard. Adds
scripts/ci/check_framework_resolution.py+framework-resolution-check.yml: it resolves the SDK's declared floors (read livefrom
[project.dependencies]) against the framework matrix viauv pip compile, andfails the PR if a floor excludes a supported framework — so this class of
floor-vs-framework regression is caught before an immutable wheel is published.
Type of Change
Breaking Changes
Related Issues
Testing
check_framework_resolution.py)autogen-core>=0.7.5(protobuf 5.29.6),crewai>=1.15.2(pydantic 2.12.5),semantic-kernel>=1.30(pydantic 2.11.10).Note on release / examples#268
rc.4 is immutable on PyPI, so this ships in rc.5 — the published rc.4 stays broken.
examples#268 goes green only after rc.5 is published, not when this PR merges.
Checklist