Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ctlptl for openSUSE:Factory checked 
in at 2026-09-21 12:08:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ctlptl (Old)
 and      /work/SRC/openSUSE:Factory/.ctlptl.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ctlptl"

Mon Sep 21 12:08:10 2026 rev:11 rq:1379174 version:0.9.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/ctlptl/ctlptl.changes    2026-08-28 
19:57:57.550159910 +0200
+++ /work/SRC/openSUSE:Factory/.ctlptl.new.383539/ctlptl.changes        
2026-09-21 12:08:14.947749993 +0200
@@ -1,0 +2,12 @@
+Sun Sep 20 05:58:14 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 0.9.6:
+  * test: add idempotence tests to the e2e tests (#427)
+  * build(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2
+    (#426)
+  * registry: only compare the env vars the spec asks for (#425)
+  * build(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.1
+    (#423)
+  * vendor: update k8s deps to 1.37 (#422)
+
+-------------------------------------------------------------------

Old:
----
  ctlptl-0.9.5.obscpio

New:
----
  ctlptl-0.9.6.obscpio

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

Other differences:
------------------
++++++ ctlptl.spec ++++++
--- /var/tmp/diff_new_pack.uRpyUQ/_old  2026-09-21 12:08:15.906790199 +0200
+++ /var/tmp/diff_new_pack.uRpyUQ/_new  2026-09-21 12:08:15.908790283 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           ctlptl
-Version:        0.9.5
+Version:        0.9.6
 Release:        0
 Summary:        CLI for declaratively setting up local Kubernetes clusters
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.uRpyUQ/_old  2026-09-21 12:08:15.956792295 +0200
+++ /var/tmp/diff_new_pack.uRpyUQ/_new  2026-09-21 12:08:15.959792421 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/tilt-dev/ctlptl.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">refs/tags/v0.9.5</param>
+    <param name="revision">refs/tags/v0.9.6</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.uRpyUQ/_old  2026-09-21 12:08:15.988793637 +0200
+++ /var/tmp/diff_new_pack.uRpyUQ/_new  2026-09-21 12:08:15.992793805 +0200
@@ -3,6 +3,6 @@
                 <param name="url">https://github.com/tilt-dev/ctlptl</param>
               <param 
name="changesrevision">0d3cbef55f1ed799bddd16e57812489389c3435a</param></service><service
 name="tar_scm">
                 <param 
name="url">https://github.com/tilt-dev/ctlptl.git</param>
-              <param 
name="changesrevision">4ba44267eddea02f4891849c0d3d6fbf4c2b5c11</param></service></servicedata>
+              <param 
name="changesrevision">c66824e03748eb1b1359dd2b1b357f4402587cbe</param></service></servicedata>
 (No newline at EOF)
 

++++++ ctlptl-0.9.5.obscpio -> ctlptl-0.9.6.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/.circleci/config.yml 
new/ctlptl-0.9.6/.circleci/config.yml
--- old/ctlptl-0.9.5/.circleci/config.yml       2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/.circleci/config.yml       2026-09-10 04:47:48.000000000 
+0200
@@ -60,6 +60,15 @@
       - image: golang:1.26-bookworm
     steps:
       - checkout
+      - run:
+          name: Skip unless release config changed
+          command: |
+            git fetch origin main
+            if git diff --quiet origin/main...HEAD -- .goreleaser.yml 
hack/release.sh; then
+              echo "no release config changes; skipping dry run"
+              circleci-agent step halt
+              exit 0
+            fi
       - setup_remote_docker
       # https://discuss.circleci.com/t/arm-version-of-remote-docker/41624
       - run: ssh remote-docker "sudo apt-get update; sudo apt-get install -y 
qemu-user-static binfmt-support"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/INSTALL.md new/ctlptl-0.9.6/INSTALL.md
--- old/ctlptl-0.9.5/INSTALL.md 2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/INSTALL.md 2026-09-10 04:47:48.000000000 +0200
@@ -40,21 +40,21 @@
 On macOS:
 
 ```bash
-CTLPTL_VERSION="0.9.4"
+CTLPTL_VERSION="0.9.5"
 curl -fsSL 
https://github.com/tilt-dev/ctlptl/releases/download/v$CTLPTL_VERSION/ctlptl.$CTLPTL_VERSION.mac.x86_64.tar.gz
 | sudo tar -xzv -C /usr/local/bin ctlptl
 ```
 
 On Linux:
 
 ```bash
-CTLPTL_VERSION="0.9.4"
+CTLPTL_VERSION="0.9.5"
 curl -fsSL 
https://github.com/tilt-dev/ctlptl/releases/download/v$CTLPTL_VERSION/ctlptl.$CTLPTL_VERSION.linux.x86_64.tar.gz
 | sudo tar -xzv -C /usr/local/bin ctlptl
 ```
 
 On Windows:
 
 ```powershell
-$CTLPTL_VERSION = "0.9.4"
+$CTLPTL_VERSION = "0.9.5"
 Invoke-WebRequest 
"https://github.com/tilt-dev/ctlptl/releases/download/v$CTLPTL_VERSION/ctlptl.$CTLPTL_VERSION.windows.x86_64.zip";
 -OutFile "ctlptl.zip"
 Expand-Archive "ctlptl.zip" -DestinationPath "ctlptl"
 Move-Item -Force -Path "ctlptl\ctlptl.exe" -Destination "$home\bin\ctlptl.exe"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl.md 
new/ctlptl-0.9.6/docs/ctlptl.md
--- old/ctlptl-0.9.5/docs/ctlptl.md     2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl.md     2026-09-10 04:47:48.000000000 +0200
@@ -27,4 +27,4 @@
 * [ctlptl socat](ctlptl_socat.md)       - Use socat to connect components. 
Experimental.
 * [ctlptl version](ctlptl_version.md)   - Current ctlptl version
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_analytics.md 
new/ctlptl-0.9.6/docs/ctlptl_analytics.md
--- old/ctlptl-0.9.5/docs/ctlptl_analytics.md   2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/docs/ctlptl_analytics.md   2026-09-10 04:47:48.000000000 
+0200
@@ -17,4 +17,4 @@
 * [ctlptl](ctlptl.md)   - Mess around with local Kubernetes clusters without 
consequences
 * [ctlptl analytics opt](ctlptl_analytics_opt.md)       - opt-in or -out to 
tilt-dev analytics collection/upload
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_analytics_opt.md 
new/ctlptl-0.9.6/docs/ctlptl_analytics_opt.md
--- old/ctlptl-0.9.5/docs/ctlptl_analytics_opt.md       2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_analytics_opt.md       2026-09-10 
04:47:48.000000000 +0200
@@ -16,4 +16,4 @@
 
 * [ctlptl analytics](ctlptl_analytics.md)       - info and status about 
tilt-dev analytics
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_apply.md 
new/ctlptl-0.9.6/docs/ctlptl_apply.md
--- old/ctlptl-0.9.5/docs/ctlptl_apply.md       2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/docs/ctlptl_apply.md       2026-09-10 04:47:48.000000000 
+0200
@@ -28,4 +28,4 @@
 
 * [ctlptl](ctlptl.md)   - Mess around with local Kubernetes clusters without 
consequences
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_completion.md 
new/ctlptl-0.9.6/docs/ctlptl_completion.md
--- old/ctlptl-0.9.5/docs/ctlptl_completion.md  2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/docs/ctlptl_completion.md  2026-09-10 04:47:48.000000000 
+0200
@@ -22,4 +22,4 @@
 * [ctlptl completion powershell](ctlptl_completion_powershell.md)       - 
Generate the autocompletion script for powershell
 * [ctlptl completion zsh](ctlptl_completion_zsh.md)     - Generate the 
autocompletion script for zsh
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_completion_bash.md 
new/ctlptl-0.9.6/docs/ctlptl_completion_bash.md
--- old/ctlptl-0.9.5/docs/ctlptl_completion_bash.md     2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_completion_bash.md     2026-09-10 
04:47:48.000000000 +0200
@@ -41,4 +41,4 @@
 
 * [ctlptl completion](ctlptl_completion.md)     - Generate the autocompletion 
script for the specified shell
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_completion_fish.md 
new/ctlptl-0.9.6/docs/ctlptl_completion_fish.md
--- old/ctlptl-0.9.5/docs/ctlptl_completion_fish.md     2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_completion_fish.md     2026-09-10 
04:47:48.000000000 +0200
@@ -32,4 +32,4 @@
 
 * [ctlptl completion](ctlptl_completion.md)     - Generate the autocompletion 
script for the specified shell
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_completion_powershell.md 
new/ctlptl-0.9.6/docs/ctlptl_completion_powershell.md
--- old/ctlptl-0.9.5/docs/ctlptl_completion_powershell.md       2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_completion_powershell.md       2026-09-10 
04:47:48.000000000 +0200
@@ -29,4 +29,4 @@
 
 * [ctlptl completion](ctlptl_completion.md)     - Generate the autocompletion 
script for the specified shell
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_completion_zsh.md 
new/ctlptl-0.9.6/docs/ctlptl_completion_zsh.md
--- old/ctlptl-0.9.5/docs/ctlptl_completion_zsh.md      2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_completion_zsh.md      2026-09-10 
04:47:48.000000000 +0200
@@ -43,4 +43,4 @@
 
 * [ctlptl completion](ctlptl_completion.md)     - Generate the autocompletion 
script for the specified shell
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_create.md 
new/ctlptl-0.9.6/docs/ctlptl_create.md
--- old/ctlptl-0.9.5/docs/ctlptl_create.md      2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/docs/ctlptl_create.md      2026-09-10 04:47:48.000000000 
+0200
@@ -25,4 +25,4 @@
 * [ctlptl create cluster](ctlptl_create_cluster.md)     - Create a cluster 
with the given local Kubernetes product
 * [ctlptl create registry](ctlptl_create_registry.md)   - Create a registry 
with the given name
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_create_cluster.md 
new/ctlptl-0.9.6/docs/ctlptl_create_cluster.md
--- old/ctlptl-0.9.5/docs/ctlptl_create_cluster.md      2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_create_cluster.md      2026-09-10 
04:47:48.000000000 +0200
@@ -34,4 +34,4 @@
 
 * [ctlptl create](ctlptl_create.md)     - Create a cluster or registry
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_create_registry.md 
new/ctlptl-0.9.6/docs/ctlptl_create_registry.md
--- old/ctlptl-0.9.5/docs/ctlptl_create_registry.md     2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_create_registry.md     2026-09-10 
04:47:48.000000000 +0200
@@ -31,4 +31,4 @@
 
 * [ctlptl create](ctlptl_create.md)     - Create a cluster or registry
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_delete.md 
new/ctlptl-0.9.6/docs/ctlptl_delete.md
--- old/ctlptl-0.9.5/docs/ctlptl_delete.md      2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/docs/ctlptl_delete.md      2026-09-10 04:47:48.000000000 
+0200
@@ -26,4 +26,4 @@
 
 * [ctlptl](ctlptl.md)   - Mess around with local Kubernetes clusters without 
consequences
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_docker-desktop.md 
new/ctlptl-0.9.6/docs/ctlptl_docker-desktop.md
--- old/ctlptl-0.9.5/docs/ctlptl_docker-desktop.md      2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_docker-desktop.md      2026-09-10 
04:47:48.000000000 +0200
@@ -24,4 +24,4 @@
 * [ctlptl docker-desktop set](ctlptl_docker-desktop_set.md)     - Set the 
docker-desktop settings
 * [ctlptl docker-desktop settings](ctlptl_docker-desktop_settings.md)   - 
Print the docker-desktop settings
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_open.md 
new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_open.md
--- old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_open.md 2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_open.md 2026-09-10 
04:47:48.000000000 +0200
@@ -16,4 +16,4 @@
 
 * [ctlptl docker-desktop](ctlptl_docker-desktop.md)     - Debugging tool for 
the Docker Desktop client
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_quit.md 
new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_quit.md
--- old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_quit.md 2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_quit.md 2026-09-10 
04:47:48.000000000 +0200
@@ -16,4 +16,4 @@
 
 * [ctlptl docker-desktop](ctlptl_docker-desktop.md)     - Debugging tool for 
the Docker Desktop client
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_reset-cluster.md 
new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_reset-cluster.md
--- old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_reset-cluster.md        
2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_reset-cluster.md        
2026-09-10 04:47:48.000000000 +0200
@@ -16,4 +16,4 @@
 
 * [ctlptl docker-desktop](ctlptl_docker-desktop.md)     - Debugging tool for 
the Docker Desktop client
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_set.md 
new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_set.md
--- old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_set.md  2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_set.md  2026-09-10 
04:47:48.000000000 +0200
@@ -34,4 +34,4 @@
 
 * [ctlptl docker-desktop](ctlptl_docker-desktop.md)     - Debugging tool for 
the Docker Desktop client
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_settings.md 
new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_settings.md
--- old/ctlptl-0.9.5/docs/ctlptl_docker-desktop_settings.md     2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_docker-desktop_settings.md     2026-09-10 
04:47:48.000000000 +0200
@@ -16,4 +16,4 @@
 
 * [ctlptl docker-desktop](ctlptl_docker-desktop.md)     - Debugging tool for 
the Docker Desktop client
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_get.md 
new/ctlptl-0.9.6/docs/ctlptl_get.md
--- old/ctlptl-0.9.5/docs/ctlptl_get.md 2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_get.md 2026-09-10 04:47:48.000000000 +0200
@@ -41,4 +41,4 @@
 
 * [ctlptl](ctlptl.md)   - Mess around with local Kubernetes clusters without 
consequences
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_socat.md 
new/ctlptl-0.9.6/docs/ctlptl_socat.md
--- old/ctlptl-0.9.5/docs/ctlptl_socat.md       2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/docs/ctlptl_socat.md       2026-09-10 04:47:48.000000000 
+0200
@@ -13,4 +13,4 @@
 * [ctlptl](ctlptl.md)   - Mess around with local Kubernetes clusters without 
consequences
 * [ctlptl socat connect-remote-docker](ctlptl_socat_connect-remote-docker.md)  
 - Connects a local port to a remote port on a machine running Docker
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ctlptl-0.9.5/docs/ctlptl_socat_connect-remote-docker.md 
new/ctlptl-0.9.6/docs/ctlptl_socat_connect-remote-docker.md
--- old/ctlptl-0.9.5/docs/ctlptl_socat_connect-remote-docker.md 2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/docs/ctlptl_socat_connect-remote-docker.md 2026-09-10 
04:47:48.000000000 +0200
@@ -23,4 +23,4 @@
 
 * [ctlptl socat](ctlptl_socat.md)       - Use socat to connect components. 
Experimental.
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/docs/ctlptl_version.md 
new/ctlptl-0.9.6/docs/ctlptl_version.md
--- old/ctlptl-0.9.5/docs/ctlptl_version.md     2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/docs/ctlptl_version.md     2026-09-10 04:47:48.000000000 
+0200
@@ -16,4 +16,4 @@
 
 * [ctlptl](ctlptl.md)   - Mess around with local Kubernetes clusters without 
consequences
 
-###### Auto generated by spf13/cobra on 4-Jun-2026
+###### Auto generated by spf13/cobra on 27-Aug-2026
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/go.mod new/ctlptl-0.9.6/go.mod
--- old/ctlptl-0.9.5/go.mod     2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/go.mod     2026-09-10 04:47:48.000000000 +0200
@@ -15,18 +15,18 @@
        github.com/pkg/errors v0.9.1
        github.com/shirou/gopsutil/v3 v3.24.5
        github.com/spf13/cobra v1.10.2
-       github.com/spf13/pflag v1.0.9
+       github.com/spf13/pflag v1.0.10
        github.com/stretchr/testify v1.11.1
        github.com/tilt-dev/clusterid v0.1.6
        github.com/tilt-dev/localregistry-go v0.0.0-20201021185044-ffc4c827f097
        github.com/tilt-dev/wmclient v0.0.0-20201109174454-1839d0355fbc
-       golang.org/x/sync v0.20.0
+       golang.org/x/sync v0.22.0
        gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce
        gopkg.in/yaml.v3 v3.0.1
-       k8s.io/api v0.36.0
-       k8s.io/apimachinery v0.36.0
-       k8s.io/cli-runtime v0.36.0
-       k8s.io/client-go v0.36.0
+       k8s.io/api v0.37.0
+       k8s.io/apimachinery v0.37.0
+       k8s.io/cli-runtime v0.37.0
+       k8s.io/client-go v0.37.0
        k8s.io/klog/v2 v2.140.0
        sigs.k8s.io/kind v0.33.0
 )
@@ -49,25 +49,34 @@
        github.com/emicklei/go-restful/v3 v3.13.0 // indirect
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/fvbommel/sortorder v1.1.0 // indirect
-       github.com/fxamacker/cbor/v2 v2.9.0 // indirect
+       github.com/fxamacker/cbor/v2 v2.9.1 // indirect
        github.com/go-errors/errors v1.5.1 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/go-logr/stdr v1.2.2 // indirect
        github.com/go-ole/go-ole v1.3.0 // indirect
-       github.com/go-openapi/jsonpointer v0.21.1 // indirect
-       github.com/go-openapi/jsonreference v0.21.0 // indirect
-       github.com/go-openapi/swag v0.23.1 // indirect
+       github.com/go-openapi/jsonpointer v1.0.0 // indirect
+       github.com/go-openapi/jsonreference v1.0.0 // indirect
+       github.com/go-openapi/swag v0.27.1 // indirect
+       github.com/go-openapi/swag/cmdutils v0.27.1 // indirect
+       github.com/go-openapi/swag/conv v0.27.1 // indirect
+       github.com/go-openapi/swag/fileutils v0.27.1 // indirect
+       github.com/go-openapi/swag/jsonutils v0.27.1 // indirect
+       github.com/go-openapi/swag/loading v0.27.1 // indirect
+       github.com/go-openapi/swag/mangling v0.27.1 // indirect
+       github.com/go-openapi/swag/netutils v0.27.1 // indirect
+       github.com/go-openapi/swag/pools v0.27.1 // indirect
+       github.com/go-openapi/swag/stringutils v0.27.1 // indirect
+       github.com/go-openapi/swag/typeutils v0.27.1 // indirect
+       github.com/go-openapi/swag/yamlutils v0.27.1 // indirect
        github.com/google/btree v1.1.3 // indirect
        github.com/google/gnostic-models v0.7.0 // indirect
        github.com/google/uuid v1.6.0 // indirect
        github.com/gorilla/mux v1.8.1 // indirect
        github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
        github.com/inconshreveable/mousetrap v1.1.0 // indirect
-       github.com/josharian/intern v1.0.0 // indirect
        github.com/json-iterator/go v1.1.12 // indirect
        github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // 
indirect
        github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // 
indirect
-       github.com/mailru/easyjson v0.9.0 // indirect
        github.com/mattn/go-runewidth v0.0.16 // indirect
        github.com/moby/docker-image-spec v1.3.1 // indirect
        github.com/moby/sys/atomicwriter v0.1.0 // indirect
@@ -97,37 +106,37 @@
        github.com/xlab/treeprint v1.2.0 // indirect
        github.com/yusufpapurcu/wmi v1.2.4 // indirect
        go.opentelemetry.io/auto/sdk v1.2.1 // indirect
-       go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 
// indirect
-       go.opentelemetry.io/otel v1.43.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 
// indirect
+       go.opentelemetry.io/otel v1.44.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc 
v1.35.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 
// indirect
-       go.opentelemetry.io/otel/metric v1.43.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.43.0 // indirect
-       go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect
-       go.opentelemetry.io/otel/trace v1.43.0 // indirect
+       go.opentelemetry.io/otel/metric v1.44.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.44.0 // indirect
+       go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect
+       go.opentelemetry.io/otel/trace v1.44.0 // indirect
        go.opentelemetry.io/proto/otlp v1.6.0 // indirect
-       go.yaml.in/yaml/v2 v2.4.3 // indirect
+       go.yaml.in/yaml/v2 v2.4.4 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.55.0 // indirect
+       golang.org/x/net v0.58.0 // indirect
        golang.org/x/oauth2 v0.36.0 // indirect
-       golang.org/x/sys v0.45.0 // indirect
-       golang.org/x/term v0.43.0 // indirect
-       golang.org/x/text v0.37.0 // indirect
-       golang.org/x/time v0.14.0 // indirect
-       google.golang.org/genproto/googleapis/api 
v0.0.0-20260414002931-afd174a4e478 // indirect
-       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260414002931-afd174a4e478 // indirect
-       google.golang.org/grpc v1.82.1 // indirect
+       golang.org/x/sys v0.47.0 // indirect
+       golang.org/x/term v0.45.0 // indirect
+       golang.org/x/text v0.41.0 // indirect
+       golang.org/x/time v0.15.0 // indirect
+       google.golang.org/genproto/googleapis/api 
v0.0.0-20260526163538-3dc84a4a5aaa // indirect
+       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260526163538-3dc84a4a5aaa // indirect
+       google.golang.org/grpc v1.83.2 // indirect
        google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // 
indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v2 v2.4.0 // indirect
-       k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a // indirect
-       k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 // indirect
+       k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad // indirect
+       k8s.io/utils v0.0.0-20260626114624-be93311217bd // indirect
        sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
        sigs.k8s.io/kustomize/api v0.21.1 // indirect
        sigs.k8s.io/kustomize/kyaml v0.21.1 // indirect
        sigs.k8s.io/randfill v1.0.0 // indirect
-       sigs.k8s.io/structured-merge-diff/v6 v6.3.2 // indirect
+       sigs.k8s.io/structured-merge-diff/v6 v6.4.2 // indirect
        sigs.k8s.io/yaml v1.6.0 // indirect
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/go.sum new/ctlptl-0.9.6/go.sum
--- old/ctlptl-0.9.5/go.sum     2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/go.sum     2026-09-10 04:47:48.000000000 +0200
@@ -88,8 +88,8 @@
 github.com/fsnotify/fsnotify v1.4.7/go.mod 
h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fvbommel/sortorder v1.1.0 
h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQmYw=
 github.com/fvbommel/sortorder v1.1.0/go.mod 
h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
-github.com/fxamacker/cbor/v2 v2.9.0 
h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
-github.com/fxamacker/cbor/v2 v2.9.0/go.mod 
h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
+github.com/fxamacker/cbor/v2 v2.9.1 
h1:2rWm8B193Ll4VdjsJY28jxs70IdDsHRWgQYAI80+rMQ=
+github.com/fxamacker/cbor/v2 v2.9.1/go.mod 
h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod 
h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0/go.mod 
h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-errors/errors v1.5.1 
h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
@@ -109,20 +109,48 @@
 github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod 
h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
 github.com/go-openapi/jsonpointer v0.19.2/go.mod 
h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
 github.com/go-openapi/jsonpointer v0.19.3/go.mod 
h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonpointer v0.21.1 
h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic=
-github.com/go-openapi/jsonpointer v0.21.1/go.mod 
h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk=
+github.com/go-openapi/jsonpointer v1.0.0 
h1:kR9tHqY0CtZaOPVFm622dPVNhrvYpwr4uCxgL3h1H8s=
+github.com/go-openapi/jsonpointer v1.0.0/go.mod 
h1:Z3rw7dWu1p9IgitXCFamSlA5lmDiklEB6vkaxcNZW5Y=
 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod 
h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
 github.com/go-openapi/jsonreference v0.19.2/go.mod 
h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
 github.com/go-openapi/jsonreference v0.19.3/go.mod 
h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/jsonreference v0.21.0 
h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
-github.com/go-openapi/jsonreference v0.21.0/go.mod 
h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
+github.com/go-openapi/jsonreference v1.0.0 
h1:jlmTr6torcd1YgDQvSfNmRtKzYDO4FGBkrAdlAVWnpY=
+github.com/go-openapi/jsonreference v1.0.0/go.mod 
h1:jtwdyGbJk0Xhe5Y+rwtglQP6Sb1WZST4rT32LWB+sv0=
 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod 
h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
 github.com/go-openapi/spec v0.19.3/go.mod 
h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod 
h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 github.com/go-openapi/swag v0.19.2/go.mod 
h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-openapi/swag v0.19.5/go.mod 
h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.23.1 
h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=
-github.com/go-openapi/swag v0.23.1/go.mod 
h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=
+github.com/go-openapi/swag v0.27.1 
h1:VotvOLWW8q/EAxB0YdsBBGC8XYyeL1YwBj2ungAGPNg=
+github.com/go-openapi/swag v0.27.1/go.mod 
h1:GTkJPwHfhJp6MWr4/rCh64HVI3Ofu+tcsbfjfHmTxpE=
+github.com/go-openapi/swag/cmdutils v0.27.1 
h1:I7sYqaWVl5mq0NEmNQkAmFDyNin9ufvMX/p2zwtQaOE=
+github.com/go-openapi/swag/cmdutils v0.27.1/go.mod 
h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM=
+github.com/go-openapi/swag/conv v0.27.1 
h1:8wi9ZG+olmY1wXphl93EWniPtbSPkXM/feH7FgjsvrU=
+github.com/go-openapi/swag/conv v0.27.1/go.mod 
h1:QbqMivkpKhC3g1B1GGGOJ6ANewI3S62dbzYu3Duowqs=
+github.com/go-openapi/swag/fileutils v0.27.1 
h1:QQqBSoi5mW4XpU85nS0mLcA+zAE6vLzrb0QkmLKf9oM=
+github.com/go-openapi/swag/fileutils v0.27.1/go.mod 
h1:VvJFZLTZS0AI854gEQz5tk7dBESdLjiNUMSZ/th2ry8=
+github.com/go-openapi/swag/jsonutils v0.27.1 
h1:SVgK3i4USzCU5mibOOS/l4ea2h9UQXy7J7RNLTjuXjU=
+github.com/go-openapi/swag/jsonutils v0.27.1/go.mod 
h1:tdlEpZqdcQ17uj6J4YdK9vd8It5qWMwjWXOs0tjpRlk=
+github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.1 
h1:mJu3COL9WEaZVp/Kf2PRMi7tPszPEJfSr/OO75ynCs8=
+github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.1/go.mod 
h1:mofwUWx70wvskwESqRJ//k/9kURmCgyJl5m5Ppoh5kY=
+github.com/go-openapi/swag/loading v0.27.1 
h1:/DxUgDXKbBX4bcn7r9uEXfJyzN5XpiJmZplzQTjrRCY=
+github.com/go-openapi/swag/loading v0.27.1/go.mod 
h1:jvGh3iA2+zyUUycB5fgJWzeHnhrpvGnJJM0RVE9ZShE=
+github.com/go-openapi/swag/mangling v0.27.1 
h1:yC9D0HyUE8gbP+BfmGx9+AA89ikwZTMjESK3OnnoaqA=
+github.com/go-openapi/swag/mangling v0.27.1/go.mod 
h1:jtBE2+V+3pILxOR7Vgce+Cwp6A2PgZbvVqfNntbVs0w=
+github.com/go-openapi/swag/netutils v0.27.1 
h1:mICMFoS82F5TZ4Zy3cqmcQk+BFeCp3Uyq3Np7GI0/qU=
+github.com/go-openapi/swag/netutils v0.27.1/go.mod 
h1:J+WYyFMLtvtCGqa6jLv+YNUmIKI3ZRQRrvfNDMoQoEQ=
+github.com/go-openapi/swag/pools v0.27.1 
h1:9LeadcMyb2GJCbXX5hVQDbZ2Lq9TL4dCs/nx1j5DO0E=
+github.com/go-openapi/swag/pools v0.27.1/go.mod 
h1:kVQefhSK5RWuRe7BXsL8htgBPAMpN7HDGpGEknqugeE=
+github.com/go-openapi/swag/stringutils v0.27.1 
h1:ZXePZ0r2p1qSjo8tD3Un4vFj8+FqlCkczxDrJIhYUp8=
+github.com/go-openapi/swag/stringutils v0.27.1/go.mod 
h1:lzRN95CxXmA03XcDWHLOb6nOMcxCqR5rGY0lOgsfRoM=
+github.com/go-openapi/swag/typeutils v0.27.1 
h1:KSTdFlfnse4r6dP9IrEnwMldjE+zs71UeEB3//PtVXc=
+github.com/go-openapi/swag/typeutils v0.27.1/go.mod 
h1:Srm0xFNRZ1Y+vCxJclo5qzx8aj+1pAKda/YfFPrG0dQ=
+github.com/go-openapi/swag/yamlutils v0.27.1 
h1:ftxv6xvXb1E3zohUc+okZ9nSqNb9StQX/FXnKZ98sQA=
+github.com/go-openapi/swag/yamlutils v0.27.1/go.mod 
h1:bnxFIB1qewGRiZHypXGZ3fNgf13/0HfRgnS/iZBDrOo=
+github.com/go-openapi/testify/enable/yaml/v2 v2.6.0 
h1:gGHwAJ0R/5jU8BEGDbfRNR3hL68dAVi84WuOApp29B0=
+github.com/go-openapi/testify/enable/yaml/v2 v2.6.0/go.mod 
h1:tY+St1SGq4NFl0QIqdTY4aEdbChAHxhyB77XQi9iJCo=
+github.com/go-openapi/testify/v2 v2.6.0 
h1:5PKH2HE7YJ/LuRPQGvSxBRlFXNQhSetBLlGAgUEu3ug=
+github.com/go-openapi/testify/v2 v2.6.0/go.mod 
h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw=
 github.com/go-stack/stack v1.8.0/go.mod 
h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/gogo/protobuf v1.1.1/go.mod 
h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod 
h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
@@ -177,8 +205,6 @@
 github.com/inconshreveable/mousetrap v1.1.0 
h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod 
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
 github.com/jonboulle/clockwork v0.1.0/go.mod 
h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
-github.com/josharian/intern v1.0.0 
h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod 
h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/json-iterator/go v1.1.6/go.mod 
h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.7/go.mod 
h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.8/go.mod 
h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -208,8 +234,6 @@
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod 
h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod 
h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.7.0/go.mod 
h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
-github.com/mailru/easyjson v0.9.0 
h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
-github.com/mailru/easyjson v0.9.0/go.mod 
h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
 github.com/mattn/go-runewidth v0.0.16 
h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
 github.com/mattn/go-runewidth v0.0.16/go.mod 
h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod 
h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -328,15 +352,16 @@
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod 
h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod 
h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
 github.com/spf13/pflag v1.0.9/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
+github.com/spf13/pflag v1.0.10/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/viper v1.3.2/go.mod 
h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
 github.com/spf13/viper v1.4.0/go.mod 
h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
 github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod 
h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
-github.com/stretchr/objx v0.5.2/go.mod 
h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
+github.com/stretchr/objx v0.5.3/go.mod 
h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
 github.com/stretchr/testify v1.2.2/go.mod 
h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod 
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod 
h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -369,24 +394,26 @@
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opentelemetry.io/auto/sdk v1.2.1 
h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
 go.opentelemetry.io/auto/sdk v1.2.1/go.mod 
h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 
h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod 
h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
-go.opentelemetry.io/otel v1.43.0 
h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
-go.opentelemetry.io/otel v1.43.0/go.mod 
h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 
h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod 
h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
+go.opentelemetry.io/otel v1.44.0 
h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
+go.opentelemetry.io/otel v1.44.0/go.mod 
h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0 
h1:QcFwRrZLc82r8wODjvyCbP7Ifp3UANaBSmhDSFjnqSc=
 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc 
v1.35.0/go.mod h1:CXIWhUomyWBG/oY2/r/kLp6K/cmx9e/7DLpBuuGdLCA=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 
h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod 
h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 
h1:m639+BofXTvcY1q8CGs4ItwQarYtJPOWmVobfM1HpVI=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0/go.mod 
h1:LjReUci/F4BUyv+y4dwnq3h/26iNOeC3wAIqgvTIZVo=
-go.opentelemetry.io/otel/metric v1.43.0 
h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
-go.opentelemetry.io/otel/metric v1.43.0/go.mod 
h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
-go.opentelemetry.io/otel/sdk v1.43.0 
h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
-go.opentelemetry.io/otel/sdk v1.43.0/go.mod 
h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
-go.opentelemetry.io/otel/sdk/metric v1.43.0 
h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
-go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod 
h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
-go.opentelemetry.io/otel/trace v1.43.0 
h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
-go.opentelemetry.io/otel/trace v1.43.0/go.mod 
h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
+go.opentelemetry.io/otel/metric v1.44.0 
h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
+go.opentelemetry.io/otel/metric v1.44.0/go.mod 
h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
+go.opentelemetry.io/otel/metric/x v0.66.0 
h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA=
+go.opentelemetry.io/otel/metric/x v0.66.0/go.mod 
h1:d1+BDj9t96do0/1LoU1ayfCv79ZgNE41qbhBvnMOBZk=
+go.opentelemetry.io/otel/sdk v1.44.0 
h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
+go.opentelemetry.io/otel/sdk v1.44.0/go.mod 
h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
+go.opentelemetry.io/otel/sdk/metric v1.44.0 
h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
+go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod 
h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
+go.opentelemetry.io/otel/trace v1.44.0 
h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
+go.opentelemetry.io/otel/trace v1.44.0/go.mod 
h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
 go.opentelemetry.io/proto/otlp v1.6.0 
h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI=
 go.opentelemetry.io/proto/otlp v1.6.0/go.mod 
h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc=
 go.uber.org/atomic v1.4.0/go.mod 
h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
@@ -394,8 +421,8 @@
 go.uber.org/goleak v1.3.0/go.mod 
h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.uber.org/multierr v1.1.0/go.mod 
h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
-go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
-go.yaml.in/yaml/v2 v2.4.3/go.mod 
h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
+go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ=
+go.yaml.in/yaml/v2 v2.4.4/go.mod 
h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod 
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod 
h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -423,8 +450,8 @@
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
-golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
+golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To=
+golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod 
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod 
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod 
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -436,8 +463,8 @@
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
-golang.org/x/sync v0.20.0/go.mod 
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
+golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek=
+golang.org/x/sync v0.22.0/go.mod 
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
 golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -457,21 +484,21 @@
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
-golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
-golang.org/x/term v0.43.0/go.mod 
h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
+golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
+golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0=
+golang.org/x/term v0.45.0/go.mod 
h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w=
 golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod 
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod 
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
-golang.org/x/text v0.37.0/go.mod 
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
+golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8=
+golang.org/x/text v0.41.0/go.mod 
h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
-golang.org/x/time v0.14.0/go.mod 
h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
+golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
+golang.org/x/time v0.15.0/go.mod 
h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -490,14 +517,14 @@
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod 
h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod 
h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 
h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec=
-google.golang.org/genproto/googleapis/api 
v0.0.0-20260414002931-afd174a4e478/go.mod 
h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 
h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw=
-google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260414002931-afd174a4e478/go.mod 
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
+google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa 
h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8=
+google.golang.org/genproto/googleapis/api 
v0.0.0-20260526163538-3dc84a4a5aaa/go.mod 
h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa 
h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk=
+google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260526163538-3dc84a4a5aaa/go.mod 
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
 google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.21.0/go.mod 
h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE=
-google.golang.org/grpc v1.82.1/go.mod 
h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA=
+google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU=
+google.golang.org/grpc v1.83.2/go.mod 
h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8=
 google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af 
h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI=
 google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod 
h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
@@ -529,17 +556,17 @@
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4=
-k8s.io/api v0.36.0 h1:SgqDhZzHdOtMk40xVSvCXkP9ME0H05hPM3p9AB1kL80=
-k8s.io/api v0.36.0/go.mod h1:m1LVrGPNYax5NBHdO+QuAedXyuzTt4RryI/qnmNvs34=
+k8s.io/api v0.37.0 h1:Z//Vj9N7RA/yS2sDmxyeo7h+RR4zbUrd2vrd3Z0TbB4=
+k8s.io/api v0.37.0/go.mod h1:LKXgcJWMc+f4OLbP5SFR8rulEg07zZhpi/zMULiBImk=
 k8s.io/apimachinery v0.18.4/go.mod 
h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
-k8s.io/apimachinery v0.36.0 h1:jZyPzhd5Z+3h9vJLt0z9XdzW9VzNzWAUw+P1xZ9PXtQ=
-k8s.io/apimachinery v0.36.0/go.mod 
h1:FklypaRJt6n5wUIwWXIP6GJlIpUizTgfo1T/As+Tyxc=
+k8s.io/apimachinery v0.37.0 h1:Np2AbDtf8x6RDHiD8T9LbKJ9gaegeVNa8yNm5FuGKm0=
+k8s.io/apimachinery v0.37.0/go.mod 
h1:RN3nhprFSCxOi5Selxd7oMTXOe/c+ZbcE7Im+TS2zkE=
 k8s.io/cli-runtime v0.18.4/go.mod 
h1:9/hS/Cuf7NVzWR5F/5tyS6xsnclxoPLVtwhnkJG1Y4g=
-k8s.io/cli-runtime v0.36.0 h1:HNxciQpQMMOKS0/GiUXcKDyA6J2FDILJj9NmP2BZrTg=
-k8s.io/cli-runtime v0.36.0/go.mod 
h1:KObkknK9Ro5LYX+1RdiKc7C8CvGg4aX+V/Zv+E8WPHA=
+k8s.io/cli-runtime v0.37.0 h1:U3XakUeirBQJMz5688r04z74SIHSE7V5SIZ6Ho5JyBM=
+k8s.io/cli-runtime v0.37.0/go.mod 
h1:qiQMFkKwFFuPH6zy953On+nc3qfpEHAIDrJmAuRz5Vg=
 k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g=
-k8s.io/client-go v0.36.0 h1:pOYi7C4RHChYjMiHpZSpSbIM6ZxVbRXBy7CuiIwqA3c=
-k8s.io/client-go v0.36.0/go.mod h1:ZKKcpwF0aLYfkHFCjillCKaTK/yBkEDHTDXCFY6AS9Y=
+k8s.io/client-go v0.37.0 h1:nsN31fy8wBySuZ+QRnKmrjRSQLOG2rvoGN0tKd12zhQ=
+k8s.io/client-go v0.37.0/go.mod h1:FcGqw+Ll/gNQiq+nPGY1Oyt9y7SgDh1d3MW3RFDEbn0=
 k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod 
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod 
h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
 k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
@@ -548,12 +575,12 @@
 k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
 k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
 k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod 
h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
-k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a 
h1:xCeOEAOoGYl2jnJoHkC3hkbPJgdATINPMAxaynU2Ovg=
-k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a/go.mod 
h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0=
+k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad 
h1:oXImqH8mQNk7PmvzKhmN3ddJoY6OnyM225MXwGHPm0A=
+k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad/go.mod 
h1:0/mqHCVhlumdJ3BhCfnjSZQE037nAhNodh1/hK0T8/I=
 k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod 
h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod 
h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 
h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU=
-k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod 
h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
+k8s.io/utils v0.0.0-20260626114624-be93311217bd 
h1:Ea7fgQ5we8Y9T0OX5o0dAHzQOBRI07D/dEYRaB9ZZEs=
+k8s.io/utils v0.0.0-20260626114624-be93311217bd/go.mod 
h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
 pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
 pgregory.net/rapid v1.2.0/go.mod 
h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
 sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 
h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
@@ -569,8 +596,8 @@
 sigs.k8s.io/randfill v1.0.0/go.mod 
h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
 sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod 
h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
 sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod 
h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
-sigs.k8s.io/structured-merge-diff/v6 v6.3.2 
h1:kwVWMx5yS1CrnFWA/2QHyRVJ8jM6dBA80uLmm0wJkk8=
-sigs.k8s.io/structured-merge-diff/v6 v6.3.2/go.mod 
h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
+sigs.k8s.io/structured-merge-diff/v6 v6.4.2 
h1:qdOxHwrl2Kaag1aQEarlYcOA9vSyGCp3CIki3aW8c4Q=
+sigs.k8s.io/structured-merge-diff/v6 v6.4.2/go.mod 
h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/hack/make-rules/generated.sh 
new/ctlptl-0.9.6/hack/make-rules/generated.sh
--- old/ctlptl-0.9.5/hack/make-rules/generated.sh       2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/hack/make-rules/generated.sh       2026-09-10 
04:47:48.000000000 +0200
@@ -5,10 +5,13 @@
 REPO_ROOT=$(dirname $(dirname $(dirname "$0")))
 cd "${REPO_ROOT}"
 
-GOROOT="$(go env GOROOT)"
+# Keep the generator in lockstep with the k8s libraries we depend on,
+# so it never drifts far enough behind to stop building.
+K8S_VERSION=$(go list -m -f '{{.Version}}' k8s.io/api)
+
 rm -f pkg/api/*.deepcopy.go
 rm -f pkg/api/*/*.deepcopy.go
-go install k8s.io/code-generator/cmd/[email protected]
+go install "k8s.io/code-generator/cmd/deepcopy-gen@${K8S_VERSION}"
 deepcopy-gen \
    --go-header-file hack/boilerplate.go.txt \
    ./pkg/api \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/pkg/api/generated.deepcopy.go 
new/ctlptl-0.9.6/pkg/api/generated.deepcopy.go
--- old/ctlptl-0.9.5/pkg/api/generated.deepcopy.go      2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/pkg/api/generated.deepcopy.go      2026-09-10 
04:47:48.000000000 +0200
@@ -33,11 +33,21 @@
 func (in *Cluster) DeepCopyInto(out *Cluster) {
        *out = *in
        out.TypeMeta = in.TypeMeta
+       if in.RegistryAuths != nil {
+               in, out := &in.RegistryAuths, &out.RegistryAuths
+               *out = make([]RegistryAuth, len(*in))
+               copy(*out, *in)
+       }
        if in.KindV1Alpha4Cluster != nil {
                in, out := &in.KindV1Alpha4Cluster, &out.KindV1Alpha4Cluster
                *out = new(v1alpha4.Cluster)
                (*in).DeepCopyInto(*out)
        }
+       if in.KindExtraCreateArguments != nil {
+               in, out := &in.KindExtraCreateArguments, 
&out.KindExtraCreateArguments
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
        if in.Minikube != nil {
                in, out := &in.Minikube, &out.Minikube
                *out = new(MinikubeCluster)
@@ -215,6 +225,22 @@
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *RegistryAuth) DeepCopyInto(out *RegistryAuth) {
+       *out = *in
+       return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new RegistryAuth.
+func (in *RegistryAuth) DeepCopy() *RegistryAuth {
+       if in == nil {
+               return nil
+       }
+       out := new(RegistryAuth)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
 func (in *RegistryList) DeepCopyInto(out *RegistryList) {
        *out = *in
        out.TypeMeta = in.TypeMeta
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ctlptl-0.9.5/pkg/api/k3dv1alpha5/generated.deepcopy.go 
new/ctlptl-0.9.6/pkg/api/k3dv1alpha5/generated.deepcopy.go
--- old/ctlptl-0.9.5/pkg/api/k3dv1alpha5/generated.deepcopy.go  2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/pkg/api/k3dv1alpha5/generated.deepcopy.go  2026-09-10 
04:47:48.000000000 +0200
@@ -43,6 +43,27 @@
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *FileWithNodeFilters) DeepCopyInto(out *FileWithNodeFilters) {
+       *out = *in
+       if in.NodeFilters != nil {
+               in, out := &in.NodeFilters, &out.NodeFilters
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new FileWithNodeFilters.
+func (in *FileWithNodeFilters) DeepCopy() *FileWithNodeFilters {
+       if in == nil {
+               return nil
+       }
+       out := new(FileWithNodeFilters)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
 func (in *K3sArgWithNodeFilters) DeepCopyInto(out *K3sArgWithNodeFilters) {
        *out = *in
        if in.NodeFilters != nil {
@@ -122,6 +143,22 @@
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *RegistryProxy) DeepCopyInto(out *RegistryProxy) {
+       *out = *in
+       return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new RegistryProxy.
+func (in *RegistryProxy) DeepCopy() *RegistryProxy {
+       if in == nil {
+               return nil
+       }
+       out := new(RegistryProxy)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
 func (in *SimpleConfig) DeepCopyInto(out *SimpleConfig) {
        *out = *in
        out.TypeMeta = in.TypeMeta
@@ -157,6 +194,13 @@
                        (*in)[i].DeepCopyInto(&(*out)[i])
                }
        }
+       if in.Files != nil {
+               in, out := &in.Files, &out.Files
+               *out = make([]FileWithNodeFilters, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
        return
 }
 
@@ -352,6 +396,7 @@
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
 func (in *SimpleConfigRegistryCreateConfig) DeepCopyInto(out 
*SimpleConfigRegistryCreateConfig) {
        *out = *in
+       out.Proxy = in.Proxy
        if in.Volumes != nil {
                in, out := &in.Volumes, &out.Volumes
                *out = make([]string, len(*in))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/pkg/registry/registry.go 
new/ctlptl-0.9.6/pkg/registry/registry.go
--- old/ctlptl-0.9.5/pkg/registry/registry.go   2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/pkg/registry/registry.go   2026-09-10 04:47:48.000000000 
+0200
@@ -4,7 +4,6 @@
        "context"
        "fmt"
        "net/netip"
-       "reflect"
        "regexp"
        "sort"
        "strings"
@@ -258,8 +257,14 @@
                desiredEnvs["REGISTRY_STORAGE_DELETE_ENABLED"] = "true"
                desired.Env = append(desired.Env, 
"REGISTRY_STORAGE_DELETE_ENABLED=true")
        }
-       if eq := reflect.DeepEqual(desiredEnvs, existingEnvs); !eq {
-               needsDelete = true
+       // Only the env vars the spec asks for take part in the comparison. The
+       // container's env also carries whatever the image bakes in (registry:3
+       // sets OTEL_TRACES_EXPORTER=none), and a bare spec must keep matching a
+       // container it created from that image. Same rule as for labels above.
+       for key, value := range desiredEnvs {
+               if existingEnvs[key] != value {
+                       needsDelete = true
+               }
        }
 
        if needsDelete && existing.Name != "" {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/pkg/registry/registry_test.go 
new/ctlptl-0.9.6/pkg/registry/registry_test.go
--- old/ctlptl-0.9.5/pkg/registry/registry_test.go      2026-08-27 
04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/pkg/registry/registry_test.go      2026-09-10 
04:47:48.000000000 +0200
@@ -455,6 +455,30 @@
        }
 }
 
+func TestApplyIgnoresEnvBakedIntoTheImage(t *testing.T) {
+       f := newFixture(t)
+       defer f.TearDown()
+
+       // registry:3 sets OTEL_TRACES_EXPORTER=none in its image config, so the
+       // container's env carries a variable nobody asked ctlptl for. A bare 
spec
+       // must still match the container it created from that image.
+       f.docker.containers = []container.Summary{kindRegistry()}
+       f.docker.containerEnv = []string{
+               "REGISTRY_STORAGE_DELETE_ENABLED=true",
+               
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
+               "OTEL_TRACES_EXPORTER=none",
+       }
+
+       registry, err := f.c.Apply(context.Background(), &api.Registry{
+               TypeMeta: typeMeta,
+               Name:     "kind-registry",
+       })
+       require.NoError(t, err)
+       assert.Equal(t, kindRegistry().ID, registry.Status.ContainerID)
+       assert.Equal(t, "", f.docker.lastRemovedContainer, "Registry should not 
have been deleted")
+       assert.Nil(t, f.docker.lastCreateConfig, "Registry should not have been 
re-created")
+}
+
 type fakeCLI struct {
        client *fakeDocker
 }
@@ -472,6 +496,10 @@
        lastRemovedContainer string
        lastCreateConfig     *container.Config
        lastCreateHostConfig *container.HostConfig
+
+       // Env reported by ContainerInspect for every container; nil means the
+       // env of a registry created from a bare spec.
+       containerEnv []string
 }
 
 type objectNotFoundError struct {
@@ -490,6 +518,10 @@
 }
 
 func (d *fakeDocker) ContainerInspect(ctx context.Context, containerID string, 
options client.ContainerInspectOptions) (client.ContainerInspectResult, error) {
+       env := d.containerEnv
+       if env == nil {
+               env = []string{"REGISTRY_STORAGE_DELETE_ENABLED=true", 
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"}
+       }
        for _, c := range d.containers {
                if c.ID == containerID {
                        return client.ContainerInspectResult{
@@ -508,7 +540,7 @@
                                                Tty:         false,
                                                OpenStdin:   false,
                                                StdinOnce:   false,
-                                               Env:         
[]string{"REGISTRY_STORAGE_DELETE_ENABLED=true", 
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
+                                               Env:         env,
                                                Cmd:         []string{"serve", 
"/etc/distribution/config.yml"},
                                                Healthcheck: 
(*container.HealthConfig)(nil),
                                                ArgsEscaped: false,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/test/docker-desktop/e2e.sh 
new/ctlptl-0.9.6/test/docker-desktop/e2e.sh
--- old/ctlptl-0.9.5/test/docker-desktop/e2e.sh 2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/test/docker-desktop/e2e.sh 2026-09-10 04:47:48.000000000 
+0200
@@ -8,9 +8,15 @@
 export DOCKER_BUILDKIT="1"
 
 cd $(dirname $(realpath $0))
-CLUSTER_NAME="kind-ctlptl-test-cluster"
+CLUSTER_NAME="docker-desktop"
 ctlptl apply -f cluster.yaml
 
+# Idempotence check
+source ../idempotence.sh
+CLUSTER_ID=$(cluster_id "$CLUSTER_NAME")
+ctlptl apply -f cluster.yaml
+assert_unchanged "cluster $CLUSTER_NAME" "$CLUSTER_ID" "$(cluster_id 
"$CLUSTER_NAME")"
+
 # The ko-builder runs in an image tagged with the host as visible from the 
local machine.
 docker buildx build --load -t ko-builder .
 kubectl apply -f builder.yaml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/test/idempotence.sh 
new/ctlptl-0.9.6/test/idempotence.sh
--- old/ctlptl-0.9.5/test/idempotence.sh        1970-01-01 01:00:00.000000000 
+0100
+++ new/ctlptl-0.9.6/test/idempotence.sh        2026-09-10 04:47:48.000000000 
+0200
@@ -0,0 +1,34 @@
+#!/bin/bash
+# Helpers for checking that `ctlptl apply` is idempotent.
+#
+# Usage:
+#   REGISTRY_ID=$(registry_id ctlptl-test-registry)
+#   ctlptl apply -f registry.yaml
+#   assert_unchanged "registry" "$REGISTRY_ID" "$(registry_id 
ctlptl-test-registry)"
+
+# The container backing a registry. Changes if the registry is recreated.
+registry_id() {
+    ctlptl get registry "$1" -o template --template '{{.status.containerId}}'
+}
+
+# The creation time of a cluster's oldest node. Changes if the cluster is 
recreated.
+cluster_id() {
+    ctlptl get cluster "$1" -o template --template 
'{{.status.creationTimestamp}}'
+}
+
+# assert_unchanged DESCRIPTION BEFORE AFTER
+assert_unchanged() {
+    local desc="$1"
+    local before="$2"
+    local after="$3"
+
+    if [[ "$before" == "" ]]; then
+        echo "could not read the identity of $desc before re-applying"
+        exit 1
+    fi
+
+    if [[ "$before" != "$after" ]]; then
+        echo "$desc was recreated by a second 'ctlptl apply' (before: $before, 
after: $after)"
+        exit 1
+    fi
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/test/k3d/e2e.sh 
new/ctlptl-0.9.6/test/k3d/e2e.sh
--- old/ctlptl-0.9.5/test/k3d/e2e.sh    2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/test/k3d/e2e.sh    2026-09-10 04:47:48.000000000 +0200
@@ -9,9 +9,19 @@
 
 cd $(dirname $(realpath $0))
 CLUSTER_NAME="k3d-ctlptl-test-cluster"
+REGISTRY_NAME="ctlptl-test-registry"
 ctlptl apply -f registry.yaml
 ctlptl apply -f cluster.yaml
 
+# Idempotence check
+source ../idempotence.sh
+REGISTRY_ID=$(registry_id "$REGISTRY_NAME")
+CLUSTER_ID=$(cluster_id "$CLUSTER_NAME")
+ctlptl apply -f registry.yaml
+ctlptl apply -f cluster.yaml
+assert_unchanged "registry $REGISTRY_NAME" "$REGISTRY_ID" "$(registry_id 
"$REGISTRY_NAME")"
+assert_unchanged "cluster $CLUSTER_NAME" "$CLUSTER_ID" "$(cluster_id 
"$CLUSTER_NAME")"
+
 # The ko-builder runs in an image tagged with the host as visible from the 
local machine.
 docker buildx build --load -t localhost:5005/ko-builder .
 docker push localhost:5005/ko-builder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/test/kind/e2e.sh 
new/ctlptl-0.9.6/test/kind/e2e.sh
--- old/ctlptl-0.9.5/test/kind/e2e.sh   2026-08-27 04:05:21.000000000 +0200
+++ new/ctlptl-0.9.6/test/kind/e2e.sh   2026-09-10 04:47:48.000000000 +0200
@@ -9,9 +9,19 @@
 
 cd $(dirname $(realpath $0))
 CLUSTER_NAME="kind-ctlptl-test-cluster"
+REGISTRY_NAME="ctlptl-test-registry"
 ctlptl apply -f registry.yaml
 ctlptl apply -f cluster.yaml
 
+# Idempotence check
+source ../idempotence.sh
+REGISTRY_ID=$(registry_id "$REGISTRY_NAME")
+CLUSTER_ID=$(cluster_id "$CLUSTER_NAME")
+ctlptl apply -f registry.yaml
+ctlptl apply -f cluster.yaml
+assert_unchanged "registry $REGISTRY_NAME" "$REGISTRY_ID" "$(registry_id 
"$REGISTRY_NAME")"
+assert_unchanged "cluster $CLUSTER_NAME" "$CLUSTER_ID" "$(cluster_id 
"$CLUSTER_NAME")"
+
 # The ko-builder runs in an image tagged with the host as visible from the 
local machine.
 docker buildx build --load -t localhost:5005/ko-builder .
 docker push localhost:5005/ko-builder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ctlptl-0.9.5/test/minikube/e2e.sh 
new/ctlptl-0.9.6/test/minikube/e2e.sh
--- old/ctlptl-0.9.5/test/minikube/e2e.sh       2026-08-27 04:05:21.000000000 
+0200
+++ new/ctlptl-0.9.6/test/minikube/e2e.sh       2026-09-10 04:47:48.000000000 
+0200
@@ -9,9 +9,19 @@
 
 cd $(dirname $(realpath $0))
 CLUSTER_NAME="minikube-ctlptl-test-cluster"
+REGISTRY_NAME="ctlptl-test-registry"
 ctlptl apply -f registry.yaml
 ctlptl apply -f cluster.yaml
 
+# Idempotence check
+source ../idempotence.sh
+REGISTRY_ID=$(registry_id "$REGISTRY_NAME")
+CLUSTER_ID=$(cluster_id "$CLUSTER_NAME")
+ctlptl apply -f registry.yaml
+ctlptl apply -f cluster.yaml
+assert_unchanged "registry $REGISTRY_NAME" "$REGISTRY_ID" "$(registry_id 
"$REGISTRY_NAME")"
+assert_unchanged "cluster $CLUSTER_NAME" "$CLUSTER_ID" "$(cluster_id 
"$CLUSTER_NAME")"
+
 # The ko-builder runs in an image tagged with the host as visible from the 
local machine.
 docker buildx build --load -t localhost:5005/ko-builder .
 docker push localhost:5005/ko-builder

++++++ ctlptl.obsinfo ++++++
--- /var/tmp/diff_new_pack.uRpyUQ/_old  2026-09-21 12:08:16.183801812 +0200
+++ /var/tmp/diff_new_pack.uRpyUQ/_new  2026-09-21 12:08:16.187801980 +0200
@@ -1,5 +1,5 @@
 name: ctlptl
-version: 0.9.5
-mtime: 1787796321
-commit: 4ba44267eddea02f4891849c0d3d6fbf4c2b5c11
+version: 0.9.6
+mtime: 1789008468
+commit: c66824e03748eb1b1359dd2b1b357f4402587cbe
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/ctlptl/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.ctlptl.new.383539/vendor.tar.gz differ: char 15, 
line 1

Reply via email to