Charm Tech pulse 2026#15

This was a quieter pulse than usual, with several team members taking time off for a winter break (in one case, summer break). Some of the team will also be off during the next pulse - there is always at least one person around, but please be patient with us, as we’ll be slower than usual responding in Matrix, GitHub, and so on.

It’s the end of the month, so the usual round of releases came out: lots of bug fixing, but also a significant refresh in the way that Jubilant/pytest-jubilant handles logging, particularly status changes when waiting. This was a common request from charmers, so we encourage you all to upgrade and enjoy!

We’ve also been hard at work on a completely new version of the snap charm library, which should be available in August. The new version has a much cleaner implementation, and also should avoid some of the issues charmers have encountered due to store infrastructure issues.

Ops

  • Released ops 3.8.1 and 2.23.4. The LTS 2.23.4 has a collection of fixes backported from the 3.x series, while 3.8.1 has more fixes, particularly around ensuring that the testing framework exactly matches real Juju behaviour.

Charming

  • Released Jubilant 1.12.0 and pytest-jubilant 2.2.0, which improve the default logging signal-to-noise ratio, while still allowing access to all the detailed logs when needed.
  • Released Pebble 1.32.1, which bumps the version of Go to avoid some security issues.
  • Released Concierge 1.7.0, which adds security event logging and also fixes a few bugs.
  • Worked on adding a CLI entrypoint that exposes Jubilant’s wait method (#374).
  • Started work on modernising the juju-controller charm.
  • Released v2 of the api-demo-server image, now a rock, and converted the Kubernetes tutorial to use it.
  • Worked on updating the charmcraft profiles to pin tools and drop the uv.lock file.
  • For the Charmhub public listing review process: fixed repo_has_lock_file’s always-truthy pyproject.toml check (#157) and wired three orphaned doc checks into the issue_comment output (#160). Continued with a batch of checklist-accuracy fixes: the repository_name text case mismatch (#156), retargeting the metadata_links text (#158), wiring the coding-conventions check to the live best-practices list (#159), removing the charm_plugin_strict_dependencies stub (#161), checking the charm name against the documented naming convention (#162), and fetching the licence file’s contents rather than its GitHub web page (#165). Also drafted per-item source checks for the seven deterministic checklist items (#166) and dropping the team element of reviewer selection (#163).
  • In Concierge: backported 1.5 series fixes: MicroK8s settling before image-registry configuration (#240), the Juju bootstrap retry budget and bootstrap-timeout default (#241), stdlib ANSI in place of fatih/color (#242), K8s restore leaving image-registry credentials on disk (#243), non-interactive apt operations (#244), Canonical’s YAML loader in place of viper (#245), and the Go 1.26.5 directive bump (#246). Also worked on replacing error-string matching with sentinel errors (#247).
  • In Hyrum: added --save and hyrum compare for run-to-run diffs (#82). Progressed fixes for three defects in dependency patching and fault attribution (#97) and support for preferring opendev mirrors plus a get-charms timeout (#98).
  • In charm-ubuntu: adopted the canonical/charm-ci reusable workflows (#108, #109, #110).
  • In Charmcraft: started work on adding an example action (#2813) and secrets handling (#2814) to the Kubernetes and machine init profiles.
  • Stopped ubuntu-langpacks-operator’s unit tests replacing the local crontab (#17).

Charmlibs

  • Polished the charmlibs.snap 2.0 rewrite for release – coming after the break!
  • Worked on migrating the tracing interface library to charmlibs.

Documentation

  • Removed log_cli and log_file ini options from pyproject.toml. Keep them as CLI arguments for integration tests only (#2654).
  • In operator: worked on making the custom-endpoint-name sample test actually test something (#2664) and on no longer styling page references as blockquotes (#2666).
  • Started an initial Diataxis documentation site for Concierge (#248) and initial documentation for Hyrum (#99).
  • Worked on clarifying the integration and contribution docs for Charmhub public listing (#164).