# 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`.
