- assignRole() takes optional $context and $expiresAt, stored on the pivot
row. Called without them it behaves exactly as before.
- roleAssignment($role) returns the member's active pivot row (context,
expires_at, created_at = when it was given), or null.
- RoleMember $fillable gains member_type and member_id. RoleMember::create()
used to drop them silently, so a direct row for a model without HasRoles
could not be written.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>