# Backlog — Open Gaps and Remaining Work Persistent list of deferred work and known gaps so they are not forgotten. **This is the single source for open/remaining work**. Completed phase history belongs in git, not in this file. ## Current Open Work - ⛔ **Design-gated:** generic-CRUD management UIs for the remaining entities, including the SIS-kept academic groups. - **Audio library:** wire the binary upload affordance; replace the local `generateSoundRecipe` stub with a real AI generation call when credentials/product decision are available. ## Scope Context Hierarchy: **Global → Organization → School → Campus → Class**, plus **External** for student/guardian accounts. Scope tiers → roles: - Global: `super_admin`, `system_admin` - Organization: `owner`, `superintendent` - School: `principal`, `registrar` - Campus: `director`, `office_manager` - Class: `teacher`, `support_staff` Two scoping modes coexist: - **Aggregate / subtree:** statistics and attendance roll up through class → campus → school → org. - **Owned content:** FRAME, policy documents, walkthrough content, and per-tenant catalog rows are owned by the current tenant. Class-scoped users read/write campus-level content; class scope is reserved for roster/attendance-style data. - **Catalog-specific scope:** `content_catalog` also has school-scoped, org-scoped, and shared/global content types. Organization-owned quiz content and classroom support strategies live in DB rows; product-static personality directory and classroom-timer catalogs live in frontend constants. Important page/content rules: - Global users have platform/business pages at their own scope and use tenant drill/switching for support/onboarding. - Leadership Dashboard shows current-scope data for owner/superintendent/principal/registrar/director; platform admins use drill-down for tenant-scoped views. - Class roles read campus-level educational content; class scope is used for attendance and My Class. - Messages / Parent Communication is limited to `office_manager`, `teacher`, and `guardian`; contacts are discovered through linked students, and conversations are separated by staff/guardian/student context via `direct_messages`. - `content_catalog` reads go through authenticated `GET /api/content-catalog/read/:type` and are scoped by content type. ## Generic CRUD UI Wiring The backend exposes generated CRUD for these kept entities, but full list/edit/delete frontend management UI is still design-gated. This is separate from the existing workflow UIs: - `UserAdminPage` already manages user accounts and uses the seeded `roles` / `permissions` lists as selectors. New roles/permissions are code-seeded, not UI-created. - `Organizations & Locations` manages existing organizations, schools, campuses, and classes in the current scope; new organizations are created only through Owner creation on `Users`. - Parent Communication uses `direct_messages`; the generated `messages` / `message_recipients` tables are legacy/reserved CRUD slices, not the current guardian/staff chat implementation. Entities still awaiting generic management UI: `academic_years`, `grades`, `subjects`, `class_enrollments`, `class_subjects`, `assessments`, `assessment_results`, `attendance_sessions`, `attendance_records`, `timetables`, `timetable_periods`, `messages`, `message_recipients`.