Skip to content

v3.22.0

Choose a tag to compare

@willdady willdady released this 17 Oct 00:55
b2ce730

3.22.0 (2026-10-17)

Features

  • frontend: error boundaries for the root, segments and chat message parts (4ed4722), closes #1477
  • frontend: tell the user when a Chat opens on a substitute model (a6cc68e)
  • frontend: title Chat, Agent, Trigger and Organization pages by name (d4bf7e2), closes #1478
  • frontend: title every page and keep the app out of search indexes (2f6e089)

Bug Fixes

  • backend: say a rejected webhook URL may just be unreachable (#1525) (ed3c4ae)
  • docs: say a new Chat's last pick is per browser and lasts 24 hours (#1512) (8c3d336)
  • frontend: announce the remaining inline errors and keep spinners turning under reduced motion (0a5d81f), closes #1481
  • frontend: define --destructive-foreground and use it for destructive text (a5d0c3e), closes #1461
  • frontend: describe the empty workspace contexts list and name its tests by behaviour (409e352), closes #1471
  • frontend: don't open a card on the Enter that drops it, and pick label text by luminance everywhere (d3c932b), closes #1480
  • frontend: drop self-referencing shadow tokens so shadow utilities render (5bba29f), closes #1457
  • frontend: give the notification badge readable contrast in dark mode (c7208a5), closes #1461
  • frontend: guard Kanban, card dialog, invitation and pin actions against double submit (1249c16), closes #1474
  • frontend: honour BASE_PATH in absolute URLs and complete lib/routes.ts (5709815), closes #1472
  • frontend: key provider model rows on a stable id so row state stays with its model (8bb9d60), closes #1468
  • frontend: keyboard and screen-reader support for Kanban cards, notifications, the expand overlay and chat streaming (758975d), closes #1480
  • frontend: label only the in-flight card or comment action as pending (0ee9398), closes #1474
  • frontend: let the delete guard hand over when there is no backend URL yet (6de890d), closes #1488
  • frontend: link form errors and labels, honour reduced motion, and add page landmarks (9155474), closes #1481
  • frontend: make the root page spinner visible in dark mode (a7de17c), closes #1462
  • frontend: name inputs that had only a placeholder (#1529) (adff74a)
  • frontend: open the Kanban card dialog on click again (#1524) (47cbd4d)
  • frontend: remember a Workspace's last selection only when it is picked (ee4d4f1), closes #1503
  • frontend: report a Chat message part that stays broken only once (5fa903a)
  • frontend: restore the route's tab title when a Chat loses its name (baa2750)
  • frontend: sort copies of SWR results so lists never mutate the cache (6762c1f), closes #1458
  • frontend: stop prebuild clobbering .env.local, drop root force-dynamic, validate env and send security headers (2bd0510), closes #1490
  • frontend: stop revalidation wiping edits, stale Kanban card, OAuth double POST and blind delete guard (91aa3bb), closes #1488
  • frontend: stop useIsMobile and the Kanban board resubscribing media queries (c20a661), closes #1463
  • frontend: stub fetch with vi.stubGlobal so attachment tests restore it (cc278d0), closes #1465
  • frontend: title EmptyCards per ui-conventions (cc2dc6d), closes #1471
  • frontend: truncate long URLs in list cards (23175cf), closes #1494