Class LaravelUi5\Sdk\Security\Exceptions\MissingAbilityException

extends RuntimeException

A deployment error, and the one that used to be invisible: an artifact carries an #[Access] or #[Act] attribute, its module is synced, but the ability itself has no row in sdk_abilities — so the declaration has no id.

Before this existed, that resolved to null, and null is the resolver's word for "this artifact declares no gate". The two states collapsed into one, and the consumers — CheckAuthMiddleware and every AbstractSdkFormRequest — read it as the Open Gate Philosophy: no gate, let it through. A freshly declared gate therefore protected nothing until ui5:sync had run, and nothing said so.

The information was never missing; it was discarded. The resolver reflects the attribute first, so it knows the declaration exists, and then threw that fact away when the row lookup came back empty. Now it throws this instead.

Reached in the window between deploying code that adds a gate and running ui5:sync — most easily on a zero-downtime deploy where the new revision takes traffic before the chain runs, and on any developer machine where a new attribute has not been synced yet.

Methods
Methods inherited from Exception
__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()