- GET /database/timetable/timetables with optional filters (R6-D) - Return empty collections instead of 400 when user has no school (R6-E) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- New router at routers/database/timetable/timetables.py - Accepts optional class_id, type, active query params - Returns {"timetables": [...]} scoped to caller's school - Fixed broken import path in run/routers.py (tools → timetable module) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- _require_institute returns Optional[str] instead of raising 400 - list_classes / my_teaching_classes / my_student_classes / list_school_students now return empty arrays when school_id is missing