Found by review of #1456 (a, finding 4), filed separately under the PR freeze. #1456 curates every message the Skills services and IPC handlers return. A handler that rejects still reaches the UI raw: Electron turns the throw into Error invoking remote method '…': Error: <main's raw message>, and the renderer shows cause.message directly at:
src/renderer/src/features/skills/store.ts:68,120
SkillsGrid.tsx:114
AddSkillDialog.tsx:82,110
AgentCodeConventionsRow.tsx:56,105,123
AgentCodeConventionsEditorModal.tsx:163,186,206
AgentCodeCustomSkillsRow.tsx:79,266,283,306,339,589
A main-side error carrying a path (or OS text) then lands in an alert or update line. This breaks q22.
Shape of a fix:
- A renderer helper maps an IPC rejection to one fixed sentence, keeping
cause for the console, and every site above uses it.
- Optionally, wrap the Skills IPC handlers so a throw is logged in main and rejected with a curated message.
- Pin with a renderer test per surface that a rejection containing a path never renders.
Related: #1427, #1456.
🤖 Generated with Claude Code
Found by review of #1456 (a, finding 4), filed separately under the PR freeze. #1456 curates every message the Skills services and IPC handlers return. A handler that rejects still reaches the UI raw: Electron turns the throw into
Error invoking remote method '…': Error: <main's raw message>, and the renderer showscause.messagedirectly at:src/renderer/src/features/skills/store.ts:68,120SkillsGrid.tsx:114AddSkillDialog.tsx:82,110AgentCodeConventionsRow.tsx:56,105,123AgentCodeConventionsEditorModal.tsx:163,186,206AgentCodeCustomSkillsRow.tsx:79,266,283,306,339,589A main-side error carrying a path (or OS text) then lands in an alert or update line. This breaks q22.
Shape of a fix:
causefor the console, and every site above uses it.Related: #1427, #1456.
🤖 Generated with Claude Code