refactor(frontend): split notification node into its own category - #17
Merged
Merged
Conversation
Send Notification was grouped under "Actions" alongside five node types that mutate the file itself (tag, comment, move, copy, rename). It's the odd one out: it sends a message to an external destination (Slack, email, a webhook, ...) rather than touching the file, and that had made the picker's "Actions" section read as a catch-all rather than a scannable group. Give it its own "Notifications" category so the picker groups by what a node actually does, not just "not AI". Signed-off-by: Lukas Hirt <info@hirt.cz>
mzner
approved these changes
Jul 24, 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.
Decision
Split.
action-notify(Send Notification) now lives in a newNotificationscategory instead ofActions.Reasoning
Before this change,
Actionsheld six node types: Add Tag, Add Comment, Move File, Copy File, Rename File, and Send Notification. The first five are all file-manipulation operations — they read the file being processed and mutate its metadata or location. Send Notification is categorically different: its description is "Send a notification to Slack, email, or 100+ other services" — it doesn't touch the file at all, it composes and dispatches a message to an external destination.Lumping it in with the file operations made the "Actions" picker section function as a catch-all ("everything that isn't AI and isn't a trigger") rather than a group a user could scan and immediately understand. With only 10 node types total today that's a minor cost, but the "Send Notification" node's own description already hints at where this is headed ("Slack, email, or 100+ other services") — more notification-shaped nodes (specific channels/providers) are a very plausible next addition, and burying those inside a "file operations" bucket would make the mismatch worse over time, not better. Giving notifications their own home now, while there's only one node in it, costs one extra picker section heading and buys clearer grouping as the picker grows.
The counter-case — leave it as-is because a single-item category looks sparse — didn't win out: the semantic mismatch (mutating a file vs. notifying someone about it) is real today, not a hypothetical, and the fix is a small, low-risk, additive change with no UX regression for the existing five-item
Actionsgroup.What changed
frontend/src/nodeTypes.ts: addedNOTIFICATION_CATEGORY = 'Notifications'(with a comment explaining the split), movedaction-notify'scategoryto it.frontend/src/views/WorkflowBuilder.vue:openPicker()'s hardcoded non-trigger category list ([AI_CATEGORY, ACTION_CATEGORY]) updated to includeNOTIFICATION_CATEGORY— this was the one place that assumed exactly two non-trigger categories exist, and would have silently hidden the new category from the picker otherwise.NodePicker.vueneeded no change: its groupingcomputedalready groups dynamically by whatevercategoryvalues appear inNODE_TYPES(viaallowedCategoriesfiltering), so the new category surfaces automatically.Tests
Added
frontend/tests/unit/nodeTypes.spec.ts(TDD: written first, confirmed failing before the implementation change, then passing after):action-notify's category isNOTIFICATION_CATEGORYand distinct fromACTION_CATEGORY.ACTION_CATEGORY.AI,Actions,Notifications) for the picker to group by.Verification
npm run test:unit— all pass (3 test files, 7 tests)npm run check:types— cleannpm run lint— clean