Compatibility Contract¶
Assertions¶
CMP-001 - CPython 3.13 and 3.14 are the complete Python support range¶
Contract: Package metadata, type-checker configuration, local commands, documentation, dependency resolution, and CI MUST declare and exercise CPython 3.13 and 3.14. Static analysis MUST target the 3.13 minimum, and runtime source MUST parse with its grammar. A different minor MUST fail before installation or testing. Lock generation MAY use the documented 3.14 resolver host, but wheel resolution MUST cover both supported minors.
Evidence:
test_python_and_copyright_ownership_are_exact-tests/test_project_boundary.py::test_python_and_copyright_ownership_are_exacttest_runtime_sources_parse_with_minimum_supported_grammar-tests/test_project_boundary.py::test_runtime_sources_parse_with_minimum_supported_grammartest_public_support_statements_match_package_metadata-tests/test_documentation_contracts.py::test_public_support_statements_match_package_metadatatest_ci_preserves_quality_python_package_and_openssh_gates-tests/test_ci_policy.py::test_ci_preserves_quality_python_package_and_openssh_gates
CMP-002 - Every GitHub-hosted job uses Ubuntu 26.04¶
Contract: All repository-owned GitHub-hosted jobs MUST use the exact
ubuntu-26.04 runner label. The workflow set MUST not mix mutable aliases or
older Ubuntu images into the validation and publication chain.
Evidence:
test_every_github_hosted_job_uses_ubuntu_26_04-tests/test_ci_policy.py::test_every_github_hosted_job_uses_ubuntu_26_04
CMP-003 - Import and command construction do not require Linux services¶
Contract: Importing the package, validating authorities, constructing command vectors, and running the ordinary unit suite MUST not require Linux session services, a live SSH endpoint, or a sibling checkout. This isolation MUST NOT be presented as support for an undeclared non-Linux runtime platform.
Evidence:
test_non_linux_environment_is_a_noop-tests/test_session_environment.py::test_non_linux_environment_is_a_nooptest_runtime_imports_only_standard_library_or_local_modules-tests/test_project_boundary.py::test_runtime_imports_only_standard_library_or_local_modules
CMP-004 - Linux-specific behavior is isolated and accepted with OpenSSH¶
Contract: Linux session recovery MUST degrade to the inherited environment
when its optional probes are unavailable or invalid. Local and CI acceptance
MUST test the native host client against the same container-only OpenSSH server.
The test image MUST pin its base by digest and server packages through a signed
immutable Debian snapshot; it MUST NOT depend on the host distribution's server
package or exact client/server version equality. The host MUST provide a working
Podman or Docker engine and native OpenSSH client, but MUST NOT need sshd
or an engine-injected init binary. The server image MUST supply its own init.
Evidence:
test_ci_preserves_quality_python_package_and_openssh_gates-tests/test_ci_policy.py::test_ci_preserves_quality_python_package_and_openssh_gatestest_missing_probe_executables_are_a_noop-tests/test_session_environment.py::test_missing_probe_executables_are_a_nooptest_make_and_ci_share_the_pinned_server_without_host_sshd-tests/test_acceptance_support.py::test_make_and_ci_share_the_pinned_server_without_host_sshdtest_server_runs_when_the_engine_has_no_host_init_binary-tests/test_acceptance_support.py::test_server_runs_when_the_engine_has_no_host_init_binarytest_real_openssh_one_auth_mux_and_owned_cleanup-tests_acceptance/test_openssh_acceptance.py::test_real_openssh_one_auth_mux_and_owned_cleanup
CMP-005 - OpenSSH and remote Python are capability prerequisites¶
Contract: The runtime MUST remain third-party-dependency-free. Consumers
MUST provide a compatible native OpenSSH client; only consumers using
OwnedRemoteProcess MUST also provide python3 on the remote target.
Evidence:
test_runtime_imports_only_standard_library_or_local_modules-tests/test_project_boundary.py::test_runtime_imports_only_standard_library_or_local_modulestest_remote_program_encodes_argv_as_data_once-tests/test_remote_process.py::test_remote_program_encodes_argv_as_data_once