From d5b77fa374d373ca65119ad1f0eac9b126533bef Mon Sep 17 00:00:00 2001 From: Ben Vinegar Date: Wed, 2 Sep 2026 09:36:31 -0400 Subject: [PATCH] chore(release): prepare v0.21.0 --- .changeset/calm-brokers-bound.md | 2 - .changeset/calm-coins-navigate.md | 5 - .changeset/calm-extension-runtime.md | 2 - .changeset/calm-install-aliases.md | 2 - .changeset/calm-notes-compose.md | 2 - .changeset/calm-pandas-expand.md | 5 - .changeset/calm-review-events.md | 2 - .changeset/calm-rows-plan.md | 2 - ...readme-badge.md => chatty-friends-sing.md} | 0 .changeset/clean-birds-review.md | 2 - .changeset/clean-spans-flow.md | 2 - .changeset/compare-pages.md | 5 - .changeset/complete-synthetic-key-events.md | 5 - .changeset/configurable-review-gaps.md | 5 - .changeset/ctrl-half-page-navigation.md | 5 - .../current-review-refresh-controller.md | 2 - .changeset/dim-line-highlighter-tone.md | 5 - .changeset/dull-suns-pay.md | 2 - .changeset/editorial-release-notes.md | 4 - .changeset/fair-baboons-tease.md | 2 - .changeset/fair-brokers-rest.md | 2 - .changeset/fast-tuis-wait.md | 2 - .../fence-session-lifecycle-settlements.md | 5 - .changeset/file-language-selectors.md | 5 - .changeset/fix-edge-jump-reveal-race.md | 5 - .changeset/fix-pnpm-bun-projection.md | 5 - .changeset/fix-prerelease-version-test.md | 4 - .changeset/fix-startup-file-window.md | 5 - .changeset/fix-windows-ci-flakes.md | 2 - .changeset/fixed-brokers-retire.md | 5 - .changeset/focused-extension-editor.md | 5 - .changeset/focused-workspace-controls.md | 2 - .changeset/fresh-install-tabs.md | 5 - .changeset/fresh-sockets-retry.md | 5 - .changeset/fresh-themes-refactor.md | 2 - .changeset/friendly-terminals-register.md | 5 - .changeset/fuzzy-guides-wrap.md | 5 - .changeset/fuzzy-highlights-dim.md | 5 - .changeset/generic-extension-cli-commands.md | 5 - .changeset/humble-toes-battle.md | 2 - .changeset/hunk-commit-extension.md | 2 - .changeset/hunk-mark-as-reviewed-extension.md | 2 - .changeset/hunk-viewed-note-changed.md | 5 - .changeset/list-hunk-file-order.md | 2 - .changeset/list-hunk-git-lite.md | 2 - .changeset/olive-impalas-nail.md | 5 - .changeset/opentui-refresh.md | 5 - .changeset/pane-current-line-address.md | 5 - .changeset/plain-lifecycle-clock.md | 2 - .changeset/plain-rows-project.md | 2 - .changeset/pre.json | 96 - .changeset/publish-beta-changelog.md | 5 - .changeset/pure-pane-controller.md | 2 - .changeset/quiet-daemons-prove.md | 2 - .changeset/quiet-install-conflicts.md | 5 - .changeset/quiet-lifecycles-characterize.md | 2 - .changeset/quiet-row-facade.md | 2 - .changeset/quiet-terminals-exit.md | 5 - .changeset/quiet-timers-exit.md | 2 - .changeset/quiet-trust-controller.md | 2 - .changeset/require-node-twenty-two.md | 5 - .changeset/responsive-panes-grow.md | 5 - .../restore-review-interaction-latency.md | 5 - .../secure-session-broker-authentication.md | 2 - .../secure-session-broker-integration.md | 5 - .changeset/secure-session-peer-ownership.md | 2 - .changeset/simplify-copy-rendering.md | 2 - .changeset/simplify-copy-selection-ranges.md | 2 - .changeset/simplify-session-cli-dispatch.md | 2 - .changeset/social-hounds-invent.md | 2 - ...trict-session-broker-runtime-validation.md | 2 - .changeset/swift-cases-carry.md | 2 - .changeset/theme-diff-accent-harvest.md | 5 - .changeset/theme-guard-washout.md | 5 - .changeset/thin-places-think.md | 2 - .changeset/threaded-review-notes.md | 5 - .changeset/tidy-code-cells.md | 2 - .changeset/tidy-mounted-rows.md | 2 - .changeset/tidy-panes-activate.md | 5 - .changeset/tidy-startup-states.md | 2 - .changeset/tidy-timed-notices.md | 2 - .changeset/two-revision-diff.md | 5 - .changeset/watch-runtime-deadlock.md | 5 - .changeset/wide-trees-expand.md | 5 - CHANGELOG.md | 82 + benchmarks/release/bench-0.21.0.json | 1761 +++++++++++++++++ package.json | 2 +- website/public/changelog/rss.xml | 4 +- website/releases/cards.json | 5 +- website/releases/notes.json | 10 + website/src/content/docs/changelog/0.21.md | 65 +- website/src/content/docs/changelog/index.md | 4 +- 92 files changed, 1924 insertions(+), 387 deletions(-) delete mode 100644 .changeset/calm-brokers-bound.md delete mode 100644 .changeset/calm-coins-navigate.md delete mode 100644 .changeset/calm-extension-runtime.md delete mode 100644 .changeset/calm-install-aliases.md delete mode 100644 .changeset/calm-notes-compose.md delete mode 100644 .changeset/calm-pandas-expand.md delete mode 100644 .changeset/calm-review-events.md delete mode 100644 .changeset/calm-rows-plan.md rename .changeset/{add-discord-readme-badge.md => chatty-friends-sing.md} (100%) delete mode 100644 .changeset/clean-birds-review.md delete mode 100644 .changeset/clean-spans-flow.md delete mode 100644 .changeset/compare-pages.md delete mode 100644 .changeset/complete-synthetic-key-events.md delete mode 100644 .changeset/configurable-review-gaps.md delete mode 100644 .changeset/ctrl-half-page-navigation.md delete mode 100644 .changeset/current-review-refresh-controller.md delete mode 100644 .changeset/dim-line-highlighter-tone.md delete mode 100644 .changeset/dull-suns-pay.md delete mode 100644 .changeset/editorial-release-notes.md delete mode 100644 .changeset/fair-baboons-tease.md delete mode 100644 .changeset/fair-brokers-rest.md delete mode 100644 .changeset/fast-tuis-wait.md delete mode 100644 .changeset/fence-session-lifecycle-settlements.md delete mode 100644 .changeset/file-language-selectors.md delete mode 100644 .changeset/fix-edge-jump-reveal-race.md delete mode 100644 .changeset/fix-pnpm-bun-projection.md delete mode 100644 .changeset/fix-prerelease-version-test.md delete mode 100644 .changeset/fix-startup-file-window.md delete mode 100644 .changeset/fix-windows-ci-flakes.md delete mode 100644 .changeset/fixed-brokers-retire.md delete mode 100644 .changeset/focused-extension-editor.md delete mode 100644 .changeset/focused-workspace-controls.md delete mode 100644 .changeset/fresh-install-tabs.md delete mode 100644 .changeset/fresh-sockets-retry.md delete mode 100644 .changeset/fresh-themes-refactor.md delete mode 100644 .changeset/friendly-terminals-register.md delete mode 100644 .changeset/fuzzy-guides-wrap.md delete mode 100644 .changeset/fuzzy-highlights-dim.md delete mode 100644 .changeset/generic-extension-cli-commands.md delete mode 100644 .changeset/humble-toes-battle.md delete mode 100644 .changeset/hunk-commit-extension.md delete mode 100644 .changeset/hunk-mark-as-reviewed-extension.md delete mode 100644 .changeset/hunk-viewed-note-changed.md delete mode 100644 .changeset/list-hunk-file-order.md delete mode 100644 .changeset/list-hunk-git-lite.md delete mode 100644 .changeset/olive-impalas-nail.md delete mode 100644 .changeset/opentui-refresh.md delete mode 100644 .changeset/pane-current-line-address.md delete mode 100644 .changeset/plain-lifecycle-clock.md delete mode 100644 .changeset/plain-rows-project.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/publish-beta-changelog.md delete mode 100644 .changeset/pure-pane-controller.md delete mode 100644 .changeset/quiet-daemons-prove.md delete mode 100644 .changeset/quiet-install-conflicts.md delete mode 100644 .changeset/quiet-lifecycles-characterize.md delete mode 100644 .changeset/quiet-row-facade.md delete mode 100644 .changeset/quiet-terminals-exit.md delete mode 100644 .changeset/quiet-timers-exit.md delete mode 100644 .changeset/quiet-trust-controller.md delete mode 100644 .changeset/require-node-twenty-two.md delete mode 100644 .changeset/responsive-panes-grow.md delete mode 100644 .changeset/restore-review-interaction-latency.md delete mode 100644 .changeset/secure-session-broker-authentication.md delete mode 100644 .changeset/secure-session-broker-integration.md delete mode 100644 .changeset/secure-session-peer-ownership.md delete mode 100644 .changeset/simplify-copy-rendering.md delete mode 100644 .changeset/simplify-copy-selection-ranges.md delete mode 100644 .changeset/simplify-session-cli-dispatch.md delete mode 100644 .changeset/social-hounds-invent.md delete mode 100644 .changeset/strict-session-broker-runtime-validation.md delete mode 100644 .changeset/swift-cases-carry.md delete mode 100644 .changeset/theme-diff-accent-harvest.md delete mode 100644 .changeset/theme-guard-washout.md delete mode 100644 .changeset/thin-places-think.md delete mode 100644 .changeset/threaded-review-notes.md delete mode 100644 .changeset/tidy-code-cells.md delete mode 100644 .changeset/tidy-mounted-rows.md delete mode 100644 .changeset/tidy-panes-activate.md delete mode 100644 .changeset/tidy-startup-states.md delete mode 100644 .changeset/tidy-timed-notices.md delete mode 100644 .changeset/two-revision-diff.md delete mode 100644 .changeset/watch-runtime-deadlock.md delete mode 100644 .changeset/wide-trees-expand.md create mode 100644 benchmarks/release/bench-0.21.0.json diff --git a/.changeset/calm-brokers-bound.md b/.changeset/calm-brokers-bound.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/calm-brokers-bound.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/calm-coins-navigate.md b/.changeset/calm-coins-navigate.md deleted file mode 100644 index 0429bfebc..000000000 --- a/.changeset/calm-coins-navigate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Navigate a live review directly to a comment returned by `hunk session comment list`. diff --git a/.changeset/calm-extension-runtime.md b/.changeset/calm-extension-runtime.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/calm-extension-runtime.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/calm-install-aliases.md b/.changeset/calm-install-aliases.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/calm-install-aliases.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/calm-notes-compose.md b/.changeset/calm-notes-compose.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/calm-notes-compose.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/calm-pandas-expand.md b/.changeset/calm-pandas-expand.md deleted file mode 100644 index f6a274c9c..000000000 --- a/.changeset/calm-pandas-expand.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Enable unchanged-context expansion in Jujutsu-backed reviews. diff --git a/.changeset/calm-review-events.md b/.changeset/calm-review-events.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/calm-review-events.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/calm-rows-plan.md b/.changeset/calm-rows-plan.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/calm-rows-plan.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/add-discord-readme-badge.md b/.changeset/chatty-friends-sing.md similarity index 100% rename from .changeset/add-discord-readme-badge.md rename to .changeset/chatty-friends-sing.md diff --git a/.changeset/clean-birds-review.md b/.changeset/clean-birds-review.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/clean-birds-review.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/clean-spans-flow.md b/.changeset/clean-spans-flow.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/clean-spans-flow.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/compare-pages.md b/.changeset/compare-pages.md deleted file mode 100644 index 92cf75bd9..000000000 --- a/.changeset/compare-pages.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Add a `/compare/` section to hunk.dev with head-to-head pages for delta, difftastic, diff-so-fancy, `git diff`, and Plannotator, each also served as Markdown for coding agents. diff --git a/.changeset/complete-synthetic-key-events.md b/.changeset/complete-synthetic-key-events.md deleted file mode 100644 index e9c53bfb0..000000000 --- a/.changeset/complete-synthetic-key-events.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Provide complete key event data to command matchers and programmatically invoked handlers. diff --git a/.changeset/configurable-review-gaps.md b/.changeset/configurable-review-gaps.md deleted file mode 100644 index 21b88cd35..000000000 --- a/.changeset/configurable-review-gaps.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Make the vertical space between files and hunks configurable. diff --git a/.changeset/ctrl-half-page-navigation.md b/.changeset/ctrl-half-page-navigation.md deleted file mode 100644 index c89afa89c..000000000 --- a/.changeset/ctrl-half-page-navigation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Add Ctrl-D and Ctrl-U aliases for half-page review scrolling. diff --git a/.changeset/current-review-refresh-controller.md b/.changeset/current-review-refresh-controller.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/current-review-refresh-controller.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/dim-line-highlighter-tone.md b/.changeset/dim-line-highlighter-tone.md deleted file mode 100644 index abd5e75b4..000000000 --- a/.changeset/dim-line-highlighter-tone.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Add a `dim` tone to `hunk.registerLineHighlighter` and `hunk session highlight add` for fading diff text toward line backgrounds while preserving syntax highlighting token hues. diff --git a/.changeset/dull-suns-pay.md b/.changeset/dull-suns-pay.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/dull-suns-pay.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/editorial-release-notes.md b/.changeset/editorial-release-notes.md deleted file mode 100644 index 8c46211ff..000000000 --- a/.changeset/editorial-release-notes.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Clarify editorial GitHub release-note and contributor acknowledgment guidance. diff --git a/.changeset/fair-baboons-tease.md b/.changeset/fair-baboons-tease.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/fair-baboons-tease.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fair-brokers-rest.md b/.changeset/fair-brokers-rest.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/fair-brokers-rest.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fast-tuis-wait.md b/.changeset/fast-tuis-wait.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/fast-tuis-wait.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fence-session-lifecycle-settlements.md b/.changeset/fence-session-lifecycle-settlements.md deleted file mode 100644 index 141a45d9d..000000000 --- a/.changeset/fence-session-lifecycle-settlements.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Fence late session lifecycle commits so stopped or replaced generations cannot authenticate, reconnect, publish daemon launch metadata, or mutate broker client state. diff --git a/.changeset/file-language-selectors.md b/.changeset/file-language-selectors.md deleted file mode 100644 index 762a54c1a..000000000 --- a/.changeset/file-language-selectors.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Let extensions select syntax highlighting by exact filename or basename/path glob, in addition to file extensions. diff --git a/.changeset/fix-edge-jump-reveal-race.md b/.changeset/fix-edge-jump-reveal-race.md deleted file mode 100644 index ab993741e..000000000 --- a/.changeset/fix-edge-jump-reveal-race.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Keep explicit top and bottom jumps from being overridden by a pending selection reveal. diff --git a/.changeset/fix-pnpm-bun-projection.md b/.changeset/fix-pnpm-bun-projection.md deleted file mode 100644 index 3c37f0464..000000000 --- a/.changeset/fix-pnpm-bun-projection.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Stop installing Bun beside prebuilt Hunk packages so pnpm global updates cannot corrupt Bun's shared platform-package projection. Standalone platform binaries continue to work without a separate Bun installation. diff --git a/.changeset/fix-prerelease-version-test.md b/.changeset/fix-prerelease-version-test.md deleted file mode 100644 index 26b5b7b81..000000000 --- a/.changeset/fix-prerelease-version-test.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Allow CLI delegation coverage to validate prerelease version output. diff --git a/.changeset/fix-startup-file-window.md b/.changeset/fix-startup-file-window.md deleted file mode 100644 index c6e6c14e0..000000000 --- a/.changeset/fix-startup-file-window.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Fill the review stream on first paint instead of leaving it blank until the user scrolls. diff --git a/.changeset/fix-windows-ci-flakes.md b/.changeset/fix-windows-ci-flakes.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/fix-windows-ci-flakes.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fixed-brokers-retire.md b/.changeset/fixed-brokers-retire.md deleted file mode 100644 index 57ba21e62..000000000 --- a/.changeset/fixed-brokers-retire.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Contain unexpected session broker lifecycle failures behind one fixed, redacted user-visible message. diff --git a/.changeset/focused-extension-editor.md b/.changeset/focused-extension-editor.md deleted file mode 100644 index 96fddd1d5..000000000 --- a/.changeset/focused-extension-editor.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Let focused editors inside extension panes receive keys before Hunk's global shortcuts. diff --git a/.changeset/focused-workspace-controls.md b/.changeset/focused-workspace-controls.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/focused-workspace-controls.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fresh-install-tabs.md b/.changeset/fresh-install-tabs.md deleted file mode 100644 index 6bf239747..000000000 --- a/.changeset/fresh-install-tabs.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Make the checksum-aware curl installer the default across the website and docs, add an accessible tabbed install selector, and establish `hunk update` as the canonical updater from Hunk 0.20 onward. diff --git a/.changeset/fresh-sockets-retry.md b/.changeset/fresh-sockets-retry.md deleted file mode 100644 index e34a1772e..000000000 --- a/.changeset/fresh-sockets-retry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Retry session broker connections after synchronous WebSocket startup failures. diff --git a/.changeset/fresh-themes-refactor.md b/.changeset/fresh-themes-refactor.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/fresh-themes-refactor.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/friendly-terminals-register.md b/.changeset/friendly-terminals-register.md deleted file mode 100644 index bd361257c..000000000 --- a/.changeset/friendly-terminals-register.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Keep iTerm2 sessions connected to the local session daemon when their terminal identifiers contain native punctuation. diff --git a/.changeset/fuzzy-guides-wrap.md b/.changeset/fuzzy-guides-wrap.md deleted file mode 100644 index c30b48f64..000000000 --- a/.changeset/fuzzy-guides-wrap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Keep wrapped diff geometry aligned with rendered note-guide and add-note columns. diff --git a/.changeset/fuzzy-highlights-dim.md b/.changeset/fuzzy-highlights-dim.md deleted file mode 100644 index 83fbf4e00..000000000 --- a/.changeset/fuzzy-highlights-dim.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Accept the documented `dim` tone when routing line-highlight commands through the session daemon. diff --git a/.changeset/generic-extension-cli-commands.md b/.changeset/generic-extension-cli-commands.md deleted file mode 100644 index 281930a02..000000000 --- a/.changeset/generic-extension-cli-commands.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Let extensions register generic top-level CLI command trees with raw arguments, cancellable streaming I/O, validated exit statuses, and one-time delegation into built-in Hunk commands, including a dependency-free `hunk gh 123` example that fetches GitHub pull-request diffs directly. diff --git a/.changeset/humble-toes-battle.md b/.changeset/humble-toes-battle.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/humble-toes-battle.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/hunk-commit-extension.md b/.changeset/hunk-commit-extension.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/hunk-commit-extension.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/hunk-mark-as-reviewed-extension.md b/.changeset/hunk-mark-as-reviewed-extension.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/hunk-mark-as-reviewed-extension.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/hunk-viewed-note-changed.md b/.changeset/hunk-viewed-note-changed.md deleted file mode 100644 index 2fdaf1e0d..000000000 --- a/.changeset/hunk-viewed-note-changed.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Publish `hunk_viewed` and store-backed `note_changed` extension lifecycle events so progress and note UIs can follow hunk navigation and agent comments. diff --git a/.changeset/list-hunk-file-order.md b/.changeset/list-hunk-file-order.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/list-hunk-file-order.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/list-hunk-git-lite.md b/.changeset/list-hunk-git-lite.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/list-hunk-git-lite.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/olive-impalas-nail.md b/.changeset/olive-impalas-nail.md deleted file mode 100644 index e1370934b..000000000 --- a/.changeset/olive-impalas-nail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Recognize pacman/AUR-managed installations via `HUNK_INSTALL_SOURCE=pacman` and suppress automatic update notices for them. diff --git a/.changeset/opentui-refresh.md b/.changeset/opentui-refresh.md deleted file mode 100644 index fdaa07da3..000000000 --- a/.changeset/opentui-refresh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Upgrade the OpenTUI runtime and reusable component peer requirement to 0.5.6. diff --git a/.changeset/pane-current-line-address.md b/.changeset/pane-current-line-address.md deleted file mode 100644 index eee2cfb66..000000000 --- a/.changeset/pane-current-line-address.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Give opted-in extension panes the current line's `{ side, line }` source address on `currentLine`, matching command selection, so a pane can follow the cursor without waiting for a keypress. diff --git a/.changeset/plain-lifecycle-clock.md b/.changeset/plain-lifecycle-clock.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/plain-lifecycle-clock.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/plain-rows-project.md b/.changeset/plain-rows-project.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/plain-rows-project.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index dfc1d4e64..000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "mode": "pre", - "tag": "beta", - "initialVersions": { - "hunkdiff": "0.20.1", - "@hunk/session-broker": "0.0.0", - "@hunk/session-broker-bun": "0.0.0", - "@hunk/session-broker-core": "0.0.0", - "@hunk/session-broker-node": "0.0.0", - "@hunk/term-video": "0.0.0" - }, - "changesets": [ - "add-discord-readme-badge", - "calm-brokers-bound", - "calm-coins-navigate", - "calm-extension-runtime", - "calm-install-aliases", - "calm-notes-compose", - "calm-pandas-expand", - "calm-review-events", - "calm-rows-plan", - "clean-birds-review", - "clean-spans-flow", - "complete-synthetic-key-events", - "configurable-review-gaps", - "ctrl-half-page-navigation", - "current-review-refresh-controller", - "dim-line-highlighter-tone", - "dull-suns-pay", - "editorial-release-notes", - "fair-baboons-tease", - "fair-brokers-rest", - "fast-tuis-wait", - "fence-session-lifecycle-settlements", - "file-language-selectors", - "fix-edge-jump-reveal-race", - "fix-pnpm-bun-projection", - "fix-prerelease-version-test", - "fix-startup-file-window", - "fix-windows-ci-flakes", - "fixed-brokers-retire", - "focused-extension-editor", - "focused-workspace-controls", - "fresh-install-tabs", - "fresh-sockets-retry", - "fresh-themes-refactor", - "friendly-terminals-register", - "fuzzy-guides-wrap", - "fuzzy-highlights-dim", - "generic-extension-cli-commands", - "humble-toes-battle", - "hunk-commit-extension", - "hunk-mark-as-reviewed-extension", - "hunk-viewed-note-changed", - "list-hunk-file-order", - "list-hunk-git-lite", - "olive-impalas-nail", - "opentui-refresh", - "pane-current-line-address", - "plain-lifecycle-clock", - "plain-rows-project", - "publish-beta-changelog", - "pure-pane-controller", - "quiet-daemons-prove", - "quiet-install-conflicts", - "quiet-lifecycles-characterize", - "quiet-row-facade", - "quiet-terminals-exit", - "quiet-timers-exit", - "quiet-trust-controller", - "require-node-twenty-two", - "responsive-panes-grow", - "restore-review-interaction-latency", - "secure-session-broker-authentication", - "secure-session-broker-integration", - "secure-session-peer-ownership", - "simplify-copy-rendering", - "simplify-copy-selection-ranges", - "simplify-session-cli-dispatch", - "social-hounds-invent", - "strict-session-broker-runtime-validation", - "swift-cases-carry", - "theme-diff-accent-harvest", - "theme-guard-washout", - "thin-places-think", - "threaded-review-notes", - "tidy-code-cells", - "tidy-mounted-rows", - "tidy-panes-activate", - "tidy-startup-states", - "tidy-timed-notices", - "two-revision-diff", - "watch-runtime-deadlock", - "wide-trees-expand" - ] -} diff --git a/.changeset/publish-beta-changelog.md b/.changeset/publish-beta-changelog.md deleted file mode 100644 index 9629925e7..000000000 --- a/.changeset/publish-beta-changelog.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Publish dated prerelease notes on hunk.dev without promoting them as the latest stable release or default install target. diff --git a/.changeset/pure-pane-controller.md b/.changeset/pure-pane-controller.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/pure-pane-controller.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/quiet-daemons-prove.md b/.changeset/quiet-daemons-prove.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/quiet-daemons-prove.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/quiet-install-conflicts.md b/.changeset/quiet-install-conflicts.md deleted file mode 100644 index cee523c85..000000000 --- a/.changeset/quiet-install-conflicts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Refuse curl installs alongside competing Hunk binaries unless explicitly forced, and print each conflicting path, version, PATH precedence, and package-manager removal guidance. diff --git a/.changeset/quiet-lifecycles-characterize.md b/.changeset/quiet-lifecycles-characterize.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/quiet-lifecycles-characterize.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/quiet-row-facade.md b/.changeset/quiet-row-facade.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/quiet-row-facade.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/quiet-terminals-exit.md b/.changeset/quiet-terminals-exit.md deleted file mode 100644 index 2068b36bf..000000000 --- a/.changeset/quiet-terminals-exit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Exit cleanly when the terminal hosting a review disconnects instead of leaving an unreachable Hunk process behind. diff --git a/.changeset/quiet-timers-exit.md b/.changeset/quiet-timers-exit.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/quiet-timers-exit.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/quiet-trust-controller.md b/.changeset/quiet-trust-controller.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/quiet-trust-controller.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/require-node-twenty-two.md b/.changeset/require-node-twenty-two.md deleted file mode 100644 index 4f24cce62..000000000 --- a/.changeset/require-node-twenty-two.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Require Node.js 22 or newer for npm installs. Standalone Hunk binaries continue to run without Node.js. diff --git a/.changeset/responsive-panes-grow.md b/.changeset/responsive-panes-grow.md deleted file mode 100644 index fa159b7f0..000000000 --- a/.changeset/responsive-panes-grow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Resize the built-in files sidebar with the terminal, showing its compact projection at medium widths and keeping split review after the sidebar hides. Extension API v12 adds `ExtensionPaneSize.fraction` for bounded body-axis fractional sizing while preserving manual overrides. diff --git a/.changeset/restore-review-interaction-latency.md b/.changeset/restore-review-interaction-latency.md deleted file mode 100644 index 5340124f6..000000000 --- a/.changeset/restore-review-interaction-latency.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Restore first-frame and scroll responsiveness for large review streams. diff --git a/.changeset/secure-session-broker-authentication.md b/.changeset/secure-session-broker-authentication.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/secure-session-broker-authentication.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/secure-session-broker-integration.md b/.changeset/secure-session-broker-integration.md deleted file mode 100644 index 9e555da26..000000000 --- a/.changeset/secure-session-broker-integration.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Authenticate local session producers and CLI controls with automatically discovered owner-private credentials, signed responses, scoped reconnect replacement, and bounded handshakes. Expose only minimal public daemon health, refuse unsafe PID-based replacement, and let interactive Hunk windows reconnect automatically after an incompatible incumbent becomes idle. diff --git a/.changeset/secure-session-peer-ownership.md b/.changeset/secure-session-peer-ownership.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/secure-session-peer-ownership.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/simplify-copy-rendering.md b/.changeset/simplify-copy-rendering.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/simplify-copy-rendering.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/simplify-copy-selection-ranges.md b/.changeset/simplify-copy-selection-ranges.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/simplify-copy-selection-ranges.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/simplify-session-cli-dispatch.md b/.changeset/simplify-session-cli-dispatch.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/simplify-session-cli-dispatch.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/social-hounds-invent.md b/.changeset/social-hounds-invent.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/social-hounds-invent.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/strict-session-broker-runtime-validation.md b/.changeset/strict-session-broker-runtime-validation.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/strict-session-broker-runtime-validation.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/swift-cases-carry.md b/.changeset/swift-cases-carry.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/swift-cases-carry.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/theme-diff-accent-harvest.md b/.changeset/theme-diff-accent-harvest.md deleted file mode 100644 index dcff78b96..000000000 --- a/.changeset/theme-diff-accent-harvest.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Fix washed-out or wrong-hue diff colors in ~25 bundled themes (gruvbox, rosé pine, tokyo-night, material, everforest, laserwave, night-owl, slack, and others) by re-harvesting every theme's diff accents from its real VS Code accent tokens. diff --git a/.changeset/theme-guard-washout.md b/.changeset/theme-guard-washout.md deleted file mode 100644 index f4c4af32d..000000000 --- a/.changeset/theme-guard-washout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Stop the theme contrast guards from washing out diff accents: low-contrast sign colors now get the smallest readable adjustment instead of a fixed 45% blend, and word-level diff emphasis is derived to the renderer's own separation floor so the highlight you see is the one the theme defines. diff --git a/.changeset/thin-places-think.md b/.changeset/thin-places-think.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/thin-places-think.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/threaded-review-notes.md b/.changeset/threaded-review-notes.md deleted file mode 100644 index a5cfd1052..000000000 --- a/.changeset/threaded-review-notes.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Add editable inline review notes and arbitrarily nested threaded replies with mouse and keyboard actions, including reviewer dismissal of reply-free live agent notes. diff --git a/.changeset/tidy-code-cells.md b/.changeset/tidy-code-cells.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/tidy-code-cells.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tidy-mounted-rows.md b/.changeset/tidy-mounted-rows.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/tidy-mounted-rows.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tidy-panes-activate.md b/.changeset/tidy-panes-activate.md deleted file mode 100644 index 646d089bd..000000000 --- a/.changeset/tidy-panes-activate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Add a pane-wide `onActivate` callback to the extension API for primary mouse presses. diff --git a/.changeset/tidy-startup-states.md b/.changeset/tidy-startup-states.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/tidy-startup-states.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tidy-timed-notices.md b/.changeset/tidy-timed-notices.md deleted file mode 100644 index a845151cc..000000000 --- a/.changeset/tidy-timed-notices.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/two-revision-diff.md b/.changeset/two-revision-diff.md deleted file mode 100644 index 93ec5ad44..000000000 --- a/.changeset/two-revision-diff.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Support backend-native `hunk diff ` reviews across Git, Jujutsu, and Sapling, with pinned source expansion, working-copy isolation, explicit `hunk diff --files ` file comparison, and structured `rangeEndpoints` in extension API generation 14. diff --git a/.changeset/watch-runtime-deadlock.md b/.changeset/watch-runtime-deadlock.md deleted file mode 100644 index 703df5d8c..000000000 --- a/.changeset/watch-runtime-deadlock.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": patch ---- - -Refuse to start watch mode under Bun versions older than 1.3.14, which can deadlock filesystem watcher cleanup and leave Hunk unresponsive. diff --git a/.changeset/wide-trees-expand.md b/.changeset/wide-trees-expand.md deleted file mode 100644 index 1c74a202d..000000000 --- a/.changeset/wide-trees-expand.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"hunkdiff": minor ---- - -Show a fully expanded file tree when the file sidebar reaches its preferred 34-column width, and keep resize drags active while its layout changes. diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f0a6e9b1..f25e8667a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,87 @@ # Changelog +## 0.21.0 + +### Minor Changes + +- [#845](https://github.com/modem-dev/hunk/pull/845) [`a572286`](https://github.com/modem-dev/hunk/commit/a572286e687fabaca3e95213c78e949ca1c5c03f) - Navigate a live review directly to a comment returned by `hunk session comment list`. + +- [#865](https://github.com/modem-dev/hunk/pull/865) [`4bb3f84`](https://github.com/modem-dev/hunk/commit/4bb3f84fa59ce228a7e34a1ba116ef93a3aa423a) - Make the vertical space between files and hunks configurable. + +- [#909](https://github.com/modem-dev/hunk/pull/909) [`a78dac9`](https://github.com/modem-dev/hunk/commit/a78dac9e11487458f419d2e7c4f2bdfb12f4ba32) - Add a `dim` tone to `hunk.registerLineHighlighter` and `hunk session highlight add` for fading diff text toward line backgrounds while preserving syntax highlighting token hues. + +- [#851](https://github.com/modem-dev/hunk/pull/851) [`4d8b000`](https://github.com/modem-dev/hunk/commit/4d8b000aa131b1392d80947df48777e90e48202f) - Let extensions select syntax highlighting by exact filename or basename/path glob, in addition to file extensions. + +- [#888](https://github.com/modem-dev/hunk/pull/888) [`79fd010`](https://github.com/modem-dev/hunk/commit/79fd010a8d6cb239085790f0422eed8c136ae44f) - Let extensions register generic top-level CLI command trees with raw arguments, cancellable streaming I/O, validated exit statuses, and one-time delegation into built-in Hunk commands, including a dependency-free `hunk gh 123` example that fetches GitHub pull-request diffs directly. + +- [#939](https://github.com/modem-dev/hunk/pull/939) [`e1c292b`](https://github.com/modem-dev/hunk/commit/e1c292b5caa9e9b2adcd4b346f07a416083361aa) - Publish `hunk_viewed` and store-backed `note_changed` extension lifecycle events so progress and note UIs can follow hunk navigation and agent comments. + +- [#940](https://github.com/modem-dev/hunk/pull/940) [`2454101`](https://github.com/modem-dev/hunk/commit/2454101d326fc0513e40e38c47a6a945b4b733b1) - Give opted-in extension panes the current line's `{ side, line }` source address on `currentLine`, matching command selection, so a pane can follow the cursor without waiting for a keypress. + +- [#917](https://github.com/modem-dev/hunk/pull/917) [`cf226e0`](https://github.com/modem-dev/hunk/commit/cf226e0f5a44a60cacf4e613930abf6b76fe1127) - Require Node.js 22 or newer for npm installs. Standalone Hunk binaries continue to run without Node.js. + +- [#924](https://github.com/modem-dev/hunk/pull/924) [`15cdd7c`](https://github.com/modem-dev/hunk/commit/15cdd7c5ef491726cf091f7b95189843fe059027) - Resize the built-in files sidebar with the terminal, showing its compact projection at medium widths and keeping split review after the sidebar hides. Extension API v12 adds `ExtensionPaneSize.fraction` for bounded body-axis fractional sizing while preserving manual overrides. + +- [#933](https://github.com/modem-dev/hunk/pull/933) [`8d17357`](https://github.com/modem-dev/hunk/commit/8d17357595adb66d115f8a1bdd945f2e4fc3c447) - Authenticate local session producers and CLI controls with automatically discovered owner-private credentials, signed responses, scoped reconnect replacement, and bounded handshakes. Expose only minimal public daemon health, refuse unsafe PID-based replacement, and let interactive Hunk windows reconnect automatically after an incompatible incumbent becomes idle. + +- [#925](https://github.com/modem-dev/hunk/pull/925) [`f401472`](https://github.com/modem-dev/hunk/commit/f401472820034948e7e670c783df044a778a036d) - Add editable inline review notes and arbitrarily nested threaded replies with mouse and keyboard actions, including reviewer dismissal of reply-free live agent notes. + +- [#965](https://github.com/modem-dev/hunk/pull/965) [`034796a`](https://github.com/modem-dev/hunk/commit/034796a959193c1637a1ef676d7dbccb41d377be) - Add a pane-wide `onActivate` callback to the extension API for primary mouse presses. + +- [#938](https://github.com/modem-dev/hunk/pull/938) [`598e084`](https://github.com/modem-dev/hunk/commit/598e084074e0a188f71e3a0c24abae63d87be6ac) - Support backend-native `hunk diff ` reviews across Git, Jujutsu, and Sapling, with pinned source expansion, working-copy isolation, explicit `hunk diff --files ` file comparison, and structured `rangeEndpoints` in extension API generation 14. + +- [#921](https://github.com/modem-dev/hunk/pull/921) [`7f7d84c`](https://github.com/modem-dev/hunk/commit/7f7d84cd1ec8d8a6858ffe89e1ef8cadb48f447a) - Show a fully expanded file tree when the file sidebar reaches its preferred 34-column width, and keep resize drags active while its layout changes. + +### Patch Changes + +- [#890](https://github.com/modem-dev/hunk/pull/890) [`5012b2f`](https://github.com/modem-dev/hunk/commit/5012b2f2a4c415a4f9cd6044446d1885bf19023f) - Enable unchanged-context expansion in Jujutsu-backed reviews. + +- [#968](https://github.com/modem-dev/hunk/pull/968) [`566220b`](https://github.com/modem-dev/hunk/commit/566220bf910204c64c04605c49a41f6e00d98882) - Add a `/compare/` section to hunk.dev with head-to-head pages for delta, difftastic, diff-so-fancy, `git diff`, and Plannotator, each also served as Markdown for coding agents. + +- [#774](https://github.com/modem-dev/hunk/pull/774) [`bf629ce`](https://github.com/modem-dev/hunk/commit/bf629ce17034acc5b2525518b427b9250f911a04) - Provide complete key event data to command matchers and programmatically invoked handlers. + +- [#855](https://github.com/modem-dev/hunk/pull/855) [`c6ebba9`](https://github.com/modem-dev/hunk/commit/c6ebba98e0797680151dfaa3edb45b0ee1ca9087) - Add Ctrl-D and Ctrl-U aliases for half-page review scrolling. + +- [#955](https://github.com/modem-dev/hunk/pull/955) [`9b5d419`](https://github.com/modem-dev/hunk/commit/9b5d4190cdfe68628794174adcda4db5e14e275b) - Fence late session lifecycle commits so stopped or replaced generations cannot authenticate, reconnect, publish daemon launch metadata, or mutate broker client state. + +- [#928](https://github.com/modem-dev/hunk/pull/928) [`a7c8508`](https://github.com/modem-dev/hunk/commit/a7c8508bb648ece92003063b1172077a1167fea8) - Keep explicit top and bottom jumps from being overridden by a pending selection reveal. + +- [#908](https://github.com/modem-dev/hunk/pull/908) [`708fd3a`](https://github.com/modem-dev/hunk/commit/708fd3a0ada303144f288b09faccbb179f51b709) - Stop installing Bun beside prebuilt Hunk packages so pnpm global updates cannot corrupt Bun's shared platform-package projection. Standalone platform binaries continue to work without a separate Bun installation. + +- [#922](https://github.com/modem-dev/hunk/pull/922) [`dfa9aa4`](https://github.com/modem-dev/hunk/commit/dfa9aa4cd16242ebb4a8a18fda9dd21403624d78) - Fill the review stream on first paint instead of leaving it blank until the user scrolls. + +- [#956](https://github.com/modem-dev/hunk/pull/956) [`be35bb5`](https://github.com/modem-dev/hunk/commit/be35bb591eca9d2547c77dccaa111640485046f7) - Contain unexpected session broker lifecycle failures behind one fixed, redacted user-visible message. + +- [#954](https://github.com/modem-dev/hunk/pull/954) [`39217ae`](https://github.com/modem-dev/hunk/commit/39217ae09b5935fb1a6dd9be42c3042e1ede972a) - Let focused editors inside extension panes receive keys before Hunk's global shortcuts. + +- [#919](https://github.com/modem-dev/hunk/pull/919) [`6df80a9`](https://github.com/modem-dev/hunk/commit/6df80a983efbc35c2a9f0c5e1af9f8f6ab531872) - Make the checksum-aware curl installer the default across the website and docs, add an accessible tabbed install selector, and establish `hunk update` as the canonical updater from Hunk 0.20 onward. + +- [#950](https://github.com/modem-dev/hunk/pull/950) [`d4b1286`](https://github.com/modem-dev/hunk/commit/d4b1286aec23854c186f398499138fc3e2dd1bfd) - Retry session broker connections after synchronous WebSocket startup failures. + +- [#936](https://github.com/modem-dev/hunk/pull/936) [`ad0baaa`](https://github.com/modem-dev/hunk/commit/ad0baaacac22f5ab36a95c2465b11c5fc07bec21) - Keep iTerm2 sessions connected to the local session daemon when their terminal identifiers contain native punctuation. + +- [#858](https://github.com/modem-dev/hunk/pull/858) [`97a44be`](https://github.com/modem-dev/hunk/commit/97a44be5d589d9ecdfe2f4a76403e6af4eecc88b) - Keep wrapped diff geometry aligned with rendered note-guide and add-note columns. + +- [#937](https://github.com/modem-dev/hunk/pull/937) [`6e39a34`](https://github.com/modem-dev/hunk/commit/6e39a343b5c4c539a830e883644927678c157227) - Accept the documented `dim` tone when routing line-highlight commands through the session daemon. + +- [#850](https://github.com/modem-dev/hunk/pull/850) [`65d1c20`](https://github.com/modem-dev/hunk/commit/65d1c20cbe9d462ab2fc84f640642df21ddd0449) - Recognize pacman/AUR-managed installations via `HUNK_INSTALL_SOURCE=pacman` and suppress automatic update notices for them. + +- [#914](https://github.com/modem-dev/hunk/pull/914) [`8992abd`](https://github.com/modem-dev/hunk/commit/8992abd1cecb0e4394c2918966485714ae59baba) - Upgrade the OpenTUI runtime and reusable component peer requirement to 0.5.6. + +- [#961](https://github.com/modem-dev/hunk/pull/961) [`1e97cf4`](https://github.com/modem-dev/hunk/commit/1e97cf42ebc77224bd1338769f83bb2e80296582) - Publish dated prerelease notes on hunk.dev without promoting them as the latest stable release or default install target. + +- [#960](https://github.com/modem-dev/hunk/pull/960) [`e9726c4`](https://github.com/modem-dev/hunk/commit/e9726c47eecb499da68f936da04a459367f5d18c) - Refuse curl installs alongside competing Hunk binaries unless explicitly forced, and print each conflicting path, version, PATH precedence, and package-manager removal guidance. + +- [#724](https://github.com/modem-dev/hunk/pull/724) [`76565a6`](https://github.com/modem-dev/hunk/commit/76565a63c48769a4ebc4ab93452db7037d663330) - Exit cleanly when the terminal hosting a review disconnects instead of leaving an unreachable Hunk process behind. + +- [#942](https://github.com/modem-dev/hunk/pull/942) [`42d2b9d`](https://github.com/modem-dev/hunk/commit/42d2b9dd2f3144e33080f159f4cc9c2824ad1708) - Restore first-frame and scroll responsiveness for large review streams. + +- [#828](https://github.com/modem-dev/hunk/pull/828) [`f0fc408`](https://github.com/modem-dev/hunk/commit/f0fc40812b634f1cd20182a93c8e2303b257df90) - Fix washed-out or wrong-hue diff colors in ~25 bundled themes (gruvbox, rosé pine, tokyo-night, material, everforest, laserwave, night-owl, slack, and others) by re-harvesting every theme's diff accents from its real VS Code accent tokens. + +- [#825](https://github.com/modem-dev/hunk/pull/825) [`b2fc6fc`](https://github.com/modem-dev/hunk/commit/b2fc6fccc24cf2fc3da8e4b55e58e3a9836e2fb1) - Stop the theme contrast guards from washing out diff accents: low-contrast sign colors now get the smallest readable adjustment instead of a fixed 45% blend, and word-level diff emphasis is derived to the renderer's own separation floor so the highlight you see is the one the theme defines. + +- [#902](https://github.com/modem-dev/hunk/pull/902) [`034ec9e`](https://github.com/modem-dev/hunk/commit/034ec9e45aec156cb9fafda6c0de995716f33907) - Refuse to start watch mode under Bun versions older than 1.3.14, which can deadlock filesystem watcher cleanup and leave Hunk unresponsive. + ## 0.21.0-beta.1 ### Minor Changes diff --git a/benchmarks/release/bench-0.21.0.json b/benchmarks/release/bench-0.21.0.json new file mode 100644 index 000000000..b667a3462 --- /dev/null +++ b/benchmarks/release/bench-0.21.0.json @@ -0,0 +1,1761 @@ +{ + "version": 1, + "generatedAt": "2026-09-02T13:19:51.648Z", + "gitSha": "566220bf910204c64c04605c49a41f6e00d98882", + "packageVersion": "0.21.0", + "runtime": { + "bunVersion": "1.3.14", + "platform": "linux", + "arch": "x64" + }, + "samplesPerBenchmark": 11, + "acceptedRegressions": [ + { + "name": "wrapped-cjk/wrapped_cjk_518_mount_first_frame_ms", + "reason": "Carries forward the approved 0.21.0-beta.0 exception: its controlled, order-balanced 12-pair Firecracker A/B measured only +7.21ms/+5.3% against v0.20.1, below the material relative threshold. The 11-sample 0.21.0 snapshot is runtime-equivalent to beta.1 and measures 90.52ms versus beta.1's 91.21ms (-0.8%), so the stable release introduces no additional regression." + } + ], + "results": [ + { + "name": "bootstrap-load/file_pair_bootstrap_ms", + "source": "bootstrap-load", + "samples": [20.96, 21.98, 23.05, 22.31, 21.24, 21.62, 21.65, 22.61, 21.66, 23.52, 21.04], + "median": 21.66, + "p75": 22.61, + "p95": 23.52, + "min": 20.96, + "max": 23.52, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "bootstrap-load/files", + "source": "bootstrap-load", + "samples": [64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64], + "median": 64, + "p75": 64, + "p95": 64, + "min": 64, + "max": 64, + "unit": "count", + "comparable": false + }, + { + "name": "bootstrap-load/git_bootstrap_ms", + "source": "bootstrap-load", + "samples": [45.5, 45.51, 46.9, 49.26, 46.15, 49.22, 45.44, 47.38, 46.68, 47.78, 46.53], + "median": 46.68, + "p75": 47.78, + "p95": 49.26, + "min": 45.44, + "max": 49.26, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "bootstrap-load/git_diff_subprocess_ms", + "source": "bootstrap-load", + "samples": [8.75, 8.91, 9.66, 9.92, 9.42, 8.92, 11.67, 10.63, 8.65, 12.64, 9.53], + "median": 9.53, + "p75": 10.63, + "p95": 12.64, + "min": 8.65, + "max": 12.64, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "bootstrap-load/git_parse_patch_ms", + "source": "bootstrap-load", + "samples": [5.75, 5.81, 6.01, 6.1, 5.51, 6.15, 5.51, 6.07, 5.85, 5.84, 5.6], + "median": 5.84, + "p75": 6.07, + "p95": 6.15, + "min": 5.51, + "max": 6.15, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "bootstrap-load/git_split_patch_chunks_ms", + "source": "bootstrap-load", + "samples": [1.64, 1.66, 1.75, 1.71, 1.75, 1.85, 1.83, 1.82, 1.6, 1.71, 1.67], + "median": 1.71, + "p75": 1.82, + "p95": 1.85, + "min": 1.6, + "max": 1.85, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "bootstrap-load/lines_per_file", + "source": "bootstrap-load", + "samples": [420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420], + "median": 420, + "p75": 420, + "p95": 420, + "min": 420, + "max": 420, + "unit": "count", + "comparable": false + }, + { + "name": "bootstrap-load/parsed_files", + "source": "bootstrap-load", + "samples": [64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64], + "median": 64, + "p75": 64, + "p95": 64, + "min": 64, + "max": 64, + "unit": "count", + "comparable": false + }, + { + "name": "bootstrap-load/patch_chunks", + "source": "bootstrap-load", + "samples": [64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64], + "median": 64, + "p75": 64, + "p95": 64, + "min": 64, + "max": 64, + "unit": "count", + "comparable": false + }, + { + "name": "changeset-parse/balanced_changeset_build_diff_files_ms", + "source": "changeset-parse", + "samples": [0.36, 0.44, 0.58, 0.36, 0.36, 0.36, 0.34, 0.31, 0.37, 0.67, 0.37], + "median": 0.36, + "p75": 0.44, + "p95": 0.67, + "min": 0.31, + "max": 0.67, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/balanced_changeset_files", + "source": "changeset-parse", + "samples": [96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96], + "median": 96, + "p75": 96, + "p95": 96, + "min": 96, + "max": 96, + "unit": "count", + "comparable": false + }, + { + "name": "changeset-parse/balanced_changeset_normalize_patch_ms", + "source": "changeset-parse", + "samples": [0.33, 0.46, 0.34, 0.34, 0.33, 0.34, 0.33, 0.33, 0.34, 0.35, 0.43], + "median": 0.34, + "p75": 0.35, + "p95": 0.46, + "min": 0.33, + "max": 0.46, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/balanced_changeset_parse_patch_ms", + "source": "changeset-parse", + "samples": [2.74, 2.85, 2.92, 2.78, 2.82, 2.73, 3.1, 2.81, 2.74, 3.01, 3.02], + "median": 2.82, + "p75": 3.01, + "p95": 3.1, + "min": 2.73, + "max": 3.1, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/balanced_changeset_patch_bytes", + "source": "changeset-parse", + "samples": [ + 682727, 682727, 682727, 682727, 682727, 682727, 682727, 682727, 682727, 682727, 682727 + ], + "median": 682727, + "p75": 682727, + "p95": 682727, + "min": 682727, + "max": 682727, + "unit": "bytes", + "comparable": false + }, + { + "name": "changeset-parse/balanced_changeset_split_chunks_ms", + "source": "changeset-parse", + "samples": [1.01, 0.9, 1.08, 0.98, 1, 1, 0.83, 1.17, 1.02, 0.86, 1.01], + "median": 1, + "p75": 1.02, + "p95": 1.17, + "min": 0.83, + "max": 1.17, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/large_single_file_build_diff_files_ms", + "source": "changeset-parse", + "samples": [0.07, 0.08, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.08, 0.07, 0.07], + "median": 0.07, + "p75": 0.07, + "p95": 0.08, + "min": 0.07, + "max": 0.08, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/large_single_file_files", + "source": "changeset-parse", + "samples": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "median": 1, + "p75": 1, + "p95": 1, + "min": 1, + "max": 1, + "unit": "count", + "comparable": false + }, + { + "name": "changeset-parse/large_single_file_normalize_patch_ms", + "source": "changeset-parse", + "samples": [0.14, 0.23, 0.15, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14], + "median": 0.14, + "p75": 0.14, + "p95": 0.23, + "min": 0.14, + "max": 0.23, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/large_single_file_parse_patch_ms", + "source": "changeset-parse", + "samples": [0.89, 0.9, 0.94, 0.93, 0.9, 0.88, 0.92, 0.99, 0.91, 0.91, 1.13], + "median": 0.91, + "p75": 0.94, + "p95": 1.13, + "min": 0.88, + "max": 1.13, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/large_single_file_patch_bytes", + "source": "changeset-parse", + "samples": [ + 284479, 284479, 284479, 284479, 284479, 284479, 284479, 284479, 284479, 284479, 284479 + ], + "median": 284479, + "p75": 284479, + "p95": 284479, + "min": 284479, + "max": 284479, + "unit": "bytes", + "comparable": false + }, + { + "name": "changeset-parse/large_single_file_split_chunks_ms", + "source": "changeset-parse", + "samples": [0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.26, 0.27, 0.3, 0.26, 0.27], + "median": 0.27, + "p75": 0.27, + "p95": 0.3, + "min": 0.26, + "max": 0.3, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/many_small_files_build_diff_files_ms", + "source": "changeset-parse", + "samples": [1.17, 1.19, 1.19, 1.17, 1.53, 1.18, 1.14, 1.12, 1.17, 1.32, 1.27], + "median": 1.18, + "p75": 1.27, + "p95": 1.53, + "min": 1.12, + "max": 1.53, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/many_small_files_files", + "source": "changeset-parse", + "samples": [240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240], + "median": 240, + "p75": 240, + "p95": 240, + "min": 240, + "max": 240, + "unit": "count", + "comparable": false + }, + { + "name": "changeset-parse/many_small_files_normalize_patch_ms", + "source": "changeset-parse", + "samples": [0.45, 0.47, 0.46, 0.46, 0.46, 0.46, 0.45, 0.46, 0.44, 0.45, 0.48], + "median": 0.46, + "p75": 0.46, + "p95": 0.48, + "min": 0.44, + "max": 0.48, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/many_small_files_parse_patch_ms", + "source": "changeset-parse", + "samples": [4.7, 4.72, 4.93, 5.09, 4.72, 4.6, 4.73, 4.91, 5.04, 4.84, 4.85], + "median": 4.84, + "p75": 4.93, + "p95": 5.09, + "min": 4.6, + "max": 5.09, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "changeset-parse/many_small_files_patch_bytes", + "source": "changeset-parse", + "samples": [ + 376703, 376703, 376703, 376703, 376703, 376703, 376703, 376703, 376703, 376703, 376703 + ], + "median": 376703, + "p75": 376703, + "p95": 376703, + "min": 376703, + "max": 376703, + "unit": "bytes", + "comparable": false + }, + { + "name": "changeset-parse/many_small_files_split_chunks_ms", + "source": "changeset-parse", + "samples": [0.85, 0.86, 0.77, 0.8, 0.81, 0.81, 0.8, 0.86, 0.77, 0.87, 0.87], + "median": 0.81, + "p75": 0.86, + "p95": 0.87, + "min": 0.77, + "max": 0.87, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "highlight-prefetch/adjacent_ready_before_move", + "source": "highlight-prefetch", + "samples": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "median": 1, + "p75": 1, + "p95": 1, + "min": 1, + "max": 1, + "unit": "boolean", + "comparable": false + }, + { + "name": "highlight-prefetch/files", + "source": "highlight-prefetch", + "samples": [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], + "median": 4, + "p75": 4, + "p95": 4, + "min": 4, + "max": 4, + "unit": "count", + "comparable": false + }, + { + "name": "highlight-prefetch/iterations", + "source": "highlight-prefetch", + "samples": [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], + "median": 2, + "p75": 2, + "p95": 2, + "min": 2, + "max": 2, + "unit": "count", + "comparable": false + }, + { + "name": "highlight-prefetch/next_file_ready_ms", + "source": "highlight-prefetch", + "samples": [67.83, 77.49, 10.91, 80.75, 67.73, 73.03, 72.55, 72.48, 67.33, 67.62, 80.94], + "median": 72.48, + "p75": 77.49, + "p95": 80.94, + "min": 10.91, + "max": 80.94, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "highlight-prefetch/selected_startup_ms", + "source": "highlight-prefetch", + "samples": [26.03, 23.29, 10.97, 24.16, 24.81, 26.27, 23.93, 24.22, 23.53, 24.04, 24.15], + "median": 24.15, + "p75": 24.81, + "p95": 26.27, + "min": 10.97, + "max": 26.27, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "interaction-latency/after_first_frame_heap_used_bytes", + "source": "interaction-latency", + "samples": [ + 41665648, 40981085, 41707983, 41055805, 41958450, 41968487, 42057111, 40957236, 42033290, + 42186643, 42054359 + ], + "median": 41958450, + "p75": 42054359, + "p95": 42186643, + "min": 40957236, + "max": 42186643, + "unit": "bytes", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.2, + "minAbsoluteRegression": 8388608 + } + }, + { + "name": "interaction-latency/after_first_frame_rss_bytes", + "source": "interaction-latency", + "samples": [ + 281649152, 290811904, 288927744, 288096256, 286494720, 283541504, 290045952, 258293760, + 291307520, 290004992, 283623424 + ], + "median": 288096256, + "p75": 290045952, + "p95": 291307520, + "min": 258293760, + "max": 291307520, + "unit": "bytes", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.2, + "minAbsoluteRegression": 8388608 + } + }, + { + "name": "interaction-latency/after_navigation_heap_used_bytes", + "source": "interaction-latency", + "samples": [ + 102010605, 108024205, 101616275, 101995657, 102011300, 100157655, 102004570, 100436222, + 102031977, 101995932, 101994278 + ], + "median": 101995932, + "p75": 102011300, + "p95": 108024205, + "min": 100157655, + "max": 108024205, + "unit": "bytes", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.2, + "minAbsoluteRegression": 8388608 + } + }, + { + "name": "interaction-latency/after_navigation_rss_bytes", + "source": "interaction-latency", + "samples": [ + 410980352, 434704384, 407543808, 412430336, 407838720, 415211520, 402259968, 413827072, + 418492416, 403546112, 406503424 + ], + "median": 410980352, + "p75": 415211520, + "p95": 434704384, + "min": 402259968, + "max": 434704384, + "unit": "bytes", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.2, + "minAbsoluteRegression": 8388608 + } + }, + { + "name": "interaction-latency/files", + "source": "interaction-latency", + "samples": [180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180], + "median": 180, + "p75": 180, + "p95": 180, + "min": 180, + "max": 180, + "unit": "count", + "comparable": false + }, + { + "name": "interaction-latency/first_frame_ms", + "source": "interaction-latency", + "samples": [19.25, 19.4, 19.37, 20.75, 19.95, 21.43, 20.09, 4.59, 22.08, 23.54, 22.28], + "median": 20.09, + "p75": 22.08, + "p95": 23.54, + "min": 4.59, + "max": 23.54, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "interaction-latency/hunk_nav_press_median_ms", + "source": "interaction-latency", + "samples": [44.72, 38.24, 42.13, 44.19, 46.09, 45.15, 46.46, 45.49, 45.97, 46.02, 51.8], + "median": 45.49, + "p75": 46.09, + "p95": 51.8, + "min": 38.24, + "max": 51.8, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "interaction-latency/hunk_nav_press_p95_ms", + "source": "interaction-latency", + "samples": [59.43, 53.05, 100.75, 55.35, 60.66, 49.54, 57.92, 99.16, 62.98, 59.03, 59.17], + "median": 59.17, + "p75": 62.98, + "p95": 100.75, + "min": 49.54, + "max": 100.75, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "interaction-latency/lines_per_file", + "source": "interaction-latency", + "samples": [120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120], + "median": 120, + "p75": 120, + "p95": 120, + "min": 120, + "max": 120, + "unit": "count", + "comparable": false + }, + { + "name": "interaction-latency/navigation_presses", + "source": "interaction-latency", + "samples": [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + "median": 6, + "p75": 6, + "p95": 6, + "min": 6, + "max": 6, + "unit": "count", + "comparable": false + }, + { + "name": "interaction-latency/scroll_tick_median_ms", + "source": "interaction-latency", + "samples": [1.11, 1.06, 1.05, 1.07, 1.02, 1.14, 1.27, 2.19, 1.18, 1.09, 1.48], + "median": 1.11, + "p75": 1.27, + "p95": 2.19, + "min": 1.02, + "max": 2.19, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "interaction-latency/scroll_tick_p95_ms", + "source": "interaction-latency", + "samples": [4.56, 3.04, 4.65, 4.75, 4.39, 3.22, 4.6, 20.9, 5.07, 4.81, 4.85], + "median": 4.65, + "p75": 4.85, + "p95": 20.9, + "min": 3.04, + "max": 20.9, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "interaction-latency/scroll_ticks", + "source": "interaction-latency", + "samples": [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8], + "median": 8, + "p75": 8, + "p95": 8, + "min": 8, + "max": 8, + "unit": "count", + "comparable": false + }, + { + "name": "large-stream/cold_first_frame_ms", + "source": "large-stream", + "samples": [2.33, 2.11, 2.44, 2.38, 2.06, 2.23, 2.09, 2.13, 2.22, 2.18, 2.11], + "median": 2.18, + "p75": 2.33, + "p95": 2.44, + "min": 2.06, + "max": 2.44, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "large-stream/files", + "source": "large-stream", + "samples": [180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180], + "median": 180, + "p75": 180, + "p95": 180, + "min": 180, + "max": 180, + "unit": "count", + "comparable": false + }, + { + "name": "large-stream/lines_per_file", + "source": "large-stream", + "samples": [120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120], + "median": 120, + "p75": 120, + "p95": 120, + "min": 120, + "max": 120, + "unit": "count", + "comparable": false + }, + { + "name": "large-stream/scroll_ticks", + "source": "large-stream", + "samples": [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], + "median": 4, + "p75": 4, + "p95": 4, + "min": 4, + "max": 4, + "unit": "count", + "comparable": false + }, + { + "name": "large-stream/warm_first_frame_ms", + "source": "large-stream", + "samples": [1.33, 1.41, 1.37, 1.57, 1.3, 1.62, 1.41, 1.45, 1.45, 1.48, 1.34], + "median": 1.41, + "p75": 1.48, + "p95": 1.62, + "min": 1.3, + "max": 1.62, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "large-stream/windowed_scroll_ticks_ms", + "source": "large-stream", + "samples": [ + 181.26, 179.41, 178.36, 171.53, 170.94, 178.94, 181.17, 172.02, 175.65, 176.17, 170.39 + ], + "median": 176.17, + "p75": 179.41, + "p95": 181.26, + "min": 170.39, + "max": 181.26, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "non-ascii-stream/files", + "source": "non-ascii-stream", + "samples": [120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120], + "median": 120, + "p75": 120, + "p95": 120, + "min": 120, + "max": 120, + "unit": "count", + "comparable": false + }, + { + "name": "non-ascii-stream/lines_per_file", + "source": "non-ascii-stream", + "samples": [120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120], + "median": 120, + "p75": 120, + "p95": 120, + "min": 120, + "max": 120, + "unit": "count", + "comparable": false + }, + { + "name": "non-ascii-stream/non_ascii_cold_first_frame_ms", + "source": "non-ascii-stream", + "samples": [18.03, 5.93, 15.94, 16.12, 15.41, 16.27, 17.9, 17.25, 16.38, 19.24, 16.33], + "median": 16.33, + "p75": 17.9, + "p95": 19.24, + "min": 5.93, + "max": 19.24, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "non-ascii-stream/non_ascii_scroll_tick_median_ms", + "source": "non-ascii-stream", + "samples": [3.41, 2.07, 1.21, 1.2, 1.21, 1.23, 1.21, 1.2, 1.23, 1.26, 1.23], + "median": 1.23, + "p75": 1.26, + "p95": 3.41, + "min": 1.2, + "max": 3.41, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "non-ascii-stream/non_ascii_scroll_tick_p95_ms", + "source": "non-ascii-stream", + "samples": [9.77, 42.25, 6.05, 6.2, 5.89, 6.06, 50.99, 5.85, 6.47, 11.17, 6.17], + "median": 6.2, + "p75": 11.17, + "p95": 50.99, + "min": 5.85, + "max": 50.99, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "non-ascii-stream/scroll_ticks", + "source": "non-ascii-stream", + "samples": [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8], + "median": 8, + "p75": 8, + "p95": 8, + "min": 8, + "max": 8, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/balanced_stream_files", + "source": "render-layout", + "samples": [180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180], + "median": 180, + "p75": 180, + "p95": 180, + "min": 180, + "max": 180, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/balanced_stream_geometry_ms", + "source": "render-layout", + "samples": [13.92, 10.95, 12.4, 11.22, 11.81, 12.07, 13.06, 11.72, 11.64, 13.13, 11.4], + "median": 11.81, + "p75": 13.06, + "p95": 13.92, + "min": 10.95, + "max": 13.92, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/balanced_stream_planned_rows", + "source": "render-layout", + "samples": [10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260], + "median": 10260, + "p75": 10260, + "p95": 10260, + "min": 10260, + "max": 10260, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/balanced_stream_review_plan_ms", + "source": "render-layout", + "samples": [8.32, 8.08, 8.02, 8.42, 8.52, 8.55, 8.8, 8.19, 8.95, 9.19, 8.46], + "median": 8.46, + "p75": 8.8, + "p95": 9.19, + "min": 8.02, + "max": 9.19, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/balanced_stream_split_rows", + "source": "render-layout", + "samples": [10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260, 10260], + "median": 10260, + "p75": 10260, + "p95": 10260, + "min": 10260, + "max": 10260, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/balanced_stream_split_rows_ms", + "source": "render-layout", + "samples": [3.86, 3.9, 3.81, 3.76, 3.82, 3.67, 3.85, 3.78, 4, 3.85, 3.74], + "median": 3.82, + "p75": 3.86, + "p95": 4, + "min": 3.67, + "max": 4, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/balanced_stream_stack_rows", + "source": "render-layout", + "samples": [18900, 18900, 18900, 18900, 18900, 18900, 18900, 18900, 18900, 18900, 18900], + "median": 18900, + "p75": 18900, + "p95": 18900, + "min": 18900, + "max": 18900, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/balanced_stream_stack_rows_ms", + "source": "render-layout", + "samples": [3.65, 3.76, 3.7, 3.63, 3.72, 3.89, 3.7, 3.78, 3.74, 4, 3.76], + "median": 3.74, + "p75": 3.78, + "p95": 4, + "min": 3.63, + "max": 4, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/large_single_file_files", + "source": "render-layout", + "samples": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "median": 1, + "p75": 1, + "p95": 1, + "min": 1, + "max": 1, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/large_single_file_geometry_ms", + "source": "render-layout", + "samples": [15.32, 19.25, 19.73, 18.6, 18.87, 18.83, 17.78, 18.68, 20.57, 18.7, 18.54], + "median": 18.7, + "p75": 19.25, + "p95": 20.57, + "min": 15.32, + "max": 20.57, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/large_single_file_planned_rows", + "source": "render-layout", + "samples": [16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010], + "median": 16010, + "p75": 16010, + "p95": 16010, + "min": 16010, + "max": 16010, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/large_single_file_review_plan_ms", + "source": "render-layout", + "samples": [14.03, 10.32, 10.42, 10.23, 10.92, 12.21, 13.4, 12.58, 11.24, 10.64, 11.22], + "median": 11.22, + "p75": 12.58, + "p95": 14.03, + "min": 10.23, + "max": 14.03, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/large_single_file_split_rows", + "source": "render-layout", + "samples": [16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010, 16010], + "median": 16010, + "p75": 16010, + "p95": 16010, + "min": 16010, + "max": 16010, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/large_single_file_split_rows_ms", + "source": "render-layout", + "samples": [4.64, 8.22, 7.51, 7.1, 7.17, 4.73, 4.56, 5.2, 5.61, 4.52, 4.41], + "median": 5.2, + "p75": 7.17, + "p95": 8.22, + "min": 4.41, + "max": 8.22, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/large_single_file_stack_rows", + "source": "render-layout", + "samples": [32011, 32011, 32011, 32011, 32011, 32011, 32011, 32011, 32011, 32011, 32011], + "median": 32011, + "p75": 32011, + "p95": 32011, + "min": 32011, + "max": 32011, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/large_single_file_stack_rows_ms", + "source": "render-layout", + "samples": [8.43, 5.56, 5.3, 4.35, 4.28, 5.06, 4.41, 4.64, 5.8, 4.09, 4.25], + "median": 4.64, + "p75": 5.56, + "p95": 8.43, + "min": 4.09, + "max": 8.43, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/many_small_files_files", + "source": "render-layout", + "samples": [360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360], + "median": 360, + "p75": 360, + "p95": 360, + "min": 360, + "max": 360, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/many_small_files_geometry_ms", + "source": "render-layout", + "samples": [12.86, 11.77, 11.61, 12.5, 11.51, 11.94, 11.81, 12.37, 11.47, 12.6, 13.38], + "median": 11.94, + "p75": 12.6, + "p95": 13.38, + "min": 11.47, + "max": 13.38, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/many_small_files_planned_rows", + "source": "render-layout", + "samples": [6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120], + "median": 6120, + "p75": 6120, + "p95": 6120, + "min": 6120, + "max": 6120, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/many_small_files_review_plan_ms", + "source": "render-layout", + "samples": [6.44, 8.63, 7.52, 7.06, 6.84, 7.47, 7.43, 6.22, 6.74, 5.98, 5.32], + "median": 6.84, + "p75": 7.47, + "p95": 8.63, + "min": 5.32, + "max": 8.63, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/many_small_files_split_rows", + "source": "render-layout", + "samples": [6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120], + "median": 6120, + "p75": 6120, + "p95": 6120, + "min": 6120, + "max": 6120, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/many_small_files_split_rows_ms", + "source": "render-layout", + "samples": [5.08, 4.77, 4.69, 4.86, 4.66, 4.93, 4.96, 4.71, 4.67, 4.88, 4.79], + "median": 4.79, + "p75": 4.93, + "p95": 5.08, + "min": 4.66, + "max": 5.08, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "render-layout/many_small_files_stack_rows", + "source": "render-layout", + "samples": [10440, 10440, 10440, 10440, 10440, 10440, 10440, 10440, 10440, 10440, 10440], + "median": 10440, + "p75": 10440, + "p95": 10440, + "min": 10440, + "max": 10440, + "unit": "count", + "comparable": false + }, + { + "name": "render-layout/many_small_files_stack_rows_ms", + "source": "render-layout", + "samples": [3.6, 3.47, 3.54, 3.47, 3.74, 3.66, 3.69, 3.4, 3.86, 3.6, 3.56], + "median": 3.6, + "p75": 3.69, + "p95": 3.86, + "min": 3.4, + "max": 3.86, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "terminal-width/cjk_scalar_text_width_ms", + "source": "terminal-width", + "samples": [16.27, 16.78, 15.44, 15.12, 16.85, 15.45, 15.56, 15.33, 16.32, 16.64, 15.15], + "median": 15.56, + "p75": 16.64, + "p95": 16.85, + "min": 15.12, + "max": 16.85, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "terminal-width/cjk_scalar_width_checksum", + "source": "terminal-width", + "samples": [ + 664000, 664000, 664000, 664000, 664000, 664000, 664000, 664000, 664000, 664000, 664000 + ], + "median": 664000, + "p75": 664000, + "p95": 664000, + "min": 664000, + "max": 664000, + "unit": "count", + "comparable": false + }, + { + "name": "terminal-width/cjk_scalar_width_measurements", + "source": "terminal-width", + "samples": [12000, 12000, 12000, 12000, 12000, 12000, 12000, 12000, 12000, 12000, 12000], + "median": 12000, + "p75": 12000, + "p95": 12000, + "min": 12000, + "max": 12000, + "unit": "count", + "comparable": false + }, + { + "name": "terminal-width/competitor_string_width_cjk_scalar_ms", + "source": "terminal-width", + "samples": [ + 1052.65, 1031.11, 1061.57, 1049.97, 1040.24, 1081.92, 1039.55, 1075.57, 1054.81, 1068.39, + 1024.46 + ], + "median": 1052.65, + "p75": 1068.39, + "p95": 1081.92, + "min": 1024.46, + "max": 1081.92, + "unit": "ms", + "comparable": false + }, + { + "name": "terminal-width/competitor_string_width_complex_cluster_ms", + "source": "terminal-width", + "samples": [ + 426.21, 421.07, 443.93, 445.89, 439.22, 462.41, 445.15, 455.84, 437.32, 430.3, 410.57 + ], + "median": 439.22, + "p75": 445.89, + "p95": 462.41, + "min": 410.57, + "max": 462.41, + "unit": "ms", + "comparable": false + }, + { + "name": "terminal-width/competitor_string_width_emoji_scalar_ms", + "source": "terminal-width", + "samples": [ + 332.09, 335.21, 342.37, 345.16, 336.07, 360.33, 344.14, 353.24, 340.84, 335.51, 321.08 + ], + "median": 340.84, + "p75": 345.16, + "p95": 360.33, + "min": 321.08, + "max": 360.33, + "unit": "ms", + "comparable": false + }, + { + "name": "terminal-width/complex_cluster_text_width_ms", + "source": "terminal-width", + "samples": [14.23, 13.41, 15.55, 14.84, 14.53, 14.54, 13.46, 13.57, 13.83, 13.7, 14.03], + "median": 14.03, + "p75": 14.54, + "p95": 15.55, + "min": 13.41, + "max": 15.55, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "terminal-width/complex_cluster_width_checksum", + "source": "terminal-width", + "samples": [ + 196000, 196000, 196000, 196000, 196000, 196000, 196000, 196000, 196000, 196000, 196000 + ], + "median": 196000, + "p75": 196000, + "p95": 196000, + "min": 196000, + "max": 196000, + "unit": "count", + "comparable": false + }, + { + "name": "terminal-width/complex_cluster_width_measurements", + "source": "terminal-width", + "samples": [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], + "median": 4000, + "p75": 4000, + "p95": 4000, + "min": 4000, + "max": 4000, + "unit": "count", + "comparable": false + }, + { + "name": "terminal-width/emoji_scalar_text_width_ms", + "source": "terminal-width", + "samples": [6.2, 6.07, 6.57, 7.08, 7.36, 6.63, 6.62, 7.08, 6.12, 5.98, 6.64], + "median": 6.62, + "p75": 7.08, + "p95": 7.36, + "min": 5.98, + "max": 7.36, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "terminal-width/emoji_scalar_width_checksum", + "source": "terminal-width", + "samples": [ + 170000, 170000, 170000, 170000, 170000, 170000, 170000, 170000, 170000, 170000, 170000 + ], + "median": 170000, + "p75": 170000, + "p95": 170000, + "min": 170000, + "max": 170000, + "unit": "count", + "comparable": false + }, + { + "name": "terminal-width/emoji_scalar_width_measurements", + "source": "terminal-width", + "samples": [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], + "median": 4000, + "p75": 4000, + "p95": 4000, + "min": 4000, + "max": 4000, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/large_worktree_additions", + "source": "working-tree-load", + "samples": [8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640], + "median": 8640, + "p75": 8640, + "p95": 8640, + "min": 8640, + "max": 8640, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/large_worktree_deletions", + "source": "working-tree-load", + "samples": [8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640, 8640], + "median": 8640, + "p75": 8640, + "p95": 8640, + "min": 8640, + "max": 8640, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/large_worktree_files", + "source": "working-tree-load", + "samples": [240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240], + "median": 240, + "p75": 240, + "p95": 240, + "min": 240, + "max": 240, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/large_worktree_load_ms", + "source": "working-tree-load", + "samples": [49.91, 51.16, 50.57, 49.8, 53.23, 51.67, 49.29, 52.47, 51.36, 49.22, 51.07], + "median": 51.07, + "p75": 51.67, + "p95": 53.23, + "min": 49.22, + "max": 53.23, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "working-tree-load/medium_worktree_additions", + "source": "working-tree-load", + "samples": [2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880], + "median": 2880, + "p75": 2880, + "p95": 2880, + "min": 2880, + "max": 2880, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/medium_worktree_deletions", + "source": "working-tree-load", + "samples": [2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880, 2880], + "median": 2880, + "p75": 2880, + "p95": 2880, + "min": 2880, + "max": 2880, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/medium_worktree_files", + "source": "working-tree-load", + "samples": [96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96], + "median": 96, + "p75": 96, + "p95": 96, + "min": 96, + "max": 96, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/medium_worktree_load_ms", + "source": "working-tree-load", + "samples": [22.23, 21.08, 21.33, 23.23, 21.7, 23.65, 21.58, 21.92, 23.63, 21.97, 22.3], + "median": 21.97, + "p75": 23.23, + "p95": 23.65, + "min": 21.08, + "max": 23.65, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "working-tree-load/small_worktree_additions", + "source": "working-tree-load", + "samples": [208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208], + "median": 208, + "p75": 208, + "p95": 208, + "min": 208, + "max": 208, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/small_worktree_deletions", + "source": "working-tree-load", + "samples": [208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208], + "median": 208, + "p75": 208, + "p95": 208, + "min": 208, + "max": 208, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/small_worktree_files", + "source": "working-tree-load", + "samples": [16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16], + "median": 16, + "p75": 16, + "p95": 16, + "min": 16, + "max": 16, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/small_worktree_load_ms", + "source": "working-tree-load", + "samples": [9.23, 9.86, 9.78, 10.43, 9.81, 9.31, 10.27, 11.09, 9.9, 10.23, 9.71], + "median": 9.86, + "p75": 10.27, + "p95": 11.09, + "min": 9.23, + "max": 11.09, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "working-tree-load/untracked_few_large_additions", + "source": "working-tree-load", + "samples": [30104, 30104, 30104, 30104, 30104, 30104, 30104, 30104, 30104, 30104, 30104], + "median": 30104, + "p75": 30104, + "p95": 30104, + "min": 30104, + "max": 30104, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/untracked_few_large_deletions", + "source": "working-tree-load", + "samples": [104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104], + "median": 104, + "p75": 104, + "p95": 104, + "min": 104, + "max": 104, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/untracked_few_large_files", + "source": "working-tree-load", + "samples": [14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14], + "median": 14, + "p75": 14, + "p95": 14, + "min": 14, + "max": 14, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/untracked_few_large_load_ms", + "source": "working-tree-load", + "samples": [16.44, 18.21, 18.16, 16.78, 16.99, 17.8, 17.82, 16.96, 17.39, 20.07, 16.42], + "median": 17.39, + "p75": 18.16, + "p95": 20.07, + "min": 16.42, + "max": 20.07, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "working-tree-load/untracked_many_small_additions", + "source": "working-tree-load", + "samples": [4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528], + "median": 4528, + "p75": 4528, + "p95": 4528, + "min": 4528, + "max": 4528, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/untracked_many_small_deletions", + "source": "working-tree-load", + "samples": [208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208], + "median": 208, + "p75": 208, + "p95": 208, + "min": 208, + "max": 208, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/untracked_many_small_files", + "source": "working-tree-load", + "samples": [136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136], + "median": 136, + "p75": 136, + "p95": 136, + "min": 136, + "max": 136, + "unit": "count", + "comparable": false + }, + { + "name": "working-tree-load/untracked_many_small_load_ms", + "source": "working-tree-load", + "samples": [17.96, 19.47, 18.07, 18.5, 18.6, 18.6, 18.21, 17.53, 19.26, 18.33, 19.88], + "median": 18.5, + "p75": 19.26, + "p95": 19.88, + "min": 17.53, + "max": 19.88, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "wrapped-cjk/long_line_characters", + "source": "wrapped-cjk", + "samples": [8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736], + "median": 8736, + "p75": 8736, + "p95": 8736, + "min": 8736, + "max": 8736, + "unit": "count", + "comparable": false + }, + { + "name": "wrapped-cjk/physical_lines", + "source": "wrapped-cjk", + "samples": [518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518], + "median": 518, + "p75": 518, + "p95": 518, + "min": 518, + "max": 518, + "unit": "count", + "comparable": false + }, + { + "name": "wrapped-cjk/wheel_burst_events", + "source": "wrapped-cjk", + "samples": [12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12], + "median": 12, + "p75": 12, + "p95": 12, + "min": 12, + "max": 12, + "unit": "count", + "comparable": false + }, + { + "name": "wrapped-cjk/wrapped_cjk_518_mount_first_frame_ms", + "source": "wrapped-cjk", + "samples": [92.37, 101.1, 94.01, 90.8, 90.84, 86.68, 89.08, 90.52, 85.05, 89.21, 88.1], + "median": 90.52, + "p75": 92.37, + "p95": 101.1, + "min": 85.05, + "max": 101.1, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "wrapped-cjk/wrapped_cjk_long_line_mount_first_frame_ms", + "source": "wrapped-cjk", + "samples": [21.34, 29.76, 20.44, 20.39, 22.21, 20.7, 21.23, 23.26, 22.38, 21.21, 20.7], + "median": 21.23, + "p75": 22.38, + "p95": 29.76, + "min": 20.39, + "max": 29.76, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "wrapped-cjk/wrapped_cjk_wheel_burst_immediate_content_rows", + "source": "wrapped-cjk", + "samples": [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + "median": 55, + "p75": 55, + "p95": 55, + "min": 55, + "max": 55, + "unit": "count", + "comparable": false + }, + { + "name": "wrapped-cjk/wrapped_cjk_wheel_burst_immediate_ms", + "source": "wrapped-cjk", + "samples": [5.11, 4.45, 4.41, 4.59, 4.54, 4.63, 4.73, 5.08, 4.95, 4.94, 4.85], + "median": 4.73, + "p75": 4.95, + "p95": 5.11, + "min": 4.41, + "max": 5.11, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + }, + { + "name": "wrapped-cjk/wrapped_cjk_wheel_burst_initial_content_rows", + "source": "wrapped-cjk", + "samples": [54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54], + "median": 54, + "p75": 54, + "p95": 54, + "min": 54, + "max": 54, + "unit": "count", + "comparable": false + }, + { + "name": "wrapped-cjk/wrapped_cjk_wheel_burst_settled_content_rows", + "source": "wrapped-cjk", + "samples": [55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55], + "median": 55, + "p75": 55, + "p95": 55, + "min": 55, + "max": 55, + "unit": "count", + "comparable": false + }, + { + "name": "wrapped-cjk/wrapped_cjk_wheel_burst_settled_ms", + "source": "wrapped-cjk", + "samples": [29, 28.56, 29.78, 29.2, 32.33, 32.72, 29.2, 32.86, 34.43, 30.55, 31.63], + "median": 30.55, + "p75": 32.72, + "p95": 34.43, + "min": 28.56, + "max": 34.43, + "unit": "ms", + "comparable": true, + "threshold": { + "maxRegressionRatio": 1.15, + "minAbsoluteRegression": 5 + } + } + ] +} diff --git a/package.json b/package.json index 9477357fe..7c0f453aa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hunkdiff", - "version": "0.21.0-beta.1", + "version": "0.21.0", "description": "Desktop-inspired terminal diff viewer for understanding agent-authored changesets.", "keywords": [ "ai", diff --git a/website/public/changelog/rss.xml b/website/public/changelog/rss.xml index d27ed478f..2065e5109 100644 --- a/website/public/changelog/rss.xml +++ b/website/public/changelog/rss.xml @@ -11,14 +11,14 @@ https://hunk.dev/changelog/0.21/#v0-21-0-beta-1 https://hunk.dev/changelog/0.21/#v0-21-0-beta-1 Tue, 01 Sep 2026 00:00:00 GMT - Release notes for Hunk 0.21: 2 releases, August 30, 2026 – September 1, 2026. + Hunk 0.21 turns reviews into a richer agent-aware workspace with authenticated live sessions, editable threaded notes, two-revision and two-file comparisons, more responsive navigation, and a broader extension surface. Hunk 0.21.0-beta.0 (Prerelease) https://hunk.dev/changelog/0.21/#v0-21-0-beta-0 https://hunk.dev/changelog/0.21/#v0-21-0-beta-0 Sun, 30 Aug 2026 00:00:00 GMT - Release notes for Hunk 0.21: 2 releases, August 30, 2026 – September 1, 2026. + Hunk 0.21 turns reviews into a richer agent-aware workspace with authenticated live sessions, editable threaded notes, two-revision and two-file comparisons, more responsive navigation, and a broader extension surface. Hunk 0.20 diff --git a/website/releases/cards.json b/website/releases/cards.json index 97b83a893..f281d3919 100644 --- a/website/releases/cards.json +++ b/website/releases/cards.json @@ -10,9 +10,10 @@ { "slug": "0.21", "title": "Hunk 0.21", - "meta": "Prerelease · August 30, 2026 – September 1, 2026 · 2 releases · 37 changes", + "tagline": "Hunk 0.21 turns reviews into a richer agent-aware workspace with authenticated live sessions, editable threaded notes, two-revision and…", + "meta": "Prerelease · August 30, 2026 – September 1, 2026 · 3 releases · 75 changes", "chips": ["0.21.0-beta.1", "0.21.0-beta.0"], - "alt": "Hunk 0.21 release notes — Prerelease · August 30, 2026 – September 1, 2026 · 2 releases · 37 changes" + "alt": "Hunk 0.21 release notes — Prerelease · August 30, 2026 – September 1, 2026 · 3 releases · 75 changes" }, { "slug": "0.20", diff --git a/website/releases/notes.json b/website/releases/notes.json index 2e5c995c4..527da8294 100644 --- a/website/releases/notes.json +++ b/website/releases/notes.json @@ -1,4 +1,14 @@ { + "0.21": { + "summary": "Hunk 0.21 turns reviews into a richer agent-aware workspace with authenticated live sessions, editable threaded notes, two-revision and two-file comparisons, more responsive navigation, and a broader extension surface.", + "tagline": "Secure sessions, threaded notes, richer comparisons", + "links": [ + { "label": "Live session control", "href": "/docs/agents/live-session-control/" }, + { "label": "Comments and annotations", "href": "/docs/agents/comments-and-annotations/" }, + { "label": "Files and patches", "href": "/docs/workflows/files-and-patches/" }, + { "label": "Extension API", "href": "/docs/extend/extension-api/" } + ] + }, "0.20": { "summary": "Hunk 0.20 adds a one-line installer with conditional checksum verification and self-updates, launches a directory of 12 community extensions, and makes line-level reviewing faster and more precise.", "tagline": "One-line install, self-updates, extension directory", diff --git a/website/src/content/docs/changelog/0.21.md b/website/src/content/docs/changelog/0.21.md index 22e53b44f..58858f819 100644 --- a/website/src/content/docs/changelog/0.21.md +++ b/website/src/content/docs/changelog/0.21.md @@ -1,6 +1,6 @@ --- title: Hunk 0.21 -description: "Release notes for Hunk 0.21: 2 releases, August 30, 2026 – September 1, 2026." +description: "Hunk 0.21 turns reviews into a richer agent-aware workspace with authenticated live sessions, editable threaded notes, two-revision and two-file…" slug: changelog/0.21 editUrl: false head: @@ -11,7 +11,7 @@ head: - tag: meta attrs: property: og:image:alt - content: "Hunk 0.21 release notes — Prerelease · August 30, 2026 – September 1, 2026 · 2 releases · 37 changes" + content: "Hunk 0.21 release notes — Prerelease · August 30, 2026 – September 1, 2026 · 3 releases · 75 changes" - tag: meta attrs: name: twitter:image @@ -20,10 +20,69 @@ head: -Prerelease · August 30, 2026 – September 1, 2026 · 2 releases +Prerelease · August 30, 2026 – September 1, 2026 · 3 releases + +Hunk 0.21 turns reviews into a richer agent-aware workspace with authenticated live sessions, editable threaded notes, two-revision and two-file comparisons, more responsive navigation, and a broader extension surface. + +## Related documentation + +- [Live session control](/docs/agents/live-session-control/) +- [Comments and annotations](/docs/agents/comments-and-annotations/) +- [Files and patches](/docs/workflows/files-and-patches/) +- [Extension API](/docs/extend/extension-api/) ## Releases in this series + + +### 0.21.0 + +Unreleased + +#### Minor Changes + +- Navigate a live review directly to a comment returned by `hunk session comment list`. ([#845](https://github.com/modem-dev/hunk/pull/845)) +- Make the vertical space between files and hunks configurable. ([#865](https://github.com/modem-dev/hunk/pull/865)) +- Add a `dim` tone to `hunk.registerLineHighlighter` and `hunk session highlight add` for fading diff text toward line backgrounds while preserving syntax highlighting token hues. ([#909](https://github.com/modem-dev/hunk/pull/909)) +- Let extensions select syntax highlighting by exact filename or basename/path glob, in addition to file extensions. ([#851](https://github.com/modem-dev/hunk/pull/851)) +- Let extensions register generic top-level CLI command trees with raw arguments, cancellable streaming I/O, validated exit statuses, and one-time delegation into built-in Hunk commands, including a dependency-free `hunk gh 123` example that fetches GitHub pull-request diffs directly. ([#888](https://github.com/modem-dev/hunk/pull/888)) +- Publish `hunk_viewed` and store-backed `note_changed` extension lifecycle events so progress and note UIs can follow hunk navigation and agent comments. ([#939](https://github.com/modem-dev/hunk/pull/939)) +- Give opted-in extension panes the current line's `{ side, line }` source address on `currentLine`, matching command selection, so a pane can follow the cursor without waiting for a keypress. ([#940](https://github.com/modem-dev/hunk/pull/940)) +- Require Node.js 22 or newer for npm installs. Standalone Hunk binaries continue to run without Node.js. ([#917](https://github.com/modem-dev/hunk/pull/917)) +- Resize the built-in files sidebar with the terminal, showing its compact projection at medium widths and keeping split review after the sidebar hides. Extension API v12 adds `ExtensionPaneSize.fraction` for bounded body-axis fractional sizing while preserving manual overrides. ([#924](https://github.com/modem-dev/hunk/pull/924)) +- Authenticate local session producers and CLI controls with automatically discovered owner-private credentials, signed responses, scoped reconnect replacement, and bounded handshakes. Expose only minimal public daemon health, refuse unsafe PID-based replacement, and let interactive Hunk windows reconnect automatically after an incompatible incumbent becomes idle. ([#933](https://github.com/modem-dev/hunk/pull/933)) +- Add editable inline review notes and arbitrarily nested threaded replies with mouse and keyboard actions, including reviewer dismissal of reply-free live agent notes. ([#925](https://github.com/modem-dev/hunk/pull/925)) +- Add a pane-wide `onActivate` callback to the extension API for primary mouse presses. ([#965](https://github.com/modem-dev/hunk/pull/965)) +- Support backend-native `hunk diff ` reviews across Git, Jujutsu, and Sapling, with pinned source expansion, working-copy isolation, explicit `hunk diff --files ` file comparison, and structured `rangeEndpoints` in extension API generation 14. ([#938](https://github.com/modem-dev/hunk/pull/938)) +- Show a fully expanded file tree when the file sidebar reaches its preferred 34-column width, and keep resize drags active while its layout changes. ([#921](https://github.com/modem-dev/hunk/pull/921)) + +#### Patch Changes + +- Enable unchanged-context expansion in Jujutsu-backed reviews. ([#890](https://github.com/modem-dev/hunk/pull/890)) +- Add a `/compare/` section to hunk.dev with head-to-head pages for delta, difftastic, diff-so-fancy, `git diff`, and Plannotator, each also served as Markdown for coding agents. ([#968](https://github.com/modem-dev/hunk/pull/968)) +- Provide complete key event data to command matchers and programmatically invoked handlers. ([#774](https://github.com/modem-dev/hunk/pull/774)) +- Add Ctrl-D and Ctrl-U aliases for half-page review scrolling. ([#855](https://github.com/modem-dev/hunk/pull/855)) +- Fence late session lifecycle commits so stopped or replaced generations cannot authenticate, reconnect, publish daemon launch metadata, or mutate broker client state. ([#955](https://github.com/modem-dev/hunk/pull/955)) +- Keep explicit top and bottom jumps from being overridden by a pending selection reveal. ([#928](https://github.com/modem-dev/hunk/pull/928)) +- Stop installing Bun beside prebuilt Hunk packages so pnpm global updates cannot corrupt Bun's shared platform-package projection. Standalone platform binaries continue to work without a separate Bun installation. ([#908](https://github.com/modem-dev/hunk/pull/908)) +- Fill the review stream on first paint instead of leaving it blank until the user scrolls. ([#922](https://github.com/modem-dev/hunk/pull/922)) +- Contain unexpected session broker lifecycle failures behind one fixed, redacted user-visible message. ([#956](https://github.com/modem-dev/hunk/pull/956)) +- Let focused editors inside extension panes receive keys before Hunk's global shortcuts. ([#954](https://github.com/modem-dev/hunk/pull/954)) +- Make the checksum-aware curl installer the default across the website and docs, add an accessible tabbed install selector, and establish `hunk update` as the canonical updater from Hunk 0.20 onward. ([#919](https://github.com/modem-dev/hunk/pull/919)) +- Retry session broker connections after synchronous WebSocket startup failures. ([#950](https://github.com/modem-dev/hunk/pull/950)) +- Keep iTerm2 sessions connected to the local session daemon when their terminal identifiers contain native punctuation. ([#936](https://github.com/modem-dev/hunk/pull/936)) +- Keep wrapped diff geometry aligned with rendered note-guide and add-note columns. ([#858](https://github.com/modem-dev/hunk/pull/858)) +- Accept the documented `dim` tone when routing line-highlight commands through the session daemon. ([#937](https://github.com/modem-dev/hunk/pull/937)) +- Recognize pacman/AUR-managed installations via `HUNK_INSTALL_SOURCE=pacman` and suppress automatic update notices for them. ([#850](https://github.com/modem-dev/hunk/pull/850)) +- Upgrade the OpenTUI runtime and reusable component peer requirement to 0.5.6. ([#914](https://github.com/modem-dev/hunk/pull/914)) +- Publish dated prerelease notes on hunk.dev without promoting them as the latest stable release or default install target. ([#961](https://github.com/modem-dev/hunk/pull/961)) +- Refuse curl installs alongside competing Hunk binaries unless explicitly forced, and print each conflicting path, version, PATH precedence, and package-manager removal guidance. ([#960](https://github.com/modem-dev/hunk/pull/960)) +- Exit cleanly when the terminal hosting a review disconnects instead of leaving an unreachable Hunk process behind. ([#724](https://github.com/modem-dev/hunk/pull/724)) +- Restore first-frame and scroll responsiveness for large review streams. ([#942](https://github.com/modem-dev/hunk/pull/942)) +- Fix washed-out or wrong-hue diff colors in ~25 bundled themes (gruvbox, rosé pine, tokyo-night, material, everforest, laserwave, night-owl, slack, and others) by re-harvesting every theme's diff accents from its real VS Code accent tokens. ([#828](https://github.com/modem-dev/hunk/pull/828)) +- Stop the theme contrast guards from washing out diff accents: low-contrast sign colors now get the smallest readable adjustment instead of a fixed 45% blend, and word-level diff emphasis is derived to the renderer's own separation floor so the highlight you see is the one the theme defines. ([#825](https://github.com/modem-dev/hunk/pull/825)) +- Refuse to start watch mode under Bun versions older than 1.3.14, which can deadlock filesystem watcher cleanup and leave Hunk unresponsive. ([#902](https://github.com/modem-dev/hunk/pull/902)) + ### 0.21.0-beta.1 diff --git a/website/src/content/docs/changelog/index.md b/website/src/content/docs/changelog/index.md index 4c7a5fbab..a0ded81c6 100644 --- a/website/src/content/docs/changelog/index.md +++ b/website/src/content/docs/changelog/index.md @@ -24,7 +24,9 @@ head: ## [Hunk 0.21](/changelog/0.21/) -Prerelease · August 30, 2026 – September 1, 2026 · 2 releases · 37 changes +Prerelease · August 30, 2026 – September 1, 2026 · 3 releases · 75 changes + +Hunk 0.21 turns reviews into a richer agent-aware workspace with authenticated live sessions, editable threaded notes, two-revision and two-file comparisons, more responsive navigation, and a broader extension surface. ## [Hunk 0.20](/changelog/0.20/)