using SQL you can compare the last change between definition and compilation of classes
a negative difference shows where recompilation is required.
I used Posix-Timeformat for an easier compare

SELECT 
def.ID, cmp.TimeChanged compiled,  def.TimeChanged defined, 
to_char($piece(cmp.TimeChanged,',',1),'J')-to_char($piece(def.TimeChanged,',',1),'J') diff
FROM %Dictionary.ClassDefinition def
left outer join %Dictionary.CompiledClass cmp
on def.ID=cmp.ID
where NOT def.name %startswith '%'
order by 4

This list can be grouped into 3.5 categories:

  • Almost  Runtime changes

Only the last 2 are critical for successful mirror failover and require dynamic handling
and the last requires also non-stop monitoring as it is not directly triggered by SysAdmin.

2 remarks:

  • mapping your class to pseudo_namespace %ALL makes it available to all other namespaces except %SYS
  • to keep your options for a bitmap valid you may take the approach shown in my article of the Adopted Bitmap    The default of a storage global is ^Pck.ClassnameD .. and so on. But it can also be  ^Pck.ClassnameD(%InterfaceName,$namespace)  and the integer ID follows as you need. You just have to take care that %InterfaceName has some useful content.  Which shouldn't be a problem. I used %name to bypass all issues with ProcedureBlock.  

There is a trick that may work for some pieces but requires very careful setup:
- create a new database that can be part of the MIRROR
- then you can map the components that are INDEPENDENT of the local instance to this DB

Be warned:
Identification and Isolation of these pieces can be quite tricky and sometimes also impossible
In addition, this can make troubleshooting and maintenance (release update?) rather complicated
and you should do an in-depth evaluation if the extra effort values the achieved result.