AragonOSx doesn't actively support the Diamond pattern as it is very complex with respect to deployment and upgrading of the different facets. Writing a
UUPSUpgradeable plugin and updating it through the
PluginSetupProcessor is already an advanced topic with a lot of caveats.
DiamondPlugin could work, I would rather try to simplify your plugin and break it into pieces. Besides not currently mentioned in the docs, our
PluginSetup's support so called
helper contracts - these are basically all contracts associated with the current build of a plugin.
When updating form an old to the new plugin version, the previously nominated
helpers must be provided as an input argument for the update (we make sure that this happens through hashing).
Maybe, your governance plugin can have such helpers and your setup can take care of transitioning these into a new version.
Another approach would be to start with a non-upgradeable (cloneable) plugin and don't worry about upgrading for now.
Sometimes, clever use of structs in storage can also reduce the bytecode quite significantly.