Cut 0.38.0 - #597
Merged
Merged
Conversation
The [Unreleased] section as it stands becomes the release: the `RemoteCommand` split, and the two guards that make a version collision loud. **0.38.0 and not 0.37.1.** `LaunchVerb::Attach` is `pub`, and its `command` field goes from `Option<String>` to `Option<RemoteCommand>` at both paths `cargo public-api` renders it at. Anyone driving `devlaunch-core` directly recompiles, so the patch reading is not available. Nothing about the CLI moves -- no flag changes, `--help` is unchanged, and what reaches a workspace is identical: every payload assertion in the suite is untouched. The one visible difference outside the API is an error message. A command holding a NUL is now refused as `echo '<NUL>hi'` rather than `echo <NUL>hi`, because with argv there is no single string the caller gave and the composed line is the thing that could not be made into a shell word. The refusal is unchanged. The guards are the follow-up to what happened cutting 0.36.0 twice, and this cut is the first to run under them: `version_untaken.py` answered `0.37.0 -> 0.38.0, which has never been tagged`, which is the case it exists not to break. Claude-Session: https://claude.ai/code/session_01XvY78XEnrkzNjxZE5EtnyW
Reviewer's guide (collapsed on small PRs)Reviewer's GuideCuts release 0.38.0 by promoting the existing Unreleased changelog, updating Rust package and lockfile versions, and synchronizing user-facing version references; the functional RemoteCommand and release-guard changes are described as already included in the promoted release content. Sequence diagram for published-version release guardsequenceDiagram
participant PR as PullRequest
participant Guard as version_untaken.py
participant Publish as publish.yml
participant Tag as GitTag
PR->>Guard: check version
Guard->>Tag: verify version is untagged
Tag-->>Guard: version available
Guard-->>PR: pass
PR->>Publish: publish 0.38.0
Publish->>Tag: create 0.38.0 tag
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
blooop
added a commit
that referenced
this pull request
Sep 9, 2026
#597 cut and merged 0.38.0 while this branch was in review, so the `release: 0.38.0` commit here re-cut a version that already exists. It is reverted and the entry refiled under 0.39.0. The merge is what makes this worth spelling out. `git merge origin/main` put my `### Fixed` block *inside* the shipped `## [0.38.0]` heading with no conflict -- #527's failure exactly, arriving the way it always does, which is silently. main would have claimed 0.38.0 fixed the interrupted setup pass, and 0.38.0 does not: it is built from 74a1d88. The 0.38.0, 0.37.0 and 0.36.0 sections are byte-identical to `git show origin/main:CHANGELOG.md`, which is the check that says this refiles the entry rather than editing the record. Claude-Session: https://claude.ai/code/session_01JCdaLQ1KgAe8G9QNUeNzyC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
[Unreleased]section as it stands becomes the release: theRemoteCommandsplit from #596, and the two collision guards from #595.0.38.0 and not 0.37.1
LaunchVerb::Attachispub, and itscommandfield goes fromOption<String>toOption<RemoteCommand>at both pathscargo public-apirenders it at. Anyone drivingdevlaunch-coredirectly recompiles, so the patch reading is not available.Nothing about the CLI moves. No flag changes,
--helpis unchanged, and what reaches a workspace is identical — every payload assertion in the suite is untouched. The one difference visible outside the API is an error message: a command holding a NUL is refused asecho '<NUL>hi'rather thanecho <NUL>hi, because with argv there is no single string the caller gave and the composed line is the thing that could not be made into a shell word. The refusal itself is unchanged.What is in it
RemoteCommand::Argv | ::Script.RemotePayload::wraphad two callers meaning opposite things by oneOption<String>—dl's-- <command>handed it words the host's shell had already unquoted, the dotfiles pass handed it a composed script. The join now lives inRemoteCommand::line, sodlcomposes no command line at all, and agent detection is exact for argv instead of a whitespace guess.scripts/version_untaken.pyon the pull request, pluspublish.ymlseparating a re-run over the commit it published from a push moving the version onto someone else's tag.First cut under the new guard
This is the first release to run through
version_untaken.py, and the case it exists not to break is exactly this one:Verification
2406 rust tests, 776 Python guards,
prekclean,changelog_frozenclean, anddl --version/aid --versionboth report0.38.0.🤖 Generated with Claude Code
Summary by Sourcery
Release version 0.38.0 with the typed remote-command API and safeguards against publishing duplicate versions.
Enhancements:
LaunchVerb::AttachAPI carrying typed remote commands.CI:
Documentation: