Skip to content

chore(release): fix bump-version.sh commit-message hint + untrack accidental worktree gitlinks#135

Merged
joaoh82 merged 2 commits into
mainfrom
worktree-release-fix-hygiene
May 12, 2026
Merged

chore(release): fix bump-version.sh commit-message hint + untrack accidental worktree gitlinks#135
joaoh82 merged 2 commits into
mainfrom
worktree-release-fix-hygiene

Conversation

@joaoh82
Copy link
Copy Markdown
Owner

@joaoh82 joaoh82 commented May 11, 2026

Summary

Two release-pipeline hygiene fixes uncovered by the v0.10.0 release misfire (the publish pipeline didn't run on the chore(release): bump to 0.10.0 commit; recovered via gh workflow run release.yml -f version=0.10.0).

  1. scripts/bump-version.sh now tells you exactly what commit message to use. The release workflow's detect job (.github/workflows/release.yml) requires the regex ^release: v[0-9]+\.[0-9]+\.[0-9]+$ — anything else silently skips publish. The script previously printed only `git diff` / `git checkout .` next-steps, so a manual `git commit -m "chore(release): bump to "` was the natural-but-wrong path.
  2. .gitignore ignores .claude/worktrees/ and the index untracks the 8 orphan gitlink entries that the v0.10.0 bump commit (937f8b4) captured. git add -A from main while phase worktrees were live under .claude/worktrees/<name>/ picked them up as gitlinks (mode 160000) — no .gitmodules, so they're orphan references to commits on the now-deleted worktree-phase-* branches.

Both are pure infrastructure / repo hygiene; zero application or engine impact.

Why now

The v0.10.0 release shipped (or rather: was dispatched via the workflow's workflow_dispatch fallback after the auto-trigger skipped). These fixes prevent the same trap on v0.10.1 / v0.11.0 / etc.

Changes

scripts/bump-version.sh

The new tail:

Done. Next steps:
  cargo build                    # refresh Cargo.lock with the new versions
  git diff                       # inspect the twelve-file bump
  git checkout .                 # or back out if it looks wrong

When the diff looks right, commit + tag with the EXACT message the
release workflow's detect job expects (regex
  ^release: v[0-9]+\.[0-9]+\.[0-9]+$
in .github/workflows/release.yml). Any other message and the
release pipeline silently skips publish:

  git commit -am 'release: v0.10.1'
  git tag v0.10.1
  git push && git push --tags

If a push lands with a different commit-message format, the
release workflow can be retriggered manually:

  gh workflow run release.yml -f version=0.10.1

.gitignore + index cleanup

+# Local agent / Claude Code worktrees. These shouldn't ever get
+# committed — but `git add -A` from main while a worktree is live
+# under .claude/worktrees/<name>/ will capture it as a gitlink
+# (mode 160000) because the worktree dir looks like a submodule to
+# the parent index. Ignoring the whole tree prevents that whole
+# class of accident. (The release commit 937f8b4 hit exactly this
+# bug; the next commit untracks the leftover gitlinks.)
+.claude/worktrees/

Index untracks (no working-copy effect, the worktrees were already removed manually):

delete mode 160000 .claude/worktrees/exciting-sanderson-31d3c9
delete mode 160000 .claude/worktrees/phase-10-1-multi-conn
delete mode 160000 .claude/worktrees/phase-11-2-logical-clock
delete mode 160000 .claude/worktrees/phase-11-3-mvstore
delete mode 160000 .claude/worktrees/phase-11-4-begin-concurrent
delete mode 160000 .claude/worktrees/phase-11-5-read-path
delete mode 160000 .claude/worktrees/phase-11-6-gc
delete mode 160000 .claude/worktrees/phase-11-7-sdk-busy
delete mode 160000 .claude/worktrees/phase-11-8-multi-handle-sdk

Not rewriting the v0.10.0 tag — orphan gitlinks at that commit don't break anything for consumers (no .gitmodules → git won't try to fetch them on clone, just emits a noisy warning during actions/checkout).

Cross-checks done

  • release-plan.md already documents the release: v<V> convention (line 197) — docs are correct, the bump-script was the lone weak link.
  • release-pr.yml (line 113) emits git commit -m "release: v${{ inputs.version }}" — the happy path workflow path is fine; this fix only matters for the manual-fallback path the v0.10.0 release used.

Test plan

  • bash -n scripts/bump-version.sh — syntax check (no functional change, just trailing echos).
  • Visual inspection of the new output.
  • Defer end-to-end test until next real release (v0.10.1 or whenever).

🤖 Generated with Claude Code

joaoh82 and others added 2 commits May 11, 2026 19:15
…nore

The v0.10.0 release commit (937f8b4) captured 8 worktree directories
as gitlinks (mode 160000) because `scripts/bump-version.sh` ran
`git add -A` while the per-phase worktrees were live in
.claude/worktrees/. They aren't real submodules — no `.gitmodules`,
no remote — just orphan gitlink references to commits on the
now-deleted `worktree-phase-*` branches.

Removing the gitlink entries from the index now that the worktrees
have been cleaned up. Adding .claude/worktrees/ to .gitignore so the
next round of phase worktrees doesn't repeat the issue.

Not rewriting v0.10.0's history — the release tag is already
published, and the orphan gitlinks there don't break anything for
consumers (no .gitmodules → git won't try to fetch them on clone).
Forward state is clean from this commit on.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…essage

Followup from the v0.10.0 release misfire. `scripts/bump-version.sh`
correctly bumps all 11 manifests but doesn't tell the user what to do
next, so a freshly-run script + a manual `git commit -m "chore(release):
bump to <V>"` is a natural shape that silently skips the publish
pipeline (the release workflow's detect regex is
  ^release: v[0-9]+\.[0-9]+\.[0-9]+$
and rejects everything else).

The release-pr.yml workflow path (the "happy" path) already emits the
right commit message; this fix is for the manual-fallback path that the
v0.10.0 release used.

- Print the exact `git commit -am 'release: v<V>'` line.
- Print the recovery command (`gh workflow run release.yml -f
  version=<V>`) for cases when the wrong commit message has already
  been pushed.

Also includes the .claude/worktrees/ gitlink cleanup that was an
unrelated side-effect of the v0.10.0 bump commit picking up live
worktree directories as gitlinks (mode 160000) via `git add -A`. Adds
.claude/worktrees/ to .gitignore so the next round of phase worktrees
doesn't repeat the issue, and untracks the 8 orphan gitlink entries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 11, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
rust-sqlite Ready Ready Preview, Comment May 11, 2026 5:22pm

Request Review

@joaoh82 joaoh82 merged commit 5f3c865 into main May 12, 2026
31 of 32 checks passed
joaoh82 added a commit that referenced this pull request May 12, 2026
…138)

`jetli/wasm-pack-action` and wasm-pack's curl-installer both let wasm-pack
pick whatever binaryen its internal cache happens to hold. When that
copy predates multi-table WASM support, wasm-opt rejects rustc output
with "Only 1 table definition allowed in MVP" — a flake whose
hit/miss depended on runner image cache state (first surfaced on
PR #135; rerun passed). Pin binaryen to version_122 in both the
ci.yml `wasm-build` and release.yml `publish-wasm` jobs by
downloading the official tarball before wasm-pack runs and
prepending it to PATH. wasm-pack auto-detects wasm-opt on PATH, so
no further wiring needed. Bump procedure documented in
docs/release-plan.md so future-me knows to update both workflows
in lockstep.

Verified locally on darwin-arm64: `wasm-pack build --target web
--release` reports `[INFO]: found wasm-opt at ".../binaryen-version_122/bin/wasm-opt"`
and builds a 2.14 MiB bundle (in line with prior sizes).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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