PE11 — [mutation] a catalog row naming an UNREGISTERED provider class must not compromise the
REST of the permission subsystem, and must never grant anything.
── CHARACTERIZATION NOTE (behavior found, not the behavior the code intends) ──
PermissionEngine.instantiateProviders() is written as
const instance = ClassFactory.CreateInstance(...); if (instance) { register } else { LogError }
— i.e. the author intended an unresolvable ProviderClassName to be SKIPPED. That else branch
is DEAD CODE: ClassFactory.CreateInstance does not return null for an unknown key, it falls
back to instantiating the ABSTRACT BASE (PermissionProviderBase). The engine therefore
installs a method-less stub as a live provider. This check asserts the properties that are
safety-relevant and true (no crash at Config time, real domains unaffected, nothing granted);
PE13 pins the consequence that is NOT safe.
PE11 — [mutation] a catalog row naming an UNREGISTERED provider class must not compromise the REST of the permission subsystem, and must never grant anything.
── CHARACTERIZATION NOTE (behavior found, not the behavior the code intends) ──
PermissionEngine.instantiateProviders()is written asconst instance = ClassFactory.CreateInstance(...); if (instance) { register } else { LogError }— i.e. the author intended an unresolvable ProviderClassName to be SKIPPED. Thatelsebranch is DEAD CODE:ClassFactory.CreateInstancedoes not return null for an unknown key, it falls back to instantiating the ABSTRACT BASE (PermissionProviderBase). The engine therefore installs a method-less stub as a live provider. This check asserts the properties that are safety-relevant and true (no crash at Config time, real domains unaffected, nothing granted); PE13 pins the consequence that is NOT safe.