InvitationResponse was missing project_name and invited_by_username fields, causing /invitations accept to redirect to /project/undefined. Now populated via async from_model() with batch DB lookups.