Skip to content

Cut 0.38.0 - #597

Merged
blooop merged 1 commit into
mainfrom
release/0.38.0
Sep 9, 2026
Merged

Cut 0.38.0#597
blooop merged 1 commit into
mainfrom
release/0.38.0

Conversation

@blooop

@blooop blooop commented Sep 9, 2026

Copy link
Copy Markdown
Owner

The [Unreleased] section as it stands becomes the release: the RemoteCommand split from #596, and the two collision guards from #595.

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 difference visible outside the API is an error message: a command holding a NUL is 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 itself is unchanged.

What is in it

  • RemoteCommand::Argv | ::Script. RemotePayload::wrap had two callers meaning opposite things by one Option<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 in RemoteCommand::line, so dl composes no command line at all, and agent detection is exact for argv instead of a whitespace guess.
  • A version already published is refused before merge. scripts/version_untaken.py on the pull request, plus publish.yml separating 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:

this branch bumps 0.37.0 -> 0.38.0, which has never been tagged

Verification

2406 rust tests, 776 Python guards, prek clean, changelog_frozen clean, and dl --version / aid --version both report 0.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:

  • Publish the 0.38.0 release with the public LaunchVerb::Attach API carrying typed remote commands.
  • Preserve distinct argv and script command semantics when constructing remote payloads.
  • Update project version references and release documentation to 0.38.0.

CI:

  • Prevent pull requests from reusing an already published version and distinguish release reruns from version changes in publishing workflows.

Documentation:

  • Record the 0.38.0 changelog entry and update displayed package and CLI versions.

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

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @blooop, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 2 days and 15 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Sep 9, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Cuts 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 guard

sequenceDiagram
    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
Loading

File-Level Changes

Change Details Files
Bump the project release metadata and documentation from 0.37.0 to 0.38.0.
  • Create the dated 0.38.0 changelog section from Unreleased content.
  • Update workspace/package version metadata and the lockfile.
  • Refresh README version badges and CLI output examples.
CHANGELOG.md
README.md
rust/Cargo.toml
rust/Cargo.lock

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@codecov

codecov Bot commented Sep 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.87%. Comparing base (999a180) to head (74a1d88).

Additional details and impacted files
Flag Coverage Δ
python 42.98% <ø> (ø)
rust 95.13% <ø> (-0.03%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
shipped code (rust) 95.13% <ø> (-0.03%) ⬇️
harness and tooling (python) 42.98% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@blooop
blooop merged commit 1c6a2db into main Sep 9, 2026
15 checks passed
@blooop
blooop deleted the release/0.38.0 branch September 9, 2026 18:47
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant