E2E QA surfaced a silent-drop bug in the exam-schedule endpoint: the
frontend's student picker sends `op.student.id` values (that's what
/api/students returns), but `encoach.exam.schedule.student_ids` is a
Many2many → res.users. The controller was writing the op.student id
straight through, so schedules linked to whichever res.users row
happened to share that integer id (OdooBot, other staff, etc.) — the
target student got 0 assignments and never saw the exam.
- exam_schedules.py: add `_resolve_student_user_ids` and use it in the
create and update endpoints. Falls back to treating unmatched ids as
direct res.users ids for back-office callers.
- AssignmentsPage.tsx: add a search input + larger list to the
Individual Students picker; long lists were leaving Sarah unreachable
inside the inner scroll container during QA.
Made-with: Cursor