v26.4.8
What's Changed (v26.4.7 -> v26.4.8)
Highlights: a full Model Deployment & Serving stack (deployments, presets, revisions, scheduling history), a new Audit Log feature, the Vite/Vitest build migration, a redesigned documentation site, CSP/security hardening, and continued Strawberry V2 GraphQL migrations.
✨ Features
Model Deployment & Serving
Introduced the full deployment management experience — infrastructure, list/detail pages, status components, and admin routes — replacing the legacy model-serving endpoint UI.
- FR-1368: deployment infrastructure (feature flag, i18n, routes, sidebar) by @agatha197 in #6904, shared UI components (ReplicaStatusTag, DeploymentStatusTag, DeploymentOwnerInfo) in #6910, deployment list in #6916, deployment detail (config + 4 tabs) in #6917
- FR-2577: add project admin deployments page by @yomybaby in #6698
- FR-2930: replace DeploymentList with BAIModelDeploymentNodes by @ironAiken2 in #7505
- FR-2937: surface inaccessible-deployment error UI by @ironAiken2 in #7519
- FR-2960 / FR-3004: remove orphaned legacy model-serving components and unused launcher hook by @agatha197 in #7568, #7642
- FR-2822: replace deployment launcher with deployment-only create modal by @agatha197 in #7263
- FR-2664 / FR-2767 / FR-2787: config card split, endpoint URL, imageV2, migration & CRUD feedback by @agatha197 in #7102, #7136, #7141, #7191
- FR-2827 / FR-2904 / FR-2905: clickable tag filtering, full filter/order/columns, list polish by @yomybaby & @agatha197 in #7274, #7435, #7437, #7439
- FR-2830 / FR-2833 / FR-2834 / FR-2838 / FR-2843 / FR-2947: deployment-ready & private-deployment alerts, public-access tags, unified alert CTAs by @agatha197 & @yomybaby in #7281, #7285, #7287, #7294, #7304, #7547
- FR-2886 / FR-2888 / FR-2889 / FR-2891: BAIAvailablePresetSelect, BAIProjectVfolderSelect, BAIRuntimeVariantSelect, default resource group, ModelReplica status fields by @agatha197 in #7396, #7400, #7402, #7407
- FR-2846: move deployment delete into a more-menu next to edit by @yomybaby in #7313
Deployment Revisions & Presets
Added the revision and preset management workflows that drive deployments, including preset modes, runtime parameters, and health-check configuration.
- FR-2750 / FR-2761 / FR-2762: deployment preset spec, create/edit/delete UI, preset detail in VFolderDeployModal by @agatha197 in #7091, #7125, #7127
- FR-2801 / FR-3158 / FR-3163 / FR-3164 / FR-3129: prefill launcher from preset, runtime params in preset create/edit, image architecture in preset select, improved columns, resource opts on review step by @agatha197 in #7224, #7939, #7954, #7953, #7885
- FR-2826 / FR-2835 / FR-2836 / FR-2862 / FR-2863: Add Revision modal fields, auto-activate, preset mode + spec by @yomybaby & @agatha197 in #7271, #7289, #7291, #7350, #7349
- FR-2957 / FR-2977 / FR-2987 / FR-2989 / FR-3157: new-revision-from-this action, revision-source prefill, VFolder identicon, image architecture, runtime-variant preset values in revision detail by @agatha197 & @yomybaby in #7561, #7602, #7618, #7622, #7937
- FR-2858: revision number display + expanded filter/sort in revision history by @agatha197 in #7336
- FR-3056 / FR-3068 / FR-3069 / FR-3087: opt-in health check via ModelHealthCheck flag, explicit toggle, preset info modal, required RuntimeVariantPreset fields by @agatha197 in #7753, #7775, #7776, #7823
Scheduling History
- FR-2326 / FR-3008: highlight failure steps, auto-expand non-success rows + expand/collapse-all toggle by @yomybaby & @agatha197 in #6225, #7650
- FR-2950 / FR-2951 / FR-3075: deployment & route scheduling-history modals, reverse-chronological default, pagination by @agatha197 & @nowgnuesLee in #7553, #7555, #7794
Audit Log (new)
Added a reusable audit-log table and scoped views across sessions, deployments, and VFolders.
- FR-2949 / FR-3032 / FR-3033: AuditLogTable spec, BAIAuditLogNodes common table, ScopedAuditLog preloaded view by @nowgnuesLee in #7550, #7699, #7703
- FR-3041 / FR-3044 / FR-3046: session-scoped, deployment-scoped, and VFolder-scoped (tabified Folder Explorer) audit logs by @nowgnuesLee & @yomybaby in #7720, #7729, #7735, #7809
Storage & VFolder (Strawberry V2 migration)
Migrated VFolder reads and lifecycle mutations to the V2 GraphQL API and improved permission management.
- FR-2593 / FR-2613 / FR-2619 / FR-2688: V2 creation modal, trash lifecycle, single-folder detail reads, notification node migration by @ironAiken2 in #6759, #6817, #6842, #6934
- FR-2622 / FR-2845: delete-folder option + trash notification on model card deletion, bulk vfolder trash, cascading-delete warning by @agatha197 & @ironAiken2 in #6881, #7135, #7339
- FR-2893 / FR-2817: disable upload button without permission, unclip invitation badge + /data invitation entry point by @ironAiken2 in #7412, #7261
- FR-2969 / FR-2991 / FR-3010 / FR-3020 / FR-3134: storage host permission detail drawer, multi-select (max 10), project/user folder tabs, keypair resource policy filtering, default domain selector by @ironAiken2 & @yomybaby in #7587, #7626, #7658, #7672, #7891
RBAC & Access Control
- FR-2828 / FR-2940 / FR-3029: new filter input types, project-scope alerts + restore confirmation, role auto-assign flag by @ironAiken2 & @agatha197 in #7276, #7526, #7696
Admin & User Management
- FR-1818: Bulk Create Users from CSV modal by @agatha197 in #7667
- FR-2696 / FR-2691 / FR-2820 / FR-2944 / FR-2968: project admin data page, /data header relocation, Project Active/Inactive tabs, project-admin session list (projectSessionsV2), project admin manual chapter by @ironAiken2 in #6962, #6941, #7413, #7533, #7590
- FR-3016 / FR-3024 / FR-3040: migrate super-admin user list to adminUsersV2, expose new filters, full UserV2 scalar columns by @ironAiken2 in #7666, #7685, #7721
Prometheus Query Presets
- FR-2451: Prometheus Query Preset CRUD (list, create, edit with live preview, delete), list polish, and E2E by @agatha197 in #7082, #7084, #7085, #7086, #7094, #7095, #7108
- FR-2809: use adminPrometheusQueryPresetPreview for live query template preview by @agatha197 in #7240
Sessions, Resources & Chat
- FR-2324 / FR-2689 / FR-2967: number-of-sessions moved into start-button dropdown, longer accelerator names, BAITable column reordering on session list by @yomybaby in #6045, #7187, #7582
- FR-2867 / FR-3018: unified-memory accelerator UX in Resource Allocation and session detail by @yomybaby in #7360, #7670
- FR-3137: clarify deployment & model selectors on Chat page by @nowgnuesLee in #7899
- FR-3120 / FR-3121 / FR-2786: Model Store list hide domain filter, admin model card form (comma separator + default domain), ModelCardV2 typed filters by @agatha197 in #7868, #7869, #7183
- FR-26 / FR-2918: error state on ProjectSelect with no accessible projects, QHD (2560) breakpoint + responsive Model Store grid by @ironAiken2 & @yomybaby in #7455, #7474
Build & Developer Experience (Vite / Vitest)
Completed the migration from Craco/Webpack + Jest to Vite + Vitest, including PWA service worker, dev reload, dev-time type checking, and CI parity.
- FR-2606–FR-2611: Vite dev server + HMR, BUI i18n isolation, Electron publicPath, dev-reload plugin, production build with vite-plugin-pwa, Vitest migration (856/856), Craco/Webpack retirement by @nowgnuesLee in #6869, #6870, #6871, #6872, #6873, #6874, #6876
- FR-2744 / FR-2746 / FR-2748 / FR-2927: restore Vitest coverage in CI, re-enable skipped tests, full jest→vi migration, dev-time TypeScript checking via vite-plugin-checker by @nowgnuesLee in #7065, #7071, #7083, #7495
- FR-2701 / FR-2796 / FR-2806 / FR-2890 / FR-3042 / FR-3085 / FR-3073: Portless dev config, hot-reload i18n edits, auto-fill login endpoint, faster remote dev server, dev-server app name in tab title, dev-server CSP, redesigned splash/login by @yomybaby in #6983, #7211, #7237, #7405, #7723, #7811, #7788
- FR-2529 / FR-2887: extract backend.ai-client as standalone workspace package, serve released bundle via Portless by @yomybaby in #6614, #7398
- FR-2800: enforce relative import paths via ESLint by @nowgnuesLee in #7219
Documentation Site
Shipped a production documentation site with multi-version deployment, BAI branding, multilingual routing, and per-language PDFs.
- FR-2711–FR-2719: docs site spec/dev-plan, build robustness, versioned docs & version selector, SEO/sharing metadata, site entry + multilingual routing, IA (sidebar/TOC/breadcrumbs), code-block highlighting, per-language PDFs in CI by @yomybaby in #6988, #7006, #7011, #7012, #7008, #7009, #7010, #7014
- FR-2722 / FR-2723 / FR-2726: image optimization (WebP/AVIF), version-mismatch UX, BAI design system (tokens, layout, components, dark mode) by @yomybaby in #7028, #7029, #7032, #7033, #7034, #7035
- FR-2730–FR-2735 / FR-2749 / FR-2755 / FR-2756: multi-version deployment spec, amplify.yml, previous-versions selector, per-version PDF cards, web-only home page, code-block UI, shellsession pseudo-lang by @yomybaby in #7045, #7058, #7059, #7060, #7088, #7107, #7115
- FR-2783 / FR-2854: docs-toolkit example boilerplate package, agent-catalog AgentProfile schema migration by @yomybaby in #7181, #7328
Security
- FR-2976 / FR-3077 / FR-3078 / FR-3079 / FR-3086: baseline security response headers, nonce-safe styling, antd token usage, complete CSP nonce coverage, CacheProvider nonce inheritance by @yomybaby & @agatha197 in #7600, #7799, #7800, #7802, #7807
🐛 Bug Fixes
Deployment & Revisions
- FR-2774 / FR-2776 / FR-2773 / FR-2780 / FR-2807 / FR-2901: runtime variant id decode, addModelRevision schema adaptation, preserve auto-selected preset, launcher feedback, BAILink ellipsis crash + tab error isolation, Relay store sync after activate by @nowgnuesLee, @ironAiken2 & @yomybaby in #7152, #7158, #7153, #7167, #7236, #7428
- FR-2910 / FR-2966 / FR-2980 / FR-3003 / FR-2962: FAILED_TO_START in terminated filter, hide alert on stopped deployments, allow replica count 0, disable Open-to-Public in edit, distinct revision-history URL keys by @agatha197, @nowgnuesLee & @yomybaby in #7457, #7579, #7605, #7639, #7572
- FR-2977 / FR-2988 / FR-3005 / FR-3097 / FR-3127 / FR-3139 / FR-3141 / FR-3152: revision UX fixes, clarified apply confirmation, initial-delay default + auto-open detail, backend error surfacing + auto-deploy retry, preset env-var persistence, ENV value preservation, image architecture preservation, complete service input by @agatha197 & @ironAiken2 in #7671, #7620, #7648, #7836, #7872, #7903, #7906, #7930
- FR-2832 / FR-2837 / FR-2914 / FR-3132: null definitionPath, shmem under config.resource_opts + SHM display, scope folder picker to project, correct Healthy replica tooltip by @ironAiken2 & @agatha197 in #7315, #7299, #7465, #7893
Storage, Sessions & Chat
- FR-2699 / FR-2777 / FR-2813 / FR-2870 / FR-2978 / FR-2979 / FR-3022 / FR-3013: prevent duplicate VFolder creation, reset upload status, folder-create notification card, storage host fetch errors, leave_invited empty body, show sender on invitations, toLocalId fix, vfolder name in SFTP examples by @agatha197, @ironAiken2 & @nowgnuesLee in #6964, #7160, #7260, #7365, #7609, #7607, #7681, #7675
- FR-2651 / FR-3136 / FR-3144: list all model-store folders, create model card in MODEL_STORE project, guard missing Model Store project by @agatha197 & @ironAiken2 in #6888, #7896, #7911
- FR-2990 / FR-3092 / FR-3159: preserve acceleratorType registration, scope personal/CSV session lists to current user by @yomybaby & @ironAiken2 in #7624, #7838, #7943
- FR-3091 / FR-3143 / FR-3146 / FR-3161: stabilize chat TPS during streaming, disable input on model load failure, CLI line-continuation tokenizer, send attachments as data URLs by @agatha197 & @yomybaby in #7822, #7908, #7915, #7946
RBAC, Auth & Infrastructure
- FR-2775 / FR-2926 / FR-3017 / FR-3031: localize ROLE_ASSIGNMENT + scope name, MODEL_DEPLOYMENT filter option, version-branch myRoles filter shape, RBAC filter shapes for Manager ≤ 26.4.3 by @ironAiken2 & @nowgnuesLee in #7155, #7493, #7686, #7712
- FR-2586 / FR-2895 / FR-2932 / FR-3027 / FR-3128 / FR-3043: clearer app-launch error on key mismatch, ReLogin i18n values, SW navigateFallback disable for OIDC/SAML, App Proxy worker error, config.toml bootstrap await, dev login orchestration by @yomybaby, @nowgnuesLee & @ironAiken2 in #7409, #7417, #7509, #7781, #7873, #7726
- FR-2952 / FR-2954 / FR-2987 / FR-2903: surface server error instead of "undefined", error boundary on BAIAgentTable JSON cells, restore host i18n Context, align login plugin loader by @yomybaby & @nowgnuesLee in #7557, #7566, #7595, #7433
UI, Tables & Misc
- FR-2709 / FR-2815 / FR-2885 / FR-2864 / FR-2965 / FR-3098 / FR-2935 / FR-2824: notification render loop fix, BAITable resize loop fix, avatar icon fontSize, primary-button placement, keep filter tags on close, UTF-8 BOM on CSV export, FairShare weight 0, CSV export placement by @agatha197 & @ironAiken2 in #6985, #7267, #7394, #7352, #7577, #7837, #7516, #7366
- FR-2819 / FR-2825 / FR-2919: BAIConfirmModalWithInput for irreversible deletes, standardize activate/deactivate to Popconfirm, reversible BAIDeleteConfirmModal variant by @ironAiken2 in #7370, #7371, #7480
- FR-621 / FR-2823 / FR-2975 / FR-2869: ssl_verify checkbox in Container Registry Editor, server-side ordering on Images table, build number in splash/About, lazy-load model card drawer by @yomybaby & @agatha197 in #7354, #7262, #7594, #7363
- FR-2745 / FR-2873 / FR-3061 / FR-3135: PDF font selection (JP/Thai macOS), esbuild glob analysis fix, Electron runtime deps in app.asar, yauzl override for desktop packaging by @agatha197 & @yomybaby in #7068, #7377, #7760, #7895
- FR-3039 / FR-2852: resolve open CodeQL alerts, react-doctor error-level findings by @yomybaby in #7717, #7325
🔨 Refactoring
- FR-2727 / FR-2772 / FR-2842 / FR-2847 / FR-2848 / FR-2902: clean dead Lit-bridge events, unify deployment cards with BAICard, hoist config query, split admin deployment detail route, delete icon semantics, "Apply" terminology by @nowgnuesLee, @ironAiken2 & @yomybaby in #7036, #7146, #7303, #7312, #7314, #7431
- FR-2841 / FR-2862 / FR-2943 / FR-2953 / FR-2964 / FR-2977 / FR-2986 / FR-3040 / FR-3074 / FR-3076: WSProxy→App Proxy i18n rename, merge Content into Modal components, flatten antd column groups, scope-agnostic terminateSessionsV2, render-as-you-fetch scheduling modals, revision-source unification, explicit useBAIi18n binding, QuestionIconWithTooltip migration, dead-CSS removal, unify notification renderer by @yomybaby, @agatha197, @nowgnuesLee & @ironAiken2 in #7300, #7403, #7531, #7559, #7575, #7602, #7616, #7745, #7789, #7796
- FR-2874 / FR-2860 / FR-3130: replace CodeMirror with Monaco in BAICodeEditor, migrate AllocationHistoryStatistics to recharts, migrate version gates to stable 26.4.4 by @yomybaby & @agatha197 in #7390, #7343, #7878
🌐 i18n & 🎨 Style
- FR-2803 / FR-2804 / FR-3021 / FR-3048 / FR-3081 / FR-3088 / FR-3133: Korean RBAC terms, Popconfirm-style revoke modals, i18n term drift unification, terminology.json single source + checker, replica terminology (복제본), remove redundant '성공적으로', Korean ApplyingRevision fix by @yomybaby & @agatha197 in #7229, #7231, #7678, #7737, #7792, #7817, #7887
- i18n / FR-2977 / FR-3151: replica terminology & tooltip formatting, revision-source wording, replica lifecycle vs health-status terminology by @agatha197 & @yomybaby in #7785, #7724, #7926
🧪 E2E Tests
- FR-2992–FR-3002: full E2E suite repair across Auth, Compute & Sessions, Storage, Serving, Resource & Policy, RBAC & Credential, Admin & Operations, Core UI, Plugin & Infrastructure, Visual Regression by @nowgnuesLee in #7652, #7653, #7676, #7679, #7684, #7688, #7693, #7706, #7708, #7710
- FR-2451 / FR-2622 / FR-2982 / FR-2983 / FR-3027: Prometheus preset CRUD, admin model card management, folder invitation inviter email, leaving shared vfolder, App Proxy worker error regression by @agatha197 in #7108, #7250, #7610, #7612, #7875
📝 Documentation
- Model Serving / RBAC / VFolder / Sessions / Admin: deployment-only modal, revision UX, preset & Prometheus preset docs, RBAC confirmation flow, upload-permission gating + cascading delete, sessions dropdown, CSV export + ssl_verify bundle by @yomybaby & @agatha197 in #7443, #7444, #7445, #7446, #7447, #7448, #7449
- FR-2650 / FR-2743 / FR-2916 / FR-2909 / FR-2924 / FR-2938: 2× zoom locale screenshots, remaining manual screenshots, WSProxy→App Proxy corrections, RBAC manual alignment, vfolder screenshots, upload-permission description by @ironAiken2 & @agatha197 in #6891, #7072, #7472, #7463, #7489, #7524
- FR-2788–FR-2791 / FR-2929 / FR-2939 / FR-3009: backend.ai-client LICENSE/README/packaging/ESLint/CI, docs-lead skill + docs-lint subagent, gt restack & worktree rules, i18n skills alignment by @yomybaby in #7202, #7201, #7204, #7203, #7499, #7523, #7655
🛠 Chores, Dependencies & CI
- Dependencies / CVEs: pnpm v11 migration, React 19.2.6, Electron 39.8.5 + Vite 6.4.2, @Cloudscape board-components bump, react-router-dom, transitive CVE overrides, relay-runtime patch by @yomybaby, @nowgnuesLee & @dependabot in #7307, #7330, #6381, #7410, #7770, #7660, #7247
- Lockfile & pnpm policy: minimumReleaseAge policy, disable gitBranchLockfile, global virtual store for worktrees, lock cleanup by @yomybaby & @nowgnuesLee in #7334, #7338, #7359, #7332
- CI / Relay drift / review tooling: pin pnpm v10/v11 in workflows, Relay artifact drift checks, exclude generated/vendored files from review, immediate release-link reporting by @yomybaby & @nowgnuesLee in #7297, #7345, #7485, #7514, #7734, #7902
- Claude Code tooling: React skill guides, statusline improvements (VS Code link, git safety, Portless status, SSH host), dev-server skill by @yomybaby & @nowgnuesLee in #6966, #6977, #6982, #7426, #7482, #7208
Full Changelog: v26.4.7...v26.4.8