Portability and validation status

Workbench uses four evidence levels. Wheel means a platform-tagged distribution was produced. Installed means that wheel installed and imported in a fresh virtual environment. Contracts means the installed public API loaded the bundled Slang runtime and compiled a representative shader using a packaged Workbench module. Runtime means the canonical native harness created the named QRhi device and pipeline and recorded a draw. A lower level never implies a higher one.

Supported describes the intended product/platform contract. Packaged records that a wheel exists for the stated interpreter and architecture. Tested records fresh-wheel and native contract execution. Runtime validated is reserved for a successful draw through miskeyed-workbench --rhi <backend> --rhi-smoke-test.

The 0.3.0 release gate covers CPython 3.11, 3.12, and 3.13. Native contracts and runtime smoke execute once per platform on 3.11; the other Python lanes validate the wheel and installed-package contract without claiming another render result.

Release branches exercise the same build and smoke implementation with a stabilization subset: Python 3.11 and 3.13 on every platform. Main integration adds Python 3.12 and is the exhaustive final gate. This makes release/* an early cross-platform staging ground without duplicating the full main cost or granting publication permissions.

0.3.0 release validation

Platform

Wheels

Default QRhi backend

Runtime validation status

Windows x64

CPython 3.11–3.13

D3D11

VALIDATED on Python 3.11: D3D11 and Vulkan/SwiftShader

Linux x64

CPython 3.11–3.13

Vulkan

VALIDATED on Python 3.11: Vulkan with the explicitly selected Mesa lavapipe ICD

macOS arm64

CPython 3.11–3.13

Metal

VALIDATED on Python 3.11: Metal

macOS x86_64

CPython 3.11–3.13

Metal

VALIDATED on Python 3.11: Metal

The workflow writes a per-lane Actions summary from actual step outcomes. Read success as evidence only for that column and lane. NOT VALIDATED means no runtime smoke ran in that lane; it is not a failure and is not a runtime pass. UNSUPPORTED is reserved for a combination the product does not offer.

The latest release-candidate run is the source of truth for whether required evidence actually passed. Support wording in release notes must be updated from those results, not from the intended matrix or from wheel availability alone.

The stable support definition is kept in ci/support-matrix.json. Repository tests verify that its Python range agrees with pyproject.toml and that every documented wheel and runtime backend has a corresponding release-matrix lane. The workflow remains human-authored so runner and driver setup stays visible rather than hiding CI policy in a generator.