A plugin that took over what the theme used to do

A theme reduced to templates and styles, and functionality that moved into a plugin — which is where it belonged.

what left the theme, over three years:

  custom post types        → a plugin. they survive a
                             theme switch, which is
                             the whole argument.
  shortcodes               → blocks, in a plugin
  the REST endpoints       → a plugin
  the settings screen      → deleted
  image sizes              → a plugin, because the
                             images outlive the theme

what stayed: templates, parts, patterns, styles, and
forty lines of functions.php.

The rule that fell out is that anything which should survive a theme switch is not the theme’s, and applying it removed almost everything. A custom post type registered by a theme is content that disappears when somebody changes the design, which is a bug waiting for a redesign.