Repository navigation
fix(frontend): strict vue-tsc — 231 → 0 type errors + 11 real runtime bugs (#9724) - #10073
Merged
Merged
Conversation
…y icons (#9724) Adds the icon names components already referenced (help-circle, pencil, x, thumbtack, folder-plus, comment-dots, volume-mute, microphone-slash, smartphone, mobile-alt, hourglass-half/end, bell-slash, fire, power-off, reply, scroll, graduation-cap, brackets-curly, music, file-* variants, square, i-cursor, window-maximize, flag) — these previously rendered as empty SVGs at runtime. Types all dynamic <Icon :name> sources as IconName and converts the FA-class-returning helpers (useKnowledgeIcons, useConversationFiles, useDocumentChanges, useKnowledgeCategories.getCategoryIcon, iconMappings consumers) to IconName-returning equivalents; adds asIconName() runtime validator for backend-provided icon names. Real rendering bugs fixed: FA class strings passed to <Icon> ('fas fa-spinner fa-spin', 'fas fa-file-*'), FA-only names (apple, android, user-friends, building, ticket-alt, certificate, aws, github, slack, hand-pointer, arrows-alt-v, icons), CodeCell FA tuple, and KnowledgeContentViewer passing a TreeNode object where a filename was expected. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ble type fixes (#9724) - Canonical ChatMessage: widen metadata index to unknown (structured payloads are stored there), add backend message_id/role fields - Unify LLC WorkItem into views/llc/workItemTypes.ts (4 drifting copies); Goal.level/owner + CompanyNode.agent_count optional per actual API rows - workflowTemplates: drop duplicate WorkflowStepStatus (keep generated) - BaseModal consumers (McpPromptPicker, McpResourceBrowser): correct modelValue/title API; WS onMessage handlers accept unknown with a string guard; window.setInterval for number-typed handles - api-contract: ClearAllResponse/KnowledgeHealthResponse schema renames - qrcode type shim (dependency itself still missing from package.json) - apexcharts series/formatter/event types now module imports Real bugs fixed: - CommandPalette startAgent called chatStore.setCurrentAgentType which did not exist (runtime TypeError) — wired into useChatStore - useChatApi.sendMessage dropped the session id (ChatMessageOptions has no sessionId field) — mapped to chatId - DesktopInterface: catch param shadowed the error ref (error dialog never updated); error message interpolated the ref instead of the caught error; window.open referenced from template scope - ChatController.loadChatSessions pushed raw repository sessions into the store (createdAt/updatedAt/isActive undefined) - ChatInterface @denied handler typed for a string but receives a {command, reason} payload - SSHTerminal heartbeat start() missing required taskId argument Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- KnowledgeGraphView 4th tab literal; KnowledgeBrowser CategoryOption aligned with KnowledgeBrowserHeader (IconName) - WorkflowCanvas: 'loop' node label entry + typed switch-cases v-for - useContextOverflowProtection: summary message satisfies canonical ChatMessage (id + sender) - useWorkflowBuilder: shared WorkflowTemplateStep type for template steps and createWorkflow() - usePatternAnalysis: normalize streamed GenericPattern partial rows to RefactoringSuggestion — PatternAnalysis.vue crashed on a missing estimated_effort during partial-result streaming (real bug) Verification: npx vue-tsc --noEmit -p tsconfig.app.json -> exit 0; eslint on all 137 touched files -> 0 errors; vitest iconMappings, artifact-cells, stores -> 60/60 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
✅ SSOT Configuration Compliance: Passing🎉 No hardcoded values detected that have SSOT config equivalents! |
3 tasks
This was referenced Jun 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Thinking Path
Strict
vue-tsc(type-checkstep of the Unit & Integration Tests job) was red on Dev_new_gui with 231 errors — thevue-tsc-baselinecheck passes only because it diffs an allowlist. Strict mode surfaced real defects (empty-SVG icons, missing store actions, dropped session ids). Fixed all type errors properly (noas any, no ts-ignore, no tsconfig relaxation) and the runtime bugs they exposed.What Changed
Icon.vue'sICONSmap; typed all dynamic<Icon :name>sources asIconName; converted FA-class-returning helpers toIconNameequivalents (useKnowledgeIcons,useConversationFiles,useDocumentChanges,iconMappings, etc.)WorkItem(4 drifting copies) → canonicalsrc/views/llc/workItemTypes.ts; removed duplicateWorkflowStepStatus; alignedFileItem/TreeItem/CategoryOption; widened canonicalChatMessagesrc/types/qrcode.d.ts) — see discovery issue for the missing dependencyReal bugs fixed (type errors that were live defects)
<Icon>→ rendered empty SVGsCommandPalette.startAgent()called non-existentchatStore.setCurrentAgentType()→ guaranteed TypeError; wired the action inuseChatApi.sendMessagepassed{sessionId}not inChatMessageOptions→ session id silently droppedDesktopInterface: catch-param shadowed theerrorref (init error never shown) + unreachablewindow.openChatController.loadChatSessions: imported sessions hadcreatedAt/updatedAt/isActiveundefinedChatInterface@deniedhandler typed for string but receives{command, reason}PatternAnalysiscrash (.toLowerCase()on undefined) on partial-stream rowsKnowledgeContentViewerpassed a TreeNode where a filename was expectedSSHTerminalheartbeatstart()missing required taskId argcanvas/index.tsexported a wrong ChartCell pathqrcodeimported but absent from package.json (device pairing) — shimmed + discovery issue filedVerification
npx vue-tsc --noEmit -p tsconfig.app.json→ exit 0, 0 errors (was 231), re-verified after rebasing onto current Dev_new_gui (resolved one WorkItem-unification conflict, preservinglinked_pr_urls).eslinton all 137 touched files → 0 errors.Model Used
Claude Fable 5 (frontend-engineer agent) + Opus 4.8 (main session: rebase conflict resolution, re-verification)
Closes #9724. Part of umbrella #9924.