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-distributionbackend endpoint andget_grade_distribution_stats()service methodmaster_courses_child_subscriptionsadded 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_pagesadded 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 theviolationstable in thelisaschema - 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
FlagCellcomponent — 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) andsetup_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
lisaschema (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
usePaginatedTablehook extended to manage pagination and sort state for the main compliance views (previously only used for drill-down tables), eliminating duplicated state logic inApp.tsx- Assignment title filter restricted to the grading compliance view; it is not wired to discussion or announcement views
InfoTable.tsxrenamed toInstructorInfoTable.tsx- Discussion compliance now assessed per-discussion topic rather than per course
- Discussion compliance uses assignment due date instead of
posted_atorcreated_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_dumpinside the Docker container rather than relying on a host-installedpg_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_SECUREenabled in production- User-supplied strings sanitized before use as query input