v26.4.0
What's Changed (v26.3.2 → v26.4.0)
✨ Features
RBAC (Role-Based Access Control) Management
Full RBAC management UI for superadmins — create, edit, delete, and assign roles with fine-grained permission control. Includes permission matrix visualization and project-scoped role support.
- FR-2207: add RBAC management UI specification by @ironAiken2 in #5746
- FR-2219: add RBAC management route, menu item, feature flag, and i18n keys by @ironAiken2 in #5766
- FR-2220: implement role list page with query, table, and filters by @ironAiken2 in #5767
- FR-2221: implement role creation modal with adminCreateRole mutation by @ironAiken2 in #5768
- FR-2222: implement role detail drawer with metadata and tab placeholders by @ironAiken2 in #5769
- FR-2223: extend RoleFormModal for edit mode with adminUpdateRole mutation by @ironAiken2 in #5770
- FR-2224: add role delete and purge with confirmation dialogs by @ironAiken2 in #5771
- FR-2225: implement role assignment management with assign/revoke by @ironAiken2 in #5772
- FR-2226: implement permission management with create/delete by @ironAiken2 in #5773
- FR-2238: migrate RBAC tabs to Role sub-connections with server-side ordering by @ironAiken2 in #5782
- FR-2239: add bulk role assign/revoke mutations by @ironAiken2 in #5783
- FR-2240: add permission update mutation with edit mode by @ironAiken2 in #5784
- FR-2242: implement BAIAdminSessionSelect for RBAC permission modal by @ironAiken2 in #5888
- FR-2244: implement BAIAdminModelServiceSelect for RBAC permission modal by @ironAiken2 in #5889
- FR-2245: implement BAIAdminModelServiceSelect for RBAC permission modal by @ironAiken2 in #5890
- FR-2246: implement BAIAdminKeypairSelect for RBAC permission modal by @ironAiken2 in #5891
- FR-2247: implement BAIAdminContainerRegistrySelect for RBAC permission modal by @ironAiken2 in #5892
- FR-2248: implement BAIAdminStorageHostSelect for RBAC permission modal by @ironAiken2 in #5893
- FR-2402: filter RBAC operations by valid entity-operation combinations by @ironAiken2 in #6231
- FR-2435: replace separate RBAC combination queries with unified rbacPermissionMatrix API by @ironAiken2 in #6327
- FR-2498: add project scope support to RBAC role management by @ironAiken2 in #6515
Model Service Launcher Enhancements
Advanced model service launcher with CLI command parsing, YAML generation, runtime parameter configuration UI, and improved folder/mount management.
- FR-2440: add CLI command parser utility for Paste Your Command by @agatha197 in #6341
- FR-2441: add command-based model service creation with CLI parsing and YAML generation by @agatha197 in #6342
- FR-2444: add advanced collapsible card with toggle and URL sync for service launcher by @agatha197 in #6374
- FR-2444: display runtime parameters in BAICard with category tabs by @yomybaby in #6384
- FR-2446: add runtime extra args parser utility by @agatha197 in #6377
- FR-2446: add runtime parameter fallback metadata by @agatha197 in #6378
- FR-2446: add runtime parameter schema hook and form component by @agatha197 in #6379
- FR-2446: integrate runtime parameter UI into service launcher by @agatha197 in #6380
- FR-2453: add JSON schema validation and autocomplete for definition files in Monaco editor by @yomybaby in #6438
- FR-2456: enable folder explorer in edit mode for model storage by @yomybaby in #6398
- FR-2457: change runtime parameter hint to Alert info component by @yomybaby in #6396
- FR-2458: add Open/Create/Refresh buttons to VFolderSelect by @yomybaby in #6397
- FR-2459: restore mount path specification for additional mounts by @yomybaby in #6399
- FR-2462: improve runtime variant UX with search prefill and ordering by @yomybaby in #6411
EduAppLauncher Refactoring
Complete React refactoring of EduAppLauncher — migrated to Relay for session lookup, replaced legacy proxy with hooks, added step-based card UI with new-window fallback and improved error handling.
- FR-2483: resolve apiEndpoint empty-value in EduAppLauncherPage by @nowgnuesLee in #6459
- FR-2484: migrate EduAppLauncher session lookup to Relay with staged state machine by @nowgnuesLee in #6460
- FR-2485: integrate useBackendAIAppLauncher hook and delete appLauncherProxy.ts by @nowgnuesLee in #6461
- FR-2486: replace CustomEvent notifications with useSetBAINotification by @nowgnuesLee in #6462
- FR-2487: add step-based card UI to EduAppLauncher by @nowgnuesLee in #6463
- FR-2496: EduAppLauncher new-window fallback + launch-flow hardening by @nowgnuesLee in #6498
Diagnostics System Enhancement
Enhanced diagnostics with CSP checks, configurable thresholds, result filtering/export, and auto-diagnostics notification after login with sidebar badge indicator.
- FR-2300: add CSP frame-src diagnostic check by @agatha197 in #5970
- FR-2300: add configurable storage volume threshold by @agatha197 in #5974
- FR-2300: add toggle to hide passed diagnostics results by @agatha197 in #5976
- FR-2300: add diagnostics result export by @agatha197 in #5977
- FR-2300: add auto-diagnostics notification after login by @agatha197 in #5978
- FR-2429: replace admin diagnostic notifications with sidebar badge by @yomybaby in #6313
Keypair Self-Service Management
New self-service keypair management modal allowing users to issue, deactivate, and set main keypairs with filtering, sorting, and pagination.
- FR-2183: rename MyKeypairInfoModal to legacy and add
@sincebranching by @agatha197 in #6099 - FR-2183: create MyKeypairManagementModal with myKeypairs query, tabs, and table by @agatha197 in #6100
- FR-2183: add issue new keypair mutation and credential result modal by @agatha197 in #6102
- FR-2183: add set as main and deactivate actions for active tab by @agatha197 in #6103
- FR-2183: add filtering, sorting, pagination and fix schema alignment by @agatha197 in #6108
Superadmin Pages
New dedicated admin pages for sessions, serving endpoints, and data management, giving superadmins direct access to manage resources across all projects.
- FR-2316: add Admin Session list page for superadmin by @yomybaby in #6124
- FR-2317: add AdminVFolderNodeListPage for superadmin data management by @yomybaby in #6122
- FR-2318: add Admin Serving page for superadmin with modify/delete support by @yomybaby in #6125
Session Dependency Management
Users can now define dependencies between sessions, allowing sessions to wait for prerequisite sessions to complete before starting.
- FR-1741: add session dependency management UI by @agatha197 in #5595
Model Store Improvements
Improved model item display and filtered model store list to show only vfolders with MOUNT_IN_SESSION permission.
- FR-2382: model item UI improvement by @agatha197 in #6254
- FR-2413: filter model store list by cloneable vfolder with MOUNT_IN_SESSION permission by @agatha197 in #6262
Multi-Step Async Notification System
New notification system that displays multi-step progress for long-running async operations with real-time status updates.
Login & Authentication Enhancements
Concurrent login session guard with force-login support, distinct error messages for different login failure types, and password change email flow.
- FR-2189: add concurrent login session guard with force-login support by @nowgnuesLee in #6174
- FR-2377: add distinct error messages for each login failure type by @ironAiken2 in #6340
- FR-2228: add password change email modal to login form by @ironAiken2 in #6033
- FR-2190: add allowed client IP setting to user profile modal by @ironAiken2 in #6137
Session Launcher Improvements
Resource-aware cluster size warning, default cluster mode changed to multi-node with per-option descriptions, and auto-conversion of multi-node x1 to single-node.
- FR-1427: add resource-aware warning for cluster size selection by @yomybaby in #6025
- FR-2323: change cluster mode default to multi-node with per-option descriptions by @yomybaby in #6163
UI Component Enhancements
New BAI components and improvements — BAIBadge with semantic colors, BAIModal with minimize/maximize/fullscreen modes, BAIDeleteConfirmModal, BAINameActionCell with copy-on-hover, and table selection clear button.
- FR-1609: add BAIBadge component with semantic color support by @nowgnuesLee in #6175
- FR-2213: add minimize, maximize, and fullscreen mode to BAIModal by @agatha197 in #5744
- FR-2424: add BAIDeleteConfirmModal and apply to resource-policy tables by @yomybaby in #6308
- FR-2411: apply BAINameActionCell to remaining table name columns by @yomybaby in #6273
- FR-2430: add copyable name icon on hover to BAINameActionCell by @yomybaby in #6311
- FR-2425: add clear-all-selection button to table row selection indicator by @yomybaby in #6321
- FR-40: add defaultUnit prop to BAIDynamicUnitInputNumber by @yomybaby in #6015
- FR-2302: add DatePicker UI for datetime type in BAIGraphQLPropertyFilter by @nowgnuesLee in #5992
Other Feature Enhancements
Various quality-of-life improvements including auto-refresh on endpoint pages, user purge enhancements, and theme logo customization.
- FR-2401: replace refresh button with auto-refresh button on endpoint detail page by @nowgnuesLee in #6229
- FR-2366: enhance user purge with bulk mutation and soft-delete label improvements by @ironAiken2 in #6155
- FR-2356: add per-area logo path and size configuration via theme.json by @ironAiken2 in #6141
- FR-2369: group admin menu items and hide empty groups based on config by @yomybaby in #6165
- FR-2432: make current IP address copyable in UserProfileSettingModal by @yomybaby in #6309
- FR-2427: update resource-policy tab names with resource policy suffix by @yomybaby in #6312
- FR-2428: add policy type prefix to resource-policy modal titles by @yomybaby in #6315
- FR-2473: add standalone button to view model service info on chat page by @ironAiken2 in #6469
- FR-2478: add action buttons to session name column using BAINameActionCell by @ironAiken2 in #6470
- FR-2482: display env vars as code block on serving detail page by @yomybaby in #6442
- FR-2384: enable LLM Chat Test button when any route is HEALTHY by @nowgnuesLee in #6178
🐛 Bug Fixes
Session & Service Launcher Fixes
Resolved cluster size validation, extra mount selection, session delegation resource group mapping, and single-node cluster mode conversion issues.
- FR-2474: fix cluster_size validation, extra mount selection, and VFolderSelect UI in service launcher by @yomybaby in #6432
- FR-2480: use resourceGroup instead of project for scaling_group in session delegation by @yomybaby in #6465
- FR-2381: convert multi-node x1 to single-node x1 in session launcher by @yomybaby in #6218
- FR-2466: show specific warning message for single-node cluster mode in session preview by @ironAiken2 in #6466
- FR-2315: add missing form field dependencies for validation recalculation by @yomybaby in #6162
Data & Display Fixes
Fixed session resource display for terminated sessions, live stat key parsing for hyphenated device names, and artifact import error display.
- FR-2412: display resource amounts for terminated sessions in session list table by @yomybaby in #6272
- FR-2492: fix live stat key parsing for hyphenated device names by @yomybaby in #6483
- FR-2364: remove nullable artifactRevision size check that caused successful imports to show as errors by @nowgnuesLee in #6130
- FR-2380: show seconds in scheduling history timestamps by @nowgnuesLee in #6192
UI & Styling Fixes
Fixed dashboard card table scroll overlap, endpoint status tag color alignment, notification banner behavior, and theme settings consistency.
- FR-2410: fix dashboard card table scroll overlap with sticky header by @ironAiken2 in #6266
- FR-2390: align endpoint status tag colors with route status colors by @nowgnuesLee in #6190
- FR-2337: toggle See Detail/See Summary text and reset notification banner on reconnection by @ironAiken2 in #6167
- FR-2376: use themeMode as single source of truth for theme settings by @ironAiken2 in #6166
- FR-2433: standardize refresh button position above tables by @yomybaby in #6314
- FR-2319: fix resource bar graph alignment in agent table by @nowgnuesLee in #6084
Schema & API Fixes
Updated GraphQL schema, fixed route type definitions, and corrected dotfiles delete API call.
- FR-2443: update route types to match changed GQL schema by @nowgnuesLee in #6346
- FR-2400: update schema with login history/session types and rename SubStepResult to SubStepResultGQL by @nowgnuesLee in #6222
- FR-2414: send dotfiles delete path as query parameter instead of request body by @ironAiken2 in #6264
- FR-2408: add missing BAINameActionCell component files by @yomybaby in #6271
Other Fixes
Miscellaneous fixes including TOML parsing, SSH key warnings, BAITable column overrides, config parsing, and interactive login route.
- FR-2355: handle duplicate TOML keys in config.toml parsing by @ironAiken2 in #6107
- FR-2372: correct misleading SSH keypair private key warning message by @yomybaby in #6160
- FR-2415: fix misleading SSH private key warning message by @ironAiken2 in #6267
- FR-2363: merge defaultColumnOverrides with columnOverrides in BAITable by @yomybaby in #6127
- FR-2385: comment out unsupported traffic ratio column in route list by @nowgnuesLee in #6180
- FR-2389: fix i18n translations for FromHuggingFace key by @agatha197 in #6188
- FR-2497: add null check for extra_mounts vfolder rendering in EndpointDetailPage by @yomybaby in #6500
- FR-2306: replace typescript-json-schema with TS Compiler API for theme schema generation by @yomybaby in #5995
- FR-2423: apply BAIDeleteConfirmModal to RBAC and AI Agent delete confirmations by @yomybaby in #6319
- fix: add LoginView to /interactive-login route to resolve blank page by @rapsealk in #6494
- fix: correct onCancel type signatures for modal components by @yomybaby in #6027
- fix: resolve ShellScriptEditModal crash and antd deprecation warnings by @agatha197 in #6257
- fix: resolve RBAC stack PR review feedback (#5767~#5891) by @ironAiken2 in #6034
- fix: prevent formItemProps spread from overwriting validation rules in EnvVarFormList by @yomybaby in #6404
- fix: make plugins copy optional in serve-release script by @yomybaby in #6139
- fix: increase Node.js heap memory limit for dev server to prevent OOM crashes by @yomybaby in #6017
- fix: increase Workbox maximumFileSizeToCacheInBytes to 5MB to fix CI build by @yomybaby in #6419
- fix: add missing i18n translations for modelService and notification keys by @yomybaby in #6275
- fix: remove .skip from screenshot seed spec for Playwright MCP compatibility by @yomybaby in #6018
🔨 Refactoring
Code Cleanup & Architecture
Extracted shared service creation utilities, bundled i18n dependencies, removed legacy code, and cleaned up React-to-WebComponent wrappers.
- FR-2404: extract shared service creation utilities into useModelServiceLauncher hook by @yomybaby in #6241
- FR-2020: bundle i18next and react-i18next as dependencies in backend.ai-ui by @nowgnuesLee in #6088
- FR-2352: remove unused React-to-WebComponent wrappers and DefaultProvidersForWebComponent by @ironAiken2 in #6149
- FR-1929: remove all model_card_metadata.json related code by @yomybaby in #6226
- FR-2300: move checkSslMismatch to configRules by @agatha197 in #5971
- refactor: add internal Suspense boundary to ModelBrandIcon and improve grid responsiveness by @agatha197 in #6322
🎨 Style
- FR-2353: use white logo variant on login page in dark mode by @nowgnuesLee in #6086
- FR-2460: clean up cluster mode card wrappers and runtime parameter alert by @yomybaby in #6407
- FR-2481: replace storage node permission badge with lock icons by @yomybaby in #6441
🧪 E2E Tests
New Test Coverage
Added comprehensive E2E tests for vfolder types, chat service, serving deployment, datetime filters, bulk user creation, user profile settings, password recovery, allowed IP restrictions, session dependencies, and cluster mode warnings.
- FR-2287: add E2E tests for vfolder type selection by @agatha197 in #5935
- FR-2286: add E2E tests for chat service with mock model service by @agatha197 in #5933
- FR-2295: add serving deploy lifecycle integration test by @agatha197 in #5940
- FR-2308: add E2E tests for datetime filter in session scheduling history modal by @nowgnuesLee in #6000
- FR-1817: add E2E tests for bulk user creation feature by @ironAiken2 in #5843
- FR-2386: add E2E tests for User Profile Setting Modal by @ironAiken2 in #6182
- FR-2434: add E2E test for allowed IP restriction enforcement during active session by @ironAiken2 in #6318
- FR-1741: add E2E tests for session dependency management by @agatha197 in #5601
- FR-2381: add E2E tests for multi-node x1 cluster mode warning by @yomybaby in #6220
- add E2E tests for forgot password flow by @ironAiken2 in #6133
- add E2E tests for vfolder mount permission controls by @agatha197 in #5958
E2E Test Fixes
Resolved strict mode violations, flaky assertions, and timeout issues across existing E2E tests.
- FR-2275: fix BAIPropertyFilter click timeout in environment E2E tests by @agatha197 in #5943
- FR-2273: fix app-launcher E2E tests to pass without skipping by @agatha197 in #5944
- FR-2278: mark session-lifecycle E2E tests as fixme when no agent available by @agatha197 in #5945
- FR-2274: fix dashboard Resource Group Widget E2E test for empty quota state by @agatha197 in #5947
- FR-2279: fix user-crud E2E test fragile radio assertion and keypair modal name by @agatha197 in #5948
- fix registry delete cancel E2E test strict mode violation by @agatha197 in #5955
- fix session-scheduling-history-modal E2E test strict mode violation by @agatha197 in #5960
- update e2e tests for renamed resource policy modal titles by @yomybaby in #6333
🛠 Chores
- FR-2298: update Jira tool references from fw-jira to jira-workflow skill by @yomybaby in #5963
- FR-2305: bump version to 26.4.0-alpha.0 and update dependencies by @yomybaby in #5985
- FR-2296: add playwright-video.config.ts for e2e GIF recording workflow by @agatha197 in #5951
- FR-2237: add i18n translations for RBAC keys across 19 languages by @ironAiken2 in #5778
- FR-2300: add i18n translations for diagnostics keys across all languages by @agatha197 in #5980
- FR-2383: unify TOML parser — replace remaining markty-toml with smol-toml by @ironAiken2 in #6253
- FR-2387: add playwright-cli and webui-connection-info skills by @yomybaby in #6184
- FR-2388: update GraphQL schema and fix artifactRevision field rename by @ironAiken2 in #6186
- FR-2495: add antd v6 prop conventions rule by @nowgnuesLee in #6480
- fix untranslated toTextKey in auto-diagnostics notification by @agatha197 in #6116
- add create-release skill and merge branch lockfiles by @yomybaby in #6359
- FR-2357: use pnpm publish to resolve catalog protocol in backend.ai-ui by @nowgnuesLee in #6104
📝 Documentation
- FR-2310: update E2E coverage report with comprehensive audit by @yomybaby in #6013
- FR-1817: add bulk user creation documentation to admin menu by @ironAiken2 in #5851
- FR-2174: fix cross-page link resolution bug in docs-toolkit by @yomybaby in #6223
📋 Specifications
- FR-2301: add diagnostics system enhancement feature spec by @agatha197 in #5968
- FR-2183: add keypair self-service management feature spec by @agatha197 in #6019
- FR-2382: add Model Store improvement feature spec by @yomybaby in #6173
- FR-2391: add multi-step async notification feature spec by @yomybaby in #6193
- FR-2445: add advanced mode for model service launcher feature spec by @agatha197 in #6349
- FR-2447: add runtime parameter configuration UI feature spec by @agatha197 in #6352
- FR-2453: add definition file schema validation spec by @agatha197 in #6366
- FR-2470: add EduAppLauncher React refactoring spec by @nowgnuesLee in #6427
- FR-2470: add EduAppLauncher refactoring dev plan by @nowgnuesLee in #6458
Full Changelog: v26.3.2...v26.4.0