AuthContextMissingException
The 401 signal that {@see \Milpa\Auth\Http\RequireScopeMiddleware} had no *authenticated* actor to authorize — the two ways that happens are distinct, so this carries two named constructors with two machine codes. {@see self::notAttached()} means nothing populated the request's auth attribute (the pipeline is wired wrong — no authenticate/session middleware ran first); {@see self::unauthenticated()} means one did, but the request is anonymous or its credential was rejected. Both are 401, both fail-closed, and neither message names the credential.
AuthContextMissingException::notAttached()
public static function notAttached(): selfThe request carried no auth context at all — RequireScope ran before anything produced one.
AuthContextMissingException::unauthenticated()
public static function unauthenticated(): selfThe request has a context but is not authenticated — anonymous, or its credential was rejected.