Charm Tech pulse 2026#18

This pulse, the team has been busy with releases and improvement work across the board. We released Pebble v1.32.2 and the companion FIPS version, with a new automated release process that makes good use of AI in a targeted way. In Charmlibs news, check out charmlibs.snap 2.0 and charmlibs.interfaces.tracing 1.0, which we just released to PyPI.

We also spent a day exploring wild ideas for agentic charms – a head-to-head hackathon within the team. Is a charm that runs an agent on every hook a good idea? We’ll let you decide…! Or what if AI could “evolve” a charm from a generic starting point into a highly capable operator? This was a day dedicated to experimentation, and we found it to be a great exercise in collaborative design & development, as well as learning the limits of agentic development.

Ops

  • Added conformance tests for the tracing and certificate_transfer interfaces (#2711).
  • Made tracing errors say which destination rejected the data (#2714).
  • Made _CharmSpec covariant in its charm type so subclass specs type-check (#2715).
  • Stopped importing pdb unless a debugger is actually requested (#2740).
  • Started work on coercing nested dataclass fields in Relation.load (#2741).
  • Drafted enforcing relation databag read permissions on all access paths (#2738).

Charming

  • Hosted an AMA with some of the OpenStack and HPC team members.
  • In Concierge:
    • Made files written in the user’s home directory 0600 (#263).
    • Worked on not retrying the k8s bootstrap when its pre-init checks fail (#265).
    • Adjusted the MetalLB IP range (#266).
    • Pinned MicroK8s to a channel that starts on current kernels (#267).
  • Dropped the _sleep_once fixture in pytest-jubilant (#122).
  • Stopped pytest-interface-tester relying on the private _EventPath.suffix attribute (#36).
  • Merged initial PRs to modernise the Juju controller charm (#136, #139, #140). More PRs in review (#141, #142).
  • Replaced charmcraft create-lib with a stub that tells users the command no longer functions and points them to the relevant docs (#2851).
  • Continued adding and improving Charmlint rules and adopted ruff’s suppression-comment and rule-name style.
  • In Hyrum:
    • Added reporting where a run saved its results and logs (#126).
    • Made report percentages unambiguous about their denominator (#127).
    • Reported each status as a share of the runs as well as of the fleet (#138).
    • Made the verbosity rungs cumulative and added --brief (#133).
    • Made the check help readable in a terminal (#137).
    • Narrowed get-charms with --repo and --limit (#143).
    • Added hyrum show PATH to print a saved run’s status summary (#149).
    • Added a clean subcommand to reclaim per-charm build artefacts (#139).
    • Found charms nested deeper than one directory level (#134).
    • Injected the patched Poetry dependency into the group it came from (#135).
  • Progressed on updating jhack scenario snapshot to match latest ops[testing], and fix some bugs that break the tool.

Charmlibs

  • Released charmlibs.snap 2.0 (#651), now available on PyPI!
  • Released charmlibs.interfaces.tracing 1.0 (#588), now available on PyPI!
  • Added is_relative_to and with_stem to ContainerPath in pathops (#646).
  • Updated the Charmhub libraries deprecation timeline to reflect the fact that publication of new libraries (via charmcraft create-lib) is no longer supported (#644).
  • Removed the interface testing machinery inherited from charm-relation-interfaces from charmlibs (#652) and prepared to drop the interface testing workflow (#645).
  • Began updating interface schemas to a new format designed for compatibility with the typed ops.Relation.load, to make it easier for interface schemas to be sourced from the interface library code itself for documentation and validation. 
  • Refreshed the HPE keys used by the apt ssacli functional test (#648).
  • Continued the -Werror rollout, opting rollingops and nginx_k8s in to warnings-as-errors (#672).
  • Worked on creating a GitHub release for each published package (#649).
  • Experimented with a new layout for interface test charms (#673).

Pebble

  • New release process for Pebble which now incorporates agentic release note generation and merge conflict resolution (PRs).
  • Released Pebble v1.32.2 and v1.32.2-fips.
  • Spec review progress made on Pebble scheduled service start.
  • Shepherding community contribution to fix #681 - Shutdown has 2s delay when log forwarding is being used.

Documentation

  • Worked on a how-to guide for securing a charm (#2721).
  • Fixed a race condition in the Kubernetes tutorial charm (#2689).
  • Started describing Concierge’s security model (#262).
  • Changed to build the Charmlibs package reference pages in parallel (#674).
  • Worked on publishing changelogs for libraries in Charmlibs (#650).
  • Worked on a new how-to guide for Jubilant wait CLI (#413).
1 Like