Skip to content

build!: move to Python 3.15 and update dependencies and tools - #17

Merged
PyYoshi merged 2 commits into
mainfrom
chore/update-dependencies
Oct 22, 2026
Merged

PyYoshi merged 2 commits into
mainfrom
chore/update-dependencies

Conversation

@PyYoshi

@PyYoshi PyYoshi commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Python 3.15 only. requires-python is now >=3.15,<3.16, and .python-version, the ruff target, the classifier and doctor's version check follow. Python 3.14 is dropped, which is a breaking change for 3.14 users. The repo keeps its one-stable-major policy.
  • Runtime boundaries:
    • openai-codex 0.160.0 → 0.163.0, with its bundled runtime openai-codex-cli-bin.
    • mcp 2.2.0 → 2.3.0.
    • All other locked dependencies are refreshed with uv lock --upgrade. Notable bumps: pydantic 2.14.1 / pydantic-core 2.50.1, which ships cp315 wheels, and ruff 0.17.1.
  • Tools:
    • aqua registry v4.538.0 → v4.575.0, uv 0.12.13 → 0.13.5 and betterleaks v1.7.4 → v1.9.0. Checksums are updated and pruned.
    • CI: aqua v2.61.0 → v2.65.2 and aqua-installer v4.0.5 → v4.1.1. v4.1.1 is required to install aqua ≥ v2.65.0. Both are pinned by commit SHA.
  • Docs: AGENTS.md, CONTRIBUTING.md, README (en/ja) and CHANGELOG. The documented pins were still 0.154.0.

openai-codex review (0.154.0 → 0.163.0)

The code was last validated against 0.154.0, and the bump to 0.160.0 came from Dependabot. I diffed the 0.154.0, 0.160.0 and 0.163.0 wheels and the upstream protocol definitions.

  • Every SDK class, method, signature, enum and error the bridge uses is unchanged. Only generated/v2_all.py, generated/notification_registry.py and docstrings in api.py changed.
  • The model changes are new optional fields, new notifications without a turn ID, and MessagePhase.partial_answer. The new notifications go to the general queue, which the bridge drains and drops.
  • The server-initiated request kinds are identical in all three versions, and decline is still valid for both approval requests. The fail-closed behaviour is therefore unchanged.
  • No bridge code change is required. The new partial_answer phase is never used as the final text, which matches the SDK's own final-response scan; a unit test now pins this.
  • The fake App Server's version labels now match the pin.

Follow-ups I suggest but have not done:

  • Since 0.160 the runtime restores a thread's Plan collaboration mode on resume. A reply to such a thread could hit item/tool/requestUserInput mid-turn. The bridge rejects it, which is safe but late.
  • These need live validation, which requires explicit authorization:
    • 0.163 restores the saved permission profile and network grants on resume.
    • The runtime's graceful SIGTERM shutdown (45 s) against the SDK's 2 s wait-then-kill on close.

Notes

  • uv.lock moves to revision 5 (uv 0.13). Older uv releases, and possibly Dependabot's uv updater, may not read it.
  • The README quick start still installs the v0.1.1 tag, which requires Python 3.14. The requirements line up only after a new release.

Validation (Python 3.15.1, aqua-pinned tools)

  • aqua exec -- uv run --frozen pytest -m 'not live' -q: 161 passed, 4 deselected. They also pass with -W error::DeprecationWarning.
  • ruff check and ruff format --check (0.17.1): clean.
  • uv build: OK.
  • betterleaks dir . and betterleaks git . --platform github: no leaks.
  • codex-app-mcp doctor --skip-runtime: python 3.15.1 and SDK 0.163.0 are reported ok.
  • Not run: live tests, and doctor with the runtime started.

All evidence comes from unit tests, contract tests against the pinned SDK and a fake App Server, and subprocess tests. I did no live-runtime or real-application validation.

- aqua registry v4.538.0 -> v4.575.0
- uv 0.12.13 -> 0.13.5, betterleaks v1.7.4 -> v1.9.0 (checksums pruned)
- CI: aqua v2.61.0 -> v2.65.2 with aqua-installer v4.0.5 -> v4.1.1,
  which is required to install aqua v2.65.0 or later
- Support Python 3.15.x only (requires-python >=3.15,<3.16,
  .python-version, ruff target, doctor check); Python 3.14 is dropped.
- openai-codex 0.160.0 -> 0.163.0 (bundled runtime included) and
  mcp 2.2.0 -> 2.3.0; refresh all other locked dependencies.
- Review of the SDK from 0.154.0 through 0.163.0 found no API change in
  what the bridge uses; server-initiated request kinds are unchanged.
  Pin the new MessagePhase.partial_answer handling, which matches the
  SDK's own final-response selection, with a unit test.
- Align the fake App Server version labels and the documented pins.
@PyYoshi
PyYoshi merged commit 5c851fe into main Oct 22, 2026
1 check 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.

1 participant