Skip to content

v0.29.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 02:11
· 94 commits to main since this release
12a6eb4

This release adds PR text regeneration to submit, tightens tree --json for short and scoped views, and moves merge orchestration out of the CLI layer, along with a broad modernization pass over the codebase.

Highlights

  • stackit submit --regenerate rebuilds PR titles and descriptions from your current commits, even when there's nothing new to push. In a terminal it shows the replacement text and asks before writing. It works with --dry-run (preview only) and --json, which reports a regenerated: {title, body} field per branch. Lock banners and stack footers are preserved.
  • Breaking (JSON): tree short --json and t --json match the text view. Short views are now local-only. They make no GitHub calls and omit pr, commits, additions, deletions, github_available, approved_count and in_review_count; before, these fields came back as zeros. --stack and --steps N now limit branches, children and summary to the drawn set. Scripts that need the full shape should use tree --json or state --json.
  • More reliable orphaned-metadata handling in sync. Answers you've already given are kept if you cancel a later prompt. Each push runs on its own, so one rejection no longer fails the rest. Duplicate metadata writes are gone.
  • Faster submit planning and dashboard ordering. Missing PR content is fetched in one batch, branch metadata is no longer read twice, and dashboard branch ordering no longer rescans for children.

Features

  • Added submit --regenerate to rebuild PR titles and descriptions from commits, with dry-run and JSON preview support (#1753).

Fixes

  • Made tree short --json, t --json, --stack and --steps JSON output match the drawn view and skip GitHub lookups for short views (#1752).
  • Batched orphaned-metadata pushes, kept already-answered prompts on cancel, and removed a redundant metadata write during sync (#1805).
  • Added coverage and documented the rule for refusing modifications when a stack's worktree registration is invalid (#1811).

Performance

  • Batched fetching of missing PR content during submit planning (#1746).
  • Stopped double-reading branch metadata when computing PR submission status (#1786).
  • Indexed children when ordering dashboard branches (#1745).

Refactors

  • Moved merge orchestration (MergePR, Drain, post-merge sync, progress events) from the CLI into internal/actions/merge, routed prompts through handler interfaces, added internal/actions/stackview, and narrowed engine and GitHub interfaces (#1814).
  • Composed PR bodies in one place and resolved submit options up front (#1819).
  • Modernized the codebase with stdlib helpers: slices/cmp instead of sort, slices.Index/Contains/ContainsFunc, slices.Sorted(maps.Keys(...)), strings.Cut/CutPrefix/CutSuffix, and range-over-int loops (#1816, #1818, #1820, #1822, #1824, #1825, #1826, #1827, #1828, #1829).
  • Stopped discarding the Getwd error in the gh command runner (#1815).

Docs

  • Aligned agent workflow templates with fold and validation behavior (#1751).

Chore

  • Updated Go and web dependencies to latest (#1823).
  • Parallelized serial engine and git tests without losing coverage (#1813).

What's Changed

  • perf(test): parallelize serial engine and git tests, coverage preserved by @jonnii in #1813
  • refactor: narrow interfaces, type primitives, and push logic down a layer by @jonnii in #1814
  • refactor: drop discarded Getwd error in gh command runner by @jonnii in #1815
  • fix: refuse modifications when a worktree registration is invalid by @jonnii in #1811
  • perf: stop double-reading branch metadata in PR submission status by @jonnii in #1786
  • perf: batch missing PR content during submit planning by @jonnii in #1746
  • fix: batch orphaned-metadata push and dedupe redundant metadata write by @jonnii in #1805
  • refactor: use slices.Index/Contains instead of hand-rolled helpers by @jonnii in #1816
  • docs: align agent workflows with fold and validation behavior by @jonnii in #1751
  • refactor: use slices.Sorted(maps.Keys(m)) for sorted map keys by @jonnii in #1818
  • perf: index children when ordering dashboard branches by @jonnii in #1745
  • fix: honor short and bounded tree JSON views by @jonnii in #1752
  • feat: regenerate PR titles and descriptions during submit by @jonnii in #1753
  • refactor: compose PR bodies in one place and resolve submit options up front by @jonnii in #1819
  • refactor: replace package sort with slices/cmp by @jonnii in #1820
  • refactor: use slices.ContainsFunc for hand-rolled any-match loops by @jonnii in #1822
  • chore: update Go and web dependencies to latest by @jonnii in #1823
  • refactor: use range-over-int for counting loops by @jonnii in #1824
  • refactor: use strings.Cut to take the first line of a message by @jonnii in #1825
  • refactor: use strings.Cut instead of Index-and-slice by @jonnii in #1826
  • refactor: use strings.Cut/CutPrefix instead of SplitN by @jonnii in #1827
  • refactor: use strings.CutPrefix/CutSuffix instead of Has+Trim pairs by @jonnii in #1828
  • refactor: use stdlib helpers instead of hand-rolled loops by @jonnii in #1829

Full Changelog: v0.28.0...v0.29.0