Skip to content

deps: refresh dependencies and release tooling - #437

Merged
jongio merged 1 commit into
mainfrom
deps/refresh-2026-09-30
Sep 30, 2026
Merged

jongio merged 1 commit into
mainfrom
deps/refresh-2026-09-30

Conversation

@jongio

@jongio jongio commented Sep 30, 2026

Copy link
Copy Markdown
Owner

What

Refresh Go, npm lockfile, and release tooling dependencies.

Dependency From To
anthropic-sdk-go v1.75.0 v1.76.0
copilot-sdk/go v1.0.14 v1.0.15
GoReleaser v2.17.0 v2.18.2
undici 8.10.0 8.11.2

The Go module graph also picks up Ultraviolet renderer and input fixes plus supporting patch updates.

Why

The SDK updates provide additive APIs and client fixes. The lockfile refresh resolves the high-severity undici audit finding, and GoReleaser 2.18 includes security and packaging fixes.

How

Updated the Go build list with go get -u ./... and go mod tidy, repaired the npm lockfile with npm audit fix --package-lock-only, and updated the pinned GoReleaser version. No production source migration was required.

Compatibility coverage includes the AI providers, TUI renderer, full startup path, release configuration, race suite, and website build.

Testing

  • go build ./... passes
  • go test ./... passes
  • go vet ./... passes
  • New tests added for new functionality, not applicable because no functionality was added
  • Existing tests still pass

Additional validation: actionlint, go mod verify, govulncheck ./..., npm test, npm audit, GoReleaser 2.18.2 configuration check, mage preflight, and mage install.

Screenshots

Not applicable. This dependency-only change does not alter the UI.

Update AI SDKs and transitive modules, repair the vulnerable undici lockfile resolution, and move GoReleaser to v2.18.2.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Benchmarks: linux-amd64

📊 Results vs main (same-runner) , click to expand
goos: linux
goarch: amd64
pkg: github.com/jongio/grut/internal/ai
cpu: AMD EPYC 7763 64-Core Processor                
                                       │ bench-baseline.txt │         bench-current.txt         │
                                       │       sec/op       │   sec/op     vs base              │
RedactContent/small_500B-4                      102.9µ ± 1%   102.7µ ± 1%       ~ (p=0.509 n=6)
RedactContent/medium_5KB-4                      1.465m ± 0%   1.437m ± 6%       ~ (p=0.065 n=6)
RedactContent/large_50KB-4                      16.71m ± 1%   16.54m ± 1%  -1.00% (p=0.015 n=6)
RedactContent_NoMatch/small_500B-4              147.2µ ± 2%   146.4µ ± 0%       ~ (p=0.240 n=6)
RedactContent_NoMatch/medium_5KB-4              1.753m ± 2%   1.710m ± 1%  -2.44% (p=0.004 n=6)
RedactContent_NoMatch/large_50KB-4              19.88m ± 1%   19.65m ± 1%  -1.14% (p=0.002 n=6)
ShouldExcludeFile/match_builtin-4               64.31n ± 1%   64.59n ± 0%       ~ (p=0.132 n=6)
ShouldExcludeFile/match_user_pattern-4          2.374µ ± 0%   2.376µ ± 0%       ~ (p=0.736 n=6)
ShouldExcludeFile/no_match-4                    1.646µ ± 1%   1.640µ ± 0%  -0.33% (p=0.013 n=6)
NewRedactor-4                                   766.1n ± 3%   763.2n ± 2%       ~ (p=0.818 n=6)
geomean                                         69.12µ        68.60µ       -0.74%

                                       │ bench-baseline.txt │            bench-current.txt             │
                                       │        B/op        │      B/op        vs base                 │
RedactContent/small_500B-4                  2.129Ki ±  0%     2.129Ki ±    0%        ~ (p=0.545 n=6)
RedactContent/medium_5KB-4                  37.05Ki ±  0%     37.07Ki ±    0%        ~ (p=0.420 n=6)
RedactContent/large_50KB-4                  389.0Ki ±  0%     389.0Ki ±    0%        ~ (p=0.970 n=6)
RedactContent_NoMatch/small_500B-4            4.000 ±   ?       4.000 ±     ?        ~ (p=1.000 n=6)
RedactContent_NoMatch/medium_5KB-4            65.00 ± 98%       59.00 ±   98%        ~ (p=0.193 n=6)
RedactContent_NoMatch/large_50KB-4          120.000 ± 93%       8.000 ± 1388%        ~ (p=0.145 n=6)
ShouldExcludeFile/match_builtin-4             0.000 ±  0%       0.000 ±    0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_user_pattern-4        0.000 ±  0%       0.000 ±    0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/no_match-4                  0.000 ±  0%       0.000 ±    0%        ~ (p=1.000 n=6) ¹
NewRedactor-4                               1.320Ki ±  0%     1.320Ki ±    0%        ~ (p=1.000 n=6) ¹
geomean                                                   ²                    -24.46%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                       │ bench-baseline.txt │         bench-current.txt          │
                                       │     allocs/op      │ allocs/op   vs base                │
RedactContent/small_500B-4                     18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
RedactContent/medium_5KB-4                     117.0 ± 0%     117.0 ± 0%       ~ (p=1.000 n=6) ¹
RedactContent/large_50KB-4                     845.0 ± 0%     845.0 ± 0%       ~ (p=0.455 n=6)
RedactContent_NoMatch/small_500B-4             0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RedactContent_NoMatch/medium_5KB-4             0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RedactContent_NoMatch/large_50KB-4             0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_builtin-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_user_pattern-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
ShouldExcludeFile/no_match-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
NewRedactor-4                                  5.000 ± 0%     5.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                   ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/config
                                   │ bench-baseline.txt │         bench-current.txt         │
                                   │       sec/op       │   sec/op     vs base              │
Validate/valid_defaults-4                   2.125µ ± 2%   2.121µ ± 6%       ~ (p=0.455 n=6)
Validate/with_arrays-4                      8.263µ ± 3%   8.303µ ± 2%       ~ (p=0.818 n=6)
Validate/invalid_multi_error-4              4.904µ ± 0%   4.902µ ± 1%       ~ (p=0.699 n=6)
ParseDefaultsTOML-4                         33.19µ ± 0%   33.03µ ± 0%  -0.46% (p=0.009 n=6)
RejectEmbeddedKeys/clean_config-4           1.469µ ± 3%   1.469µ ± 2%       ~ (p=0.667 n=6)
RejectEmbeddedKeys/with_patterns-4          9.010µ ± 1%   8.966µ ± 1%       ~ (p=0.394 n=6)
AppendEnumErr/match_first-4                 23.63n ± 9%   23.71n ± 2%       ~ (p=0.675 n=6)
AppendEnumErr/match_last-4                  24.04n ± 1%   24.14n ± 1%       ~ (p=0.223 n=6)
AppendEnumErr/no_match-4                    797.3n ± 0%   795.9n ± 1%       ~ (p=0.420 n=6)
geomean                                     1.371µ        1.371µ       -0.01%

                                   │ bench-baseline.txt │          bench-current.txt           │
                                   │        B/op        │     B/op      vs base                │
Validate/valid_defaults-4                  868.0 ± 0%       868.0 ± 0%       ~ (p=1.000 n=6)
Validate/with_arrays-4                     867.0 ± 0%       867.5 ± 0%       ~ (p=0.182 n=6)
Validate/invalid_multi_error-4           2.039Ki ± 0%     2.038Ki ± 0%       ~ (p=0.807 n=6)
ParseDefaultsTOML-4                      1.836Ki ± 0%     1.836Ki ± 0%       ~ (p=0.545 n=6)
RejectEmbeddedKeys/clean_config-4          0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/with_patterns-4         0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_first-4                48.00 ± 0%       48.00 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_last-4                 48.00 ± 0%       48.00 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/no_match-4                   346.0 ± 0%       346.0 ± 0%       ~ (p=1.000 n=6)
geomean                                               ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                   │ bench-baseline.txt │         bench-current.txt          │
                                   │     allocs/op      │ allocs/op   vs base                │
Validate/valid_defaults-4                  18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
Validate/with_arrays-4                     18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
Validate/invalid_multi_error-4             58.00 ± 0%     58.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseDefaultsTOML-4                        52.00 ± 0%     52.00 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/clean_config-4          0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/with_patterns-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_first-4                1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_last-4                 1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/no_match-4                   12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                               ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/crashlog
                                 │ bench-baseline.txt │         bench-current.txt          │
                                 │       sec/op       │    sec/op     vs base              │
ScrubPII/small_100B-4                    12.65µ ±  0%   12.67µ ±  1%       ~ (p=0.180 n=6)
ScrubPII/medium_1KB-4                    221.1µ ±  1%   220.8µ ±  1%       ~ (p=0.937 n=6)
ScrubPII/large_10KB-4                    3.059m ±  2%   3.059m ± 15%       ~ (p=0.937 n=6)
ScrubPII_NoSecrets/100B-4                23.26µ ±  0%   23.30µ ±  1%       ~ (p=0.132 n=6)
ScrubPII_NoSecrets/1KB-4                 230.2µ ±  1%   229.3µ ±  1%       ~ (p=0.394 n=6)
ScrubPII_NoSecrets/10KB-4                2.889m ± 32%   2.907m ±  1%       ~ (p=0.699 n=6)
ScrubLogTail/10_entries-4                126.7µ ±  1%   127.0µ ±  1%       ~ (p=0.589 n=6)
ScrubLogTail/50_entries-4                636.6µ ±  2%   638.7µ ±  3%       ~ (p=0.240 n=6)
ScrubLogTail/100_entries_mixed-4         10.61m ±  1%   10.57m ±  0%       ~ (p=0.394 n=6)
geomean                                  364.4µ         364.6µ        +0.06%

                                 │ bench-baseline.txt │         bench-current.txt          │
                                 │        B/op        │     B/op      vs base              │
ScrubPII/small_100B-4                      913.5 ± 0%     913.0 ± 0%       ~ (p=1.000 n=6)
ScrubPII/medium_1KB-4                    11.89Ki ± 0%   11.89Ki ± 0%       ~ (p=0.972 n=6)
ScrubPII/large_10KB-4                    228.0Ki ± 0%   227.9Ki ± 0%       ~ (p=0.699 n=6)
ScrubPII_NoSecrets/100B-4                1.174Ki ± 0%   1.173Ki ± 0%       ~ (p=0.275 n=6)
ScrubPII_NoSecrets/1KB-4                 10.09Ki ± 0%   10.09Ki ± 0%  +0.08% (p=0.028 n=6)
ScrubPII_NoSecrets/10KB-4                100.8Ki ± 0%   100.9Ki ± 0%       ~ (p=0.240 n=6)
ScrubLogTail/10_entries-4                9.081Ki ± 0%   9.083Ki ± 0%       ~ (p=0.604 n=6)
ScrubLogTail/50_entries-4                45.51Ki ± 0%   45.53Ki ± 0%       ~ (p=0.091 n=6)
ScrubLogTail/100_entries_mixed-4         545.9Ki ± 0%   546.1Ki ± 0%       ~ (p=0.738 n=6)
geomean                                  20.54Ki        20.55Ki       +0.02%

                                 │ bench-baseline.txt │          bench-current.txt          │
                                 │     allocs/op      │  allocs/op   vs base                │
ScrubPII/small_100B-4                      17.00 ± 0%    17.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII/medium_1KB-4                      27.00 ± 0%    27.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII/large_10KB-4                      79.00 ± 0%    79.00 ± 1%       ~ (p=0.455 n=6)
ScrubPII_NoSecrets/100B-4                  15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII_NoSecrets/1KB-4                   15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII_NoSecrets/10KB-4                  15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/10_entries-4                  171.0 ± 0%    171.0 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/50_entries-4                  851.0 ± 0%    851.0 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/100_entries_mixed-4          1.909k ± 0%   1.909k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                    68.68         68.68       +0.00%
¹ all samples are equal

pkg: github.com/jongio/grut/internal/git
                               │ bench-baseline.txt │         bench-current.txt         │
                               │       sec/op       │   sec/op     vs base              │
ParseStatus/10_files-4                  1.815µ ± 1%   1.817µ ± 2%       ~ (p=0.307 n=6)
ParseStatus/100_files-4                 15.82µ ± 8%   15.82µ ± 1%       ~ (p=0.937 n=6)
ParseStatus/500_files-4                 76.57µ ± 2%   76.67µ ± 1%       ~ (p=0.937 n=6)
ParseStatus/100_renamed-4               22.67µ ± 2%   22.73µ ± 1%       ~ (p=0.589 n=6)
ParseStatusBranch-4                     1.695µ ± 0%   1.698µ ± 1%       ~ (p=0.234 n=6)
ParseDiff/10_lines-4                    1.089µ ± 1%   1.099µ ± 9%  +0.92% (p=0.022 n=6)
ParseDiff/100_lines-4                   6.806µ ± 1%   6.817µ ± 1%       ~ (p=0.818 n=6)
ParseDiff/1000_lines-4                  68.04µ ± 1%   68.29µ ± 3%       ~ (p=0.485 n=6)
ParseHunkHeader/simple-4                103.2n ± 0%   103.2n ± 0%       ~ (p=0.727 n=6)
ParseHunkHeader/with_context-4          107.2n ± 0%   107.3n ± 0%       ~ (p=0.297 n=6)
ParseHunkHeader/large_range-4           119.0n ± 0%   119.2n ± 0%       ~ (p=0.314 n=6)
UndoStack/record_50-4                   18.10µ ± 1%   18.14µ ± 1%       ~ (p=0.515 n=6)
UndoStack/record_overflow-4             72.62µ ± 1%   72.42µ ± 1%       ~ (p=0.699 n=6)
UndoStack/peek_undo-4                   8.490n ± 0%   8.486n ± 0%       ~ (p=0.959 n=6)
UndoStack/can_undo_redo-4               11.45n ± 0%   11.43n ± 1%       ~ (p=0.719 n=6)
JoinPaths-4                             1.196µ ± 1%   1.194µ ± 2%       ~ (p=0.900 n=6)
SplitPaths-4                            2.227µ ± 2%   2.223µ ± 2%       ~ (p=0.818 n=6)
geomean                                 1.786µ        1.788µ       +0.11%

                               │ bench-baseline.txt │          bench-current.txt           │
                               │        B/op        │     B/op      vs base                │
ParseStatus/10_files-4               2.641Ki ± 0%     2.641Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_files-4              24.66Ki ± 0%     24.66Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/500_files-4              111.9Ki ± 0%     111.9Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_renamed-4            32.16Ki ± 0%     32.16Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatusBranch-4                    928.0 ± 0%       928.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/10_lines-4                 1.703Ki ± 0%     1.703Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/100_lines-4                11.02Ki ± 0%     11.02Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/1000_lines-4               116.5Ki ± 0%     116.5Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/simple-4               32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/with_context-4         32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/large_range-4          32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_50-4                22.91Ki ± 0%     22.91Ki ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_overflow-4          87.27Ki ± 0%     87.27Ki ± 0%       ~ (p=0.545 n=6)
UndoStack/peek_undo-4                  0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/can_undo_redo-4              0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
JoinPaths-4                          2.625Ki ± 0%     2.625Ki ± 0%       ~ (p=1.000 n=6) ¹
SplitPaths-4                         6.062Ki ± 0%     6.062Ki ± 0%       ~ (p=1.000 n=6) ¹
geomean                                           ²                 -0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                               │ bench-baseline.txt │         bench-current.txt          │
                               │     allocs/op      │ allocs/op   vs base                │
ParseStatus/10_files-4                 14.00 ± 0%     14.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_files-4                89.00 ± 0%     89.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/500_files-4                411.0 ± 0%     411.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_renamed-4              209.0 ± 0%     209.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatusBranch-4                    2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/10_lines-4                   9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/100_lines-4                  46.00 ± 0%     46.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/1000_lines-4                 448.0 ± 0%     448.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/simple-4               1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/with_context-4         1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/large_range-4          1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_50-4                  208.0 ± 0%     208.0 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_overflow-4            811.0 ± 0%     811.0 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/peek_undo-4                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/can_undo_redo-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
JoinPaths-4                            1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
SplitPaths-4                           7.000 ± 0%     7.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                           ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/markdown
                                   │ bench-baseline.txt │         bench-current.txt          │
                                   │       sec/op       │    sec/op     vs base              │
RenderStaticCached/same_width-4             461.6µ ± 1%   462.6µ ±  0%       ~ (p=0.240 n=6)
RenderStaticCached/varying_width-4          528.4µ ± 6%   529.2µ ±  2%       ~ (p=0.485 n=6)
RenderStaticCold-4                          515.3µ ± 0%   517.5µ ± 13%       ~ (p=0.240 n=6)
geomean                                     500.9µ        502.2µ        +0.26%

                                   │ bench-baseline.txt │         bench-current.txt          │
                                   │        B/op        │     B/op      vs base              │
RenderStaticCached/same_width-4            122.0Ki ± 0%   122.0Ki ± 0%       ~ (p=0.589 n=6)
RenderStaticCached/varying_width-4         144.1Ki ± 0%   144.2Ki ± 0%       ~ (p=0.394 n=6)
RenderStaticCold-4                         162.7Ki ± 0%   162.6Ki ± 0%       ~ (p=0.589 n=6)
geomean                                    142.0Ki        141.9Ki       -0.00%

                                   │ bench-baseline.txt │          bench-current.txt          │
                                   │     allocs/op      │  allocs/op   vs base                │
RenderStaticCached/same_width-4             12.18k ± 0%   12.18k ± 0%       ~ (p=1.000 n=6) ¹
RenderStaticCached/varying_width-4          13.76k ± 0%   13.76k ± 0%       ~ (p=0.152 n=6)
RenderStaticCold-4                          5.824k ± 0%   5.824k ± 0%       ~ (p=1.000 n=6)
geomean                                     9.919k        9.919k       -0.00%
¹ all samples are equal

pkg: github.com/jongio/grut/internal/notify
                           │ bench-baseline.txt │         bench-current.txt         │
                           │       sec/op       │   sec/op     vs base              │
NotifyToastChurn-4                  321.9n ± 0%   321.7n ± 1%       ~ (p=0.615 n=6)
NotifyToastLifecycleCold-4          634.8n ± 1%   635.2n ± 6%       ~ (p=1.000 n=6)
NotifyInlineCap-4                   1.003µ ± 0%   1.004µ ± 0%       ~ (p=0.368 n=6)
geomean                             589.5n        589.7n       +0.03%

                           │ bench-baseline.txt │         bench-current.txt          │
                           │        B/op        │    B/op     vs base                │
NotifyToastChurn-4                   144.0 ± 0%   144.0 ± 0%       ~ (p=1.000 n=6) ¹
NotifyToastLifecycleCold-4           848.0 ± 0%   848.0 ± 0%       ~ (p=1.000 n=6) ¹
NotifyInlineCap-4                    104.0 ± 0%   104.0 ± 0%       ~ (p=1.000 n=6) ¹
geomean                              233.3        233.3       +0.00%
¹ all samples are equal

                           │ bench-baseline.txt │         bench-current.txt          │
                           │     allocs/op      │ allocs/op   vs base                │
NotifyToastChurn-4                   2.000 ± 0%   2.000 ± 0%       ~ (p=1.000 n=6) ¹
NotifyToastLifecycleCold-4           10.00 ± 0%   10.00 ± 0%       ~ (p=1.000 n=6) ¹
NotifyInlineCap-4                    2.000 ± 0%   2.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                              3.420        3.420       +0.00%
¹ all samples are equal

pkg: github.com/jongio/grut/internal/panels/filetree
                                               │ bench-baseline.txt │         bench-current.txt         │
                                               │       sec/op       │   sec/op     vs base              │
TreeRebuildVisible/flat_50_files-4                      107.8n ± 1%   107.7n ± 0%       ~ (p=0.632 n=6)
TreeRebuildVisible/nested_5_levels_461_nodes-4          1.427µ ± 1%   1.423µ ± 3%       ~ (p=0.848 n=6)
TreeRebuildVisible/large_1000_nodes-4                   2.505µ ± 2%   2.485µ ± 1%       ~ (p=0.463 n=6)
RenderLine/file_node-4                                  3.695µ ± 0%   3.698µ ± 0%       ~ (p=0.379 n=6)
RenderLine/dir_node_cursor-4                            4.639µ ± 0%   4.648µ ± 2%       ~ (p=0.331 n=6)
RenderLine/with_icons-4                                 3.736µ ± 0%   3.741µ ± 0%       ~ (p=0.102 n=6)
DetachedLazyLoad/50_entries-4                           146.9µ ± 2%   146.7µ ± 1%       ~ (p=0.937 n=6)
DetachedLazyLoad/23_root_entries-4                      65.33µ ± 0%   65.55µ ± 0%       ~ (p=0.065 n=6)
DisplayWidth/ascii-4                                    67.27n ± 1%   67.17n ± 1%       ~ (p=0.589 n=6)
DisplayWidth/mixed_unicode-4                            184.2n ± 0%   184.1n ± 0%       ~ (p=0.455 n=6)
TruncateToWidth/no_truncation-4                         21.22n ± 0%   21.21n ± 0%       ~ (p=0.855 n=6)
TruncateToWidth/needs_truncation-4                      844.1n ± 0%   845.1n ± 1%  +0.11% (p=0.022 n=6)
geomean                                                 1.391µ        1.390µ       -0.05%

                                               │ bench-baseline.txt │          bench-current.txt           │
                                               │        B/op        │     B/op      vs base                │
TreeRebuildVisible/flat_50_files-4                     0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_levels_461_nodes-4         0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/large_1000_nodes-4                  0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/file_node-4                                 392.0 ± 0%       392.0 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/dir_node_cursor-4                           624.0 ± 0%       624.0 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/with_icons-4                                392.0 ± 0%       392.0 ± 0%       ~ (p=1.000 n=6) ¹
DetachedLazyLoad/50_entries-4                        34.12Ki ± 0%     34.12Ki ± 0%       ~ (p=0.323 n=6)
DetachedLazyLoad/23_root_entries-4                   14.77Ki ± 0%     14.77Ki ± 0%       ~ (p=0.829 n=6)
DisplayWidth/ascii-4                                   0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
DisplayWidth/mixed_unicode-4                           0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/no_truncation-4                        0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/needs_truncation-4                     544.0 ± 0%       544.0 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                           ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                               │ bench-baseline.txt │         bench-current.txt          │
                                               │     allocs/op      │ allocs/op   vs base                │
TreeRebuildVisible/flat_50_files-4                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_levels_461_nodes-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/large_1000_nodes-4                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/file_node-4                                 12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/dir_node_cursor-4                           18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/with_icons-4                                12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
DetachedLazyLoad/50_entries-4                          363.0 ± 0%     363.0 ± 0%       ~ (p=1.000 n=6) ¹
DetachedLazyLoad/23_root_entries-4                     164.0 ± 0%     164.0 ± 0%       ~ (p=1.000 n=6) ¹
DisplayWidth/ascii-4                                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
DisplayWidth/mixed_unicode-4                           0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/no_truncation-4                        0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/needs_truncation-4                     3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                           ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/panels/gitdiff
                                                   │ bench-baseline.txt │         bench-current.txt         │
                                                   │       sec/op       │   sec/op     vs base              │
InlineDiffRenderExact/10_lines-4                            34.87µ ± 0%   35.00µ ± 1%       ~ (p=0.132 n=6)
InlineDiffRenderExact/100_lines-4                           299.5µ ± 0%   299.9µ ± 1%       ~ (p=0.394 n=6)
InlineDiffRenderExact/1000_lines-4                          3.000m ± 0%   3.006m ± 0%       ~ (p=0.394 n=6)
InlineDiffRenderCold-4                                      297.1µ ± 0%   297.1µ ± 0%       ~ (p=0.937 n=6)
SideBySideDiffRenderExact/10_lines-4                        66.23µ ± 0%   66.32µ ± 1%       ~ (p=0.394 n=6)
SideBySideDiffRenderExact/100_lines-4                       588.4µ ± 0%   587.7µ ± 2%       ~ (p=0.699 n=6)
SideBySideDiffRenderExact/1000_lines-4                      5.903m ± 0%   5.897m ± 1%       ~ (p=1.000 n=6)
SideBySideDiffRenderCold-4                                  612.2µ ± 2%   612.0µ ± 4%       ~ (p=0.699 n=6)
PairDiffLines/20_lines_mixed-4                              281.6n ± 1%   280.9n ± 1%       ~ (p=0.848 n=6)
PairDiffLines/200_lines_mixed-4                             1.951µ ± 1%   1.953µ ± 1%       ~ (p=0.671 n=6)
RenderViewportWithStats/small-4                             4.484µ ± 1%   4.485µ ± 1%       ~ (p=0.563 n=6)
RenderViewportWithStats/large_scrolled-4                    4.783µ ± 2%   4.755µ ± 0%  -0.59% (p=0.009 n=6)
DiffWordsBoundedAllocations/50_tokens-4                     29.47µ ± 1%   29.50µ ± 1%       ~ (p=0.370 n=6)
DiffWordsBoundedAllocations/200_tokens-4                    437.9µ ± 0%   437.6µ ± 0%       ~ (p=0.667 n=6)
DiffWordsBoundedAllocations/400_tokens-4                    1.726m ± 0%   1.724m ± 0%       ~ (p=0.394 n=6)
DiffWordsBoundedAllocations/over_cap_tokens-4               5.050µ ± 2%   5.054µ ± 2%       ~ (p=0.937 n=6)
DiffWordsBoundedAllocations/one_mib_over_cap-4              5.048µ ± 1%   5.082µ ± 1%       ~ (p=0.310 n=6)
DiffWordsBoundedAllocations/one_mib_single_token-4          8.519m ± 1%   8.516m ± 0%       ~ (p=0.937 n=6)
geomean                                                     86.58µ        86.60µ       +0.03%

                                                   │ bench-baseline.txt │          bench-current.txt           │
                                                   │        B/op        │     B/op      vs base                │
InlineDiffRenderExact/10_lines-4                           4.016Ki ± 0%   4.016Ki ± 0%       ~ (p=1.000 n=6) ¹
InlineDiffRenderExact/100_lines-4                          33.47Ki ± 0%   33.47Ki ± 0%       ~ (p=1.000 n=6)
InlineDiffRenderExact/1000_lines-4                         334.7Ki ± 0%   334.7Ki ± 0%       ~ (p=1.000 n=6) ¹
InlineDiffRenderCold-4                                     37.97Ki ± 0%   37.97Ki ± 0%       ~ (p=1.000 n=6) ¹
SideBySideDiffRenderExact/10_lines-4                       15.50Ki ± 0%   15.50Ki ± 0%       ~ (p=1.000 n=6) ¹
SideBySideDiffRenderExact/100_lines-4                      144.3Ki ± 0%   144.3Ki ± 0%       ~ (p=0.766 n=6)
SideBySideDiffRenderExact/1000_lines-4                     1.410Mi ± 0%   1.410Mi ± 0%       ~ (p=0.162 n=6)
SideBySideDiffRenderCold-4                                 148.8Ki ± 0%   148.8Ki ± 0%       ~ (p=0.080 n=6)
PairDiffLines/20_lines_mixed-4                               416.0 ± 0%     416.0 ± 0%       ~ (p=1.000 n=6) ¹
PairDiffLines/200_lines_mixed-4                            3.469Ki ± 0%   3.469Ki ± 0%       ~ (p=1.000 n=6) ¹
RenderViewportWithStats/small-4                            6.368Ki ± 0%   6.368Ki ± 0%       ~ (p=1.000 n=6) ¹
RenderViewportWithStats/large_scrolled-4                   6.376Ki ± 0%   6.376Ki ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/50_tokens-4                    4.125Ki ± 0%   4.125Ki ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/200_tokens-4                   18.12Ki ± 0%   18.12Ki ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/400_tokens-4                   36.62Ki ± 0%   36.62Ki ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/over_cap_tokens-4              18.12Ki ± 0%   18.12Ki ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/one_mib_over_cap-4             18.12Ki ± 0%   18.12Ki ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/one_mib_single_token-4           896.0 ± 0%     896.0 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                    17.94Ki        17.94Ki       -0.00%
¹ all samples are equal

                                                   │ bench-baseline.txt │          bench-current.txt          │
                                                   │     allocs/op      │  allocs/op   vs base                │
InlineDiffRenderExact/10_lines-4                             122.0 ± 0%    122.0 ± 0%       ~ (p=1.000 n=6) ¹
InlineDiffRenderExact/100_lines-4                           1.096k ± 0%   1.096k ± 0%       ~ (p=1.000 n=6) ¹
InlineDiffRenderExact/1000_lines-4                          10.96k ± 0%   10.96k ± 0%       ~ (p=1.000 n=6) ¹
InlineDiffRenderCold-4                                      1.110k ± 0%   1.110k ± 0%       ~ (p=1.000 n=6) ¹
SideBySideDiffRenderExact/10_lines-4                         217.0 ± 0%    217.0 ± 0%       ~ (p=1.000 n=6) ¹
SideBySideDiffRenderExact/100_lines-4                       2.044k ± 0%   2.044k ± 0%       ~ (p=1.000 n=6) ¹
SideBySideDiffRenderExact/1000_lines-4                      20.44k ± 0%   20.44k ± 0%       ~ (p=0.242 n=6)
SideBySideDiffRenderCold-4                                  2.058k ± 0%   2.058k ± 0%       ~ (p=1.000 n=6) ¹
PairDiffLines/20_lines_mixed-4                               3.000 ± 0%    3.000 ± 0%       ~ (p=1.000 n=6) ¹
PairDiffLines/200_lines_mixed-4                              3.000 ± 0%    3.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderViewportWithStats/small-4                              18.00 ± 0%    18.00 ± 0%       ~ (p=1.000 n=6) ¹
RenderViewportWithStats/large_scrolled-4                     19.00 ± 0%    19.00 ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/50_tokens-4                      8.000 ± 0%    8.000 ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/200_tokens-4                     12.00 ± 0%    12.00 ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/400_tokens-4                     14.00 ± 0%    14.00 ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/over_cap_tokens-4                6.000 ± 0%    6.000 ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/one_mib_over_cap-4               6.000 ± 0%    6.000 ± 0%       ~ (p=1.000 n=6) ¹
DiffWordsBoundedAllocations/one_mib_single_token-4           4.000 ± 0%    4.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                      80.02         80.02       +0.00%
¹ all samples are equal

Note

No significant regressions on linux-amd64 (threshold: 15%, same-runner comparison).

@github-actions

Copy link
Copy Markdown
Contributor

Benchmarks: darwin-arm64

📊 Results vs main (same-runner) , click to expand

Note

No significant regressions on darwin-arm64 (threshold: 40%, same-runner comparison).

@jongio
jongio merged commit b5cd0c4 into main Sep 30, 2026
9 checks passed
@jongio
jongio deleted the deps/refresh-2026-09-30 branch September 30, 2026 03:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant