venue_coaches; academy_classes.max_members, accepts_enrollment_requests; academy_class_schedule_slots; academy_class_enrollment_requests; academy_class_invitations (token UUID).EnsureCoachIsActiveOnVenue), exceto super_admin.SyncAcademyClassScheduleSlotsAction; rótulo automático AcademyScheduleLabelFromSlots se schedule_label vazio.AcademyClass::hasMemberCapacity() / remainingMemberCapacity(); inscrição direta e pedidos respeitam limite.CreateAcademyClassEnrollmentRequestAction, ApproveAcademyClassEnrollmentRequestAction, RejectAcademyClassEnrollmentRequestAction, CancelAcademyClassEnrollmentRequestAction.InvitePlayerToAcademyClassAction, AcceptAcademyClassInvitationAction, DeclineAcademyClassInvitationAction, mailable PlayerInvitedToAcademyClassMail (fila).AttachAcademyClassMemberAction partilhado com AddAcademyClassMemberAction.ManageVenueCoaches (pesquisa treinador por nome/email, estilo roster), TrainingClasses (select de treinadores: nome — email), BrowseAcademyClasses, InvitationRespond, roster com fila de pedidos + convite; MyEnrollments com convites/pedidos; my-venues + sidebar.AcademyClassPolicy::browseOpenClasses, requestEnrollment; AcademyClassEnrollmentRequestPolicy::cancel; AcademyClassInvitationPolicy::view, accept, decline.Implementar a estratégia em kolos_academy-coach-venue-schedule-requests-strategy.md.
vendor/bin/sail artisan test (ou php artisan test)vendor/bin/sail composer pint --testacademy_classes.skill_category_codes (JSON, opcional: lista C/B/A) e gender_mode (mixed / male / female, defeito mixed).AcademyClassSkillCategory, AcademyClassGenderMode; CreateAcademyClassData / UpdateAcademyClassData e actions; UI em Turmas na arena, criar turma (treinador), listagens (procurar turmas, minhas turmas).php artisan migrate em todos os ambientes.attachCoachToVenue() em tests/Pest.php para dados mínimos de arena + coach.