Skip to content

chore: cap SQLAlchemy below 2.2 and record the shared mypy pin - #101

Closed
kcrmin wants to merge 2 commits into
developfrom
chore/harden-dependency-ranges
Closed

kcrmin wants to merge 2 commits into
developfrom
chore/harden-dependency-ranges

Conversation

@kcrmin

@kcrmin kcrmin commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

Superseded by #103.

kcrmin and others added 2 commits October 26, 2026 21:47
SQLAlchemy 2.1.0 (2026-09-24) is within the declared sqlalchemy>=2.0,<3.0
range and types Result with PEP 646 variadic generics. Under the pinned
mypy 2.3.0 that makes three bare `.scalar_one()` assignments fail gate2
with [var-annotated]:

- src/backtest_engine/backtest_request_intake.py: latest
- tests/persistence/test_money_precision.py: stored_text
- tests/persistence/test_runtime_no_ddl.py: exists

Declare the SQL result types explicitly (bigint COALESCE -> int,
numeric::text -> str, IS NOT NULL -> bool). mypy does not verify these
against the query; they were checked against the schema by hand.

Verified on CPython 3.12.13: mypy is clean on SQLAlchemy 2.1.6 and 2.0.55,
ruff check/format pass, and the Docker suite passes on 2.1.6 (241 passed,
0 skipped).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SQLAlchemy 2.1 retyped Result, and mypy 2.3.0 then reported
var-annotated errors here (fixed by annotating the scalar_one() sites).
A <3.0 bound let that minor arrive on a fresh install with no change in
this repository. Narrow it to <2.2 so the next minor is a deliberate
bump; the suites pass on 2.1.6, so 2.1 stays allowed.

mypy==2.3.0 is unchanged. data-pipeline now pins the same release, and
the comment says the two move together.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant