Charm Tech pulse 2026#14

Notable this pulse: the Ubuntu charm officially supports 26.04, Jubilant logging has been revamped to bump up the signal-to-noise ratio, preparation for some exciting Pebble features coming later in the cycle, and a lot of bug fixing.

The team will be taking some time off over the next two pulses, but there will always be at least a couple of people still around. We might be a bit slower in responding to issues or Matrix chats than usual, but we’ll get to you as soon as we can. We’ll still do the usual set of releases at the end of July.

Ops

  • Applied fixes from main (3.x) into the 2.23 maintenance branch, for a future 2.23.x release (#2588).
  • Fixed a testing bug where Secret.grant/revoke mutated secret data during tests (#2614).
  • Fixed type checking of Scenario and the errors that surfaced (#2615).
  • Allowed IdentityDict to be assigned to IdentityAccess (#2628).

Charming

  • Improve Jubilant logging (#351).
  • Add pytest-jubilant logger and drop printing 1000 juju debug-log lines on failure (#106).
  • Added OWASP security-event logging to Concierge (#208).
  • Softened the charm icon requirement for public listing until more details are figured out (#154).
  • Fixed Concierge to run apt non-interactively so prepare cannot hang on prompts (#233).
  • Fixed Concierge K8s restore leaving image-registry credentials on disk (#235).
  • Fixed a Concierge CI issue to pin extra-packages test snap channels to latest/stable (#238).
  • Continued work on hyrum, the “productised” replacement for super-tox (#60, #80, #73, #81, #79, #88, #89, #78, #82, #83, #90).
  • Modernised the Ubuntu charm, and added explicit 26.04 support (#85, #93 , #95, #97 , #99, #100, #101, #106, #107). Also started work on adopting canonical/charm-ci reusable workflows (#108).
  • Updated the machine and kubernetes profiles in Charmcraft to run tests with warnings treated as errors (#2718).
  • Worked on updating pytest-jubilant to set the model arch constraint to match the runtime in the fixtures providing models (#110).
  • Removed a couple of dependencies (and many transitive dependencies as a result) in Concierge reducing the size of the snap and easing maintenance (#218, #237).
  • Bump minimal Python version to 3.10 in Jubilant and pytest-jubilant (#370, #104).
  • Converted api_demo_server to a rock (#45, #82). Working on updating the K8s charm tutorial in Ops to use the new image.

Charmlibs

  • Updated the migration guide to suggest a committing strategy to facilitate review (#562).
  • Update justfile to omit emitting colours when appropriate (#563).
  • Document the documentation build process (#564).
  • Added the snap get|set|unset commands to the charmlibs.snap 2.0 rewrite (#572). Coming to PyPI soon™. Try it today by installing it from main.
  • Silenced spurious CI annotations from failed-sync-restart tests (#580).

Pebble

  • Review progressed for specifications:
    • Pebble TLS Trust Context
    • Pebble start-at
  • Prototyping/Research into:
    • Container Charms on Machines

Documentation

  • Added a how-to guide for debugging Kubernetes charms (#2498).
  • Added a how-to guide for configuring Jubilant logs (#2619).
  • Extended Pebble’s security documentation (#893).
  • Extended charm-ubuntu’s SECURITY.md (#87).
  • Added getting the workload version in the Kubernetes tutorial (#2559).
  • Fixed the layer_from_rockcraft reference doc, which was missing an argument (#2648).
  • Extended the Juju secret-lifecycle documentation to cover user-secret lifecycle (#22529).
  • Improved charm naming guidance in Charmcraft docs (#2748).