Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ansible-navigator for 
openSUSE:Factory checked in at 2026-01-13 21:31:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansible-navigator (Old)
 and      /work/SRC/openSUSE:Factory/.ansible-navigator.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ansible-navigator"

Tue Jan 13 21:31:44 2026 rev:19 rq:1326911 version:26.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/ansible-navigator/ansible-navigator.changes      
2025-12-05 16:58:56.554227533 +0100
+++ 
/work/SRC/openSUSE:Factory/.ansible-navigator.new.1928/ansible-navigator.changes
    2026-01-13 21:33:13.928694415 +0100
@@ -1,0 +2,19 @@
+Tue Jan 13 06:52:23 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 26.1.1:
+  * Fixes
+    - fix: Update version and tests (#2084) @alisonlhart
+
+-------------------------------------------------------------------
+Tue Jan 13 06:47:52 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 26.1.0:
+  * Fixes
+    - fix: mount docker's proxy ssh agent socket when running on
+      macOS (#2055) (#2076) @joonashak
+    - fix: Use sys.executable instead of hardcoded Python paths for
+      introspection (#2072) @alisonlhart
+    - fix: Improve compatiblity with restrictive shell environments
+      (#2073) @alisonlhart
+
+-------------------------------------------------------------------

Old:
----
  ansible-navigator-25.12.0.obscpio

New:
----
  ansible-navigator-26.1.1.obscpio

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

Other differences:
------------------
++++++ ansible-navigator.spec ++++++
--- /var/tmp/diff_new_pack.tWTtmg/_old  2026-01-13 21:33:14.800730433 +0100
+++ /var/tmp/diff_new_pack.tWTtmg/_new  2026-01-13 21:33:14.804730597 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package ansible-navigator
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -38,7 +38,7 @@
 %endif
 
 Name:           ansible-navigator
-Version:        25.12.0
+Version:        26.1.1
 Release:        0
 Summary:        A text-based user interface (TUI) for Ansible
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.tWTtmg/_old  2026-01-13 21:33:14.844732250 +0100
+++ /var/tmp/diff_new_pack.tWTtmg/_new  2026-01-13 21:33:14.848732415 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/ansible/ansible-navigator</param>
     <param name="scm">git</param>
     <param name="package-meta">yes</param>
-    <param name="revision">v25.12.0</param>
+    <param name="revision">v26.1.1</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.tWTtmg/_old  2026-01-13 21:33:14.872733407 +0100
+++ /var/tmp/diff_new_pack.tWTtmg/_new  2026-01-13 21:33:14.876733572 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/ansible/ansible-navigator</param>
-              <param 
name="changesrevision">2a49e00ce1008ebf6df4e68c9910187b6d97639c</param></service></servicedata>
+              <param 
name="changesrevision">8eda9ce382df653570693a781930c61a5e3b7c19</param></service></servicedata>
 (No newline at EOF)
 

++++++ ansible-navigator-25.12.0.obscpio -> ansible-navigator-26.1.1.obscpio 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/HEAD 
new/ansible-navigator-26.1.1/.git/HEAD
--- old/ansible-navigator-25.12.0/.git/HEAD     2025-12-02 17:56:18.000000000 
+0100
+++ new/ansible-navigator-26.1.1/.git/HEAD      2026-01-08 20:24:48.000000000 
+0100
@@ -1 +1 @@
-2a49e00ce1008ebf6df4e68c9910187b6d97639c
+8eda9ce382df653570693a781930c61a5e3b7c19
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/ORIG_HEAD 
new/ansible-navigator-26.1.1/.git/ORIG_HEAD
--- old/ansible-navigator-25.12.0/.git/ORIG_HEAD        2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/ORIG_HEAD 2026-01-08 20:24:48.000000000 
+0100
@@ -1 +1 @@
-2a49e00ce1008ebf6df4e68c9910187b6d97639c
+8eda9ce382df653570693a781930c61a5e3b7c19
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/applypatch-msg.sample 
new/ansible-navigator-26.1.1/.git/hooks/applypatch-msg.sample
--- old/ansible-navigator-25.12.0/.git/hooks/applypatch-msg.sample      
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/applypatch-msg.sample       
2026-01-08 20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to check the commit log message taken by
 # applypatch from an e-mail message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/commit-msg.sample 
new/ansible-navigator-26.1.1/.git/hooks/commit-msg.sample
--- old/ansible-navigator-25.12.0/.git/hooks/commit-msg.sample  2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/commit-msg.sample   2026-01-08 
20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to check the commit log message.
 # Called by "git commit" with one argument, the name of the file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/fsmonitor-watchman.sample 
new/ansible-navigator-26.1.1/.git/hooks/fsmonitor-watchman.sample
--- old/ansible-navigator-25.12.0/.git/hooks/fsmonitor-watchman.sample  
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/fsmonitor-watchman.sample   
2026-01-08 20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/k9lfh0l007sp61rag7d9bf3nn5bg3qy7-perl-5.40.0/bin/perl
+#!/nix/store/j1scam1h5xmpnsn5ss02nbyhhyc7hwq3-perl-5.40.0/bin/perl
 
 use strict;
 use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/post-update.sample 
new/ansible-navigator-26.1.1/.git/hooks/post-update.sample
--- old/ansible-navigator-25.12.0/.git/hooks/post-update.sample 2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/post-update.sample  2026-01-08 
20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to prepare a packed repository for use over
 # dumb transports.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/pre-applypatch.sample 
new/ansible-navigator-26.1.1/.git/hooks/pre-applypatch.sample
--- old/ansible-navigator-25.12.0/.git/hooks/pre-applypatch.sample      
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/pre-applypatch.sample       
2026-01-08 20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to verify what is about to be committed
 # by applypatch from an e-mail message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/pre-commit.sample 
new/ansible-navigator-26.1.1/.git/hooks/pre-commit.sample
--- old/ansible-navigator-25.12.0/.git/hooks/pre-commit.sample  2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/pre-commit.sample   2026-01-08 
20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to verify what is about to be committed.
 # Called by "git commit" with no arguments.  The hook should
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/pre-merge-commit.sample 
new/ansible-navigator-26.1.1/.git/hooks/pre-merge-commit.sample
--- old/ansible-navigator-25.12.0/.git/hooks/pre-merge-commit.sample    
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/pre-merge-commit.sample     
2026-01-08 20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to verify what is about to be committed.
 # Called by "git merge" with no arguments.  The hook should
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/hooks/pre-push.sample 
new/ansible-navigator-26.1.1/.git/hooks/pre-push.sample
--- old/ansible-navigator-25.12.0/.git/hooks/pre-push.sample    2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/pre-push.sample     2026-01-08 
20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 
 # An example hook script to verify what is about to be pushed.  Called by "git
 # push" after it has checked the remote status, but before anything has been
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/pre-rebase.sample 
new/ansible-navigator-26.1.1/.git/hooks/pre-rebase.sample
--- old/ansible-navigator-25.12.0/.git/hooks/pre-rebase.sample  2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/pre-rebase.sample   2026-01-08 
20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # Copyright (c) 2006, 2008 Junio C Hamano
 #
@@ -65,7 +65,7 @@
        fi
 else
        not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
-       /nix/store/k9lfh0l007sp61rag7d9bf3nn5bg3qy7-perl-5.40.0/bin/perl -e '
+       /nix/store/j1scam1h5xmpnsn5ss02nbyhhyc7hwq3-perl-5.40.0/bin/perl -e '
                my $topic = $ARGV[0];
                my $msg = "* $topic has commits already merged to public 
branch:\n";
                my (%not_in_next) = map {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/pre-receive.sample 
new/ansible-navigator-26.1.1/.git/hooks/pre-receive.sample
--- old/ansible-navigator-25.12.0/.git/hooks/pre-receive.sample 2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/pre-receive.sample  2026-01-08 
20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to make use of push options.
 # The example simply echoes all push options that start with 'echoback='
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/prepare-commit-msg.sample 
new/ansible-navigator-26.1.1/.git/hooks/prepare-commit-msg.sample
--- old/ansible-navigator-25.12.0/.git/hooks/prepare-commit-msg.sample  
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/prepare-commit-msg.sample   
2026-01-08 20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to prepare the commit log message.
 # Called by "git commit" with the name of the file that has the
@@ -24,11 +24,11 @@
 COMMIT_SOURCE=$2
 SHA1=$3
 
-/nix/store/k9lfh0l007sp61rag7d9bf3nn5bg3qy7-perl-5.40.0/bin/perl -i.bak -ne 
'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+/nix/store/j1scam1h5xmpnsn5ss02nbyhhyc7hwq3-perl-5.40.0/bin/perl -i.bak -ne 
'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
 
 # case "$COMMIT_SOURCE,$SHA1" in
 #  ,|template,)
-#    /nix/store/k9lfh0l007sp61rag7d9bf3nn5bg3qy7-perl-5.40.0/bin/perl -i.bak 
-pe '
+#    /nix/store/j1scam1h5xmpnsn5ss02nbyhhyc7hwq3-perl-5.40.0/bin/perl -i.bak 
-pe '
 #       print "\n" . `git diff --cached --name-status -r`
 #       if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
 #  *) ;;
@@ -38,5 +38,5 @@
 # git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
 # if test -z "$COMMIT_SOURCE"
 # then
-#   /nix/store/k9lfh0l007sp61rag7d9bf3nn5bg3qy7-perl-5.40.0/bin/perl -i.bak 
-pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+#   /nix/store/j1scam1h5xmpnsn5ss02nbyhhyc7hwq3-perl-5.40.0/bin/perl -i.bak 
-pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
 # fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/push-to-checkout.sample 
new/ansible-navigator-26.1.1/.git/hooks/push-to-checkout.sample
--- old/ansible-navigator-25.12.0/.git/hooks/push-to-checkout.sample    
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/push-to-checkout.sample     
2026-01-08 20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 
 # An example hook script to update a checked-out tree on a git push.
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/hooks/sendemail-validate.sample 
new/ansible-navigator-26.1.1/.git/hooks/sendemail-validate.sample
--- old/ansible-navigator-25.12.0/.git/hooks/sendemail-validate.sample  
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/sendemail-validate.sample   
2026-01-08 20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 
 # An example hook script to validate a patch (and/or patch series) before
 # sending it via email.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/hooks/update.sample 
new/ansible-navigator-26.1.1/.git/hooks/update.sample
--- old/ansible-navigator-25.12.0/.git/hooks/update.sample      2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/hooks/update.sample       2026-01-08 
20:24:48.000000000 +0100
@@ -1,4 +1,4 @@
-#!/nix/store/l9k32vj2aczxw62134j1x0dsh569jz2l-bash-5.2p37/bin/bash
+#!/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash
 #
 # An example hook script to block unannotated tags from entering.
 # Called by "git receive-pack" with arguments: refname sha1-old sha1-new
Binary files old/ansible-navigator-25.12.0/.git/index and 
new/ansible-navigator-26.1.1/.git/index differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/logs/HEAD 
new/ansible-navigator-26.1.1/.git/logs/HEAD
--- old/ansible-navigator-25.12.0/.git/logs/HEAD        2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/logs/HEAD 2026-01-08 20:24:48.000000000 
+0100
@@ -1,2 +1,2 @@
-0000000000000000000000000000000000000000 
5784048331c41513425446ace851e56098dae601 kastl <[email protected]> 
1764917116 +0100  clone: from https://github.com/ansible/ansible-navigator
-5784048331c41513425446ace851e56098dae601 
2a49e00ce1008ebf6df4e68c9910187b6d97639c kastl <[email protected]> 
1764917116 +0100  checkout: moving from main to v25.12.0
+0000000000000000000000000000000000000000 
12eaa0f5f130733bfed2d2e755888c91df9d3796 kastl <[email protected]> 
1768287143 +0100  clone: from https://github.com/ansible/ansible-navigator
+12eaa0f5f130733bfed2d2e755888c91df9d3796 
8eda9ce382df653570693a781930c61a5e3b7c19 kastl <[email protected]> 
1768287143 +0100  checkout: moving from main to v26.1.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/logs/refs/heads/main 
new/ansible-navigator-26.1.1/.git/logs/refs/heads/main
--- old/ansible-navigator-25.12.0/.git/logs/refs/heads/main     2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/logs/refs/heads/main      2026-01-08 
20:24:48.000000000 +0100
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
5784048331c41513425446ace851e56098dae601 kastl <[email protected]> 
1764917116 +0100  clone: from https://github.com/ansible/ansible-navigator
+0000000000000000000000000000000000000000 
12eaa0f5f130733bfed2d2e755888c91df9d3796 kastl <[email protected]> 
1768287143 +0100  clone: from https://github.com/ansible/ansible-navigator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.git/logs/refs/remotes/origin/HEAD 
new/ansible-navigator-26.1.1/.git/logs/refs/remotes/origin/HEAD
--- old/ansible-navigator-25.12.0/.git/logs/refs/remotes/origin/HEAD    
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/logs/refs/remotes/origin/HEAD     
2026-01-08 20:24:48.000000000 +0100
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
5784048331c41513425446ace851e56098dae601 kastl <[email protected]> 
1764917116 +0100  clone: from https://github.com/ansible/ansible-navigator
+0000000000000000000000000000000000000000 
12eaa0f5f130733bfed2d2e755888c91df9d3796 kastl <[email protected]> 
1768287143 +0100  clone: from https://github.com/ansible/ansible-navigator
Binary files 
old/ansible-navigator-25.12.0/.git/objects/pack/pack-0da1f306ed161573458ea2dc3b33dc0159cf6a49.idx
 and 
new/ansible-navigator-26.1.1/.git/objects/pack/pack-0da1f306ed161573458ea2dc3b33dc0159cf6a49.idx
 differ
Binary files 
old/ansible-navigator-25.12.0/.git/objects/pack/pack-0da1f306ed161573458ea2dc3b33dc0159cf6a49.pack
 and 
new/ansible-navigator-26.1.1/.git/objects/pack/pack-0da1f306ed161573458ea2dc3b33dc0159cf6a49.pack
 differ
Binary files 
old/ansible-navigator-25.12.0/.git/objects/pack/pack-0da1f306ed161573458ea2dc3b33dc0159cf6a49.rev
 and 
new/ansible-navigator-26.1.1/.git/objects/pack/pack-0da1f306ed161573458ea2dc3b33dc0159cf6a49.rev
 differ
Binary files 
old/ansible-navigator-25.12.0/.git/objects/pack/pack-d22ce94feea1549eaa32731b93f1d83cfea04fa1.idx
 and 
new/ansible-navigator-26.1.1/.git/objects/pack/pack-d22ce94feea1549eaa32731b93f1d83cfea04fa1.idx
 differ
Binary files 
old/ansible-navigator-25.12.0/.git/objects/pack/pack-d22ce94feea1549eaa32731b93f1d83cfea04fa1.pack
 and 
new/ansible-navigator-26.1.1/.git/objects/pack/pack-d22ce94feea1549eaa32731b93f1d83cfea04fa1.pack
 differ
Binary files 
old/ansible-navigator-25.12.0/.git/objects/pack/pack-d22ce94feea1549eaa32731b93f1d83cfea04fa1.rev
 and 
new/ansible-navigator-26.1.1/.git/objects/pack/pack-d22ce94feea1549eaa32731b93f1d83cfea04fa1.rev
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/packed-refs 
new/ansible-navigator-26.1.1/.git/packed-refs
--- old/ansible-navigator-25.12.0/.git/packed-refs      2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/packed-refs       2026-01-08 
20:24:48.000000000 +0100
@@ -1,16 +1,14 @@
 # pack-refs with: peeled fully-peeled sorted 
 84521c91ed341a41232cb388e3fc6d548fa5f2ee refs/remotes/origin/AAP-36287
 05d169ed6d5531a58a86c3d051ee8c2e059eb529 refs/remotes/origin/chore/ci
-16eb0fca9f7e1659b1b76ce03563738540d7c860 refs/remotes/origin/chore/sonar-config
 0d667089697257c904031e581abb4f9d31d0ffdb refs/remotes/origin/chore/tmuxlib
+d958dbade56ba9465b8789791b85c87256627bb4 
refs/remotes/origin/chore/update-python-deps
 a75b8efc517146c4dce9b2e7f91cd77f5aef2ca8 refs/remotes/origin/community-comms
-423fe1c051e03ef273a7db428bb232234fd03361 refs/remotes/origin/fix/gha
-32c88cbdca59e8694b20ff8dec902c7da3f67c22 refs/remotes/origin/fix/uv
-5784048331c41513425446ace851e56098dae601 refs/remotes/origin/main
+12eaa0f5f130733bfed2d2e755888c91df9d3796 refs/remotes/origin/main
 f2fe70d862609d68f64df4901f69ee932cda434b refs/remotes/origin/release-1.0
 fa5ab6f372b6134e681c87cbfc35341c546eb68d refs/remotes/origin/release-1.1
+e7caeeac82a0960d95217e1df65a476adef21095 refs/remotes/origin/renovate/all
 4f74e2e63965ca3706cb27b0e39c3041341a02fa refs/remotes/origin/test
-3dcc27cbaeb4545dccb4d4a72f3b3f940887aa3d refs/remotes/origin/test-python-3.12
 e64273cb31afedb0f5fa395fd3c92908268f07cf refs/tags/0.6.2
 c9030367e0346bce2f04d6ca0d15432f3bd7e297 refs/tags/0.7.0
 ^85848ca0b48d1133e6782941fdd95412ebbd2b7f
@@ -64,6 +62,8 @@
 74cc9c82be1de4ca093bcbbe1cc22a004b04fdc3 refs/tags/v25.5.0
 08f335c0c6ef43c140ed3b66cbaf1ee8a382bf43 refs/tags/v25.8.0
 d0aa3a1d37660f2d03f6c8dc76c20bbe109d9c5b refs/tags/v25.9.0
+341a6dea4d67a00ed7765a1e597ccd801b4a299d refs/tags/v26.1.0
+8eda9ce382df653570693a781930c61a5e3b7c19 refs/tags/v26.1.1
 d60324c5ed81f9936ad0221cffa8074c8d79b4a7 refs/tags/v3.0.0
 3041afbcd0471eaf3e069daa4884519cb8b44907 refs/tags/v3.0.0a1
 ^d60324c5ed81f9936ad0221cffa8074c8d79b4a7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.git/refs/heads/main 
new/ansible-navigator-26.1.1/.git/refs/heads/main
--- old/ansible-navigator-25.12.0/.git/refs/heads/main  2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.git/refs/heads/main   2026-01-08 
20:24:48.000000000 +0100
@@ -1 +1 @@
-5784048331c41513425446ace851e56098dae601
+12eaa0f5f130733bfed2d2e755888c91df9d3796
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/.github/workflows/release.yml 
new/ansible-navigator-26.1.1/.github/workflows/release.yml
--- old/ansible-navigator-25.12.0/.github/workflows/release.yml 2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.github/workflows/release.yml  2026-01-08 
20:24:48.000000000 +0100
@@ -31,7 +31,7 @@
           --user
           tox
       - name: Check out src from Git
-        uses: actions/checkout@v5
+        uses: actions/checkout@v6
         with:
           fetch-depth: 0 # needed by setuptools-scm
       - name: Build dists
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.github/workflows/tox.yml 
new/ansible-navigator-26.1.1/.github/workflows/tox.yml
--- old/ansible-navigator-25.12.0/.github/workflows/tox.yml     2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.github/workflows/tox.yml      2026-01-08 
20:24:48.000000000 +0100
@@ -51,13 +51,13 @@
       matrix: ${{ fromJson(needs.pre.outputs.matrix) }}
 
     steps:
-      - uses: actions/checkout@v5
+      - uses: actions/checkout@v6
         with:
           fetch-depth: 0 # needed by setuptools-scm
 
       - name: Cache container images
         if: ${{ startsWith(matrix.name, 'py') }}
-        uses: actions/cache@v4
+        uses: actions/cache@v5
         with:
           path: |
             ~/.local/share/containers
@@ -142,7 +142,7 @@
     runs-on: ubuntu-24.04
     steps:
       # checkout needed for codecov action which needs codecov.yml file
-      - uses: actions/checkout@v5
+      - uses: actions/checkout@v6
 
       - name: Set up Python
         uses: actions/setup-python@v6
@@ -152,7 +152,7 @@
       - run: pip3 install 'coverage>=7.5.1'
 
       - name: Merge logs into a single archive
-        uses: actions/upload-artifact/merge@v4
+        uses: actions/upload-artifact/merge@v6
         with:
           name: logs.zip
           include-hidden-files: true
@@ -160,20 +160,20 @@
           separate-directories: true
 
       - name: Download artifacts
-        uses: actions/download-artifact@v5
+        uses: actions/download-artifact@v7
         with:
           name: logs.zip
           path: .
 
       - name: Upload coverage data
-        uses: codecov/[email protected]
+        uses: codecov/[email protected]
         with:
           name: ${{ matrix.name }}
           fail_ci_if_error: true
           use_oidc: ${{ !(github.event_name == 'pull_request' && 
github.event.pull_request.head.repo.fork) }}
 
       - name: Delete Merged Artifacts
-        uses: actions/upload-artifact/merge@v4
+        uses: actions/upload-artifact/merge@v6
         with:
           include-hidden-files: true
           delete-merged: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible-navigator-25.12.0/.pre-commit-config.yaml 
new/ansible-navigator-26.1.1/.pre-commit-config.yaml
--- old/ansible-navigator-25.12.0/.pre-commit-config.yaml       2025-12-02 
17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/.pre-commit-config.yaml        2026-01-08 
20:24:48.000000000 +0100
@@ -7,14 +7,14 @@
 exclude: "(?x)^(\n  _readthedocs|\n  .tox\n)$\n"
 repos:
   - repo: https://github.com/renovatebot/pre-commit-hooks
-    rev: 41.157.1
+    rev: 42.71.0
     hooks:
       - id: renovate-config-validator
         alias: renovate
         args:
           - --strict
   - repo: https://github.com/rbubley/mirrors-prettier
-    rev: v3.6.2
+    rev: v3.7.4
     hooks:
       - id: prettier
         entry:
@@ -30,11 +30,11 @@
     hooks:
       - id: toml-sort-fix
   - repo: https://github.com/tox-dev/tox-ini-fmt
-    rev: 1.7.0
+    rev: 1.7.1
     hooks:
       - id: tox-ini-fmt
   - repo: https://github.com/streetsidesoftware/cspell-cli
-    rev: v9.2.0
+    rev: v9.4.0
     hooks:
       - id: cspell
         name: Spell check with cspell
@@ -55,11 +55,11 @@
       - id: check-ast
       - id: debug-statements
   - repo: https://gitlab.com/bmares/check-json5
-    rev: v1.0.0
+    rev: v1.0.1
     hooks:
       - id: check-json5
   - repo: https://github.com/igorshubovych/markdownlint-cli
-    rev: v0.45.0
+    rev: v0.47.0
     hooks:
       - id: markdownlint
         exclude:
@@ -93,11 +93,11 @@
         additional_dependencies:
           - flake8-docstrings
   - repo: https://github.com/jsh9/pydoclint
-    rev: 0.7.3
+    rev: 0.8.3
     hooks:
       - id: pydoclint
   - repo: https://github.com/asottile/pyupgrade
-    rev: v3.21.0
+    rev: v3.21.2
     hooks:
       - id: pyupgrade
         args:
@@ -109,14 +109,14 @@
         alias: toml
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.14.1
+    rev: v0.14.10
     hooks:
       - id: ruff-format
         alias: ruff
       - id: ruff-check
         alias: ruff
   - repo: https://github.com/pre-commit/mirrors-mypy.git
-    rev: v1.18.2
+    rev: v1.19.1
     hooks:
       - id: mypy
         additional_dependencies:
@@ -132,7 +132,7 @@
           - types-setuptools
           - types-typed-ast
   - repo: https://github.com/pycqa/pylint.git
-    rev: v4.0.2
+    rev: v4.0.4
     hooks:
       - id: pylint
         args:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/src/ansible_navigator/actions/collections.py 
new/ansible-navigator-26.1.1/src/ansible_navigator/actions/collections.py
--- old/ansible-navigator-25.12.0/src/ansible_navigator/actions/collections.py  
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/src/ansible_navigator/actions/collections.py   
2026-01-08 20:24:48.000000000 +0100
@@ -236,8 +236,15 @@
         msgs = ["humph. Something went really wrong while cataloging 
collections."]
         msgs.append("Details have been added to the log file")
         closing = ["[HINT] Please log an issue about this one, it shouldn't 
have happened"]
-        warning = warning_notification(messages=msgs + closing)
-        self._interaction.ui.show_form(warning)
+
+        # Only show UI notification in interactive mode
+        if self._args.mode == "interactive" and hasattr(self, "_interaction"):
+            warning = warning_notification(messages=msgs + closing)
+            self._interaction.ui.show_form(warning)
+        else:
+            # In stdout mode, just log the error
+            for msg in msgs + closing:
+                self._logger.error(msg)
 
     def notify_none(self) -> None:
         """Notify no collections were found."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/src/ansible_navigator/data/ansible-navigator.json 
new/ansible-navigator-26.1.1/src/ansible_navigator/data/ansible-navigator.json
--- 
old/ansible-navigator-25.12.0/src/ansible_navigator/data/ansible-navigator.json 
    2025-12-02 17:56:18.000000000 +0100
+++ 
new/ansible-navigator-26.1.1/src/ansible_navigator/data/ansible-navigator.json  
    2026-01-08 20:24:48.000000000 +0100
@@ -525,7 +525,7 @@
     "required": [
         "ansible-navigator"
     ],
-    "title": "ansible-navigator settings v25",
+    "title": "ansible-navigator settings v26",
     "type": "object",
-    "version": "25"
+    "version": "26"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/src/ansible_navigator/data/catalog_collections.py 
new/ansible-navigator-26.1.1/src/ansible_navigator/data/catalog_collections.py
--- 
old/ansible-navigator-25.12.0/src/ansible_navigator/data/catalog_collections.py 
    2025-12-02 17:56:18.000000000 +0100
+++ 
new/ansible-navigator-26.1.1/src/ansible_navigator/data/catalog_collections.py  
    2026-01-08 20:24:48.000000000 +0100
@@ -512,19 +512,30 @@
     Returns:
         Errors or the configured collection directories
     """
-    cmd = ["ansible-config", "dump", "|", "grep", "COLLECTIONS_PATHS"]
+    cmd = ["ansible-config", "dump"]
     proc_out = run_command(cmd)
     if "error" in proc_out:
         return proc_out
+
+    # Filter for COLLECTIONS_PATHS instead of using shell pipe and grep
+    collections_paths_line = None
+    for line in proc_out["stdout"].splitlines():
+        if "COLLECTIONS_PATHS" in line:
+            collections_paths_line = line
+            break
+
+    if not collections_paths_line:
+        return {"error": "COLLECTIONS_PATHS not found in ansible-config 
output"}
+
     regex = 
re.compile(r"^(?P<variable>\S+)\((?P<source>.*)\)\s=\s(?P<current>.*)$")
-    parsed = regex.match(proc_out["stdout"])
+    parsed = regex.match(collections_paths_line)
     if parsed:
         try:
             current = yaml.load(parsed.groupdict()["current"], 
Loader=SafeLoader)
         except (YAMLError, KeyError) as exc:
             return {"error": str(exc)}
         return {"result": current}
-    return {"error": f"corrupt current collection path: {proc_out['stdout']}"}
+    return {"error": f"corrupt current collection path: 
{collections_paths_line}"}
 
 
 def retrieve_docs(
@@ -611,14 +622,16 @@
     """
     try:
         proc_out = subprocess.run(
-            " ".join(cmd),
+            cmd,
             capture_output=True,
             check=True,
             text=True,
-            shell=True,
+            shell=False,
         )
     except subprocess.CalledProcessError as exc:
         return {"error": str(exc)}
+    except (FileNotFoundError, PermissionError) as exc:
+        return {"error": f"{type(exc).__name__}: {exc}"}
     return {"stdout": proc_out.stdout}
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/src/ansible_navigator/data/image_introspect.py 
new/ansible-navigator-26.1.1/src/ansible_navigator/data/image_introspect.py
--- 
old/ansible-navigator-25.12.0/src/ansible_navigator/data/image_introspect.py    
    2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/src/ansible_navigator/data/image_introspect.py 
2026-01-08 20:24:48.000000000 +0100
@@ -325,7 +325,7 @@
         """
         pre = Command(
             id_="pip_freeze",
-            command="/usr/bin/python3 -m pip freeze",
+            command=f"{sys.executable} -m pip freeze",
             parse=self.parse_freeze,
         )
         run_command(pre)
@@ -334,7 +334,7 @@
         return [
             Command(
                 id_="python_packages",
-                command=f"/usr/bin/python3 -m pip show {pkgs}",
+                command=f"{sys.executable} -m pip show {pkgs}",
                 parse=self.parse,
             ),
         ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/src/ansible_navigator/runner/base.py 
new/ansible-navigator-26.1.1/src/ansible_navigator/runner/base.py
--- old/ansible-navigator-25.12.0/src/ansible_navigator/runner/base.py  
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/src/ansible_navigator/runner/base.py   
2026-01-08 20:24:48.000000000 +0100
@@ -103,12 +103,22 @@
         self.status: str | None = None
         self._runner_args: dict[str, Any] = {}
 
+        container_options = container_options or []
+
         # when the ce is podman, set the container user to root
         if self._ce == "podman":
-            if container_options:
-                container_options.append("--user=root")
-            else:
-                container_options = ["--user=root"]
+            container_options.append("--user=root")
+
+        # Fix SSH agent socket when running Docker on macOS.
+        if sys.platform == "darwin" and self._ce == "docker":
+            ssh_agent_socket_opts = [
+                # Docker exposes this proxy socket for SSH agent on macOS.
+                
"--volume=/run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock:ro",
+                "--env=SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock",
+            ]
+
+            # Prepend to existing container options to allow overriding this 
fix.
+            container_options = ssh_agent_socket_opts + container_options
 
         if self._ee:
             self._runner_args.update(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/tests/integration/test_execution_environment_image.py
 
new/ansible-navigator-26.1.1/tests/integration/test_execution_environment_image.py
--- 
old/ansible-navigator-25.12.0/tests/integration/test_execution_environment_image.py
 2025-12-02 17:56:18.000000000 +0100
+++ 
new/ansible-navigator-26.1.1/tests/integration/test_execution_environment_image.py
  2026-01-08 20:24:48.000000000 +0100
@@ -3,6 +3,7 @@
 from __future__ import annotations
 
 import shlex
+import sys
 
 from pathlib import Path
 from typing import TYPE_CHECKING
@@ -22,7 +23,12 @@
     from unittest.mock import MagicMock  # pylint: disable=preferred-module
 
 test_data = [
-    ("defaults", "", "ansible-navigator_empty.yml", {"container_image": 
default_ee_image_name()}),
+    (
+        "defaults",
+        "",
+        "ansible-navigator_empty.yml",
+        {"container_image": default_ee_image_name()},
+    ),
     (
         "set at command line",
         f"--execution-environment-image {small_image_name()}",
@@ -106,3 +112,17 @@
 
         for item in expected.items():
             assert item in kwargs.items()
+
+        # MacOS SSH options should not be included when running in another OS 
or on Podman.
+        container_options = kwargs["container_options"] or []
+
+        macos_container_options = [
+            
"--volume=/run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock:ro",
+            "--env=SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock",
+        ]
+
+        for opt in macos_container_options:
+            if sys.platform == "darwin" and 
kwargs["process_isolation_executable"] == "docker":
+                assert opt in container_options
+            else:
+                assert opt not in container_options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/tests/integration/version_migration/test_v1_v2_settings.py
 
new/ansible-navigator-26.1.1/tests/integration/version_migration/test_v1_v2_settings.py
--- 
old/ansible-navigator-25.12.0/tests/integration/version_migration/test_v1_v2_settings.py
    2025-12-02 17:56:18.000000000 +0100
+++ 
new/ansible-navigator-26.1.1/tests/integration/version_migration/test_v1_v2_settings.py
     2026-01-08 20:24:48.000000000 +0100
@@ -68,7 +68,7 @@
     if os.environ.get("ANSIBLE_NAVIGATOR_UPDATE_TEST_FIXTURES") == "true":
         shutil.copy(destination, corrected)
 
-    assert any("ansible-navigator 25." in line for line in result), (
+    assert any("ansible-navigator 26." in line for line in result), (
         "(Note: requires recent tags, `git fetch --all`)"
     )
     assert filecmp.cmp(destination, corrected)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/tests/unit/actions/collections/test_notify_failed.py
 
new/ansible-navigator-26.1.1/tests/unit/actions/collections/test_notify_failed.py
--- 
old/ansible-navigator-25.12.0/tests/unit/actions/collections/test_notify_failed.py
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/ansible-navigator-26.1.1/tests/unit/actions/collections/test_notify_failed.py
   2026-01-08 20:24:48.000000000 +0100
@@ -0,0 +1,47 @@
+"""Test the notify_failed method in collections action."""
+
+from unittest.mock import MagicMock  # pylint: disable=preferred-module
+from unittest.mock import patch  # pylint: disable=preferred-module
+
+from ansible_navigator.actions.collections import Action
+
+
+def test_notify_failed_in_stdout_mode() -> None:
+    """Test that notify_failed doesn't crash in stdout mode when _interaction 
is not set.
+
+    This tests the fix for the AttributeError that occurred when trying to 
access
+    _interaction.ui.show_form() in stdout mode.
+    """
+    # Create minimal args mock with mode set to stdout
+    args = MagicMock()
+    args.mode = "stdout"
+    action = Action(args=args)
+
+    # Ensure _interaction is not set (not in stdout mode)
+    assert not hasattr(action, "_interaction")
+
+    # Expected AttributesError
+    with patch.object(action._logger, "error") as mock_logger:
+        action.notify_failed()
+
+        assert mock_logger.call_count > 0
+        logged_messages = [call[0][0] for call in mock_logger.call_args_list]
+        assert any("Something went really wrong" in msg for msg in 
logged_messages)
+        assert any("log file" in msg for msg in logged_messages)
+
+
+def test_notify_failed_in_interactive_mode() -> None:
+    """Test that notify_failed works correctly in interactive mode with 
_interaction set."""
+    args = MagicMock()
+    args.mode = "interactive"
+    action = Action(args=args)
+
+    mock_interaction = MagicMock()
+    mock_ui = MagicMock()
+    mock_interaction.ui = mock_ui
+    action._interaction = mock_interaction
+
+    action.notify_failed()
+
+    # Verify that show_form was called
+    mock_ui.show_form.assert_called_once()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/tests/unit/runner/test_base.py 
new/ansible-navigator-26.1.1/tests/unit/runner/test_base.py
--- old/ansible-navigator-25.12.0/tests/unit/runner/test_base.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/ansible-navigator-26.1.1/tests/unit/runner/test_base.py 2026-01-08 
20:24:48.000000000 +0100
@@ -0,0 +1,69 @@
+"""Unit tests for the Base runner class."""
+
+import sys
+
+import pytest
+
+from ansible_navigator.runner.base import Base
+
+
+macos_docker_ssh_opts = [
+    
"--volume=/run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock:ro",
+    "--env=SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock",
+]
+
+
[email protected](
+    ("platform", "container_engine"),
+    (
+        ("darwin", "docker"),
+        ("darwin", "podman"),
+        ("linux", "docker"),
+        ("linux", "podman"),
+    ),
+)
+def test_ssh_agent_options_mac_docker(
+    monkeypatch: pytest.MonkeyPatch, platform: str, container_engine: str
+) -> None:
+    """Test that SSH agent options are correctly set for different platforms 
and container engines.
+
+    Args:
+        monkeypatch: The monkeypatch fixture
+        platform: The platform string
+        container_engine: The container engine to use
+    """
+    monkeypatch.setattr(sys, "platform", platform)
+
+    base = Base(
+        container_engine=container_engine,
+        execution_environment=True,
+    )
+
+    opts = base._runner_args.get("container_options") or []
+
+    for expected_opt in macos_docker_ssh_opts:
+        if platform == "darwin" and container_engine == "docker":
+            assert expected_opt in opts
+        else:
+            assert expected_opt not in opts
+
+
+def test_ssh_agent_options_order(monkeypatch: pytest.MonkeyPatch) -> None:
+    """Test that custom container options are appended after SSH agent options 
on macOS with Docker.
+
+    Args:
+        monkeypatch: The monkeypatch fixture
+    """
+    monkeypatch.setattr(sys, "platform", "darwin")
+
+    base = Base(
+        container_engine="docker",
+        execution_environment=True,
+        container_options=["--test"],
+    )
+
+    opts = base._runner_args.get("container_options") or []
+
+    assert "--test" in opts
+    # Assert that SSH agent fix options are set first to allow overriding them.
+    assert opts[2] == "--test"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/tests/unit/test_catalog_collections.py 
new/ansible-navigator-26.1.1/tests/unit/test_catalog_collections.py
--- old/ansible-navigator-25.12.0/tests/unit/test_catalog_collections.py        
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/tests/unit/test_catalog_collections.py 
2026-01-08 20:24:48.000000000 +0100
@@ -4,7 +4,11 @@
 
 from pathlib import Path
 from typing import Any
+from unittest.mock import MagicMock  # pylint: disable=preferred-module
+from unittest.mock import patch  # pylint: disable=preferred-module
 
+from ansible_navigator.data.catalog_collections import 
retrieve_collections_paths
+from ansible_navigator.data.catalog_collections import run_command
 from ansible_navigator.data.catalog_collections import worker
 
 
@@ -56,3 +60,85 @@
     plugin_path, data = completed_queue.get()
     assert plugin_path == "error"
     assert "FileNotFoundError (get_docstring)" in data[2]
+
+
+@patch("ansible_navigator.data.catalog_collections.subprocess.run")
+def test_run_command_without_shell(mock_subprocess: MagicMock) -> None:
+    """Test that run_command executes without shell=True.
+
+    Args:
+        mock_subprocess: Mock subprocess.run
+    """
+    # Mock successful command execution
+    mock_process = MagicMock()
+    mock_process.stdout = "test output"
+    mock_subprocess.return_value = mock_process
+
+    cmd = ["ansible-config", "dump"]
+    result = run_command(cmd)
+
+    # Verify subprocess.run was called with shell=False
+    mock_subprocess.assert_called_once()
+    call_args = mock_subprocess.call_args
+    assert call_args[0][0] == cmd
+    assert call_args[1]["shell"] is False
+    assert result == {"stdout": "test output"}
+
+
+@patch("ansible_navigator.data.catalog_collections.subprocess.run")
+def test_run_command_handles_permission_error(mock_subprocess: MagicMock) -> 
None:
+    """Test that run_command handles PermissionError gracefully.
+
+    Args:
+        mock_subprocess: Mock subprocess.run
+    """
+    mock_subprocess.side_effect = PermissionError(1, "Operation not 
permitted", "/bin/sh")
+
+    cmd = ["ansible-config", "dump"]
+    result = run_command(cmd)
+
+    assert "error" in result
+    assert "PermissionError" in result["error"]
+
+
+@patch("ansible_navigator.data.catalog_collections.run_command")
+def test_retrieve_collections_paths_without_pipe(mock_run_command: MagicMock) 
-> None:
+    """Test that retrieve_collections_paths doesn't use shell pipes.
+
+    Args:
+        mock_run_command: Mock run_command function
+    """
+    config_output = """ANSIBLE_COW_ACCEPTLIST(default) = ['bud-frogs', 'bunny']
+COLLECTIONS_PATHS(default) = ['/home/user/.ansible/collections', 
'/usr/share/ansible/collections']
+DEFAULT_FORKS(default) = 5"""
+
+    mock_run_command.return_value = {"stdout": config_output}
+
+    result = retrieve_collections_paths()
+
+    mock_run_command.assert_called_once_with(["ansible-config", "dump"])
+
+    assert "result" in result
+    assert isinstance(result["result"], list)
+    assert "/home/user/.ansible/collections" in result["result"]
+    assert "/usr/share/ansible/collections" in result["result"]
+
+
+@patch("ansible_navigator.data.catalog_collections.run_command")
+def test_retrieve_collections_paths_not_found(mock_run_command: MagicMock) -> 
None:
+    """Test retrieve_collections_paths when COLLECTIONS_PATHS is not in output.
+
+    Args:
+        mock_run_command: Mock run_command function
+    """
+    # Mock ansible-config dump output without COLLECTIONS_PATHS
+    config_output = """ANSIBLE_COW_ACCEPTLIST(default) = ['bud-frogs', 'bunny']
+DEFAULT_FORKS(default) = 5"""
+
+    mock_run_command.return_value = {"stdout": config_output}
+
+    result = retrieve_collections_paths()
+
+    # Verify an error is returned
+    assert "error" in result
+    assert "COLLECTIONS_PATHS not found" in result["error"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible-navigator-25.12.0/tests/unit/test_image_introspection.py 
new/ansible-navigator-26.1.1/tests/unit/test_image_introspection.py
--- old/ansible-navigator-25.12.0/tests/unit/test_image_introspection.py        
2025-12-02 17:56:18.000000000 +0100
+++ new/ansible-navigator-26.1.1/tests/unit/test_image_introspection.py 
2026-01-08 20:24:48.000000000 +0100
@@ -51,6 +51,51 @@
 which contains NET-SNMP utilities.
 """
 
+PIP_FREEZE_OUTPUT = """ansible-core==2.19.4
+ansible-runner==2.4.2
+attrs==25.4.0
+bcrypt==5.0.0
+cffi==2.0.0
+cryptography==46.0.3
+Jinja2==3.1.6
+jsonschema==4.25.1
+MarkupSafe==3.0.2
+"""
+
+PIP_SHOW_OUTPUT = """Name: ansible-core
+Version: 2.19.4
+Summary: Radically simple IT automation
+Home-page: https://ansible.com/
+Author: Ansible, Inc.
+Author-email: [email protected]
+License: GPLv3+
+Location: /opt/app-root/lib/python3.11/site-packages
+Requires: cryptography, jinja2, packaging, PyYAML, resolvelib
+Required-by: ansible-runner
+---
+Name: Jinja2
+Version: 3.1.6
+Summary: A very fast and expressive template engine.
+Home-page: https://palletsprojects.com/p/jinja/
+Author:
+Author-email:
+License: BSD-3-Clause
+Location: /opt/app-root/lib/python3.11/site-packages
+Requires: MarkupSafe
+Required-by: ansible-core
+---
+Name: cryptography
+Version: 46.0.3
+Summary: cryptography is a package which provides cryptographic recipes and 
primitives
+Home-page: https://github.com/pyca/cryptography
+Author:
+Author-email: The Python Cryptographic Authority <[email protected]>
+License:
+Location: /opt/app-root/lib64/python3.11/site-packages
+Requires: cffi
+Required-by: ansible-core, paramiko
+"""
+
 
 @pytest.fixture(scope="module", name="imported_ii")
 def image_introspection() -> types.ModuleType:
@@ -108,3 +153,67 @@
         assert entry["description"].endswith("utilities.")
         assert "summary: summary_string" in entry["description"]
         assert "version: version_string" in entry["description"]
+
+
+def test_python_packages_parse_freeze(imported_ii: Any) -> None:
+    """Test parsing pip freeze output.
+
+    Args:
+        imported_ii: Image introspection
+    """
+    command = imported_ii.Command(id="test", parse=lambda x: x, 
stdout=PIP_FREEZE_OUTPUT)
+    imported_ii.PythonPackages().parse_freeze(command)
+
+    assert isinstance(command.details, list)
+    assert len(command.details) == 1
+    packages = command.details[0]
+
+    # Verify some package names and versions were parsed correctly
+    assert packages["ansible-core"] == "2.19.4"
+    assert packages["jinja2"] == "3.1.6"
+    assert packages["cryptography"] == "46.0.3"
+    assert packages["ansible-runner"] == "2.4.2"
+    assert len(packages) == 9
+
+
+def test_python_packages_parse_show(imported_ii: Any) -> None:
+    """Test parsing pip show output.
+
+    Args:
+        imported_ii: Image introspection
+    """
+    command = imported_ii.Command(id="test", parse=lambda x: x, 
stdout=PIP_SHOW_OUTPUT)
+    imported_ii.PythonPackages().parse(command)
+
+    assert isinstance(command.details, list)
+    assert len(command.details) == 3
+
+    # Check ansible-core details
+    ansible_core = command.details[0]
+    assert ansible_core["name"] == "ansible-core"
+    assert ansible_core["version"] == "2.19.4"
+    assert ansible_core["summary"] == "Radically simple IT automation"
+    assert ansible_core["location"] == 
"/opt/app-root/lib/python3.11/site-packages"
+    assert "cryptography" in ansible_core["requires"]
+    assert "jinja2" in ansible_core["requires"]
+    assert ansible_core["required-by"] == ["ansible-runner"]
+
+    # Check Jinja2 details
+    jinja2 = command.details[1]
+    assert jinja2["name"] == "Jinja2"
+    assert jinja2["version"] == "3.1.6"
+    assert jinja2["requires"] == ["MarkupSafe"]
+    assert jinja2["required-by"] == ["ansible-core"]
+
+    # Check cryptography details
+    crypto = command.details[2]
+    assert crypto["name"] == "cryptography"
+    assert crypto["version"] == "46.0.3"
+    expected_summary = (
+        "cryptography is a package which provides cryptographic recipes and 
primitives"
+    )
+    assert crypto["summary"] == expected_summary
+    assert crypto["location"] == "/opt/app-root/lib64/python3.11/site-packages"
+    assert crypto["requires"] == ["cffi"]
+    assert "ansible-core" in crypto["required-by"]
+    assert "paramiko" in crypto["required-by"]

++++++ ansible-navigator.obsinfo ++++++
--- /var/tmp/diff_new_pack.tWTtmg/_old  2026-01-13 21:33:16.144785946 +0100
+++ /var/tmp/diff_new_pack.tWTtmg/_new  2026-01-13 21:33:16.148786112 +0100
@@ -1,5 +1,5 @@
 name: ansible-navigator
-version: 25.12.0
-mtime: 1764694578
-commit: 2a49e00ce1008ebf6df4e68c9910187b6d97639c
+version: 26.1.1
+mtime: 1767900288
+commit: 8eda9ce382df653570693a781930c61a5e3b7c19
 

Reply via email to