40227-vm/docs/backlog.md

3.2 KiB

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. Truly-global personality and classroom-timer catalogs live in frontend constants, not DB rows.

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.