I did try to reproduce with these steps: snap refresh juju --channel 3.1 juju bootstrap lxd lxd31 juju add-model gh-test juju deploy github-runner --channel latest/stable --revision 140 gh-stable juju deploy github-runner --channel latest/edge --revision 141 gh-edge $ juju status Model Controller Cloud/Region Version SLA Timestamp gh-test lxd31 localhost/localhost 3.1.7 unsupported 10:39:25-04:00 App Version Status Scale Charm Channel Rev Exposed Message gh-edge blocked 1 github-runner latest/edge 141 no Missing path configuration gh-stable blocked 1 github-runner latest/stable 140 no Missing path configuration Unit Workload Agent Machine Public address Ports Message gh-edge/0* blocked idle 1 10.139.162.189 Missing path configuration gh-stable/0* blocked idle 0 10.139.162.98 Missing path configuration Machine State Address Inst id Base AZ Message 0 started 10.139.162.98 juju-c9bfb2-0 ubuntu@22.04 Running 1 started 10.139.162.189 juju-c9bfb2-1 ubuntu@22.04 Running juju ssh 0 $$ sudo -i $$ cd /var/log/juju # grep -rnI "downloading " machine-0.log:106:2024-04-05 14:37:14 INFO juju.downloader download.go:109 downloading from ch:amd64/jammy/github-runner-140 unit-gh-stable-0.log:11:2024-04-05 14:37:14 INFO juju.worker.uniter.charm bundles.go:81 downloading ch:amd64/jammy/github-runner-140 from API server juju ssh 1 $$ sudo -i $$ cd /var/log/juju root@juju-c9bfb2-1:/var/log/juju# grep -rnI "downloading " machine-1.log:118:2024-04-05 14:37:21 INFO juju.downloader download.go:109 downloading from ch:amd64/jammy/github-runner-141 unit-gh-edge-0.log:11:2024-04-05 14:37:21 INFO juju.worker.uniter.charm bundles.go:81 downloading ch:amd64/jammy/github-runner-141 from API server So both of those certainly believe that they are downloading and installing the versions that you have asked for. I downloaded r 140, 141, 143, 145 to try and figure out what the differences are. If I strip it down too much: $ diff -x "venv" -x "*.so" -x "*.pyc" -ur github-runner_r140 github-runner_r141 diff -x venv -x '*.so' -x '*.pyc' -ur github-runner_r140/manifest.yaml github-runner_r141/manifest.yaml --- github-runner_r140/manifest.yaml 2024-03-06 06:05:32.000000000 -0500 +++ github-runner_r141/manifest.yaml 2024-03-12 04:53:28.000000000 -0400 @@ -9,5 +9,5 @@ - amd64 channel: '22.04' name: ubuntu -charmcraft-started-at: '2024-03-06T06:03:07.684053Z' +charmcraft-started-at: '2024-03-12T04:51:25.680319Z' charmcraft-version: 2.5.5 Which seems to say that the only thing that differed between 140 and 141 was maybe a charmcraft.yaml file (that doesn't end up in the rendered charm) that maybe had different dependencies? Pulling that back a bit I get: --- github-runner_r140/venv/wheel/vendored/vendor.txt 2024-03-06 06:05:24.000000000 -0500 +++ github-runner_r141/venv/wheel/vendored/vendor.txt 2024-03-12 04:53:18.000000000 -0400 @@ -1 +1 @@ -packaging==23.2 +packaging==24.0 diff -x '*.so' -x '*.pyc' -ur github-runner_r140/venv/wheel/wheelfile.py github-runner_r141/venv/wheel/wheelfile.py --- github-runner_r140/venv/wheel/wheelfile.py 2024-03-06 06:05:24.000000000 -0500 +++ github-runner_r141/venv/wheel/wheelfile.py 2024-03-12 04:53:18.000000000 -0400 @@ -81,8 +81,8 @@ if algorithm.lower() in {"md5", "sha1"}: raise WheelError( - "Weak hash algorithm ({}) is not permitted by PEP " - "427".format(algorithm) + f"Weak hash algorithm ({algorithm}) is not permitted by " + f"PEP 427" ) self._file_hashes[path] = ( So I can look for wheelfile.py and see what is in it.