Skip to content

chore(capabilities): refresh UI inventory #5253

chore(capabilities): refresh UI inventory

chore(capabilities): refresh UI inventory #5253

Triggered via push August 25, 2026 08:56
Status Failure
Total duration 38m 32s
Artifacts

ci.yml

on: push
Shell Deploy Scripts
13s
Shell Deploy Scripts
DSH Profile Packaging (windows-latest)
49s
DSH Profile Packaging (windows-latest)
Frontend Build
4m 28s
Frontend Build
Matrix: cli-test
Matrix: rust-build-check
Fit to window
Zoom out
Zoom in

Annotations

11 errors and 1 warning
src/app/scenes/profile/views/AssistantCard.test.tsx > AssistantCard actions > disables card actions while setting the primary assistant: src/web-ui/src/app/scenes/profile/views/AssistantCard.tsx#L142
Error: [vitest] No "IconButton" export is defined on the "@/component-library" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@/component-library"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ AssistantCard src/app/scenes/profile/views/AssistantCard.tsx:142:16 ❯ renderWithHooks ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:15486:18 ❯ mountIndeterminateComponent ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:20103:13 ❯ beginWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:21626:16 ❯ beginWork$1 ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:27465:14 ❯ performUnitOfWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26599:12 ❯ workLoopSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26505:5 ❯ renderRootSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26473:7
src/app/scenes/profile/views/AssistantCard.test.tsx > AssistantCard actions > keeps configuration and new-session actions distinct: src/web-ui/src/app/scenes/profile/views/AssistantCard.tsx#L142
Error: [vitest] No "IconButton" export is defined on the "@/component-library" mock. Did you forget to return it from "vi.mock"? If you need to partially mock a module, you can use "importOriginal" helper inside: vi.mock(import("@/component-library"), async (importOriginal) => { const actual = await importOriginal() return { ...actual, // your mocked methods } }) ❯ AssistantCard src/app/scenes/profile/views/AssistantCard.tsx:142:16 ❯ renderWithHooks ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:15486:18 ❯ mountIndeterminateComponent ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:20103:13 ❯ beginWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:21626:16 ❯ beginWork$1 ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:27465:14 ❯ performUnitOfWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26599:12 ❯ workLoopSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26505:5 ❯ renderRootSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26473:7
src/infrastructure/config/components/VoiceInputDiagnostics.presentation.test.ts > VoiceInputDiagnostics responsive layout > gives diagnostic controls enough room without allowing the test label to wrap: src/web-ui/src/infrastructure/config/components/VoiceInputDiagnostics.presentation.test.ts#L23
AssertionError: expected '\n flex: 0 0 auto;\n ' to contain 'white-space: nowrap' - Expected + Received - white-space: nowrap + + flex: 0 0 auto; + ❯ src/infrastructure/config/components/VoiceInputDiagnostics.presentation.test.ts:23:24
src/infrastructure/config/components/McpToolsConfig.test.tsx: src/web-ui/src/infrastructure/config/components/McpToolsConfig.tsx#L22
Error: [vitest] There was an error when mocking a module. If you are using "vi.mock" factory, make sure there are no top level variables inside, since this call is hoisted to top of the file. Read more: https://vitest.dev/api/vi.html#vi-mock ❯ src/infrastructure/config/components/McpToolsConfig.tsx:22:1 Caused by: Caused by: Error: Failed to resolve entry for package "@bitfun/theme-bitfun". The package may have incorrect main/module/exports specified in its package.json. Plugin: vite:import-analysis File: /home/runner/work/BitFun/BitFun/src/web-ui/src/infrastructure/appearance/builtins/designSystemThemeValues.ts:4:7 1 | import { 2 | themes 3 | } from "@bitfun/theme-bitfun"; | ^ 4 | export function getDesignSystemThemeString(mode, name) { 5 | const value = themes[mode][name]; ❯ packageEntryFailure ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32816:32 ❯ resolvePackageEntry ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32813:2 ❯ tryNodeResolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32716:70 ❯ ResolveIdContext.handler ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32555:16 ❯ EnvironmentPluginContainer.resolveId ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28717:56 ❯ TransformPluginContext.resolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28929:13 ❯ normalizeUrl ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27111:22 ❯ ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27177:32
src/infrastructure/config/components/AppearancePackageConfigSection.test.tsx: src/web-ui/src/infrastructure/config/components/AppearancePackageConfigSection.test.tsx#L7
Error: [vitest] There was an error when mocking a module. If you are using "vi.mock" factory, make sure there are no top level variables inside, since this call is hoisted to top of the file. Read more: https://vitest.dev/api/vi.html#vi-mock ❯ src/infrastructure/config/components/AppearancePackageConfigSection.test.tsx:7:1 Caused by: Caused by: Error: Failed to resolve entry for package "@bitfun/theme-bitfun". The package may have incorrect main/module/exports specified in its package.json. Plugin: vite:import-analysis File: /home/runner/work/BitFun/BitFun/src/web-ui/src/infrastructure/appearance/builtins/designSystemThemeValues.ts:4:7 1 | import { 2 | themes 3 | } from "@bitfun/theme-bitfun"; | ^ 4 | export function getDesignSystemThemeString(mode, name) { 5 | const value = themes[mode][name]; ❯ packageEntryFailure ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32816:32 ❯ resolvePackageEntry ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32813:2 ❯ tryNodeResolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32716:70 ❯ ResolveIdContext.handler ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32555:16 ❯ EnvironmentPluginContainer.resolveId ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28717:56 ❯ TransformPluginContext.resolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28929:13 ❯ normalizeUrl ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27111:22 ❯ ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27177:32 ❯ TransformPluginContext.transform ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27145:4 ❯ EnvironmentPluginContainer.transform ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28797:14 ❯ loadAndTransform ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:22670:26 ❯ fetchModule ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:33993:15
src/flow_chat/components/usage/SessionUsageComponents.test.tsx > Session usage report UI components > renders localized partial coverage and cache unavailable without showing zero: src/web-ui/src/flow_chat/components/usage/SessionUsageComponents.test.tsx#L547
AssertionError: expected '_button_6d3ff8' to contain 'session-usage-report-card__details-bu…' Expected: "session-usage-report-card__details-button" Received: "_button_6d3ff8" ❯ src/flow_chat/components/usage/SessionUsageComponents.test.tsx:547:35
src/features/ssh-remote/SSHConnectionDialog.test.tsx > SSHConnectionDialog > reveals non-default settings when editing an existing connection: src/web-ui/src/features/ssh-remote/SSHConnectionDialog.test.tsx#L279
AssertionError: expected 'false' to be 'true' // Object.is equality Expected: "true" Received: "false" ❯ src/features/ssh-remote/SSHConnectionDialog.test.tsx:279:51
src/app/scenes/skills/SkillsScene.presentation.test.ts > Skills scene presentation > keeps row navigation and destructive actions as separate compact targets: src/web-ui/src/app/scenes/skills/SkillsScene.presentation.test.ts#L45
AssertionError: expected 'import { Button, Switch } from \'@bit…' to contain 'className="skills-card__details"' - Expected + Received - className="skills-card__details" + import { Button, Switch } from '@bitfun/ui'; + import React, { useCallback, useEffect, useMemo, useState } from 'react'; + import { + ArrowRight, + CheckCircle2, + ChevronLeft, + ChevronRight, + Download, + Filter, + FolderOpen, + Layers, + Package, + Plus, + Puzzle, + ShieldAlert, + ShieldCheck, + Trash2, + TrendingUp, + User, + Zap, + } from 'lucide-react'; + import { useTranslation } from 'react-i18next'; + import { Badge, ConfirmDialog, IconButton, Input, Modal, Search, Select } from '@/component-library'; + import { GalleryDetailModal } from '@/app/components'; + import type { SkillInfo, SkillLevel, SkillMarketItem } from '@/infrastructure/config/types'; + import { + buildSkillCoverageSourceMap, + canDeleteSkill, + findSkillByKey, + getSkillSourceLabel, + } from '@/infrastructure/config/skillSourcePresentation'; + import { workspaceAPI } from '@/infrastructure/api'; + import { usePeerDeviceModeOptional } from '@/infrastructure/peer-device/peerDeviceContextState'; + import { isTauriRuntime } from '@/infrastructure/runtime'; + import { workspaceManager } from '@/infrastructure/services/business/workspaceManager'; + import { useNotification } from '@/shared/notification-system'; + import { isRemoteWorkspace } from '@/shared/types'; + import { createLogger } from '@/shared/utils/logger'; + import { getCardGradient } from '@/shared/utils/cardGradients'; + import { useInstalledSkills } from './hooks/useInstalledSkills'; + import { useSkillMarket } from './hooks/useSkillMarket'; + import SkillCard from './components/SkillCard'; + import SkillsSuiteView from './components/SkillsSuiteView'; + import './SkillsScene.scss'; + import { useSkillsSceneStore, type InstalledFilter } from './skillsSceneStore'; + import { useGallerySceneAutoRefresh } from '@/app/hooks/useGallerySceneAutoRefresh'; + + const log = createLogger('SkillsScene'); + + type SkillTab = 'installed' | 'discover'; + + interface CategoryInfo { + id: InstalledFilter; + icon: React.ReactNode; + labelKey: string; + titleKey: string; + descKey: string; + } + + const CATEGORIES: CategoryInfo[] = [ + { + id: 'all', + icon: <Layers size={15} strokeWidth={1.6} />, + labelKey: 'filters.all', + titleKey: 'installed.titleListAll', + descKey: 'categories.all', + }, + { + id: 'builtin', + icon: <ShieldCheck size={15} strokeWidth={1.6} />, + labelKey: 'filters.builtin', + titleKey: 'installed.titleBuiltin', + descKey: 'categories.builtin', + }, + { + id: 'user', + icon: <User size={15} strokeWidth={1.6} />, + labelKey: 'filters.user', + titleKey: 'installed.titleUser', + descKey: 'categories.user', + }, + { + id: 'project', + icon: <FolderOpen size={15} strokeWidth={1.6} />, + labelKey: 'filters.project', + titleKey: 'installed.titleProject', + descKey: 'categories.project', + }, + { + id: 'suite', + icon: <Zap size={15} strokeWidth={1.6} />, + labelKey: 'filters.suite', + titleKey: 'suite.title', + descKey: 'categories.suite', + }, + ]; + + const SkillsScene: React.FC = () => { + const { t } = useTranslation('scenes/skills'); + const notification = useNotification(); + const peerDevice = usePeerDeviceModeOptional(); + const remoteConnectionActive = peerDevice?.peerMode.active === true; + const desktopConfigAvailable = isTauriRuntime() && !remoteConnectionActive; + const { + searchDraft, + marketQuery, + installedFilter, + hideDuplicates, + isAddFormOpen, + setSearchDraft, + submitMarketQuery, + setInstalledFilter, + setHideDuplicates, + setAddFormOpen, + toggleAddForm, + } = useSkillsSceneStore(); + + const [activeTab, setActiveTab] = useState<SkillTab>('installed'); + const [deleteTarget, setDeleteTarget] = useState<SkillInfo | null>(null); + const [installedSearch, setIns
src/flow_chat/tool-cards/AskUserQuestionCard.test.tsx > AskUserQuestionCard > deselects a blank multi-select Other answer and omits it from submission: src/web-ui/src/flow_chat/tool-cards/AskUserQuestionCard.test.tsx#L269
AssertionError: expected undefined to be false // Object.is equality - Expected: false + Received: undefined ❯ src/flow_chat/tool-cards/AskUserQuestionCard.test.tsx:269:36
CLI Tests (macos-15)
Process completed with exit code 101.
Tauri Windows test-loader limitation
The desktop test harness hit upstream Tauri issue #13419 before any Rust test ran. Compilation and the cross-platform product-control contracts remain blocking.