Skip to content

v0.8.0

Choose a tag to compare

@Xevion Xevion released this 11 Sep 01:54
91fdebc

0.8.0 (2026-09-11)

Features

  • backend: Add multi-layer per-IP rate limiting middleware (a106025)
  • backend: Implement rate limit error handling with client-side retry (84bb179)
  • bot: Add course watch notifications via Discord DMs (dfd30a1)
  • bot: Paginate /search results with embeds and buttons (2523c38)
  • course-table: Add a menu for building multi-key sorts (3d70274)
  • course-table: Add end-time sort, span untimed rows, align clock parts (b338cec)
  • course-table: Redesign columns and add instructor sort cycle (d21e338)
  • deploy: Add Helm chart for k3s deployment, drop Railway coupling (a3b2643)
  • search: Order results by indexed columns instead of JSONB text (d479da0)
  • web: Add DB-backed readiness probe and access log target (7ea8dea)
  • web: Redesign schedule/seats cells with a day-track visualization (b1d16e7)

Bug Fixes

  • Add package overrides for minimatch and cookie vulnerabilities (9bbc97f)
  • backend: Exempt static assets from rate limiting (b34df19)
  • ci: Remove deleted scripts/ dependency from security job (cbccebc)
  • deploy: Harden Helm chart against replica races and Discord redirect misconfig (2ea094a)
  • deps: Patch quinn-proto DoS and devalue prototype pollution (3faa801)
  • deps: Suppress transitive advisories and pin trivy-action (0d49c69)
  • filter-bar: Make the term and instructor pickers behave for keyboard and screen readers (9d8ca38)
  • filter-bar: Stop the term, subject, and search boxes closing on their own (9de99c1)
  • scraper: Replace single-page search with paginated search_all in subject job (0f44a82)
  • search-autocomplete: Unwrap microfuzz CJS default under rolldown bundling (23b1172)
  • security: Update svelte to 5.53.5 to patch XSS vulnerabilities (a5f163c)
  • ssr: Stop module-level caches from leaking across server requests (506310e)
  • stories: Stop addon-svelte-csf rendering bare components without props (f04bcef)
  • tempo: Recurse subdirectories when copying ts-rs bindings (c481aa8)

Performance Improvements

  • backend: Deferred sync bot client init, non-blocking schedule cache load (f607403)
  • backup: Replace in-memory dump+compress with streaming multipart upload (3b62a51)
  • data: Add course_meetings table, eliminate JSONB schedule parsing (145d5f9)
  • data: Precompute per-term aggregates and add maintenance jobs (95f9bfd)

Code Refactoring

  • Add error context to uncovered db operations and harden stream subscription lookup (4ae1409)
  • admin: Give the scraper tables one cell definition each (3050359)
  • admin: Share one matching table between bluebook and rmp (b71a6ea)
  • autocomplete: Pull the typeahead query and merge logic out of the components (11f2195)
  • backend: Cleanup AppState, parallelize startup, move bg tasks, fix layering (708ab81)
  • course-table: Key every column table on one ColumnId union (9a6749d)
  • course-table: Split cell components and extract shared state helpers (840a5a8)
  • data: Derive the sort key list instead of writing it out (288d7b2)
  • data: Move the sort layer into its own module (ef5b45f)
  • data: Replace fixed-parameter search functions with SearchFilter struct (7d31d0c)
  • data: Type JSONB columns and bind pagination parameters (a70c9ac)
  • Decompose routes.rs into focused handler modules (e3bd22c)
  • Delete dead code and correct stale RUST.md docs (2e6189d)
  • Extract database query functions into data layer (a6b00fd)
  • Extract reusable table components and deduplicate slow-op logging (8b5d052)
  • scraper: Replace immediate retry with jittered backoff, bound SSR client (5907466)
  • scripts: Replace bun script suite with tempo CLI (81a6a6b)
  • ssr: Replace Bun entrypoint script with Rust-supervised Node SSR (d1df760)
  • Standardize data layer signatures to pool-first, use anyhow::Context (a4566cc)
  • tempo: Switch to 0.2.0 engine, rework bindings generation, add deploy secret sync tasks (5b2f9b9)
  • web: Drop attributeMap from CourseDetailContext, modernize Storybook stories (c2b3928)
  • web: Use get_all_terms in search options (6e5e924)

Continuous Integration

  • e2e: Keep the artifacts that explain a browser failure (a7e4432)
  • Replace the hand-rolled audits with the advisory scanner (d3ede7f)
  • Restore gha build cache (5292112)
  • Switch docker build cache to GHCR, add mold/clang for faster builds (2c6df24)

Miscellaneous

  • deploy: Pin kubectl for direct k3s cluster access (60f9f92)
  • deps: Add undici as web dependency (5355461)
  • deps: Bump quinn-proto to 0.11.16 (e79ad87)
  • deps: Fix frontend security vulnerabilities in web deps (eb17de6)
  • deps: Refresh dependencies and bound the cookie override (796ed77)
  • deps: Update frontend dependencies (c53f40e)
  • deps: Update rust crate chrono to v0.4.45 (#11) (291f1fb)
  • deps: Update rust crate extension-traits to v2.0.2 (#12) (44961f3)
  • renovate: Migrate matchPackagePatterns to matchPackageNames (7fe7870)