Skip to content

Upgrade every dependency to its latest release, anthropic 2.x included - #18

Merged
nklip merged 1 commit into
masterfrom
claude/focused-johnson-7n6j3f
Nov 2, 2026
Merged

nklip merged 1 commit into
masterfrom
claude/focused-johnson-7n6j3f

Conversation

@nklip

@nklip nklip commented Nov 2, 2026

Copy link
Copy Markdown
Owner

Summary

Every locked package in every project moves to its newest release. Every declared floor in pyproject.toml moves with it, runtime and tooling alike, as AGENTS.md requires. All 80 locked packages now match the latest version on PyPI.

This covers everything in the three open Dependabot pull requests, at or past each version they propose, so Dependabot should close them once this merges:

Dependabot PR Proposed Here
#11 mcp[cli] >=2.3.0 mcp 2.3.0, floor >=2.3.0
#12 setup-uv 10.3.0 setup-uv v10.3.3 (tag resolved against the remote)
#15 fastapi 0.162.0, pydantic 2.14.1, pydantic-settings 2.16.1, websockets 17.3, httpx2 2.16.0, ruff 0.17.2, django 6.1.2, markdown 3.11.2, python-dotenv, djangorestframework 3.18.3, djoser 2.3.5 fastapi 0.162.0, pydantic 2.14.2, pydantic-settings 2.16.2, websockets 17.4, httpx2 2.16.0, ruff 0.17.3, django 6.1.2, markdown 3.11.2, python-dotenv 1.2.4 (DRF and djoser already landed in #16)

actions/checkout@v7 is a moving major tag that already points at v7.0.1, the newest release, so it stays.

Declared floors raised

  • chatbot: anthropic 2.3.0, fastapi 0.162.0, pydantic 2.14.2, pydantic-settings 2.16.2, websockets 17.4, httpx2 2.16.0, pytest 9.2.0, ruff 0.17.3
  • lemon: django 6.1.2, markdown 3.11.2, pytest 9.2.0, ruff 0.17.3
  • mathparser: pytest 9.2.0, ruff 0.17.3
  • mcp: anthropic 2.3.0, mcp[cli] 2.3.0, pydantic 2.14.2, python-dotenv 1.2.4, pytest 9.2.0, pytest-asyncio 1.4.1.post1, ruff 0.17.3

The one major: anthropic 1.9.0 → 2.3.0 (chatbot, mcp)

anthropic 2.0.0 is the first release that sends API version 2026-10-21 instead of 2023-06-01, so both projects move to the new API version. The changes follow the 2026-10-21 migration guide:

  • Sampling parameters removed (mcp). 2026-10-21 rejects a Messages request that carries temperature, top_p or top_k with a 400, even at the default value. mcp's Claude.chat() sent temperature=1.0 on every request, so every chat turn would have failed. The field and the temperature parameter are removed; nothing passed it. A new test asserts that no sampling parameter goes out, and it fails with temperature put back.
  • MessageParam is a union with one TypedDict per role (mcp). Annotations keep working. cli_chat.py built its dicts from a role variable, which matches none of the per-role types, so each role now gets its own literal.
  • Key sent as Authorization: Bearer, one credential per client. Neither project sets a base URL, a proxy, X-Api-Key or a second credential, so nothing changes. chatbot needed no code change at all.
  • License. The SDK is Apache 2.0 from 2.0.0 (MIT before). No code change; worth noting if you track dependency licenses.
  • Out of scope: notebooks/ holds its own anthropic snippets outside any lock, so it isn't covered here.

Test plan

  • make check from the repository root: all four projects pass (141 tests, one new), lint clean on ruff 0.17.3. lemon's tests ran against MySQL from its compose.yaml.
  • uv lock --check passes in every project.
  • Security re-scan of the new locks: zero advisories in both the PyPI vulnerability feed and the full GitHub-reviewed advisory database.
  • Both projects ran through the real anthropic 2.3.0 client, with only the HTTP transport mocked:
    • Requests carry anthropic-version: 2026-10-21 and a bearer key, with no X-Api-Key and no sampling fields.
    • chatbot complete() returned a reply and a refusal, and mapped 401, 403, 404, 429, 500 and a connection failure exactly as before.
    • mcp's chat loop ran end to end, which no check had done before: question → tool_use → a real read from the document server over stdio → tool_result → answer, plus a /format prompt.
  • chatbot under uvicorn: page and assets served, WebSocket replied.
  • lemon: the browsable API's markdown rendered through markdown 3.11.2; djoser's social views and simplejwt behave as before. That includes the known single-use-state limitation of social login on social-auth-core 6.2, recorded next to the djoser dependency. Lemon doesn't use social login.
  • Not run: a live request to the Claude API. No API key was available in the session that made this change. One chat turn in each app with a real key would confirm it end to end.

Generated by Claude Code

Every locked package in every project moves to its newest release, and
every declared floor moves with it, runtime and tooling alike; all 80
locked packages now sit at the latest version on PyPI. setup-uv goes to
v10.3.3, a tag resolved against the remote; actions/checkout@v7 already
points at v7.0.1, the newest release. This covers everything in the
open Dependabot pull requests (#11 mcp 2.3.0, #12 setup-uv 10.3.0, and
the routine group in #17, which replaced #15), at or past each version
they propose, so it replaces them.

The one major is anthropic, 1.9.0 to 2.3.0, in chatbot and mcp. 2.0.0
is the first release that sends API version 2026-10-21 instead of
2023-06-01, so both projects move to the new version, following the
API's migration guide (platform.claude.com/docs/en/api/migration-2026-10-21):

- 2026-10-21 rejects a Messages request carrying temperature, top_p or
  top_k with a 400, even at the default. mcp's Claude.chat() sent
  temperature=1.0 on every request, so every chat turn would have
  failed; the field and the parameter are gone (nothing passed it). A
  new test asserts no sampling parameter goes out, and it fails with
  temperature put back.
- MessageParam is now a union with one TypedDict per role. Annotations
  keep working; cli_chat built its dicts from a role variable, which
  matches none of them, so each role now gets its own literal.
- The key now travels as Authorization: Bearer, and a client holds one
  credential. Neither project sets a base URL, a proxy, X-Api-Key or a
  second credential, so nothing else changes. chatbot needed no code
  change at all. The SDK is Apache 2.0 from 2.0.0 (MIT before).

lemon's MySQL healthcheck now pings over TCP. CI's lemon job failed
with every test erroring on MySQL error 2013, "Lost connection to MySQL
server at 'reading initial communication packet'"; the race predates
this change. On an empty volume, which is every CI run, the mysql image
first runs a temporary server with networking off while it creates the
database, then restarts as the real server on TCP 3306. The healthcheck
pinged `-h localhost`, which mysqladmin takes to mean the Unix socket,
so it could pass against the temporary server, and `docker compose up
--wait` returned before anything listened on 3306. Reproduced on fresh
volumes: healthy while the log showed only "Temporary server started",
a TCP connection closed without a server greeting, and the suite run
right after `--wait` gave 16 errors in 3 of 3 runs. Pinging with
`-h 127.0.0.1 --protocol=tcp` cannot reach the temporary server:
`--wait` now holds about 11 seconds, and the suite passed in 5 of 5
fresh-volume runs; an existing volume still works, its data kept.

All 141 tests pass across the four projects, lemon's against MySQL from
its compose file, and lint is clean on ruff 0.17.3. Both the PyPI
vulnerability feed and the full GitHub-reviewed advisory database
report nothing for any locked version. The tests replace the SDK call,
so both projects also ran through the real anthropic 2.3.0 client with
only the HTTP transport mocked: requests carry anthropic-version
2026-10-21 and a bearer key, with no X-Api-Key and no sampling field;
chatbot's complete() returned a reply and a refusal and mapped 401,
403, 404, 429, 500 and a connection failure as before; and mcp's chat
loop, never run end to end before, went question, tool_use, a real
read from the document server over stdio, tool_result, answer, plus a
/format prompt. Past that, chatbot served its page and assets under
uvicorn and answered over the WebSocket; lemon's browsable-API markdown
rendered through markdown 3.11.2; and djoser's social views and
simplejwt behaved as before, the single-use-state limitation recorded
beside the djoser dependency included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJbZcrXFYA1x2ppHdCG5uT
@nklip
nklip force-pushed the claude/focused-johnson-7n6j3f branch from 5a89cd3 to 5707bf9 Compare November 2, 2026 05:25
@nklip
nklip merged commit b4ff29a into master Nov 2, 2026
5 checks passed
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.

2 participants