Files
q792602257 25ebc10a8a
Tests / Test passed: 789
feat: downgrade Python baseline to 3.13 for PaddleOCR compatibility
paddlepaddle has no Python 3.14 (cp314) wheel on PyPI, so host-agent
deployments on 3.14 can never install it, causing OCR to fail at
runtime with RuntimeError. Pin the workspace to Python 3.13 across
all pyproject.toml files, the Docker base image, and the Jenkins CI
image; regenerate uv.lock against 3.13.

Also fixes a pre-existing Python-2-style `except X, Y:` syntax error
(invalid in all Python 3.x) in runtime/task.py and
packages/cloud-platform/cloud/{sql_repository,internal_api/api}.py,
introduced in 22d37ca9 and unrelated to this change's scope, which
blocked the full test suite from collecting on any interpreter
version.

openspec change: downgrade-python-3-13-paddleocr
2026-07-14 18:05:49 +08:00

1.8 KiB

ADDED Requirements

Requirement: Workspace-wide supported Python version

The system SHALL declare a single, consistent supported Python interpreter version range across the uv workspace root and every workspace member (apps/device-host-agent, apps/cloud-api, packages/cloud-platform), such that the range admits Python 3.13 and excludes Python 3.14, so that paddlepaddle (which has no Python 3.14 wheel available on PyPI) can be installed in every environment that follows the project's documented setup.

Scenario: Workspace resolves and syncs on Python 3.13

  • WHEN an operator runs uv python install 3.13 followed by uv sync --locked --all-packages in the repository root
  • THEN the sync succeeds and provisions a .venv using a Python 3.13 interpreter, with uv.lock resolved against that interpreter

Scenario: A Python 3.14 interpreter is rejected

  • WHEN uv attempts to resolve or sync the workspace against a Python 3.14 interpreter
  • THEN uv reports the interpreter as incompatible with the declared requires-python range, rather than silently proceeding

Requirement: Container and CI images match the declared Python baseline

The system SHALL build its Docker image and Jenkins CI pipeline using a base image whose Python version matches the workspace's declared requires-python range, so that containerized and CI environments never diverge from what local development targets.

Scenario: Docker image build uses the supported Python version

  • WHEN the project's Dockerfile is built
  • THEN the resulting image's base image is astral-sh/uv:python3.13-bookworm-slim

Scenario: CI pipeline uses the supported Python version

  • WHEN the Jenkins pipeline defined in Jenkinsfile executes
  • THEN it runs inside the astral-sh/uv:python3.13-bookworm-slim image