Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.

[v1.0.6]

Changed

  • CE split now handled mostly by config/env to account for CE split from BACC

Fixed

  • Alembic print statements referencing potentially non-existent tables

[v1.0.5]

Added

  • simple search endpoints for quizzes, assignments, pages, filenames, discussions, and syllabi
  • warning for state between filters changing and pressing go
  • added toggle to include or hide gallery discussions in discussion view
  • canvas auth for search endpoints
  • export feature to remaining views

Fixed

  • instructor name not showing up in section info of grade dist. view
  • export feature not grabbing all rows

Changed

  • added assignment title to submissions view
  • hid gallery discussions by default in discussion view

[v1.0.4]

Fixed

  • Missing HOST environment variable stopping the server from launching

[v1.0.3]

Added

  • Citation and Attribution Learning Module view to see which students are assigned the module
  • CE badging view to see if CE instructors are grading badges since badges are manual there

[v1.0.2]

Added

  • teacher names to grade distrubition view on section names
  • published_score, max_possible, and pct_score to submissions view
  • inflated grade count now visible on compliance view

Changed

  • 7 week backup changed to a 9 week backup since grad terms are 8 weeks

[v.1.0.1]

Added

  • Export to csv option for each main view & submissions/discussion entries
  • blacklist/whitelist swap for assignment title filter in grading view
  • Grade Distribution view — fifth tab showing per-assignment grade distribution stats (mean, median, mode, sample standard deviation, min/max percentage and raw scores) aggregated across sections of a course, with course code and assignment title filters, optional per-section grouping, sorting, and pagination
  • /api/grade-distribution backend endpoint and get_grade_distribution_stats() service method
  • master_courses_child_subscriptions added to the tracked Canvas DAP table list (needed to map sections back to their shared assignment template for the Grade Distribution view)
  • Entries-read count added to the Discussion Response Compliance view — total per instructor on the main table, and per-discussion-topic in the expanded course detail

Changed

  • backup scripts hold 3 days, 1 & 2 week, 6 & 7 week backups. No more
  • Removed unneeded cast()/string-cast calls from compliance queries for a performance improvement (no longer required after moving the Postgres container off WSL networking)
  • Grade Distribution view columns and headers refactored to a single source-of-truth column list; filter bar reworked and total_pages added to the backend response for proper pagination

Fixed

  • Active test students appearing in some results

[v1.0.0]

Added

  • Instructor flagging — any compliance view can flag an instructor with a type (grading, discussions, announcements, other) and an optional note; flags are stored in the violations table in the lisa schema
  • Flags view — dedicated fourth tab listing all recorded flags, with sorting and filtering by term, instructor ID, flag type, reason text, and date range; supports inline editing and deletion
  • Flag column on all three compliance views showing current-term flag count and total lifetime flag count; clicking opens a flag creation dialog
  • FlagCell component — reusable flag button and count display used across all compliance views
  • Database backup scripts: backup_db.sh (pg_dump via the Docker container, saves custom-format dumps to /mnt/e/lisa_backups/, auto-prunes files older than 30 days) and setup_backup_cron.sh (registers a daily midnight cron job for the backup)
  • setup_sync_cron.sh — registers the twice-daily Canvas DAP sync as an explicit cron job for visibility
  • Alembic set up to manage app-owned data in the lisa schema (separate from Canvas-managed data)
  • SQLAlchemy models for app-owned tables (lisa_backend/models/models.py)
  • Announcements compliance view — lists instructors with per-course announcement counts and scheduled announcement counts
  • Discussion response compliance view
  • Login page with LDAP authentication
  • Manual database sync endpoint and frontend trigger
  • Filtering by module/term
  • Sortable columns (frontend and backend)
  • Pagination with next/prev controls and page indicator
  • Loading indicator component
  • Caching for instructor dashboard and discussion queries
  • Constants files for front and backend to reduce magic numbers
  • Logging for API events and database sync operations
  • Version number watermark
  • Assignment title filter (grading view only)
  • Instructor compliance main view is now secondarily sorted by total submissions
  • Users can now choose which assignment titles to filter out

Changed

  • usePaginatedTable hook extended to manage pagination and sort state for the main compliance views (previously only used for drill-down tables), eliminating duplicated state logic in App.tsx
  • Assignment title filter restricted to the grading compliance view; it is not wired to discussion or announcement views
  • InfoTable.tsx renamed to InstructorInfoTable.tsx
  • Discussion compliance now assessed per-discussion topic rather than per course
  • Discussion compliance uses assignment due date instead of posted_at or created_at
  • Instructor name is now a mailto link (email derived from name)
  • Metrics now exclude introduction discussions and late auto-graded submissions
  • Waitress used as the production WSGI server (dev/prod split)
  • API server auto-restarts on bad exits in production
  • UI overhauled for consistency and readability
  • Duplicate logic consolidated into reusable functions
  • Bash scripts no longer use hardcoded file paths
  • Database backup script runs pg_dump inside the Docker container rather than relying on a host-installed pg_dump

Removed

  • SQLite support (PostgreSQL only)
  • Unused code paths and redundant queries
  • "Beta" label from discussion compliance view
  • Filter bar from the Flags view (filters are inline in the table header)

Fixed

  • Incoming date range timestamps sanitized to start/end of day in EST/EDT before conversion to UTC
  • Data not loading after login
  • Column names not surfacing from backend to frontend
  • Compliance sums differing across modules vs. all-at-once calculation
  • Styles embedded in JSX moved to CSS

Security

  • SESSION_COOKIE_SECURE enabled in production
  • User-supplied strings sanitized before use as query input