What's Changed (v26.7.3 -> v26.8.0)
✨ Features
RBAC Permission Management
Reworked the RBAC surface around scope-level editing: a detailed permissions tab with per-scope-type tables, a scope-level edit modal, multi-scope bulk editing with keep-as-is semantics, and clearer feedback on save.
- FR-3271: add detailed permissions tab with per-scope-type tables and grant-state tags by @ironAiken2 in #8191, FR-3272: add scope-level permission edit modal replacing CreatePermissionModal by @ironAiken2 in #8192, FR-3273: add multi-scope bulk permission edit with keep-as-is semantics by @ironAiken2 in #8194
- FR-3355: show 'No changes made' message on no-op RBAC permission save by @ironAiken2 in #8360, FR-3357: surface failed users via bulk-error modal in RBAC user assignment by @ironAiken2 in #8363
- FR-3377: add assignedUser and mappedScope filters to RBAC role list property filter by @ironAiken2 in #8393
- FR-3317: add one-click project admin assignment action on project page by @ironAiken2 in #8264, FR-3320: add RBAC role detail shortcut on project admin setting modal and block direct assignment for system roles by @ironAiken2 in #8268
Scope-Aware Routing & URL State
The current project and scope are now encoded into the URL routing scheme, with the router owning 404 handling and route-handle-declared access control. Page state migrated from use-query-params to nuqs, and multi-tab pages gained a per-tab URL-persisted table state pattern.
- FR-3055: encode current project and scope into the URL routing scheme by @yomybaby in #7751, FR-3057: scope-aware 404, help-doc anchors, and invalid-project fallback by @yomybaby in #7755
- FR-3383: route-handle-declared access control with URL-aware roles by @yomybaby in #8408
- FR-1943: migrate from use-query-params to nuqs by @yomybaby in #5097, FR-3267: per-tab URL-persisted table state pattern for multi-tab pages by @nowgnuesLee in #8251
Auto-Refresh Controls
Introduced an opt-in auto-refresh interval dropdown on BAIFetchKeyButton with an animated countdown border, rolled it out to polling consumers with per-consumer defaults chosen by data volatility, and unified container log refresh on the same control.
- FR-3147: add opt-in auto-refresh interval dropdown to BAIFetchKeyButton by @agatha197 in #7927, FR-3147: enable auto-refresh interval dropdown on polling consumers by @agatha197 in #7928
- FR-3300: add animated countdown border to BAIFetchKeyButton auto-refresh by @agatha197 in #8233, FR-3300: set per-consumer auto-refresh defaults by data volatility by @yomybaby in #8265
- FR-3324: unify container log auto-refresh on AutoUpdateFetchKeyButton by @yomybaby in #8287
Administration & Maintenance
System announcements can now be authored and managed directly from the WebUI, and resource-group administration gained SFTP settings.
- FR-3223: allow editing the system announcement from the WebUI by @agatha197 in #8067, FR-3224: add system announcement management to the Maintenance page by @agatha197 in #8070
- FR-3243: add SFTP resource group settings from the Resource Group page by @agatha197 in #8119
- FR-3222: migrate User Resource Policy page to Strawberry V2 GraphQL by @nowgnuesLee in #8062
Sessions & Model Serving
Session listings surface image metadata and idle-checker reclamation status, and the Start from URL modal gained an experimental Hugging Face model import tab.
- FR-2948: render image metadata in BAISessionNodesV2 and add v2 session tag components by @ironAiken2 in #7552, FR-3318: add idle-checker reclamation status column to session list by @nowgnuesLee in #8260
- FR-3390: add experimental Import Hugging Face Model tab to Start from URL modal by @yomybaby in #8429
Bulk Actions & Credentials
Bulk operations now report partial failures through a shared error modal that preserves form state, and credential management gained bulk deactivation plus a v2 user selector.
- FR-3334: add common bulk-error modal and preserve form state on partial bulk failure by @ironAiken2 in #8302, FR-2403: add bulk deactivate action for credential user list by @yomybaby in #6244
- FR-3348: pick user via v2 select and validate rate-limit max in credential modal by @yomybaby in #8342
UI Components & Theming
The user theme selector was refined around product-owned built-in families, a tabbed Downloads modal was added, and BAITagList gained a text/hover overflow variant for table cells.
- FR-3239: refine user theme selector — product-owned built-in families and design-spec simplifications by @ironAiken2 in #8104
- FR-3226: add tabbed Downloads modal with CLI download & pip get-started by @agatha197 in #8081
- FR-3053: add text/hover overflow variant to BAITagList and adopt for table cells by @yomybaby in #7747
Terminology Governance
Built out a terminology governance system: approved verbs, an unknown-term checker with precedence and rename rules, a high-signal near-duplicate check, non-English avoid rows with a precision self-test harness, and CI gating that fails verification on terminology drift across every language and the user manual.
- FR-3052: terminology governance — approved verbs, unknown-term checker, precedence & rename rules by @yomybaby in #7748, FR-3302: register CHECK 3 candidate terms + tune ignoreNouns by @yomybaby in #8244, FR-3050: redesign CHECK 2 into a high-signal near-duplicate check by @yomybaby in #8245
- FR-3051: non-English terminology avoid rows + precision self-test harness by @yomybaby in #8349, FR-3049: i18n terminology drift fails verify.sh by @yomybaby in #8358
- FR-3373: extend the terminology gate to user-manual prose by @yomybaby in #8386, FR-3374: block context-free terminology drift in every language by @yomybaby in #8391, FR-3375: gate i18n terminology drift in CI on a path filter by @yomybaby in #8398
Developer Experience
Dev-environment work focused on file-descriptor pressure from watchers, opt-in type checking, login pre-fill, and a migration of the stacked-PR workflow to GitHub Stacked PRs.
- FR-3214: exclude pnpm store from the dev type-check watcher by @nowgnuesLee in #8357, FR-3214: coalesce TS dev watchers onto parent directories by @yomybaby in #8394, FR-3214: make the resident dev type checker opt-in by @yomybaby in #8395
- FR-3352: dev-only login pre-fill and backend-mismatch banner by @yomybaby in #8352, FR-3307: post-boot auto-register hooks + registry-aware connection info by @yomybaby in #8247, FR-3309: review overlay walking skeleton — pin-to-Teams round trip by @yomybaby in #8248
- FR-3391: migrate stacked-PR workflow from Graphite to GitHub Stacked PRs by @yomybaby in #8430
- feat(docs-toolkit): configurable PDF fonts via pdfFontFaces and theme overrides by @rapsealk in #8279
🐛 Bug Fixes
Routing & URL State
Follow-up fixes to the scope-aware routing rollout — URL project validation, project switching, and a nuqs render-phase update loss.
- FR-3388: unify URL project validation on the header project selector source by @yomybaby in #8423, FR-3428: rewrite URL project segment in SwitchToProjectButton by @yomybaby in #8505
- FR-3358: patch nuqs to recover render-phase updates lost in discarded renders by @yomybaby in #8365
Backward Compatibility
Guards so RBAC surfaces keep working against managers older than 26.8.0.
- FR-3406: keep the RBAC role detail drawer working on managers below 26.8.0 by @nowgnuesLee in #8483, FR-3424: allow user assignment on system RBAC roles for pre-26.8.0 managers by @ironAiken2 in #8493
Model Serving & Chat
Fixes across the deployment and chat flows — endpoint visibility during rollout, the token selector, recovery form rendering, and preset review/description details.
- FR-3303: keep chat endpoint visible while a new revision rolls out by @agatha197 in #8236, FR-3341: rework Chat endpoint token selector by @agatha197 in #8328, FR-3340: render Chat recovery form immediately and show model fetch as button loading by @agatha197 in #8329
- FR-3384: add bottom padding to reasoning-only chat message bubbles by @yomybaby in #8412
- FR-3323: unify model mount label in custom runtime revision form by @agatha197 in #8278, FR-3347: give deployment preset startup command its own description by @nowgnuesLee in #8335, FR-3401: show Runtime on the deployment preset review step in edit mode by @agatha197 in #8446
Sessions & Connection Info
Connection-info failures now surface properly instead of showing a bogus loopback dialog, and app launches carry through their port and visibility settings.
- FR-3359: surface TCP connection info failures instead of bogus 127.0.0.1 SSH/SFTP dialog by @ironAiken2 in #8367, FR-3396: stretch SSH/SFTP connection modal so values render on one line by @agatha197 in #8499
- FR-3343: pass open-to-public and preferred-port settings through to TensorBoard and confirmation app launches by @nowgnuesLee in #8327
Tables, Filters & Dashboard
Corrections to property filters, expanded rows, scheduling history, dashboard suspensions, and the Fair Share warning state.
- FR-3405: resolve the property filter's selected property from current props by @agatha197 in #8484, FR-3395: restore expanded-row background alignment with nested tables by @agatha197 in #8488
- FR-3425: stop the scheduling-history expand mode from filtering the sub-step table by @nowgnuesLee in #8498, FR-3404: resolve project resource-group warning state mismatches on the Fair Share page by @nowgnuesLee in #8506
- FR-3386: keep dashboard visible during interval refetch and isolate card suspensions by @ironAiken2 in #8421
- FR-3354: pause and re-anchor BAIFetchKeyButton countdown border during in-flight refresh by @agatha197 in #8356
- FR-3328: refetch user list after bulk purge by @yomybaby in #8290, FR-3350: keep KeyPair modal row controls in sync with the deferred dataset by @yomybaby in #8346, FR-3326: reset Prometheus query preset modal on reopen by @agatha197 in #8285
- FR-3333: replace RBAC shortcut icon and add revoke warning alert in ProjectAdminSettingModal by @ironAiken2 in #8301
Internationalization
Locale detection now runs at i18n init so the login screen respects the browser language, and a group→project terminology fix was retranslated across 20 locales.
- FR-2981: detect browser language at i18n init so login screen respects locale by @yomybaby in #7606, FR-3356: retranslate error.UserHasNoGroup group→project in 20 locales by @yomybaby in #8402
- FR-3376: clear the CHECK 2 near-duplicate backlog and promote it to default-on by @yomybaby in #8403
Build, CI & Tooling
Build hardening and pipeline repairs across the docs toolkit, dev process lifecycle, and the React production build.
- fix: guard writeHashedAsset against path traversal via logicalName by @yomybaby in #8293
- FR-3214: kill the whole dev process group on shutdown so leaked watch orphans don't exhaust file descriptors by @nowgnuesLee in #8156
- fix: Raise Node heap limit for the React production build by @rapsealk in #7955, FR-3338: resolve eslint-plugin-react-hooks 7.1.1 compiler diagnostics by @nowgnuesLee in #8316
- FR-3321: make docs-toolkit npm publish workable from CI by @yomybaby in #8273, FR-3321: publish docs-toolkit with pnpm, matching backend.ai-ui by @yomybaby in #8305, FR-3322: resolve release tag from env so PDF upload survives the Playwright container by @yomybaby in #8275
- fix(docs-toolkit): repair PDF stamp glyphs, one-page cover, and reader outline by @rapsealk in #8271, FR-3360: bump sharp to ^0.35.1 to restore docs-toolkit type resolution by @yomybaby in #8370
- FR-3319: add opt-in polling watcher to survive macOS fseventsd stream drops by @yomybaby in #8262
- fix: use token-based color for provisioning/warming-up replica tags by @yomybaby in #7879
🔨 Refactoring
Resource slot metadata was centralized into a shared provider, 404 handling moved into the router, and PDF stamp fonts are now subset via upstream fontkit.
- FR-2493: centralize resource slot metadata into BAIMetaDataProvider by @nowgnuesLee in #6668
- FR-3279: make the router own 404 via scoped catch-alls and a route error boundary by @yomybaby in #8208
- FR-3329: subset PDF stamp fonts via upstream fontkit by @yomybaby in #8292
🎨 Style
Edit terminology and icons were unified across forms and row actions, bulk action buttons were standardized in table selection toolbars, and several smaller display adjustments landed.
- FR-3331: unify edit terminology and edit-action icons, switch edit-form submits to Save by @ironAiken2 in #8303, FR-3331: align row-action tooltips with the Edit icon by @ironAiken2 in #8315
- FR-3379: unify bulk action button styles in table selection toolbars by @ironAiken2 in #8397
- FR-3325: use token.colorError for used stroke in session statistics chart by @nowgnuesLee in #8281, FR-3339: hide the Invalidated At column on the login sessions page by @nowgnuesLee in #8319, FR-3420: cap the docs site layout width on ultrawide monitors by @yomybaby in #8482
🧪 E2E Tests
Targeted regression coverage for the URL-desync and Hugging Face import work, locator repairs for the vfolder suite, plus the ongoing automated auto-heal runs.
- FR-3358: deterministic e2e regression for folder explorer URL desync by @agatha197 in #8366, FR-3358: trim redundant waits from e2e vfolder cleanup path by @yomybaby in #8371, FR-3358: extend skipTrashVerify to remaining e2e vfolder cleanup call sites by @agatha197 in #8372
- FR-3361: repair vfolder E2E delete locators and replace dead waits with refetch polling by @ironAiken2 in #8376, FR-3294: make deployment revision e2e specs self-provision their fixtures by @lizable in #8226
- FR-3383: heal e2e specs broken by the scope-aware routing and route-error redesign by @yomybaby in #8409, FR-3390: e2e coverage for the Hugging Face import tab by @yomybaby in #8435
- e2e auto-heal runs by @nowgnuesLee and @lablup-octodog in #8216, #8237, #8252, #8288, #8309, #8317, #8320, #8332, #8337, #8347, #8390, #8410, #8432, #8476
📝 Documentation
- FR-3312: document BAIUncontrolledInput purpose in Storybook by @ironAiken2 in #8242
- docs(agents): require gt submit and a stack check when opening PRs by @yomybaby in #8396
🛠 Chores
Repository housekeeping: reviewer routing, CI configuration, the version bump, and dependency updates.
- chore: introduce CODEOWNERS for path-based reviewer routing by @rapsealk in #7214, FR-3292: migrate .claude commands to skills with disable-model-invocation by @yomybaby in #8218
- FR-2933: disable vitest cache in CI by @nowgnuesLee in #7512, FR-3214: type-check every package in CI by @nowgnuesLee in #8407
- FR-3330: bump to 26.8.0-alpha.0 and update dependencies by @yomybaby in #8295, FR-3371: upgrade nuqs to 2.9.2 and drop the local lost-update patch by @nowgnuesLee in #8383
- FR-3321: allow manual dispatch of the docs-toolkit publish workflow by @yomybaby in #8306, FR-3335: make dev review overlay opt-in via VITE_DEV_REVIEW_OVERLAY by @yomybaby in #8308
- chore(docs): bump 26.7 pdfTag to v26.7.1 by @github-actions[bot] in #8163
- Dependency bumps by @dependabot[bot]: ws 8.19.0 → 8.21.0 in #8304, sharp 0.34.5 → 0.35.0 in #8339, dompurify 3.4.11 → 3.4.12 in #8338, actions/checkout 4 → 7 in #8124, actions/setup-node 4.4.0 → 6.4.0 in #8125, actions/download-artifact 5 → 8 in #8123
🙌 New Contributors
- @lablup-octodog made their first contribution in #8337
Full Changelog: v26.7.3...v26.8.0