v0.6.0
Promotes v0.6.0-rc.1 to stable and bundles four additional feature PRs (#70, #72, #74, #76) merged on dev after the RC was cut. The RC’s gh-linking work and the four new TUI feature PRs ship together under 0.6.0.
- Issue / PR linking (#68, closes #67) - first-class link between a worktree, its branch, and the GitHub issue / pull request it serves. Carried forward from
v0.6.0-rc.1.- CLI -
gwm link {issue|pr} <N>writesgit config branch.<name>.gwm-issue/gwm-pr(local, per-branch, survives worktree moves).gwm unlink {issue|pr}removes the explicit override.gwm open {issue|pr} [--print-url]spawns the OS opener on the linked URL.gwm status [--json]shells out togh issue view/gh pr viewto fetch state, title, labels, and CI rollup; degrades gracefully to local-link-only output whenghis missing. - TUI -
Oopens the issue/PR menu,Lruns a two-stage link prompt (target → digits),Frefreshes the GitHub status (wasRpre-#75 - rebound to freeRfor the new review launcher). - Auto-detect - branches following the
<type>/#<N>-<slug>convention derive the issue number automatically.
- CLI -
- TUI Details sidebar redesign (#69, PR #70) - the right pane is now four independent rounded-border subsections (
Worktree/Issue / PR/Working Tree/Recent Commits) instead of one bigDetailsblock. Section titles live on the block borders so the inlineBasic Settings:/Recent commits:/Working tree:content lines are gone. The outerDetailsframe is dropped to reclaim vertical space. - TUI Recent Commits panel - lazygit-style layout (#71, PR #72) - each commit occupies exactly one visual line (was wrapping onto two on long subjects), and the block fills the available height instead of showing a hardcoded 10 entries. Per-row format mirrors lazygit:
<8-char hash> <author initials> <node> <subject>, where<node>is○for a normal commit and◎for a merge commit. Subjects are hard-clipped at the panel’s right edge; a right-aligned footer<viewport-bottom> of <total>lives at the bottom of the block. Default buffer is 300 commits (matches lazygit’s initialgit log -300). Includes the full graph topology renderer - vertical pipes│, corners╮ ╭ ╯ ╰, junctions┴ ┬, horizontal strokes─- driven by a Rust port of lazygit’spkg/gui/presentation/graph/package; linear history collapses to a single○-stack column, merges spawn fresh columns to the right, and the algorithm is width-deterministic on the commit list (independent of terminal width). - TUI sidebar lazygit-style facelift (#73, PR #74):
- New
Createdrow in the Worktree block showing the branch’s age in compact relative form (2d,3w,1M, …), colour-coded by freshness (green < 7d, yellow < 30d, dark gray otherwise). - Branch name is now coloured by
BranchStatus- worst-state wins: dirty → red, ahead/behind → yellow, unpublished → magenta, synced → green, unknown → dark gray. Applies to both the sidebar header and the tableBRANCHcolumn. - Sidebar header line is now prefixed by a
●status dot whose colour tracks the linked PR / issue state (open=green, draft=gray, merged=magenta, closed=red); rebuilt fresh every frame so it follows liveghfetch state without invalidating the git-preview cache.
- New
[tui.open]config section +OpenTargetdispatch for theokey (#73).modeaccepts"shell"(default, lazygit-style$SHELLin the worktree),"editor"($EDITOR <path>), or"finder"(pre-#73 OS file manager).shell_cmd/editor_cmdoverride the env var when set.- New
ykeybinding (#73) - yank the selected worktree’s path to the system clipboard (pbcopy/wl-copy/xclip/xsel/clip). Missing tool surfaces a clear status hint, no crash. - TUI configurable launchers for
l(git_tui) andR(review) (#75, PR #76). Two new.gwm.tomlsections -[git_tui]and[review]- drive the worktree-listl/Rkeybindings through a shared launcher pipeline (placeholder expansion{base} {head} {path} {diff},shell-wordssplit, optional fullscreen suspend-and-resume).[git_tui]defaults tolazygit -p {path}fullscreen so existing repos see zero behaviour change.[review]accepts either a free-formcommand = "<shell line>"or atool = "<preset>"sugar (lumen,claude,codex,aider,gh). Newbranch.<n>.gwm-basekey, set bygwm create, anchors the review base-resolution chain (upstream → gwm-base →[review].default_base→dev→main). The{diff}placeholder lazily materialises a tempfile holdinggit diff {base}..{head}- only when the template references it.
Changed
Section titled “Changed”- TUI keybind reshuffle (#75):
fnow refreshes the worktree list (wasr, kept as alias for muscle memory);Frefreshes the GitHub issue/PR status (wasRpre-#75); the freedRtriggers the new review launcher. - Default behaviour of
o:open changes (#73). It used to spawn the OS file manager unconditionally; now it spawns$SHELLin the worktree by default. Opt back into the old behaviour with[tui.open] mode = "finder"in.gwm.toml. gwm doctornow probes the configured[review]and[git_tui]binaries against$PATH(#75). A missing review tool surfaces as Warning (exit code1), never Failed (2) - review is opt-in, so a CI pre-commit hook keeps passing when only the local launcher is unavailable.- TUI footer / help overlay updated to reflect the new
o:open,y:yank,l:git_tui,R:review,f:refresh,F:ghbindings.
src/github.rs::trim_git_suffix(carried forward fromv0.6.0-rc.1, originally PR #68 Copilot review) -https://github.com/owner/repo.git/previously left.gitin the parsed slug because the trailing/madestrip_suffix(".git")fail. The fix normalises trailing slashes first, then strips the suffix.src/tui/app.rsselection-change handling (#68 follow-up) -next/prev/first/last/ filter typing /refreshnow re-resolve the cached link & slug. The right-panel Issue/PR block previously showed stale data from the previously selected worktree.src/tui/app.rs::refresh_github_status(#68 follow-up) - the status bar no longer claims"github status refreshed"when one or bothghfetches errored. The newreport_github_refresh_statushelper picks a precise message based on each side’sGitHubFetchState.
Removed
Section titled “Removed”Commands:cheat-sheet from the Details sidebar (#69) - the 15-line keybindings list duplicated the?help overlay and pushed theIssue / PRblock off-screen on common terminal sizes. Press?for the full key map.
skills/SKILL.mdrefresh - the bundledgwmSkill is updated to match the new0.6.0surface: configurable launchers ([git_tui]/[review]),[tui.open]dispatch modes,y: yank, theo/f/F/Rrebind table, and the new sidebar layout. Also corrects the launcher concurrency wording (non-fullscreen launchers run synchronously, not “in the background” - aligned with thesrc/tui/mod.rs::run_launcherdocstring caught by Copilot on PR #76).- User docs restructured into a
docs/tree (#77) - the previously-inline README reference (TUI keymap, sidebar, CLI surface,.gwm.tomlschema, doctor, completions) is migrated into seven structured sections underdocs/(Getting Started, TUI, CLI, Configuration, Integrations, Development, Roadmap). Pages use Nuxt Content conventions (numeric prefixes for sidebar order, frontmatter title/description), so the tree is ready to drop straight into a future static-site build. The README is reduced to a 77-line landing page that links intodocs/. README.md- shrunk to a landing page (install matrix, 30-second tour, feature bullets, documentation map). The pre-v0.6 reference content moved intodocs/.
Dependencies
Section titled “Dependencies”- Add
serde_json = "1"for parsingghCLI JSON output (carried forward fromv0.6.0-rc.1). - Add
shell-wordsandtempfile(#75) for launcher placeholder tokenisation and lazy{diff}materialisation. - Add
which(#75) for$PATHprobing of launcher binaries ingwm doctor.