Skip to content

Maya 2022 / Python 3.7 Long-Term Support ​

Policy: Python 3.7 is an LTS compatibility profile. It has no automatic calendar expiry. See ADR 011.

Commitment ​

Maya 2022 embeds CPython 3.7, as do other DCC releases that studios still use in production. dcc-mcp-core therefore keeps an installable, tested Python 3.7 path until a major release completes the formal deprecation process in ADR 011.

The machine-readable source of truth is compatibility/python.json.

Supported wheel profiles ​

Native Python 3.7 ​

Linux and Windows releases include native cp37-cp37m wheels built with the contracted PyO3 0.28 series. These wheels contain dcc_mcp_core._core and provide the normal Rust-backed package surface.

This is the authoritative Python 3.7 compatibility profile.

py37-lite fallback ​

The release also includes a py3-none-any wheel without _core. It provides pure-Python host, skill, configuration, and sidecar fallbacks for platforms where a native cp37 wheel is unavailable.

py37-lite is supported, but it is not evidence that native compatibility is healthy. Merge and release gates require both profiles.

Python 3.8+ ​

Maintained Python versions use the cp38-abi3 wheel. One stable-ABI build per platform serves Python 3.8 through the maximum version declared in the compatibility contract.

Runtime architecture ​

text
Maya 2022 / CPython 3.7
        |
        +-- native cp37 wheel available
        |      `-- Python facade + Rust _core extension
        |
        `-- no native wheel for the platform
               `-- py37-lite facade + external dcc-mcp-server sidecar

The companion dcc-mcp-server wheel contains platform binaries rather than a Python extension ABI. It remains installable from Python 3.7 and lets lite adapters delegate gateway execution to the sidecar.

CI enforcement ​

CheckFrequencyContract
Python 3.7 contractEvery PRPackage metadata, PyO3 series, CI/release jobs, docs, and test pins match compatibility/python.json
Python 3.7 native (linux-x86_64)Every PRBuild/install native cp37 wheel, validate contents, run runtime smoke and full test suite
Python 3.7 native (windows-x86_64)Every PRBuild/install native cp37 wheel and run runtime smoke
Test (py37-lite)Every PRInstall lite wheel and prove fallback behavior without _core
py37 syntax checkEvery PRCompile shipped Python and test sources with a real CPython 3.7 parser
Python 3.7 compatibilityEvery PRStable aggregate; fails on failed, skipped, or cancelled constituents

Repository rulesets should require the exact aggregate job name Python 3.7 compatibility.

Authoring rules ​

  • Keep modules importable on Python 3.7. Use postponed annotations where modern annotation expressions are present.
  • Do not use Python 3.8+ grammar such as assignment expressions, positional-only parameters, debug f-strings, or match statements in shipped Python modules.
  • Do not evaluate modern annotations on Python 3.7 without a compatibility adapter. compile() alone is not a runtime proof.
  • Use dcc_mcp_core._typing, which preserves standard-library identity on Python 3.8+ and provides Core's bounded fail-closed Protocol, Literal, and runtime_checkable subset on Python 3.7 without importing a backport.
  • Do not import _core unconditionally on code paths that must support the lite profile.
  • New public Python APIs need tests in both the native and lite profiles when they cross the Rust/Python boundary.

Local validation ​

The vx-managed Python 3.7 is sufficient for the syntax gate but may not include pip or the native import library. Building and installing a native wheel requires a full CPython 3.7 installation with pip and development/import libraries. On Windows, the standard python.org installation provides these.

PowerShell:

powershell
$py37 = py -3.7 -c "import sys; print(sys.executable)"
vx just check-python-support
vx just check-py37-syntax
vx just build-py37 -i $py37
$wheel = Get-ChildItem dist/dcc_mcp_core-*-cp37-cp37m-*.whl | Select-Object -First 1
& $py37 scripts/ci/check_python_wheel.py --profile native_py37 --platform windows-x86_64 $wheel.FullName
& $py37 -m pip install --force-reinstall --no-deps $wheel.FullName
& $py37 scripts/ci/smoke_python37_runtime.py --profile native_py37

Bash:

bash
PYTHON37="${PYTHON37:-python3.7}"
vx just check-python-support
vx just check-py37-syntax
vx just build-py37 -i "$PYTHON37"
"$PYTHON37" scripts/ci/check_python_wheel.py --profile native_py37 --platform linux-x86_64 \
  'dist/dcc_mcp_core-*-cp37-cp37m-*.whl'
wheel=$(ls dist/dcc_mcp_core-*-cp37-cp37m-*.whl | head -1)
"$PYTHON37" -m pip install --force-reinstall --no-deps "$wheel"
"$PYTHON37" scripts/ci/smoke_python37_runtime.py --profile native_py37

For the lite profile, use the same full interpreter. PowerShell:

powershell
& $py37 scripts/build_py37_pure_wheel.py
$wheel = Get-ChildItem dist/dcc_mcp_core-*-py3-none-any.whl | Select-Object -First 1
& $py37 scripts/ci/check_python_wheel.py --profile lite_py37 --platform any $wheel.FullName
& $py37 -m pip install --force-reinstall --no-deps $wheel.FullName
& $py37 scripts/ci/smoke_python37_runtime.py --profile lite_py37

Bash:

bash
"$PYTHON37" scripts/build_py37_pure_wheel.py
"$PYTHON37" scripts/ci/check_python_wheel.py --profile lite_py37 --platform any \
  'dist/dcc_mcp_core-*-py3-none-any.whl'
wheel=$(ls dist/dcc_mcp_core-*-py3-none-any.whl | head -1)
"$PYTHON37" -m pip install --force-reinstall --no-deps "$wheel"
"$PYTHON37" scripts/ci/smoke_python37_runtime.py --profile lite_py37

Deprecation process ​

Python 3.7 support can be removed only after an accepted superseding ADR, a major release, at least 180 days of notice, and a documented adapter migration path. A dependency upgrade or hosted-runner change is not, by itself, a reason to silently weaken the contract.

References ​

Released under the MIT License.