You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Build: cut the final Python release of devlaunch — the last version before the Rust cut-over.
Created by #53 (Rust rewrite: go, parallel migration). Every targeted fix on this map lands in Python first; this ticket ships them to current users as one release and marks the end of the Python line.
Version bump past the current 0.0.7 (pyproject.toml), with conda.recipe/recipe.yaml in sync.
CHANGELOG entry naming this as the final Python release and pointing at the successor, so a user on the last Python version can find out what happened.
Publish through both existing channels unchanged — .github/workflows/publish.yml (PyPI, single hatchling wheel) and .github/workflows/conda-publish.yml (rattler-build → prefix.dev blooop, noarch: python). This is the last release either runs in its current form: per #52, the Rust successor keeps both channels but changes their shape — maturin bin bindings produce a per-platform wheel matrix instead of one noarch wheel, and the conda recipe goes from noarch: python to per-platform compiled builds.
Tag it, so the port has a named reference implementation to port from and to diff behavior against.
Acceptance: both published artifacts install and run dl --version in a clean environment.
Two things this ticket deliberately does not do — they belong to the rewrite effort's own map, not here:
Decide the Rust version's numbering or whether it keeps the devlaunch distribution name.
Change either publish workflow. They ship this release as-is and are rewritten there.
The venv also confirms the dependency set is right: iterfzf, tomli, and no tomli-w.
The changelog
[Unreleased] became [0.0.11], carrying #65's cache migration — the last of the seven review fixes. The other six had already gone out in 0.0.10 while this work was in flight, which is also why the 0.0.10 entry gained the two user-visible fixes it shipped without documenting (#56's corrupt-metadata guard and #57's missing-devpod error). They belong under the version that contains them; listing them under 0.0.11 would tell a user they arrive now. #59 is not backfilled — it changed nothing a user of the tool can observe.
The entry names this as intended to be the last release of the Python implementation and points at the Rust successor sharing a core crate with blooop/wayfinder, per #53.
tomli_w
Dropped in #91, separately, because regenerating pixi.lock also rewrites it from format v6 to v7 — ~830 of 848 lines — and that would have buried the release diff. Its only caller was the save_config that #59 deleted. Both pyproject.toml and the conda run dep are now consistent with the code.
One thing this ticket assumed and should not have
The ticket said to "publish through both existing channels unchanged". PyPI is genuinely automatic. Conda was not, and never had been: conda-publish.yml's release: published trigger has never once fired, because Auto-publish creates the release with the default GITHUB_TOKEN and GitHub does not start workflow runs from events raised that way. The run history is workflow_dispatch all the way back. 0.0.11's conda package needed the same hand-dispatch as 0.0.9 and 0.0.10.
Fixed in #102 by chaining off Auto-publish with workflow_run. That ordering is required rather than cosmetic: the recipe builds from tag: v${{ version }}, so the tag has to exist before rattler-build can fetch the source — which is presumably why the release trigger was chosen. A version-compare gate keeps it from firing on every push, since Auto-publish succeeds whether or not it published anything, and force_build — declared as an input and read nowhere — now does something. It can only be proven by the next release, by construction.
Migration verified end to end against the real package
Not just unit tests: a scratch cache with two old-scheme clones, each holding uncommitted work, migrated with the installed 0.0.11.
dl --ls left it at version 1; the first command touching a workspace migrated it and printed both notices; uncommitted files, HEADs and branches all survived; .bare was never renamed; metadata agreed with disk at version 2; and the second run was a silent no-op.
Worth recording: the first attempt at this test was invalid. Run from the repo directory, python -c imported the stale working tree instead of the installed package, so the migration appeared not to fire at all. Anything testing a released artifact has to run from outside the checkout.
Activity
blooop commentedon Aug 8, 2026
Answer
0.0.11 is released and both artifacts verified. PR #92, tagged v0.0.11.
Acceptance was "both published artifacts install and run
dl --versionin a clean environment":The venv also confirms the dependency set is right:
iterfzf,tomli, and notomli-w.The changelog
[Unreleased]became[0.0.11], carrying #65's cache migration — the last of the seven review fixes. The other six had already gone out in 0.0.10 while this work was in flight, which is also why the 0.0.10 entry gained the two user-visible fixes it shipped without documenting (#56's corrupt-metadata guard and #57's missing-devpod error). They belong under the version that contains them; listing them under 0.0.11 would tell a user they arrive now. #59 is not backfilled — it changed nothing a user of the tool can observe.The entry names this as intended to be the last release of the Python implementation and points at the Rust successor sharing a core crate with blooop/wayfinder, per #53.
tomli_wDropped in #91, separately, because regenerating
pixi.lockalso rewrites it from format v6 to v7 — ~830 of 848 lines — and that would have buried the release diff. Its only caller was thesave_configthat #59 deleted. Bothpyproject.tomland the conda run dep are now consistent with the code.One thing this ticket assumed and should not have
The ticket said to "publish through both existing channels unchanged". PyPI is genuinely automatic. Conda was not, and never had been:
conda-publish.yml'srelease: publishedtrigger has never once fired, because Auto-publish creates the release with the defaultGITHUB_TOKENand GitHub does not start workflow runs from events raised that way. The run history isworkflow_dispatchall the way back. 0.0.11's conda package needed the same hand-dispatch as 0.0.9 and 0.0.10.Fixed in #102 by chaining off Auto-publish with
workflow_run. That ordering is required rather than cosmetic: the recipe builds fromtag: v${{ version }}, so the tag has to exist before rattler-build can fetch the source — which is presumably why the release trigger was chosen. A version-compare gate keeps it from firing on every push, since Auto-publish succeeds whether or not it published anything, andforce_build— declared as an input and read nowhere — now does something. It can only be proven by the next release, by construction.Migration verified end to end against the real package
Not just unit tests: a scratch cache with two old-scheme clones, each holding uncommitted work, migrated with the installed 0.0.11.
dl --lsleft it at version 1; the first command touching a workspace migrated it and printed both notices; uncommitted files, HEADs and branches all survived;.barewas never renamed; metadata agreed with disk at version 2; and the second run was a silent no-op.Worth recording: the first attempt at this test was invalid. Run from the repo directory,
python -cimported the stale working tree instead of the installed package, so the migration appeared not to fire at all. Anything testing a released artifact has to run from outside the checkout.