All notable changes to this project will be documented in this file. The format follows Keep a Changelog and this project adheres to Semantic Versioning.
- Refactor: PYTHON_SDK_GUIDE.md conformance. Non-breaking internal
restructure to meet the guide's hard limits and lint rules. No public
API symbols were removed or renamed.
- Split oversized modules along responsibility lines:
_runtime/server.py(744 LOC) →server.py+_handshake.py_accept.py+_handlers.py+_handler_list_jobs.py_job_runner.py.
_client/client.py(479 LOC) →client.py+dispatch.pyops.py.
_messages/execution.py(348 LOC) →execution.pyevent_bodies.py.
_runtime/job.py(372 LOC) →job.py+result_stream.py.
- All source modules are now ≤ 296 lines (guide §0).
- Split oversized modules along responsibility lines:
- Reduced cyclomatic complexity on
_dispatch,_run_job,is_lease_subset, andotel._extract_attrsto ≤ 8 via guard-clause extraction and dict-of-handlers dispatch (guide §14).
- Tighter lint rules in
pyproject.toml:ruff.lint.selectnow includesC90(mccabe),PLR(pylint refactor).ruff.lint.mccabe.max-complexity = 8.ruff.lint.pylint.max-args = 5.
[tool.mypy]block withstrict = true,warn_unreachable = true,plugins = ["pydantic.mypy"].--cov-fail-underraised from 60 → 90.mypy>=2.1added to thedevdependency group.- Lease-bound provisioned credentials:
CredentialProvisioner,RevocationLog, and in-memory test doubles.model.uselease authorization viaJobContext.authorize_model.job.accepted.payload.credentialsfor submitters.- Best-effort terminal revocation and credential rotation status events.
- Upstream budget exhaustion translation to
BUDGET_EXHAUSTED.
mypy --strictnow passes (14 → 0 errors). Fixes include:- JSON-frame parsers in transports/middleware now check the parsed
value is a
dictbefore returning, eliminatingno-any-return. EventLog.read_since_seqProtocol signature aligned with async- generator semantics (the implementations stay unchanged).Envelope_envelopevalidators no longer carry an unused# type: ignore[unreachable].- CLI imports
ARCPClientandStaticBearerVerifierfrom their public submodules (arcp.client,arcp.runtime) rather than a non-existent top-level re-export.
- JSON-frame parsers in transports/middleware now check the parsed
value is a
- PLR0913 noqa for keyword-only constructors with optional knobs.
JWTVerifier.__init__,ARCPClient.__init__,ARCPRuntime.__init__,ARCPClient.submit, and a small number of private helpers carry a documented# noqa: PLR0913. Every argument is already keyword-only with a default; grouping them in a config dataclass is a breaking signature change with no clarity gain. - CI-only WebSocket e2e skip. The localhost WebSocket e2e passes locally but intermittently hangs on GitHub Linux runners; CI skips that single test while unit and memory-transport coverage remain active.