With SafeProtocolManager, executeTransaction that tries to carry out a self-call (safeProtocolAction.to == safeAddress) on Safe fails, for example, calling swapOwner() in OwnerManager via a registered module, due to the require at the line of 96. see below.
https://github.com/5afe/safe-core-protocol/blob/0dc36e02a1b39865a7f09ddc63e236494bff9a58/contracts/SafeProtocolManager.sol#L96
What is the rationale behind this design? As I'm trying to build a recovery plugin, I wonder if there is a walkaround or it's possible to lift this off so that an external module can add, remove, and swap owners via safe-core-protocol.
Btw, executeRootAccess(), which doesn't care about what address Safe calls, can't resolve this as the delegatecall will be blocked by authorized modifier in SelfAuthorized contract in Safe.