LeanRoles ataca un problema que casi nadie mide. WordPress guarda todos los roles en una única opción autocargada, con las capacidades de cada rol copiadas enteras porque el core no tiene herencia. En un sitio de membresía o comercio con decenas de roles, esa opción se lee, se deserializa y se mantiene en memoria en cada worker de PHP y en cada request — y son justo los sitios cuyo tráfico va casi siempre logueado, donde la caché de página nunca entra.
Mide — auditoría de solo lectura
El auditor no escribe nada. Toma el tamaño de tu opción de roles con LENGTH() en la base de datos en vez de reserializarla en PHP, cronometra un unserialize() real tras una pasada de calentamiento, mide la huella residente en memoria y calcula lo que eso cuesta multiplicado por tus workers concurrentes. Identifica roles que no conceden ningún permiso efectivo, roles que no tiene nadie, roles con conjuntos de capacidades idénticos y capacidades que no puede atribuir — dejando claro que «no reconocida» no es «huérfana», porque hay código propio que comprueba capacidades que ningún escáner ve.
Ofrece la primitiva que falta — «user tags»
En WordPress no hay forma de decir «este usuario es cliente mayorista» sin concederle permisos: solo existen los roles. Por eso los plugins de membresía no paran de inventarlos. Una etiqueta de LeanRoles es esa alternativa: aparece en $user->roles, responde a current_user_can() y se puede filtrar en WP_User_Query — y nunca se escribe en la opción autocargada. El código de terceros no nota la diferencia; la etiqueta no concede ninguna capacidad y no pesa nada.
Lo que no hace
No convierte tus roles en tags por ti. Te da tres primitivas independientes —crear una tag, asignarla en bloque y borrar un rol con reasignación— que se componen en una conversión hecha a mano, por alguien que ha leído la auditoría y acepta el riesgo. Antes de borrar un rol te dice cuántas capacidades concede y cuántos usuarios lo tienen; no te dice cuáles lo notarán. Haz una copia y compruébalo.