0.6.0 release gate (2026-10-26)
What was run on main 2763cad (the TASK-67 merge, PR #98) on Linux
x86-64 with QGIS 4.2.3 (Qt 6.11.2), CPython 3.14.8 in the locked Pixi
environment and CPython 3.11.2 for the clean install, Bun 1.4.2. Every line
is a command that ran here; nothing is inferred from CI. The tree is
unstamped: manifests still say 0.5.0 / 0.3.0, so artifact names below
carry 0.5.0. Stamping, tagging and publishing wait for an explicit
“Release 0.6.0”.
- Required work. TASK-58, 59, 61, 62, 63, 64, 65, 66 and 67 are Done
(PRs #84–#98, each green on
checks, macOS and Windows; #98’smainrun 40374825948 green). Open targets stay blockers, not promises: Windows and macOS QGIS rows remainunqualified(TASK-33), the display-server Desktop GUI row is a blocker, decision-15 and decision-19 gaps are out of this release. - Scope.
release.py plan --scope python --bump minorfrompython-v0.5.0planspython-v0.6.0: five breaking changes (feat(jobs)!1ba9add,feat(core)!43411d8,feat(tools)9286234,feat(runtime)!4664769,refactor(runtime)!56bae76) and fourteen features througha8e4879.plan --scope typescript --bump minorfromts-v0.3.0plansts-v0.4.0: two breaking (ee95800, 9286234), four features (e1135a1, a4ca6e1, d922226, 9286234), one fix (d48c341);git diff ts-v0.3.0..maintouches 13 bridge source files (+1637/−385).verify-versionson the unstamped tree agrees on 0.5.0 for runtime, tools and kit, 0.3.0 forpackage.json, the alias manifest, the alias dependency and the scaffold pin, contract version 1 on both sides. The changelog file the planner writes into the repository root was removed again. - Migration note completeness (AC 1). An AST diff of module-level
public names between
python-v0.5.0andmainunderqgis_sdk: removed modulesqgis_sdk.reference(.algorithms); removed namesalgorithms.{algorithm, AlgorithmResult},providers.{RegisteredAlgorithm, parameter_kinds, LAYER_PARAMETER, METRES_PARAMETER},declarations.{RunSignature, describe_run_method}. All are named in doc-12’s 0.6.0 note (the two inspectors were added by this gate; they were never in__all__). Added modules:adapters.{surfaces, webview},bindings,services.processing,testing.ui,ui.{actions, form_fields, surfaces}. Tools removals (check_entry_point,RUNTIME_DISTRIBUTIONS,WATCHED_FILES, the scaffold*_CLASS_FACTORY,TRANSPORT,WEBVIEW) are internal to the command. - Static gate.
lint-python,format-python-check(280 files),test-release-tool(248),lint-github-actions,typecheck,biome-check(64 files),generate_bridge_clients.py --check(up to date): all clean. - Suites.
bun run test5/5 tasks (bridge 234, alias 10, example page 5, Python 1675 passed / 43 skipped includingtests/scripts);bun run coveragePython 95.58%, bridge 98.55% lines (gate 90%);tests/scripts248 passed (the standalone run). - Opt-in harnesses, one process per file, all passed: lifecycle 5,
desktop adapter 22, coexistence 23, scaffold desktop 10, native services
smoke 7, Qt scheduler 11, headless WebEngine 9,
tests/services134, scaffold web 8, devtools 9 (now including the--ui nativedialog opened from its toolbar action before and after an edit, TASK-67), built ZIP in a clean profile 1, reference example through the toolchain 5.qgis-sdk check examples/simple: 9 files, no problems;qgis-sdk teston the example 17 pure,--target qgis5 native;test-reference-example5,test-reference-web5. - A 0.5-style project under the 0.6
check(AC 3).qgis-sdk new legacy_tools --web vanillarun from apython-v0.5.0worktree (so the project carriesmetadata.txt,webview.py,classFactory,bridge.tsandtransport.ts), then today’scheck:ENTRY002on__init__.py,META001onmetadata.txt,PROJECT002(no[tool.qgis-sdk] plugin) andVERSION003(no runtime requirement),checked 4 files: 4 problems, exit 1 - the API changes reported by name, no crash, each with the decision-43 remediation. - Build and clean install (unstamped).
build-python --scope pythonverify-python(twine) pass on the three wheels (kitd50b898c…fa18, runtime565bf3d0…f159, tools0d60ebd6…d7a1, all named 0.5.0 until the stamp). A fresh CPython 3.11.2venvwith only the three wheels andtyperfrom PyPI:pip checkclean; 60 of 62qgis_sdkmodules import withoutqgisorPyQt6enteringsys.modules, the two that do not are the documented optional edges (adapters.pydantic_typeswithout pydantic,adapters.qgiswithout QGIS). From the installed package:qgis-sdk new ft/field_tools --ui native,check(4 files: no problems),test(4 passed, theFakeUistarter included),targets(the host lands on the CPython 3.11 QGIS-free row),build(78 files, web: none). The unpacked ZIP importsfield_tools.pluginandfield_tools.uiunderpython -Swith the SDK absent, resolvingfield_tools._vendor.qgis_sdkand no top-levelqgis_sdk; the generated__init__.pybindsclassFactory = host(...)andmetadata.txtcarrieshasProcessingProvider=nofor a project without providers.
- The bridge pair (AC 5, evidence so far).
HOST_FINGERPRINTsha256:f96bdf10…7d6f,HOST_SCHEMA_VERSION 1andBRIDGE_PROTOCOL_VERSION 1are byte-identical atts-v0.3.0,python-v0.5.0andmain. The bridge delta sincets-v0.3.0is the root barrel, the prefixed generated errors,bridge.schema.ts+QgisSdk.fromBridgeSchema, nested ids and the consumer type check (doc-13’s 0.4.0 note). Bridge 0.4.0 from this tree ran against the 0.6.0 runtime from this tree inside a realQWebEngineViewin the reference harness (QGIS_SDK_REFERENCE=1, 5 passed: the handshake answered by the real dispatcher) and in the scaffold web harness (8 passed). The stampts-v0.4.0will movepackage.json, the alias and the scaffold pin together (decision-41); not done here. - Licences. As for 0.5.0: MIT
LICENSEin each wheel (dist-info/licenses),NOTICEunder_vendorin the built ZIP;DEP001still refuses third-party code inside a plugin. - Not run here. The Conda build:
bun run buildsucceeds for the bridge and the alias and fails atqgis-sdk-python#build:condabecause conda-forge repodata is unreachable from the sandbox;release.ymlbuilds the three outputs before any upload, and an-rc.1rehearsal can prove it again on request. - Approval. Releasing 0.6.0 was authorised explicitly on 2026-10-26
(“release”, chosen from gate-only / gate + stamp / full after the gate
record above was merged as #99 →
adc8fa0), with a pause for “Merge” on the stamp pull request; the two tags follow on its merge commit. - Stamp and artifacts.
release.py stamp --scope python --version 0.6.0moved the kit, runtime and tools manifests, the kit’s exact pins, the tools’ runtime range (>=0.6.0,<0.7), the recipe’s three versions and the example’s windows (>=0.6,<0.7);stamp --scope typescript --version 0.4.0movedpackage.json, the alias (and its pin on the scoped package) and the scaffold pinSDK_NPM_VERSION(decision-41).verify-versionsagrees on 0.6.0 for all nine Python entries, 0.4.0 for the four bridge entries, contract version 1. One test literal followed the pin (test_scaffold_web.py,0.3.0→0.4.0). On the stamped tree: the static gate clean,bun run test5/5 (bridge 234, alias 10, page 5, Python 1650 passed / 43 skipped),tests/scripts248, reference example 5 + 5, harnesses scaffold web 8, reference 5, bundle 1, scaffold desktop 10.build-python+verify-python(twine) pass onqgis_sdk-0.6.0-py3-none-any.whl(b6861c99…04f4, pinsqgis-sdk-runtime==0.6.0andqgis-sdk-tools==0.6.0),qgis_sdk_runtime-0.6.0-py3-none-any.whl(8d5143c4…4cb3, 74 modules, no dependency, MITLICENSEindist-info/licenses) andqgis_sdk_tools-0.6.0-py3-none-any.whl(10894bf4…842f,qgis-sdk-runtime>=0.6.0,<0.7andtyper==0.27.3). A fresh CPython 3.11.2venvwith only the three wheels:pip checkclean;qgis-sdk new --ui native --web vanillawritesqgis-sdk-runtime>=0.6,<0.7,qgis-sdk-tools>=0.6,<0.7and"@archont561/qgis-sdk": "0.4.0", andcheckis clean. - Released afterwards. PR #100 merged as
0adb47a; the annotated tagspython-v0.6.0andts-v0.4.0(release notes in the annotations) on that one commit ranrelease.ymltwice: 40381881731 (build,conda,pypi,github-releasesucceeded;npm,github-packagesskipped) and 40381881508 (build,npm,github-packages,github-releasesucceeded;conda,pypiskipped). PyPI servesqgis-sdk 0.6.0(b6861c99…04f4),qgis-sdk-runtime 0.6.0(8d5143c4…4cb3) andqgis-sdk-tools 0.6.0(10894bf4…842f) - the same hashes as the wheels built here before the merge, so the build is reproducible;pip install qgis-sdk==0.6.0from the index into a fresh CPython 3.11.2 venv (about four minutes after upload, once the simple index caught up with the JSON API) resolves runtime and tools at 0.6.0 withpip checkclean, andqgis-sdk targets/new --ui native/checkrun from the installed package. npm serves@archont561/qgis-sdk@0.4.0and the aliasqgis-sdk@0.4.0aslatest;bun addof both resolves the alias to the scoped package’s objects,QgisSdk.fromBridgeSchemais callable and@archont561/qgis-sdk/hostexports the unchangedHOST_FINGERPRINT. The GitHub Releases carry three wheels,qgis-sdk-0.6.0-pyh38154c1_0.conda,qgis-sdk-runtime-0.6.0-pyh4616a5c_0.conda,qgis-sdk-tools-0.6.0-pyh4616a5c_0.condaandSHA256SUMS(Python), the two tarballs andSHA256SUMS(TypeScript). prefix.dev uploads succeeded per the job log; that channel and the release-asset CDN are not reachable from the sandbox, so they are attested by the runs only. Still open for the owner: yank the0.0.0placeholders of the runtime and the tools on PyPI, deprecate the0.0.0-stagenpm versions.