0.4.0 release gate (2026-10-25)
What was run before the Python 0.4.0 stamp was requested, on Linux with
QGIS 4.2.3 (Qt 6.11.2, Chromium 140), Bun 1.4.2, from main 7c7a1d0
plus the gate branch. Every line is a command that ran here; nothing is
inferred from CI.
- Required work. TASK-6, TASK-8, TASK-16, TASK-19, TASK-21, TASK-26
(and TASK-29, the previous gate) are Done; their merges are PRs #65,
#69-#71, #73 and #74, each green on
checks, macOS and Windows. - Scope.
release.py plan --scope python --bump minorfrompython-v0.3.0planspython-v0.4.0with ten features and three fixes (the push default would plan a 0.3.1 patch; the minor is the explicit act the release policy requires).plan --scope typescriptskips: no release-worthy commit sincets-v0.3.0, andgit diff ts-v0.3.0..mainunderpackages/qgis-sdk-typescriptandpackages/qgis-sdk-aliasis empty, so the bridge is not released (TASK-30 AC5).verify-versionsagrees on 0.3.0 for both scopes and on contract version 1; the planned stamp moves the Python manifests only. - Changelog fix. The 0.4.0 Python range starts before the 2026-10-24
directory rename, and
release.pyclassified commits by the newpackages/qgis-sdk-python/prefix only, so the four features of PR #65 (new, derived ids,ctxclass attribute, services onPluginContext) were missing from the generated notes. Both spellings now count, with a test intests/scripts/test_release.py. - Static gate.
lint-python,format-python-check(241 files),test-release-tool(192),lint-github-actions,typecheck,biome-check(44 files),generate_bridge_clients.py --check(up to date): all clean. - Suites. Bun 3/3 tasks;
bun run coverage96.19% (gate 90%); Python 1369 passed, 38 skipped;tests/scripts192 passed. - Opt-in harnesses, one process per file (see the note below):
lifecycle 5, desktop adapter 22, coexistence 23, scaffold desktop 10,
scaffold web 8 (21 s), native services qualification 6 + 1 skipped and
tests/services112, devtools 9 (29 s), built ZIP in a clean profile 1, headless WebEngine smoke 9. All passed. - Artifact.
release.py build-python+verify-python(twine) pass onqgis_sdk-0.3.0-py3-none-any.whl(99 files:qgis_sdk,qgis_sdk_tools,dist-info/licenses/LICENSE, no tests, no scripts, console scriptqgis-sdk = qgis_sdk_tools.__main__:main, one runtime dependencytyper==0.27.3). In a freshvenvwith only that wheel and its dependencies, every runtime and tools module imports withoutqgisenteringsys.modules;qgis-sdk new field_tools --no-input,check(checked 3 files: no problems) andbuild(70 files, runtime 0.3.0, web: none) run from the installed package; the unpacked ZIP imports with the SDK absent from the interpreter, resolvingfield_tools._vendor.qgis_sdkand nothing top-level.qgis-sdk testneedspytest, which the wheel does not require - thedevextra does; that is the documented shape, not a defect. - Licences. The wheel carries the MIT
LICENSE; the built ZIP carries the SDKNOTICEunder_vendor. That is the whole licence validationbuildperforms:DEP001refuses third-party code inside the package, so there is no other licence to collect yet. When theexternalallowance grows beyond the runtime, licence collection becomes a build rule. - Released afterwards, on two explicit requests. The stamp PR (#76,
release.py stamp --scope python --version 0.4.0, merged asa6b3d8e) and then the annotated tagpython-v0.4.0on that merge commit.release.ymlrun 40214978629 re-stamped from the tag, verified both scopes and the contract, built and published: PyPIqgis-sdk 0.4.0(wheel sha25666de7e45…3a7eb7, bit-identical to the wheel built here before the stamp - the build is reproducible), prefix.dev condaqgis-sdk-0.4.0-pyh4616a5c_0.conda(sha2566354bbdc…2128a), and the GitHub Release with both files andSHA256SUMS; the npm and GitHub Packages jobs skipped, as a Python-scope tag must. PyPI’s JSON API confirms 0.4.0 as the latest version; prefix.dev is not reachable from the sandbox, so the conda publish is attested by the job log only.