Charm Tech pulse 2026#12

The team is proud of the work achieved this pulse. Scenario received some love with several fixes proposed, and the Ops framework got a fix for I/O thread leaks. Progress was made on several specs across Jubilant, Charmlibs, Ops and Pebble. The team is taking on stewardship of the ubuntu charm, which will receive Ubuntu 26.04 (Resolute Racoon :raccoon:) support shortly. Hyrum got smarter, charm libraries can now contribute Diátaxis docs to the charmlibs documentation site, and much more.

Ops

  • Fixed JUJU_HOOK_NAME not being correctly derived when objects contain dashes (#2552).
  • Stopped leaking exec I/O threads in Pebble when waiting on the change fails (#2558).
  • Added hookcmds integration tests for secret access, rebooting, and port management (#2562).
  • Avoided double-closing the framework in Scenario teardown (#2561).
  • Fixed the mock_temp_dir fixture’s open() patch (#2553).
  • Investigated chdir-ing to the charm root during the event in Scenario (#2550).
  • Started work on including an attribute with the container name in Pebble tracing spans (#2555).
  • Worked on taking Pebble defaults into consideration when consistency-checking Checks (#2567).
  • Started work on aligning Juju naming rules with the testing class rules (#2570), and matching that validation in Charmcraft (#2723).

Charming

  • Added Ubuntu 26.04 (Resolute Raccoon) as a run-on base in the ubuntu charm (#83). A release will hopefully be done next pulse.
  • Continued work on Hyrum: taught the discovery to recognise src/reactive/ and src/layer.yaml as legacy (#27) and to skip charms with no Python source (#28); progressed a CharmlibPatcher for swapping charmlib deps (#25), scripts to discover public charm repositories on GitHub and Launchpad (#26), auto-Python-wrapping the tox runner (#32), and dropping click, rich, and pyyaml as dependencies (#33).
  • Added a workshop config for a charm + Go dev environment to the ubuntu-manpages operator (#67).
  • Filed Juju 4 bugs on juju-reboot not actually rebooting (#22639) and on network-get returning an empty leading placeholder bind-address on Kubernetes (#22616).
  • Started work on a spec for dependabot conventions across the Charm Tech repos (#17).
  • Continued work on OP089, a spec to add support for state transition tests involving multiple charms.
  • Continued work on OP088, a spec for including CharmQA validators in the charmlibs repository.
  • Continued work on OP087, a spec for improving Jubilant logs.

Charmlibs

  • Libraries can now provide their own tutorials, how-to guides, and explanations for inclusion in the charmlibs documentation site! (#504)
  • The charmlibs docs are now built on the Canonical Sphinx Stack (#517)
  • Developer tooling quality of life features like automatic minimum Python version detection have been unlocked by the migration of the task runner logic to a Python script (#518)

Pebble

  • pebble version and pebble health commands now support structured output (#880) with pebble --version refined to only display the client version.
  • Draft OP090 spec, which deals with TLS CA certificates, is ready for further review.
  • Continued work on a series of Otel specs looking into Otel forwarding/configuration.
  • Re-enabled armhf, s390x and ppc64el builds ahead of 1.32 release (#886).
  • Build provenance attestation in CI (#885).
  • Fault finding on (#887).

Documentation

  • Documented an overview of subordinate charms (#2455)
  • Clarified how to name workload-less charms (#2496, contributed by Enrico.
  • Clarified that storage-detaching applies to both machine and K8s charms (#2554).
  • Added a small note about -W error to the unit-test how-to (#2560).
  • Started work on extending the security explanation page (#2571).
  • Clarified Jubilant behaviour when providing a user in the model value (#340).
  • Clarified Jubilant behaviour of the any_* helpers when a specified app doesn’t exist (#344)
  • Started work on adding the workload version into the k8s tutorial (#2559)