Skip to content

Changelog

All notable changes to cass. Generated by git-cliff from conventional commits.

0.3.0 - 2026-09-27

Features

  • quizzes: Download quiz and survey responses (aea6b70)

Bug fixes

  • canvas: Prefer .canvastoken over .canvascreds (1f2773d)

Documentation

  • State live verification steps in CLAUDE.md (33e13fe)

Testing

  • Add live Canvas tests, practice-course seeding, and PR convention (f607467)
  • quizzes: Live tests for downloading quiz responses (83f8ef1)

0.2.0 - 2026-09-16

Features

  • viewer: Generic DB viewer for SQLite/DuckDB files via ibis (32bc409)
  • viewer: Type-aware cell editors in generic DB viewer (5346687)
  • canvas: Authenticate with browser session cookies (000af40)
  • canvas: Add Chrome login support (3390b27)
  • cli: Add cass canvas calendar for calendar event CRUD (8af5b65)
  • cli: Assignment group create/delete and --description flag (8c74890)
  • cli: Fold long table values instead of truncating (86c6952)
  • canvas: Quiz authoring, --config, and course-local times; split CLI and client packages (b13c23f)

Bug fixes

  • viewer: Generic viewer grid renders rows (1ef8f2e)
  • canvas: Bugs found dogfooding against the practice course (00de16d)
  • Stale table references and viewer roster after GitHub removal (5687981)
  • release: Restore bumped files when the release commit fails (0c7183b)
  • release: Reset staged files from HEAD and tag inside the rollback guard (2f8bed9)
  • db: Use an injected connection without resolving project config (8a267ae)

Refactoring

  • viewer: Remove GitHub Classroom surfaces (a744a0e)
  • Remove GitHub Classroom from CLI, pull, database, and config (62e5a41)

Documentation

  • Drop GitHub Classroom from docs and metadata (c771c4f)
  • Drop GH type prefix from CLAUDE.md style notes (a8aede1)
  • Add zensical site with guide, CLI, and API reference (2a9f69d)
  • readme: Name uv as the install prerequisite (0ee4993)
  • Document gate tasks, commit convention, and release flow in CLAUDE.md (32a603d)
  • Regenerate changelog after history rewrite (5f3155f)

Testing

  • Pin terminal width so CLI output assertions are stable (87471c2)
  • canvas: Run browser-session tests on non-macOS runners (02c4ad7)

Build and CI

  • Add deps for duckdb features and clean up (81860d5)
  • Add git-cliff config and generated changelog (711cc42)
  • Add gate workflow and check-only poe tasks (c5311b4)
  • Deploy docs to GitHub Pages (8353099)
  • Release to PyPI via trusted publishing on tag push (abcd87f)
  • Lint scripts/ in the poe gate (784adec)
  • changelog: Render release dates in America/Los_Angeles (25c2122)
  • Build docs in the gate, pin commitizen, pass base_ref via env (e85dc7d)
  • Pin setup-uv to v10.1.0 (583d139)

Miscellaneous

0.1.1 - 2026-03-09

Features

  • Initial cass Python CLI (4336c50)
  • cli: Add db clean/export/import commands and enrich tables with API data (EJO-320) (a39e112)
  • canvas: Add rate limiting, retry transport, and resilient grade push (EJO-322) (08d9673)
  • cli: Add cass view to launch Dataflare on cass.db (EJO-324) (1a34afb)
  • canvas: Add typed API client, CLI subcommands, and expanded models (EJO-325) (74cfee5)
  • cli: Group help panels and style default output (bebf2af)
  • cli: Add interactive setup wizard to cass init (ef7acf4)
  • cli: Add cass backup and cass restore (2c0c90f)
  • viewer: Replace Dataflare with bundled browser-based viewer (8902aac)
  • viewer: Improve UX, add biome linting, drop unified views (schema v7) (fe7ed7a)
  • viewer: Add Canvas sync controls and improve assignments display (schema v8) (20ed142)
  • viewer: Hide IDs, enrich Canvas tables with names, mark generated tables read-only (c98ffec)
  • db: Add MotherDuck support for shared remote database (b565c61)
  • db: Schema v9 with SIS fields, post_manually, grading standards (8b6b1bf)
  • canvas: Bulk grade push via update_grades endpoint (EJO-326) (34b6f05)
  • canvas: Detect post_manually and post grades via GraphQL (EJO-327) (fddc1b7)
  • canvas: EGrades CSV export with letter grade conversion (EJO-328) (882a30f)
  • viewer: Add read-only Elm frontend (b795516)
  • viewer: Make Elm viewer the default and add elm-format (c143f6f)
  • viewer: Column ordering, CSV export, search fix, keyboard shortcuts in Elm viewer (ae38803)
  • viewer: Cell editing and Canvas push modal in Elm viewer (f1ff369)
  • viewer: Dark mode, responsive grid sizing, hidden filter inputs (a152633)
  • viewer: Design token system and elm-build on install (2ae646f)
  • viewer: Replace Elm frontend with Svelte 5, shadcn-svelte, TanStack Table (730d06b)
  • viewer: Replace shadcn and TanStack with DaisyUI, add inline editing (d76ccbb)
  • viewer: Integrate AG Grid data table (35ca17c)
  • viewer: NiceGUI prototype behind --nicegui flag (cf7c5f1)
  • viewer: Sidebar layout, column config, toolbar in NiceGUI viewer (ed6d558)
  • viewer: NiceGUI feature parity, remove Svelte frontend (d9ba4b7)
  • viewer: Revert button, pending badge, toast notifications (e154ad9)
  • viewer: Gradebook pivot, sidebar redesign, markdown export (4e4d286)
  • viewer: Default to gradebook, consolidate student name columns (5c16745)
  • viewer: Cell editors, date autocommit, pending highlights (423c1d2)
  • viewer: Two-row toolbar with sync pill and export buttons (a35dbab)
  • viewer: Setup wizard, auto-pull, state-based routing (7635b14)
  • db: Persist pending Canvas changes via synced shadow tables (731b802)
  • cli: Sectioned status and command summary as default output (ec44181)
  • github: Add cass pull-gh for student repo downloads (EJO-333) (189ba3a)
  • viewer: Pull GH button with limit controls and progress log (f8bc183)
  • viewer: Resizable sidebar with course title (a865777)
  • viewer: Wrap course title, pin badges, widen sidebar (8127290)
  • viewer: Move sync controls to sidebar, add Clone Repos button (88de4c7)
  • github: Excluded checkbox on roster to hide students (13a97d3)
  • viewer: Rename GH Submissions to Recent Commits, reorder sidebar (9ef6121)
  • viewer: Human-readable dates and column order in Recent Commits (7ed1d87)
  • viewer: Link Last Commit date to commit URL (5d4f2b7)
  • viewer: Create/delete assignment modals with Canvas auto-sync (34672f9)

Bug fixes

  • canvas: Assignment creation and CLI subcommand parsing (76db610)
  • github: Use Classroom roster names instead of profile lookups (20eba00)
  • cli: Save course name during CLI pull (241b8e7)
  • github: Show final project in viewer and deduplicate submission fetching (c786385)
  • github: Include GH-only students in submission fetching (856c940)
  • viewer: Show roster as view-only despite editable excluded toggle (cde86a0)
  • github: Use Classroom roster as authoritative source for submissions (ff0f995)
  • github: Format GH-only student names as "Last, First" (706932f)
  • viewer: Keep Clone Repos modal connected by threading git subprocess (bd62fbe)
  • db: Validate table names in SQL-interpolated queries (e81c1c0)
  • tests: Ty unsupported-operator errors in test_integration (7051535)
  • canvas: CanvasEnrollment uses nested grades dict like the real API (a30b61a)
  • viewer: Catch SystemExit in pull handler, hide empty GH sidebar (85cb6d8)
  • viewer: Boolean checkbox toggle bypasses AG Grid edit mode (b8baa33)
  • viewer: Plain commit count for assignments without deadlines (8518425)
  • viewer: Restore editable flag on boolean columns (56701d6)
  • viewer: Human-readable Last Commit dates in GH submissions (768fe28)

Refactoring

  • Remove backward compat, dead deps, and Go references (20e6388)
  • models: Split into package, rename fields, clean up decode path (EJO-319) (5b4279b)
  • canvas: Use CanvasClient and add config-as-data sync (EJO-325) (71edd4b)
  • db: Rename database file to cass.duckdb (3ede0bf)
  • db: Schema v6 with source-specific tables, Canvas-authoritative roster, separate cache (71d3812)
  • viewer: Elm-ui layout and multi-module Elm architecture (dffbf93)
  • Reorganize into cli/, github/, canvas/ subpackages (df4d9f8)
  • viewer: Impossible states, custom types, dedup table logic (755e6de)
  • Remove dead code, deduplicate, consolidate GitHub API path (20e1b8a)
  • Drop underscore prefixes from private functions (d8c10d1)
  • canvas: Shared sync module for CLI and viewer push (0d2a887)
  • viewer: Split into modules, per-table column config (c2f0bea)
  • viewer: Replace custom CSS with Tailwind/Quasar and NiceGUI layouts (68894e6)
  • canvas: Move CLI push logic into canvas/sync.py (47cf525)
  • viewer: Replace custom sidebar and keyboard JS with NiceGUI built-ins (f7d0674)
  • github: Gradebook pivot, enriched queries, schema v12 (3823667)
  • viewer: Move students/assignments to Dev section, remove Combined group (4f0eb02)
  • db: Harden viewer SQL, extract shared functions, add tests (2da6317)
  • viewer: Pull GH modal with student/assignment selects and remove action (99e5a4c)
  • viewer: Class-based modules following NiceGUI pattern (8bfdaaa)
  • viewer: Single CSS file with @layer components (1c24dd8)
  • viewer: Class-based modals and consolidated actions module (bc03d3a)
  • viewer: Split grid.py into data/service/UI layers (42c9255)
  • Migrate to SQLite and restructure into layered packages (3aac040)

Documentation

  • Add Linear project setup and DuckDB CLI notes to CLAUDE.md (4b40533)
  • Recommend Dataflare as interactive DB viewer (EJO-324) (e499e45)
  • Add Google-style docstrings, CLI help text, README, and pdoc setup (EJO-323) (75e4f07)
  • Update README and CLAUDE.md for canvas API layer (EJO-325) (2af8293)
  • Add CLI command reference tables to pdoc root page (6a2bac5)
  • Describe browser-based viewer, drop Dataflare references (ad50750)
  • viewer: Add Elm viewer walkthrough (303f21d)
  • Rewrite CLAUDE.md and README.md for current architecture (b77b9ca)
  • Add svelte CLI instructions to CLAUDE.md (5237c76)
  • Drop Svelte references, consolidate around NiceGUI (b469f6c)
  • Rewrite README with viewer-first, Canvas-primary framing (4db7ff9)
  • Add update instructions to README (c6b3bc5)
  • Update README (8eec0fe)

Testing

  • viewer: Cover setup flow state detection, config, pull (a6e3d61)
  • viewer: Add NiceGUI User-fixture integration tests (d68dea9)
  • Add integration suite with anonymized seed data (a8817ee)
  • viewer: Add Tier 1 UI integration tests (70dc24a)
  • viewer: Tier 2 tests for preview HTML, markdown export, Canvas sync, UI wiring (d9b2f1a)

Build and CI

  • Add pytest-xdist for parallel tests (4832b31)
  • Add PyPI release script and untrack .cass_cache.db (77d2a30)
  • Rename PyPI package to cassroom (98d9dfe)

Miscellaneous

  • Merge canvas API layer branch (EJO-325) (24d2975)
  • Enable basedpyright strict mode with zero errors (0b46813)
  • Add ruff rule config and fix basedpyright leftovers (d23af68)
  • viewer: Remove Elm code after Svelte migration (ae92158)
  • Post-merge cleanup (58aa3d7)