Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package lazyworktree for openSUSE:Factory 
checked in at 2026-06-23 17:42:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lazyworktree (Old)
 and      /work/SRC/openSUSE:Factory/.lazyworktree.new.1956 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lazyworktree"

Tue Jun 23 17:42:44 2026 rev:6 rq:1361329 version:1.47.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/lazyworktree/lazyworktree.changes        
2026-06-05 15:04:14.586097059 +0200
+++ /work/SRC/openSUSE:Factory/.lazyworktree.new.1956/lazyworktree.changes      
2026-06-23 17:45:30.400004748 +0200
@@ -1,0 +2,66 @@
+Tue Jun 23 10:44:15 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 1.47.0:
+  This release introduces inline status chips for CI checks,
+  dedicated PR status badges within the Info pane, and improved
+  container execution logic for custom commands. Additionally, it
+  features structural code refactoring, streamlined documentation,
+  and various dependency upgrades to enhance overall stability.
+  * Features
+    - Inline CI Status: Replaced the heavy powerline-style CI
+      summary pill with a lightweight, inline status chip next to
+      the CI Checks heading.
+    - PR Status Badges: Added colored state badges (Open, Merged,
+      Closed, Draft) directly to the Info pane for improved
+      visibility of pull/merge request status.
+    - Claude Skill for Docs Review: Introduced an AI-assisted
+      workspace skill (docs-drift-review) to systematically analyze
+      repository documentation for implementation drift, stale
+      examples, or clarity issues.
+  * Bug Fixes
+    - Container Commands Shell Wrapping: Multi-word container
+      commands are now wrapped in a shell execution (sh -c) to
+      prevent execution failures in container runtimes, and
+      environment variables are properly expanded before execution.
+    - Custom Commands Discovery: Fixed an issue where
+      container-only custom commands were omitted from the command
+      palette.
+    - Custom Theme Handling: Ensured custom themes load properly on
+      startup and dynamically reconcile with delta syntax theme
+      arguments during CLI overrides.
+    - CLI Override Scoping: Fixed a bug where unspecified
+      configuration string fields were reset to default values
+      during CLI theme overrides.
+  * Performance Improvements
+    - Badge Rendering Optimization: Extracted remote host icon
+      mapping tables to the package level to eliminate redundant
+      memory allocations, and deferred style calculations until
+      after validation to prevent unnecessary processing.
+  * Maintenance
+    - Code Refactoring: Grouped scattered Model state fields into
+      dedicated sub-structs (loadingState, detailsState,
+      pendingOpState) to improve long-term codebase
+      maintainability.
+    - Configuration Default Changes: Adjusted the default
+      refresh_interval to 10 seconds, disabled ci_auto_refresh by
+      default, mapped the manual refresh key to r, and introduced
+      the LAZYWORKTREE_DESCRIPTION variable for notes scripts.
+    - Documentation Refinement: Streamlined the user guide and
+      README by removing redundant "Refer to this page when"
+      callouts and simplifying phrasings.
+    - Test & Lint Improvements: Simplified linting targets,
+      resolved test-suite lint warnings, and disabled GPG commit
+      signing in machine test environments to prevent test
+      failures.
+    - Weekly Maintenance: Completed weekly codebase maintenance and
+      test coverage alignments (Pull Requests #66, #67, #68).
+  * Dependencies
+    - Upgraded charm.land/bubbletea/v2 to v2.0.7 (Pull Request #66)
+    - Upgraded charm.land/lipgloss/v2 to v2.0.4 (Pull Request #67)
+    - Upgraded github.com/urfave/cli/v3 to v3.10.0 (Pull Request
+      #67)
+    - Upgraded golang.org/x/term to v0.44.0 (Pull Request #67)
+    - Upgraded github.com/charmbracelet/ultraviolet to newer
+      maintenance snapshots (Pull Requests #66, #67, #68)
+
+-------------------------------------------------------------------

Old:
----
  lazyworktree-1.46.1.obscpio

New:
----
  lazyworktree-1.47.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ lazyworktree.spec ++++++
--- /var/tmp/diff_new_pack.YKYqs9/_old  2026-06-23 17:45:32.476077099 +0200
+++ /var/tmp/diff_new_pack.YKYqs9/_new  2026-06-23 17:45:32.492077656 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           lazyworktree
-Version:        1.46.1
+Version:        1.47.0
 Release:        0
 Summary:        Easy Git worktree management for the terminal
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.YKYqs9/_old  2026-06-23 17:45:32.784087833 +0200
+++ /var/tmp/diff_new_pack.YKYqs9/_new  2026-06-23 17:45:32.832089506 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/chmouel/lazyworktree.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">refs/tags/v1.46.1</param>
+    <param name="revision">refs/tags/v1.47.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.YKYqs9/_old  2026-06-23 17:45:33.060097452 +0200
+++ /var/tmp/diff_new_pack.YKYqs9/_new  2026-06-23 17:45:33.104098984 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/chmouel/lazyworktree.git</param>
-              <param 
name="changesrevision">a2da729a71b74bebe72cd97d33be87d9381c174f</param></service></servicedata>
+              <param 
name="changesrevision">0812fe830e72aa6023b8e3804ef776e6e0beaeae</param></service></servicedata>
 (No newline at EOF)
 

++++++ lazyworktree-1.46.1.obscpio -> lazyworktree-1.47.0.obscpio ++++++
++++ 6597 lines of diff (skipped)

++++++ lazyworktree.obsinfo ++++++
--- /var/tmp/diff_new_pack.YKYqs9/_old  2026-06-23 17:45:35.656187923 +0200
+++ /var/tmp/diff_new_pack.YKYqs9/_new  2026-06-23 17:45:35.692189178 +0200
@@ -1,5 +1,5 @@
 name: lazyworktree
-version: 1.46.1
-mtime: 1780467759
-commit: a2da729a71b74bebe72cd97d33be87d9381c174f
+version: 1.47.0
+mtime: 1782207196
+commit: 0812fe830e72aa6023b8e3804ef776e6e0beaeae
 

++++++ vendor.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/charm.land/bubbletea/v2/README.md 
new/vendor/charm.land/bubbletea/v2/README.md
--- old/vendor/charm.land/bubbletea/v2/README.md        2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/charm.land/bubbletea/v2/README.md        2026-06-23 
11:33:16.000000000 +0200
@@ -397,6 +397,6 @@
 
 Part of [Charm](https://charm.sh).
 
-<a href="https://charm.sh/";><img alt="The Charm logo" 
src="https://stuff.charm.sh/charm-banner-next.jpg"; width="400"></a>
+<a href="https://charm.sh/";><img alt="The Charm logo" 
src="https://stuff.charm.sh/charm-banner-softy.jpg"; width="400"></a>
 
 Charm热爱开源 • Charm loves open source • نحنُ نحب المصادر المفتوحة
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/charm.land/bubbletea/v2/Taskfile.yaml 
new/vendor/charm.land/bubbletea/v2/Taskfile.yaml
--- old/vendor/charm.land/bubbletea/v2/Taskfile.yaml    2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/charm.land/bubbletea/v2/Taskfile.yaml    2026-06-23 
11:33:16.000000000 +0200
@@ -1,6 +1,6 @@
 # https://taskfile.dev
 
-version: '3'
+version: "3"
 
 tasks:
   lint:
@@ -11,4 +11,28 @@
   test:
     desc: Run tests
     cmds:
-      - go test ./... {{.CLI_ARGS}}
+      - go test -race -count 4 -cpu 1,4 ./... {{.CLI_ARGS}}
+
+  release:
+    desc: Create and push a new tag following semver
+    vars:
+      NEXT:
+        sh: svu next --always || go run github.com/caarlos0/svu/v3@latest next 
--always
+    prompt: "This will release {{.NEXT}}. Continue?"
+    preconditions:
+      - sh: '[ $(git symbolic-ref --short HEAD) = "main" ]'
+        msg: Not on main branch
+      - sh: "[ $(git status --porcelain=2 | wc -l) = 0 ]"
+        msg: "Git is dirty"
+      - sh: 'gh run list --workflow build.yml --commit $(git rev-parse HEAD) 
--status success --json conclusion -q ".[0].conclusion" | grep -q success'
+        msg: "Test build for this commit failed or not present"
+    cmds:
+      - task: fetch-tags
+      - git commit --allow-empty -m "{{.NEXT}}"
+      - git tag --annotate --sign -m "{{.NEXT}}" {{.NEXT}} {{.CLI_ARGS}}
+      - echo "Pushing {{.NEXT}}..."
+      - git push origin main --follow-tags
+
+  fetch-tags:
+    cmds:
+      - git fetch --tags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/charm.land/bubbletea/v2/cursed_renderer.go 
new/vendor/charm.land/bubbletea/v2/cursed_renderer.go
--- old/vendor/charm.land/bubbletea/v2/cursed_renderer.go       2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/charm.land/bubbletea/v2/cursed_renderer.go       2026-06-23 
11:33:16.000000000 +0200
@@ -764,8 +764,14 @@
 
 // onMouse implements renderer.
 func (s *cursedRenderer) onMouse(m MouseMsg) Cmd {
-       if s.lastView != nil && s.lastView.OnMouse != nil {
-               return s.lastView.OnMouse(m)
+       var onMouse func(MouseMsg) Cmd
+       s.mu.Lock()
+       if s.lastView != nil {
+               onMouse = s.lastView.OnMouse
+       }
+       s.mu.Unlock()
+       if onMouse != nil {
+               return onMouse(m)
        }
        return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/charm.land/bubbletea/v2/tea.go 
new/vendor/charm.land/bubbletea/v2/tea.go
--- old/vendor/charm.land/bubbletea/v2/tea.go   2026-06-03 08:22:39.000000000 
+0200
+++ new/vendor/charm.land/bubbletea/v2/tea.go   2026-06-23 11:33:16.000000000 
+0200
@@ -1347,8 +1347,10 @@
        if err := p.initTerminal(); err != nil {
                return err
        }
-       if err := p.initInputReader(false); err != nil {
-               return err
+       if p.input != nil {
+               if err := p.initInputReader(false); err != nil {
+                       return err
+               }
        }
 
        p.startRenderer()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/charm.land/lipgloss/v2/.golangci.yml 
new/vendor/charm.land/lipgloss/v2/.golangci.yml
--- old/vendor/charm.land/lipgloss/v2/.golangci.yml     2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/charm.land/lipgloss/v2/.golangci.yml     2026-06-23 
11:33:16.000000000 +0200
@@ -30,6 +30,9 @@
       - text: '(slog|log)\.\w+'
         linters:
           - noctx
+      - text: "naming"
+        linters:
+          - revive
     generated: lax
     presets:
       - common-false-positives
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/charm.land/lipgloss/v2/position.go 
new/vendor/charm.land/lipgloss/v2/position.go
--- old/vendor/charm.land/lipgloss/v2/position.go       2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/charm.land/lipgloss/v2/position.go       2026-06-23 
11:33:16.000000000 +0200
@@ -39,7 +39,7 @@
 
 // PlaceHorizontal places a string or text block horizontally in an unstyled
 // block of a given width. If the given width is shorter than the max width of
-// the string (measured by its longest line) this will be a noop.
+// the string (measured by its longest line) this will be a noöp.
 func PlaceHorizontal(width int, pos Position, str string, opts 
...WhitespaceOption) string {
        lines, contentWidth := getLines(str)
        gap := width - contentWidth
@@ -86,7 +86,7 @@
 
 // PlaceVertical places a string or text block vertically in an unstyled block
 // of a given height. If the given height is shorter than the height of the
-// string (measured by its newlines) then this will be a noop.
+// string (measured by its newlines) then this will be a noöp.
 func PlaceVertical(height int, pos Position, str string, opts 
...WhitespaceOption) string {
        contentHeight := strings.Count(str, "\n") + 1
        gap := height - contentHeight
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/charm.land/lipgloss/v2/wrap.go 
new/vendor/charm.land/lipgloss/v2/wrap.go
--- old/vendor/charm.land/lipgloss/v2/wrap.go   2026-06-03 08:22:39.000000000 
+0200
+++ new/vendor/charm.land/lipgloss/v2/wrap.go   2026-06-23 11:33:16.000000000 
+0200
@@ -63,6 +63,12 @@
 
 // Write writes to the buffer.
 func (w *WrapWriter) Write(p []byte) (int, error) {
+       if w.p == nil {
+               // The writer has been closed and its parser returned to the 
pool.
+               // Writing after close can happen during out-of-order teardown 
of
+               // nested writer chains; treat it as a no-op rather than 
panicking.
+               return len(p), nil
+       }
        for i := range p {
                b := p[i]
                w.p.Advance(b)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/charmbracelet/ultraviolet/decoder.go 
new/vendor/github.com/charmbracelet/ultraviolet/decoder.go
--- old/vendor/github.com/charmbracelet/ultraviolet/decoder.go  2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/charmbracelet/ultraviolet/decoder.go  2026-06-23 
11:33:16.000000000 +0200
@@ -1530,7 +1530,6 @@
 func parseKittyKeyboardExt(params ansi.Params, k KeyPressEvent) Event {
        // Handle Kitty keyboard protocol
        if len(params) > 2 && // We have at least 3 parameters
-               params[0].Param(1) == 1 && // The first parameter is 1 
(defaults to 1)
                params[1].HasMore() { // The second parameter is a subparameter 
(separated by a ":")
                switch params[2].Param(1) { // The third parameter is the event 
type (defaults to 1)
                case 2:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/urfave/cli/v3/autocomplete/bash_autocomplete 
new/vendor/github.com/urfave/cli/v3/autocomplete/bash_autocomplete
--- old/vendor/github.com/urfave/cli/v3/autocomplete/bash_autocomplete  
2026-06-03 08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/autocomplete/bash_autocomplete  
2026-06-23 11:33:16.000000000 +0200
@@ -66,7 +66,7 @@
       local description=""
       
       if [[ "${line}" == *:* ]]; then
-        token="${line%%:*}"
+        token="${line%%%%:*}"
         description="${line#*:}"
       fi
 
@@ -104,4 +104,4 @@
   fi
 }
 
-complete -o bashdefault -o default -o nospace -F __%[1]s_bash_autocomplete 
%[1]s
+complete -o bashdefault -o default -F __%[1]s_bash_autocomplete %[1]s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/urfave/cli/v3/autocomplete/fish_autocomplete 
new/vendor/github.com/urfave/cli/v3/autocomplete/fish_autocomplete
--- old/vendor/github.com/urfave/cli/v3/autocomplete/fish_autocomplete  
2026-06-03 08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/autocomplete/fish_autocomplete  
2026-06-23 11:33:16.000000000 +0200
@@ -6,7 +6,11 @@
     # Extract the last arg (partial input)
     set -l lastArg (commandline -ct)
     
-    set -l results ($args[1] $args[2..-1] $lastArg --generate-shell-completion 
2> /dev/null)
+    if string match -q -- "-*" $lastArg
+        set results ($args[1] $args[2..-1] $lastArg 
--generate-shell-completion 2> /dev/null)
+    else
+        set results ($args[1] $args[2..-1] --generate-shell-completion 2> 
/dev/null)
+    end
 
     # Remove trailing empty lines
     for line in $results[-1..1]
@@ -32,4 +36,4 @@
 # Clear existing completions for %[1]s
 complete -c %[1]s -e
 # Register completion function
-complete -c %[1]s -f -a '(__%[1]s_perform_completion)'
\ No newline at end of file
+complete -c %[1]s -f -a '(__%[1]s_perform_completion)'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/command.go 
new/vendor/github.com/urfave/cli/v3/command.go
--- old/vendor/github.com/urfave/cli/v3/command.go      2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/command.go      2026-06-23 
11:33:16.000000000 +0200
@@ -161,21 +161,12 @@
        globaHelpFlagAdded bool
        // whether global version flag was added
        globaVersionFlagAdded bool
+       // generated root version flag
+       versionFlag Flag
        // whether this is a completion command
        isCompletionCommand bool
-}
-
-// FullName returns the full name of the command.
-// For commands with parents this ensures that the parent commands
-// are part of the command path.
-func (cmd *Command) FullName() string {
-       namePath := []string{}
-
-       if cmd.parent != nil {
-               namePath = append(namePath, cmd.parent.FullName())
-       }
-
-       return strings.Join(append(namePath, cmd.Name), " ")
+       // whether this is the built-in help command
+       builtInHelp bool
 }
 
 func (cmd *Command) Command(name string) *Command {
@@ -303,6 +294,9 @@
 
 // VisiblePersistentFlags returns a slice of [LocalFlag] with Persistent=true 
and Hidden=false.
 func (cmd *Command) VisiblePersistentFlags() []Flag {
+       if cmd.isCompletionCommand {
+               return nil
+       }
        var flags []Flag
        for _, fl := range cmd.Root().Flags {
                pfl, ok := fl.(LocalFlag)
@@ -370,6 +364,22 @@
        return nil
 }
 
+func (cmd *Command) hasPersistentFlagOnAncestor(fl Flag) bool {
+       for pCmd := cmd.parent; pCmd != nil; pCmd = pCmd.parent {
+               for _, pFl := range pCmd.allFlags() {
+                       if pFl != fl {
+                               continue
+                       }
+
+                       pfl, ok := pFl.(LocalFlag)
+                       if ok && !pfl.IsLocal() {
+                               return true
+                       }
+               }
+       }
+       return false
+}
+
 func (cmd *Command) lookupFlag(name string) Flag {
        for _, pCmd := range cmd.Lineage() {
                if f := pCmd.lFlag(name); f != nil {
@@ -411,7 +421,7 @@
        // The help and completion commands are allowed to run without
        // enforcement of required flags, since they do not invoke user
        // actions that depend on those flag values.
-       if cmd.Name == helpName || cmd.isCompletionCommand {
+       if cmd.builtInHelp || cmd.isCompletionCommand {
                return nil
        }
        for pCmd := cmd; pCmd != nil; pCmd = pCmd.parent {
@@ -556,6 +566,39 @@
        return lineage
 }
 
+// FullName returns the full name of the command.
+// Includes parent commands separated by space.
+func (cmd *Command) FullName() string {
+       return strings.Join(cmd.Path(), " ")
+}
+
+// Path returns the path of command names from the root to cmd, inclusive.
+// Each element is a Command.Name. Path traverses upward via parent pointers
+// similar to Lineage. FullName() is equivalent to strings.Join(cmd.Path(), " 
").
+func (cmd *Command) Path() []string {
+       if cmd.parent != nil {
+               return append(cmd.parent.Path(), cmd.Name)
+       }
+       return []string{cmd.Name}
+}
+
+// Walk visits cmd and every descendant. If fn returns a non-nil error, the
+// walk terminates and the error is returned to the caller.
+func (cmd *Command) Walk(fn func(*Command) error) error {
+       if fn == nil {
+               return nil
+       }
+       if err := fn(cmd); err != nil {
+               return err
+       }
+       for _, sub := range cmd.Commands {
+               if err := sub.Walk(fn); err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
 // Count returns the num of occurrences of this flag
 func (cmd *Command) Count(name string) int {
        if cf, ok := cmd.lookupFlag(name).(Countable); ok {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/command_run.go 
new/vendor/github.com/urfave/cli/v3/command_run.go
--- old/vendor/github.com/urfave/cli/v3/command_run.go  2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/command_run.go  2026-06-23 
11:33:16.000000000 +0200
@@ -9,6 +9,8 @@
        "unicode"
 )
 
+type helpShownKey struct{}
+
 func (cmd *Command) parseArgsFromStdin() ([]string, error) {
        type state int
        const (
@@ -141,13 +143,10 @@
        var rargs Args = &stringSliceArgs{v: osArgs}
        var args Args = &stringSliceArgs{rargs.Tail()}
 
-       if cmd.isCompletionCommand {
-               tracef("completion command detected, skipping pre-parse 
(cmd=%[1]q)", cmd.Name)
-               cmd.parsedArgs = args
-               return ctx, cmd.Action(ctx, cmd)
-       }
-
        for _, f := range cmd.allFlags() {
+               if cmd.hasPersistentFlagOnAncestor(f) {
+                       continue
+               }
                if err := f.PreParse(); err != nil {
                        return ctx, err
                }
@@ -164,7 +163,12 @@
 
        tracef("using post-parse arguments %[1]q (cmd=%[2]q)", args, cmd.Name)
 
-       if checkCompletions(ctx, cmd) {
+       if shouldRunCompletion(cmd) {
+               var beforeErr error
+               if ctx, beforeErr = runBefore(ctx, commandChain(cmd)); 
beforeErr != nil {
+                       return ctx, beforeErr
+               }
+               runCompletion(ctx, cmd)
                return ctx, nil
        }
 
@@ -173,6 +177,15 @@
                deferErr = err
 
                cmd.isInError = true
+               if cmd.checkHelp() {
+                       ctx = context.WithValue(ctx, helpShownKey{}, true)
+                       if cmd.parent == nil {
+                               _ = ShowRootCommandHelp(cmd)
+                       } else {
+                               _ = ShowSubcommandHelp(cmd)
+                       }
+                       return ctx, nil
+               }
                if cmd.OnUsageError != nil {
                        err = cmd.OnUsageError(ctx, cmd, err, cmd.parent != nil)
                        err = cmd.handleExitCoder(ctx, err)
@@ -191,10 +204,8 @@
                                        tracef("SILENTLY IGNORING ERROR running 
ShowRootCommandHelp %[1]v (cmd=%[2]q)", err, cmd.Name)
                                }
                        } else {
-                               tracef("running ShowCommandHelp with %[1]q", 
cmd.Name)
-                               if err := ShowCommandHelp(ctx, cmd, cmd.Name); 
err != nil {
-                                       tracef("SILENTLY IGNORING ERROR running 
ShowCommandHelp with %[1]q %[2]v", cmd.Name, err)
-                               }
+                               tracef("running ShowSubcommandHelp for %[1]q", 
cmd.Name)
+                               _ = ShowSubcommandHelp(cmd)
                        }
                }
 
@@ -202,6 +213,7 @@
        }
 
        if cmd.checkHelp() {
+               ctx = context.WithValue(ctx, helpShownKey{}, true)
                return ctx, helpCommandAction(ctx, cmd)
        } else {
                tracef("no help is wanted (cmd=%[1]q)", cmd.Name)
@@ -226,6 +238,9 @@
 
        if cmd.After != nil && !cmd.Root().shellCompletion {
                defer func() {
+                       if ctx.Value(helpShownKey{}) != nil {
+                               return
+                       }
                        if err := cmd.After(ctx, cmd); err != nil {
                                err = cmd.handleExitCoder(ctx, err)
 
@@ -246,7 +261,14 @@
                                if cmd.OnUsageError != nil {
                                        err = cmd.OnUsageError(ctx, cmd, err, 
cmd.parent != nil)
                                } else {
-                                       _ = ShowSubcommandHelp(cmd)
+                                       fmt.Fprintf(cmd.Root().ErrWriter, 
"Incorrect Usage: %s\n\n", err.Error())
+                                       if cmd.parent == nil {
+                                               _ = ShowRootCommandHelp(cmd)
+                                       } else {
+                                               if err := ShowCommandHelp(ctx, 
cmd.parent, cmd.Name); err != nil {
+                                                       _ = 
ShowSubcommandHelp(cmd)
+                                               }
+                                       }
                                }
                                return ctx, err
                        }
@@ -268,13 +290,12 @@
                subCmd = cmd.Command(name)
                if subCmd == nil {
                        hasDefault := cmd.DefaultCommand != ""
-                       isFlagName := slices.Contains(cmd.FlagNames(), name)
 
                        if hasDefault {
                                tracef("using default command=%[1]q 
(cmd=%[2]q)", cmd.DefaultCommand, cmd.Name)
                        }
 
-                       if isFlagName || hasDefault {
+                       if hasDefault {
                                argsWithDefault := 
cmd.argsWithDefaultCommand(cmd.parsedArgs)
                                tracef("using default command args=%[1]q 
(cmd=%[2]q)", argsWithDefault, cmd.Name)
                                subCmd = cmd.Command(argsWithDefault.First())
@@ -304,23 +325,12 @@
        // perform the command action.
        //
        // First, resolve the chain of nested commands up to the parent.
-       var cmdChain []*Command
-       for p := cmd; p != nil; p = p.parent {
-               cmdChain = append(cmdChain, p)
-       }
-       slices.Reverse(cmdChain)
+       cmdChain := commandChain(cmd)
 
        // Run Before actions in order.
-       for _, cmd := range cmdChain {
-               if cmd.Before == nil {
-                       continue
-               }
-               if bctx, err := cmd.Before(ctx, cmd); err != nil {
-                       deferErr = cmd.handleExitCoder(ctx, err)
-                       return ctx, deferErr
-               } else if bctx != nil {
-                       ctx = bctx
-               }
+       if ctx, err = runBefore(ctx, cmdChain); err != nil {
+               deferErr = err
+               return ctx, deferErr
        }
 
        // Run flag actions in order.
@@ -338,7 +348,14 @@
                if cmd.OnUsageError != nil {
                        err = cmd.OnUsageError(ctx, cmd, err, cmd.parent != nil)
                } else {
-                       _ = ShowSubcommandHelp(cmd)
+                       fmt.Fprintf(cmd.Root().ErrWriter, "Incorrect Usage: 
%s\n\n", err.Error())
+                       if cmd.parent == nil {
+                               _ = ShowRootCommandHelp(cmd)
+                       } else {
+                               if err := ShowCommandHelp(ctx, cmd.parent, 
cmd.Name); err != nil {
+                                       _ = ShowSubcommandHelp(cmd)
+                               }
+                       }
                }
                return ctx, err
        }
@@ -370,3 +387,26 @@
        tracef("returning deferErr (cmd=%[1]q) %[2]q", cmd.Name, deferErr)
        return ctx, deferErr
 }
+
+func commandChain(cmd *Command) []*Command {
+       var cmdChain []*Command
+       for p := cmd; p != nil; p = p.parent {
+               cmdChain = append(cmdChain, p)
+       }
+       slices.Reverse(cmdChain)
+       return cmdChain
+}
+
+func runBefore(ctx context.Context, cmdChain []*Command) (context.Context, 
error) {
+       for _, cmd := range cmdChain {
+               if cmd.Before == nil {
+                       continue
+               }
+               if bctx, err := cmd.Before(ctx, cmd); err != nil {
+                       return ctx, cmd.handleExitCoder(ctx, err)
+               } else if bctx != nil {
+                       ctx = bctx
+               }
+       }
+       return ctx, nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/command_setup.go 
new/vendor/github.com/urfave/cli/v3/command_setup.go
--- old/vendor/github.com/urfave/cli/v3/command_setup.go        2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/command_setup.go        2026-06-23 
11:33:16.000000000 +0200
@@ -46,18 +46,33 @@
        }
 
        if cmd.Reader == nil {
-               tracef("setting default Reader as os.Stdin (cmd=%[1]q)", 
cmd.Name)
-               cmd.Reader = os.Stdin
+               if cmd.parent != nil && cmd.parent.Reader != nil {
+                       tracef("inheriting Reader from parent (cmd=%[1]q)", 
cmd.Name)
+                       cmd.Reader = cmd.parent.Reader
+               } else {
+                       tracef("setting default Reader as os.Stdin 
(cmd=%[1]q)", cmd.Name)
+                       cmd.Reader = os.Stdin
+               }
        }
 
        if cmd.Writer == nil {
-               tracef("setting default Writer as os.Stdout (cmd=%[1]q)", 
cmd.Name)
-               cmd.Writer = os.Stdout
+               if cmd.parent != nil && cmd.parent.Writer != nil {
+                       tracef("inheriting Writer from parent (cmd=%[1]q)", 
cmd.Name)
+                       cmd.Writer = cmd.parent.Writer
+               } else {
+                       tracef("setting default Writer as os.Stdout 
(cmd=%[1]q)", cmd.Name)
+                       cmd.Writer = os.Stdout
+               }
        }
 
        if cmd.ErrWriter == nil {
-               tracef("setting default ErrWriter as os.Stderr (cmd=%[1]q)", 
cmd.Name)
-               cmd.ErrWriter = os.Stderr
+               if cmd.parent != nil && cmd.parent.ErrWriter != nil {
+                       tracef("inheriting ErrWriter from parent (cmd=%[1]q)", 
cmd.Name)
+                       cmd.ErrWriter = cmd.parent.ErrWriter
+               } else {
+                       tracef("setting default ErrWriter as os.Stderr 
(cmd=%[1]q)", cmd.Name)
+                       cmd.ErrWriter = os.Stderr
+               }
        }
 
        if cmd.AllowExtFlags {
@@ -89,8 +104,11 @@
                                localVersionFlag = VersionFlag
                        }
 
-                       cmd.appendFlag(localVersionFlag)
-                       cmd.globaVersionFlagAdded = true
+                       if !flagNamesInUse(cmd.allFlags(), 
localVersionFlag.Names()) {
+                               cmd.appendFlag(localVersionFlag)
+                               cmd.versionFlag = localVersionFlag
+                               cmd.globaVersionFlagAdded = true
+                       }
                }
        }
 
@@ -147,11 +165,13 @@
 func (cmd *Command) setupCommandGraph() {
        tracef("setting up command graph (cmd=%[1]q)", cmd.Name)
 
-       for _, subCmd := range cmd.Commands {
-               subCmd.parent = cmd
-               subCmd.setupSubcommand()
-               subCmd.setupCommandGraph()
-       }
+       _ = cmd.Walk(func(sub *Command) error {
+               for _, subCmd := range sub.Commands {
+                       subCmd.parent = sub
+                       subCmd.setupSubcommand()
+               }
+               return nil
+       })
 }
 
 func (cmd *Command) setupSubcommand() {
@@ -178,6 +198,20 @@
        cmd.flagCategories = newFlagCategoriesFromFlags(cmd.allFlags())
 }
 
+func flagNamesInUse(flags []Flag, names []string) bool {
+       for _, name := range names {
+               for _, fl := range flags {
+                       for _, flagName := range fl.Names() {
+                               if flagName == name {
+                                       return true
+                               }
+                       }
+               }
+       }
+
+       return false
+}
+
 func (cmd *Command) hideHelp() bool {
        tracef("hide help (cmd=%[1]q)", cmd.Name)
        for c := cmd; c != nil; c = c.parent {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/completion.go 
new/vendor/github.com/urfave/cli/v3/completion.go
--- old/vendor/github.com/urfave/cli/v3/completion.go   2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/completion.go   2026-06-23 
11:33:16.000000000 +0200
@@ -4,7 +4,6 @@
        "context"
        "embed"
        "fmt"
-       "sort"
        "strings"
 )
 
@@ -58,45 +57,36 @@
 `
 
 func buildCompletionCommand(appName string) *Command {
-       return &Command{
-               Name:        completionCommandName,
-               Hidden:      true,
-               Usage:       "Output shell completion script for bash, zsh, 
fish, or Powershell",
-               Description: strings.ReplaceAll(completionDescription, 
"$COMMAND", appName),
-               Action: func(ctx context.Context, cmd *Command) error {
-                       return printShellCompletion(ctx, cmd, appName)
-               },
+       cmd := &Command{
+               Name:                completionCommandName,
+               Hidden:              true,
+               Usage:               "Output shell completion script for bash, 
zsh, fish, or Powershell",
+               Description:         strings.ReplaceAll(completionDescription, 
"$COMMAND", appName),
                isCompletionCommand: true,
        }
-}
-
-func printShellCompletion(_ context.Context, cmd *Command, appName string) 
error {
-       var shells []string
-       for k := range shellCompletions {
-               shells = append(shells, k)
-       }
-
-       sort.Strings(shells)
-
-       if cmd.Args().Len() == 0 {
-               return Exit(fmt.Sprintf("no shell provided for completion 
command. available shells are %+v", shells), 1)
-       }
-       s := cmd.Args().First()
 
-       renderCompletion, ok := shellCompletions[s]
-       if !ok {
-               return Exit(fmt.Sprintf("unknown shell %s, available shells are 
%+v", s, shells), 1)
+       for shell, render := range shellCompletions {
+               cmd.Commands = append(cmd.Commands, 
buildShellCompletionSubcommand(shell, render, appName))
        }
 
-       completionScript, err := renderCompletion(cmd, appName)
-       if err != nil {
-               return Exit(err, 1)
-       }
+       return cmd
+}
 
-       _, err = cmd.Writer.Write([]byte(completionScript))
-       if err != nil {
-               return Exit(err, 1)
+func buildShellCompletionSubcommand(shell string, render renderCompletion, 
appName string) *Command {
+       return &Command{
+               Name:                shell,
+               Usage:               fmt.Sprintf("Output %s completion script", 
shell),
+               isCompletionCommand: true,
+               Action: func(ctx context.Context, cmd *Command) error {
+                       completionScript, err := render(cmd, appName)
+                       if err != nil {
+                               return Exit(err, 1)
+                       }
+                       _, err = 
cmd.Root().Writer.Write([]byte(completionScript))
+                       if err != nil {
+                               return Exit(err, 1)
+                       }
+                       return nil
+               },
        }
-
-       return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/flag.go 
new/vendor/github.com/urfave/cli/v3/flag.go
--- old/vendor/github.com/urfave/cli/v3/flag.go 2026-06-03 08:22:39.000000000 
+0200
+++ new/vendor/github.com/urfave/cli/v3/flag.go 2026-06-23 11:33:16.000000000 
+0200
@@ -151,6 +151,23 @@
        IsMultiValueFlag() bool
 }
 
+// SchemaTyper is an optional interface for flags that can report their
+// JSON Schema type for programmatic introspection.
+type SchemaTyper interface {
+       // SchemaType returns the JSON Schema type name for the value this
+       // flag accepts: "boolean", "integer", "number", "string", "array",
+       // "object". Returns "" if the flag does not map cleanly.
+       SchemaType() string
+}
+
+// SchemaItemsTyper is an optional interface for multi-value flags that
+// can report the JSON Schema type of their elements.
+type SchemaItemsTyper interface {
+       // SchemaItemsType returns the JSON Schema type of elements for
+       // array-type flags. Returns "" for single-value or object flags.
+       SchemaItemsType() string
+}
+
 // Countable is an interface to enable detection of flag values which support
 // repetitive flags
 type Countable interface {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/urfave/cli/v3/flag_bool_with_inverse.go 
new/vendor/github.com/urfave/cli/v3/flag_bool_with_inverse.go
--- old/vendor/github.com/urfave/cli/v3/flag_bool_with_inverse.go       
2026-06-03 08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/flag_bool_with_inverse.go       
2026-06-23 11:33:16.000000000 +0200
@@ -116,7 +116,7 @@
 
 func (bif *BoolWithInverseFlag) Set(name, val string) error {
        if bif.count > 0 && bif.OnlyOnce {
-               return fmt.Errorf("cant duplicate this flag")
+               return fmt.Errorf("can't duplicate this flag")
        }
 
        bif.hasBeenSet = true
@@ -207,7 +207,7 @@
        return fmt.Sprintf("%s%s", names, out[i:])
 }
 
-// IsBoolFlag returns whether the flag doesnt need to accept args
+// IsBoolFlag returns whether the flag doesn't need to accept args
 func (bif *BoolWithInverseFlag) IsBoolFlag() bool {
        return true
 }
@@ -263,3 +263,11 @@
 func (bif *BoolWithInverseFlag) TypeName() string {
        return "bool"
 }
+
+func (bif *BoolWithInverseFlag) SchemaType() string {
+       return "boolean"
+}
+
+func (bif *BoolWithInverseFlag) SchemaItemsType() string {
+       return ""
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/flag_ext.go 
new/vendor/github.com/urfave/cli/v3/flag_ext.go
--- old/vendor/github.com/urfave/cli/v3/flag_ext.go     2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/flag_ext.go     2026-06-23 
11:33:16.000000000 +0200
@@ -1,6 +1,9 @@
 package cli
 
-import "flag"
+import (
+       "flag"
+       "time"
+)
 
 type extFlag struct {
        f *flag.Flag
@@ -61,3 +64,26 @@
 func (e *extFlag) GetEnvVars() []string {
        return nil
 }
+
+func (e *extFlag) SchemaType() string {
+       switch e.Get().(type) {
+       case bool:
+               return "boolean"
+       case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, 
uint64:
+               return "integer"
+       case float32, float64:
+               return "number"
+       case string:
+               return "string"
+       case time.Duration:
+               return "duration"
+       case time.Time:
+               return "date-time"
+       default:
+               return ""
+       }
+}
+
+func (e *extFlag) SchemaItemsType() string {
+       return ""
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/flag_impl.go 
new/vendor/github.com/urfave/cli/v3/flag_impl.go
--- old/vendor/github.com/urfave/cli/v3/flag_impl.go    2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/flag_impl.go    2026-06-23 
11:33:16.000000000 +0200
@@ -6,6 +6,7 @@
        "fmt"
        "reflect"
        "strings"
+       "time"
 )
 
 // Value represents a value as used by cli.
@@ -193,7 +194,7 @@
        }
 
        if f.count == 1 && f.OnlyOnce {
-               return fmt.Errorf("cant duplicate this flag")
+               return fmt.Errorf("can't duplicate this flag")
        }
 
        f.count++
@@ -285,6 +286,51 @@
        return nil
 }
 
+// SchemaType returns the JSON Schema type for the flag's value type.
+func (f *FlagBase[T, C, V]) SchemaType() string {
+       var zero T
+       switch any(zero).(type) {
+       case bool:
+               return "boolean"
+       case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, 
uint64:
+               return "integer"
+       case float32, float64:
+               return "number"
+       case string:
+               return "string"
+       case time.Duration:
+               return "duration"
+       case time.Time:
+               return "date-time"
+       case []string, []int, []int8, []int16, []int32, []int64,
+               []uint, []uint8, []uint16, []uint32, []uint64,
+               []float32, []float64:
+               return "array"
+       case map[string]string:
+               return "object"
+       default:
+               return ""
+       }
+}
+
+// SchemaItemsType returns the JSON Schema element type for slice flags.
+func (f *FlagBase[T, C, V]) SchemaItemsType() string {
+       var zero T
+       t := reflect.TypeOf(zero)
+       if t.Kind() == reflect.Slice {
+               switch t.Elem().Kind() {
+               case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, 
reflect.Int64,
+                       reflect.Uint, reflect.Uint8, reflect.Uint16, 
reflect.Uint32, reflect.Uint64:
+                       return "integer"
+               case reflect.Float32, reflect.Float64:
+                       return "number"
+               case reflect.String:
+                       return "string"
+               }
+       }
+       return ""
+}
+
 // IsMultiValueFlag returns true if the value type T can take multiple
 // values from cmd line. This is true for slice and map type flags
 func (f *FlagBase[T, C, VC]) IsMultiValueFlag() bool {
@@ -301,7 +347,7 @@
        return f.Local
 }
 
-// IsBoolFlag returns whether the flag doesnt need to accept args
+// IsBoolFlag returns whether the flag doesn't need to accept args
 func (f *FlagBase[T, C, VC]) IsBoolFlag() bool {
        bf, ok := f.value.(boolFlag)
        return ok && bf.IsBoolFlag()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/godoc-current.txt 
new/vendor/github.com/urfave/cli/v3/godoc-current.txt
--- old/vendor/github.com/urfave/cli/v3/godoc-current.txt       2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/godoc-current.txt       2026-06-23 
11:33:16.000000000 +0200
@@ -170,7 +170,9 @@
 
 OPTIONS:{{template "visibleFlagCategoryTemplate" .}}{{else if .VisibleFlags}}
 
-OPTIONS:{{template "visibleFlagTemplate" .}}{{end}}
+OPTIONS:{{template "visibleFlagTemplate" .}}{{end}}{{if 
.VisiblePersistentFlags}}
+
+GLOBAL OPTIONS:{{template "visiblePersistentFlagTemplate" .}}{{end}}
 `
     SubcommandHelpTemplate is the text template for the subcommand help topic.
     cli.go uses text/template to render templates. You can render custom help
@@ -384,7 +386,7 @@
     string if the flag takes no value at all.
 
 func (bif *BoolWithInverseFlag) IsBoolFlag() bool
-    IsBoolFlag returns whether the flag doesnt need to accept args
+    IsBoolFlag returns whether the flag doesn't need to accept args
 
 func (bif *BoolWithInverseFlag) IsDefaultVisible() bool
     IsDefaultVisible returns true if the flag is not hidden, otherwise false
@@ -405,6 +407,10 @@
 
 func (bif *BoolWithInverseFlag) RunAction(ctx context.Context, cmd *Command) 
error
 
+func (bif *BoolWithInverseFlag) SchemaItemsType() string
+
+func (bif *BoolWithInverseFlag) SchemaType() string
+
 func (bif *BoolWithInverseFlag) Set(name, val string) error
 
 func (bif *BoolWithInverseFlag) SetCategory(c string)
@@ -606,8 +612,8 @@
     found
 
 func (cmd *Command) FullName() string
-    FullName returns the full name of the command. For commands with parents
-    this ensures that the parent commands are part of the command path.
+    FullName returns the full name of the command. Includes parent commands
+    separated by space.
 
 func (cmd *Command) Generic(name string) Value
     Generic looks up the value of a local GenericFlag, returns nil if not found
@@ -689,6 +695,12 @@
 func (cmd *Command) NumFlags() int
     NumFlags returns the number of flags set
 
+func (cmd *Command) Path() []string
+    Path returns the path of command names from the root to cmd, inclusive.
+    Each element is a Command.Name. Path traverses upward via parent pointers
+    similar to Lineage. FullName() is equivalent to strings.Join(cmd.Path(),
+    " ").
+
 func (cmd *Command) Root() *Command
     Root returns the Command at the root of the graph
 
@@ -801,6 +813,10 @@
     VisiblePersistentFlags returns a slice of LocalFlag with Persistent=true 
and
     Hidden=false.
 
+func (cmd *Command) Walk(fn func(*Command) error) error
+    Walk visits cmd and every descendant. If fn returns a non-nil error,
+    the walk terminates and the error is returned to the caller.
+
 type CommandCategories interface {
        // AddCommand adds a command to a category, creating a new category if 
necessary.
        AddCommand(category string, command *Command)
@@ -1000,7 +1016,7 @@
     string if the flag takes no value at all.
 
 func (f *FlagBase[T, C, VC]) IsBoolFlag() bool
-    IsBoolFlag returns whether the flag doesnt need to accept args
+    IsBoolFlag returns whether the flag doesn't need to accept args
 
 func (f *FlagBase[T, C, V]) IsDefaultVisible() bool
     IsDefaultVisible returns true if the flag is not hidden, otherwise false
@@ -1032,6 +1048,12 @@
 func (f *FlagBase[T, C, V]) RunAction(ctx context.Context, cmd *Command) error
     RunAction executes flag action if set
 
+func (f *FlagBase[T, C, V]) SchemaItemsType() string
+    SchemaItemsType returns the JSON Schema element type for slice flags.
+
+func (f *FlagBase[T, C, V]) SchemaType() string
+    SchemaType returns the JSON Schema type for the flag's value type.
+
 func (f *FlagBase[T, C, V]) Set(_ string, val string) error
     Set applies given value from string
 
@@ -1296,6 +1318,23 @@
     it allows flags required flags to be backwards compatible with the Flag
     interface
 
+type SchemaItemsTyper interface {
+       // SchemaItemsType returns the JSON Schema type of elements for
+       // array-type flags. Returns "" for single-value or object flags.
+       SchemaItemsType() string
+}
+    SchemaItemsTyper is an optional interface for multi-value flags that can
+    report the JSON Schema type of their elements.
+
+type SchemaTyper interface {
+       // SchemaType returns the JSON Schema type name for the value this
+       // flag accepts: "boolean", "integer", "number", "string", "array",
+       // "object". Returns "" if the flag does not map cleanly.
+       SchemaType() string
+}
+    SchemaTyper is an optional interface for flags that can report their JSON
+    Schema type for programmatic introspection.
+
 type Serializer interface {
        Serialize() string
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/help.go 
new/vendor/github.com/urfave/cli/v3/help.go
--- old/vendor/github.com/urfave/cli/v3/help.go 2026-06-03 08:22:39.000000000 
+0200
+++ new/vendor/github.com/urfave/cli/v3/help.go 2026-06-23 11:33:16.000000000 
+0200
@@ -65,11 +65,12 @@
 
 func buildHelpCommand(withAction bool) *Command {
        cmd := &Command{
-               Name:      helpName,
-               Aliases:   []string{helpAlias},
-               Usage:     UsageCommandHelp,
-               ArgsUsage: ArgsUsageCommandHelp,
-               HideHelp:  true,
+               Name:        helpName,
+               Aliases:     []string{helpAlias},
+               Usage:       UsageCommandHelp,
+               ArgsUsage:   ArgsUsageCommandHelp,
+               HideHelp:    true,
+               builtInHelp: true,
        }
 
        if withAction {
@@ -85,14 +86,22 @@
 
        tracef("doing help for cmd %[1]q with args %[2]q", cmd, args)
 
-       // This action can be triggered by a "default" action of a command
-       // or via cmd.Run when cmd == helpCmd. So we have following 
possibilities
+       // helpCommandAction is triggered in several ways:
        //
-       // 1 $ app
-       // 2 $ app help
-       // 3 $ app foo
-       // 4 $ app help foo
-       // 5 $ app foo help
+       //   * the command has no user-defined Action (default action fallback)
+       //   * the --help / -h flag was parsed (via cmd.checkHelp())
+       //   * the "help" subcommand (or "h" alias) was dispatched
+       //
+       // Possible invocations:
+       //
+       //   $ app                  # default action; show root help
+       //   $ app --help / -h      # flag; show root help (ignores subsequent 
args)
+       //   $ app help / h         # subcommand; show root help
+       //   $ app help / h foo     # subcommand; show help for subcommand "foo"
+       //   $ app --help / -h foo  # flag; show help for subcommand "foo"
+       //   $ app foo --help / -h  # flag on subcommand; show help for "foo"
+       //   $ app foo help / h     # subcommand on subcommand; show help for 
"foo"
+       //   $ app foo (no action)  # default action on subcommand; show help 
for "foo"
 
        // Case 4. when executing a help command set the context to parent
        // to allow resolution of subsequent args. This will transform
@@ -100,7 +109,7 @@
        //     to
        // $ app foo
        // which will then be handled as case 3
-       if cmd.parent != nil && (cmd.HasName(helpName) || 
cmd.HasName(helpAlias)) {
+       if cmd.parent != nil && cmd.builtInHelp {
                tracef("setting cmd to cmd.parent")
                cmd = cmd.parent
        }
@@ -459,13 +468,7 @@
 }
 
 func checkVersion(cmd *Command) bool {
-       found := false
-       for _, name := range VersionFlag.Names() {
-               if cmd.Bool(name) {
-                       found = true
-               }
-       }
-       return found
+       return cmd.versionFlag != nil && cmd.versionFlag.IsSet()
 }
 
 func checkShellCompleteFlag(c *Command, arguments []string) (bool, []string) {
@@ -492,7 +495,7 @@
        return true, arguments[:pos]
 }
 
-func checkCompletions(ctx context.Context, cmd *Command) bool {
+func shouldRunCompletion(cmd *Command) bool {
        tracef("checking completions on command %[1]q", cmd.Name)
 
        if !cmd.Root().shellCompletion {
@@ -509,13 +512,14 @@
        }
 
        tracef("no subcommand found for completion %[1]q", cmd.Name)
+       return true
+}
 
+func runCompletion(ctx context.Context, cmd *Command) {
        if cmd.ShellComplete != nil {
                tracef("running shell completion func for command %[1]q", 
cmd.Name)
                cmd.ShellComplete(ctx, cmd)
        }
-
-       return true
 }
 
 func subtract(a, b int) int {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/urfave/cli/v3/mkdocs-requirements.txt 
new/vendor/github.com/urfave/cli/v3/mkdocs-requirements.txt
--- old/vendor/github.com/urfave/cli/v3/mkdocs-requirements.txt 2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/mkdocs-requirements.txt 2026-06-23 
11:33:16.000000000 +0200
@@ -1,4 +1,4 @@
-mkdocs-git-revision-date-localized-plugin==1.5.1
+mkdocs-git-revision-date-localized-plugin==1.5.3
 mkdocs-material==9.7.6
 mkdocs==1.6.1
 mkdocs-redirects==1.2.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/mkdocs.yml 
new/vendor/github.com/urfave/cli/v3/mkdocs.yml
--- old/vendor/github.com/urfave/cli/v3/mkdocs.yml      2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/mkdocs.yml      2026-06-23 
11:33:16.000000000 +0200
@@ -20,6 +20,8 @@
   - v3 Manual:
       - Getting Started: v3/getting-started.md
       - Migrating From Older Releases: v3/migrating-from-older-releases.md
+      - Path and Walk: v3/path-and-walk.md
+      - Binary Size: v3/binary-size.md
       - Examples:
           - Greet: v3/examples/greet.md
           - Flags: 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/urfave/cli/v3/template.go 
new/vendor/github.com/urfave/cli/v3/template.go
--- old/vendor/github.com/urfave/cli/v3/template.go     2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/github.com/urfave/cli/v3/template.go     2026-06-23 
11:33:16.000000000 +0200
@@ -107,7 +107,9 @@
 
 OPTIONS:{{template "visibleFlagCategoryTemplate" .}}{{else if .VisibleFlags}}
 
-OPTIONS:{{template "visibleFlagTemplate" .}}{{end}}
+OPTIONS:{{template "visibleFlagTemplate" .}}{{end}}{{if 
.VisiblePersistentFlags}}
+
+GLOBAL OPTIONS:{{template "visiblePersistentFlagTemplate" .}}{{end}}
 `
 
 var FishCompletionTemplate = `# {{ .Command.Name }} fish shell completion
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sync/errgroup/errgroup.go 
new/vendor/golang.org/x/sync/errgroup/errgroup.go
--- old/vendor/golang.org/x/sync/errgroup/errgroup.go   2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sync/errgroup/errgroup.go   2026-06-23 
11:33:16.000000000 +0200
@@ -109,7 +109,7 @@
        if g.sem != nil {
                select {
                case g.sem <- token{}:
-                       // Note: this allows barging iff channels in general 
allow barging.
+                       // Note: this allows barging if and only if channels in 
general allow barging.
                default:
                        return false
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux.go    2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux.go    2026-06-23 
11:33:16.000000000 +0200
@@ -6397,3 +6397,79 @@
        MPOL_PREFERRED_MANY      = 0x5
        MPOL_WEIGHTED_INTERLEAVE = 0x6
 )
+
+const (
+       GPIO_V2_GET_LINEINFO_IOCTL       = 0xc100b405
+       GPIO_V2_GET_LINE_IOCTL           = 0xc250b407
+       GPIO_V2_LINE_GET_VALUES_IOCTL    = 0xc010b40e
+       GPIO_V2_LINE_SET_VALUES_IOCTL    = 0xc010b40f
+       GPIO_V2_GET_LINEINFO_WATCH_IOCTL = 0xc100b406
+       GPIO_GET_LINEINFO_UNWATCH_IOCTL  = 0xc004b40c
+)
+const (
+       GPIO_V2_LINE_ATTR_ID_FLAGS         = 0x1
+       GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 0x2
+       GPIO_V2_LINE_ATTR_ID_DEBOUNCE      = 0x3
+       GPIO_V2_LINE_CHANGED_REQUESTED     = 0x1
+       GPIO_V2_LINE_CHANGED_RELEASED      = 0x2
+       GPIO_V2_LINE_CHANGED_CONFIG        = 0x3
+       GPIO_V2_LINE_EVENT_RISING_EDGE     = 0x1
+       GPIO_V2_LINE_EVENT_FALLING_EDGE    = 0x2
+)
+
+type GPIOChipInfo struct {
+       Name  [32]byte
+       Label [32]byte
+       Lines uint32
+}
+type GPIOV2LineValues struct {
+       Bits uint64
+       Mask uint64
+}
+type GPIOV2LineAttribute struct {
+       Id    uint32
+       _     uint32
+       Flags uint64
+}
+type GPIOV2LineConfigAttribute struct {
+       Attr GPIOV2LineAttribute
+       Mask uint64
+}
+type GPIOV2LineConfig struct {
+       Flags     uint64
+       Num_attrs uint32
+       _         [5]uint32
+       Attrs     [10]GPIOV2LineConfigAttribute
+}
+type GPIOV2LineRequest struct {
+       Offsets           [64]uint32
+       Consumer          [32]byte
+       Config            GPIOV2LineConfig
+       Num_lines         uint32
+       Event_buffer_size uint32
+       _                 [5]uint32
+       Fd                int32
+}
+type GPIOV2LineInfo struct {
+       Name      [32]byte
+       Consumer  [32]byte
+       Offset    uint32
+       Num_attrs uint32
+       Flags     uint64
+       Attrs     [10]GPIOV2LineAttribute
+       _         [4]uint32
+}
+type GPIOV2LineInfoChanged struct {
+       Info         GPIOV2LineInfo
+       Timestamp_ns uint64
+       Event_type   uint32
+       _            [5]uint32
+}
+type GPIOV2LineEvent struct {
+       Timestamp_ns uint64
+       Id           uint32
+       Offset       uint32
+       Seqno        uint32
+       Line_seqno   uint32
+       _            [6]uint32
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_386.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_386.go        2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_386.go        2026-06-23 
11:33:16.000000000 +0200
@@ -711,3 +711,7 @@
        _          uint32
        _          uint32
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go      2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go      2026-06-23 
11:33:16.000000000 +0200
@@ -725,3 +725,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go        2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go        2026-06-23 
11:33:16.000000000 +0200
@@ -705,3 +705,7 @@
        _          uint32
        _          uint32
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go      2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go      2026-06-23 
11:33:16.000000000 +0200
@@ -704,3 +704,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go    2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go    2026-06-23 
11:33:16.000000000 +0200
@@ -705,3 +705,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go       2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go       2026-06-23 
11:33:16.000000000 +0200
@@ -710,3 +710,7 @@
        Ctime_high uint16
        _          uint16
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go     2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go     2026-06-23 
11:33:16.000000000 +0200
@@ -707,3 +707,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go   2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go   2026-06-23 
11:33:16.000000000 +0200
@@ -707,3 +707,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go     2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go     2026-06-23 
11:33:16.000000000 +0200
@@ -710,3 +710,7 @@
        Ctime_high uint16
        _          uint16
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go        2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go        2026-06-23 
11:33:16.000000000 +0200
@@ -718,3 +718,7 @@
        _          uint32
        _          [4]byte
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go      2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go      2026-06-23 
11:33:16.000000000 +0200
@@ -713,3 +713,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go    2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go    2026-06-23 
11:33:16.000000000 +0200
@@ -713,3 +713,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go    2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go    2026-06-23 
11:33:16.000000000 +0200
@@ -792,3 +792,7 @@
        RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE  = 0x6
        RISCV_HWPROBE_WHICH_CPUS             = 0x1
 )
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go      2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go      2026-06-23 
11:33:16.000000000 +0200
@@ -727,3 +727,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x8044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go 
new/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
--- old/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go    2026-06-03 
08:22:39.000000000 +0200
+++ new/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go    2026-06-23 
11:33:16.000000000 +0200
@@ -708,3 +708,7 @@
        _      uint64
        _      uint64
 }
+
+const (
+       GPIO_GET_CHIPINFO_IOCTL = 0x4044b401
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt
--- old/vendor/modules.txt      2026-06-03 08:22:39.000000000 +0200
+++ new/vendor/modules.txt      2026-06-23 11:33:16.000000000 +0200
@@ -10,10 +10,10 @@
 charm.land/bubbles/v2/textarea
 charm.land/bubbles/v2/textinput
 charm.land/bubbles/v2/viewport
-# charm.land/bubbletea/v2 v2.0.6
+# charm.land/bubbletea/v2 v2.0.7
 ## explicit; go 1.25.0
 charm.land/bubbletea/v2
-# charm.land/lipgloss/v2 v2.0.3
+# charm.land/lipgloss/v2 v2.0.4
 ## explicit; go 1.25.0
 charm.land/lipgloss/v2
 # github.com/atotto/clipboard v0.1.4
@@ -28,7 +28,7 @@
 # github.com/charmbracelet/lipgloss v1.1.0
 ## explicit; go 1.18
 github.com/charmbracelet/lipgloss
-# github.com/charmbracelet/ultraviolet v0.0.0-20260525132238-948f4557a654
+# github.com/charmbracelet/ultraviolet v0.0.0-20260622092850-f39628c8a989
 ## explicit; go 1.25.0
 github.com/charmbracelet/ultraviolet
 # github.com/charmbracelet/x/ansi v0.11.7
@@ -94,21 +94,21 @@
 github.com/stretchr/testify/assert
 github.com/stretchr/testify/assert/yaml
 github.com/stretchr/testify/require
-# github.com/urfave/cli/v3 v3.9.0
+# github.com/urfave/cli/v3 v3.10.0
 ## explicit; go 1.22
 github.com/urfave/cli/v3
 # github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e
 ## explicit; go 1.19
 github.com/xo/terminfo
-# golang.org/x/sync v0.20.0
+# golang.org/x/sync v0.21.0
 ## explicit; go 1.25.0
 golang.org/x/sync/errgroup
-# golang.org/x/sys v0.45.0
+# golang.org/x/sys v0.46.0
 ## explicit; go 1.25.0
 golang.org/x/sys/plan9
 golang.org/x/sys/unix
 golang.org/x/sys/windows
-# golang.org/x/term v0.43.0
+# golang.org/x/term v0.44.0
 ## explicit; go 1.25.0
 golang.org/x/term
 # gopkg.in/yaml.v3 v3.0.1

Reply via email to