0.7.0 release gate (2026-10-27)
What was run on main a161d4b (the PR #116 merge; TASK-32’s
dependencies all landed by ee7ab78, the re-scope by 2427e37) 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 installs, Bun 1.4.2.
Every line is a command that ran here; nothing is inferred from CI
except where a run id is given. The tree is unstamped: manifests
still say 0.6.0 / 0.4.0 / 0.1.0, so artifact names below carry 0.6.0.
Stamping, tagging and publishing wait for an explicit “Release 0.7.0”.
- Required work. TASK-68, 69, 96, 70, 108, 109, 110 and 43 are Done
(PRs #101–#114, each green on
checks, macOS and Windows); TASK-73 and TASK-77 left the milestone unopened (PR #115, re-scope above). Ona161d4bthemainrunsCI40568427871,docs40568427854 andautorelease40568427794 are green. Open targets stay blockers, not promises: the Windows and macOS QGIS rows and the display-server Desktop GUI row are TASK-33, now in m-11 with TASK-99. - Scope.
release.py plan --trigger pushfrompython-v0.6.0/ts-v0.4.0reads the sixteen merges since 0.6.0 as0.6.1/0.4.1and skips theuitrain, as the alignment rule says it must;--bump minorplanspython-v0.7.0andts-v0.5.0. The minor is a decision, not a planner result: the UI toolkit (sixteenfeatcommits on the Python side, among them the removal of theNativeFormsspelling the 0.7.0 migration notes document), the bridge’s store core with the./vueand./svelteadapters andalgorithms.run, and the first@archont561/qgis-sdk-ui0.1.0 whose peer range names the bridge minor it was qualified with. The transport protocol and the host schema version stay at 1;HOST_FINGERPRINTmoved since 0.6.0 (sha256:f96bdf10…→sha256:16790dc8…, theFileRefkind and the four Processing operations - additions), so a 0.4.0 page keeps working against a 0.7 host. (Corrected 2026-10-27 after the release: the first version of this line called the fingerprint unchanged.) - Static gate.
lint-pythonclean,format-python-check338 files,lint-github-actionsclean,biome-check177 files,typecheck(bridge and components) clean,test-release-tool/tests/scripts262 passed. - Suites. Root
bun run test10/10 tasks: config 6, docs 34, bridge 310 (16 files, every adapter’s project), alias 12, components 100 (14 files,--conditions=browser), ui alias 13, Python 1989 passed / 48 skipped inside turbo and 1964 passed / 48 skipped as the standalonepytest tests -q -xfrompackages/qgis-sdk-python. Storybookstorybook:buildcompleted (storybook-static, 16 entries). - Harnesses, one file per process.
QGIS_SDK_SCAFFOLD_WEB=1test_scaffold_web_native.py8 passed (generated vanilla, React, Vue and Svelte pages installed, tested and built against the workspace bridge and components, then driven in a realQWebEngineView);QGIS_SDK_REFERENCE=1test_reference_example_native.py5 passed;QGIS_SDK_BUILD_INSTALL=1test_bundle_native.py1 passed;test_desktop_host_native.py4 passed;QGIS_SDK_SCAFFOLD_DESKTOP=1tests/scripts/test_qualification_scaffold.py10 passed; the reference exampletest-reference-example20 pure + 7 QGIS passed. - Artifacts.
bun run buildbuilt the bridge (7 entries, each reaching its own framework only), the alias, the components and the example page, andbuild-pythonthree wheels, all twinePASSED(verify-python):qgis_sdk-0.6.0-py3-none-any.whl(69976a57…),qgis_sdk_runtime-0.6.0-py3-none-any.whl(1201c063…, 106 modules, MITLICENSEindist-info/licenses),qgis_sdk_tools-0.6.0-py3-none-any.whl(d41e3903…).build:condafails here because conda-forge is unreachable from the sandbox; thepython-v0.7.0-rc.2run above built the three Conda outputs from this tree’s recipe, so that step is attested by the run. - Clean install. A fresh CPython 3.11.2
venvwith only the three wheels:pip checkclean (typer 0.27.3the one third-party dependency);qgis-sdk new fresh_plugin --ui native --web vanillawritesqgis-sdk-runtime>=0.6,<0.7,qgis-sdk-tools>=0.6,<0.7,"@archont561/qgis-sdk": "0.4.0"and"@archont561/qgis-sdk-ui": "0.1.0"(the committed scaffold pins the stamp moves);checkon it is clean (4 files);targetsprints the four-row support matrix. - A 0.6 project under the 0.7 tools (AC 3). A second venv with
pip install qgis-sdk==0.6.0from PyPI scaffoldedold_plugin(qgis-sdk-runtime>=0.6,<0.7, bridge pin0.4.0); its owncheckis clean. The tools at HEAD on that project: clean on the unstamped tree (the runtime is still 0.6.0), and on a tree stamped0.7.0locally (then reverted)checkreports exactly the two version findings and nothing else -VERSION001(the pin is outside the runtime range this tools release supports,>=0.7.0,<0.8) andVERSION004(declares>=0.6,<0.7but the importable runtime is 0.7.0), each with its remediation - rather than crashing. The remaining 0.6 → 0.7 renames are documented in the doc-12 0.7.0 notes and are not somethingcheckdetects (no rule reads plugin source for removed names). - Verify.
verify-versionsagrees on 0.6.0 for the nine Python entries, 0.4.0 for the four bridge entries and 0.1.0 for the ui manifests, contract version 1 across both languages. Theuiscope’s peer range>=0.4.0 <0.5.0holds the bridge at HEAD today and will refuse it once the bridge is stamped 0.5.0: the stamp pull request moves it to>=0.5.0 <0.6.0(the rehearsal finding above). - Licences. MIT
LICENSEin each wheel’sdist-info/licensesand in the two npm tarballs the rehearsals packed;DEP001still refuses third-party code inside a plugin. - Migration notes. doc-12 carries 0.7.0 migration notes (in progress) and doc-13 Next minor (unreleased) migration notes, published with the Draft badge; the stamp pull request drops the qualifiers so the site publishes them as 0.7.0 / 0.5.0 notes together with the manifests.
- Not run here. The Conda build (above);
pixi run -e bun bun run coverage(the 90 % gates run in CI on every pull request and were green on #116). - Approval. Not given by this record. The real triple is three tags
on the stamp pull request’s merge commit -
python-v0.7.0,ts-v0.5.0,ui-v0.1.0- and the first cleanui-v0.1.0is the first real publish of@archont561/qgis-sdk-uiandqgis-sdk-ui(deprecate the0.0.0placeholders after it, owner-side). - Stamp and artifacts (2026-10-27, the stamp pull request). On the
gate record’s merge
a7d8d5a:release.py stamp --scope python --version 0.7.0moved the kit, runtime and tools manifests, the kit’s exact pins, the tools’ runtime range (>=0.7.0,<0.8), the recipe’s three versions and the example’s windows (>=0.7,<0.8);stamp --scope typescript --version 0.5.0movedpackage.json, the alias (and its pin on the scoped package) and the scaffold pinSDK_NPM_VERSION. By hand, as announced above: the components’ and their alias’s peer range on@archont561/qgis-sdkto>=0.5.0 <0.6.0, the doc-12 heading to 0.7.0 migration notes and the doc-13 heading to 0.5.0 migration notes (the site now publishespython-migration/v0-7andtypescript-migration/v0-5without the Draft badge), the READMEs’ and the two guides’ status lines, and one test literal (test_scaffold_web.py,0.4.0→0.5.0).verify-versionsagrees on 0.7.0 for the nine Python entries, 0.5.0 for the four bridge entries, 0.1.0 for the four ui entries with the peer range holding the bridge, contract version 1 in both languages. On the stamped tree: the static gate clean, rootbun run test10/10 (bridge 310, components 100, Python 1989 passed / 48 skipped),tests/scripts262, harnesses scaffold web 8, reference 5, bundle 1, scaffold desktop 10, reference example 20 + 7,docs-build71 pages and 6470 links clean.build-python+verify-python(twine) pass onqgis_sdk-0.7.0-py3-none-any.whl(262a32c4…, pinsqgis-sdk-runtime==0.7.0andqgis-sdk-tools==0.7.0),qgis_sdk_runtime-0.7.0-py3-none-any.whl(fe409110…, 106 modules, no dependency, MITLICENSEindist-info/licenses) andqgis_sdk_tools-0.7.0-py3-none-any.whl(862f1118…,qgis-sdk-runtime>=0.7.0,<0.8andtyper==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.7,<0.8,qgis-sdk-tools>=0.7,<0.8,"@archont561/qgis-sdk": "0.5.0"and"@archont561/qgis-sdk-ui": "0.1.0", andcheckis clean; the same installed tools on a project scaffolded byqgis-sdk==0.6.0from PyPI reportVERSION001andVERSION004with their remediations and nothing else. The three tags follow on this pull request’s merge commit, each only on explicit authorization. - Released afterwards. PR #118 merged as
e9b2ce8; the annotated tagspython-v0.7.0,ts-v0.5.0andui-v0.1.0(release notes in the annotations) on that one commit ranrelease.ymlthree times: 40577281463 (build,conda,pypi,github-releasesucceeded; the npm jobs skipped), 40577281275 (build,npm,github-packages,github-releasesucceeded; the Python jobs skipped) and 40577280907 (build,ui,github-releasesucceeded; everything else skipped). PyPI servesqgis-sdk 0.7.0(262a32c4…),qgis-sdk-runtime 0.7.0(fe409110…) andqgis-sdk-tools 0.7.0(862f1118…) - the same hashes as the wheels built here on the stamped tree, so the build is reproducible. npm serves@archont561/qgis-sdk@0.5.0and the aliasqgis-sdk@0.5.0aslatest, and - the first real publish of both names -@archont561/qgis-sdk-ui@0.1.0andqgis-sdk-ui@0.1.0aslatestnext to the0.0.0placeholders. The GitHub Releases carry three wheels,qgis-sdk-0.7.0-pyh245bdaf_0.conda,qgis-sdk-runtime-0.7.0-pyh4616a5c_0.conda,qgis-sdk-tools-0.7.0-pyh4616a5c_0.condaandSHA256SUMS(Python), the two tarballs andSHA256SUMS(bridge), the two tarballs andSHA256SUMS(ui). 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: deprecate the0.0.0placeholders of@archont561/qgis-sdk-uiandqgis-sdk-uion npm (and the0.0.0/0.0.0-stageones that remain from earlier releases).