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 calendarfor 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¶
- Remove Linear tracking (cdbd9ff)
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 viewto 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 backupandcass 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-ghfor 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)