Talk about a flow where it happens, and propose edits without making them. Open Comments in the editor's header (the number counts open threads and pending suggestions).
Comments
- Who: everyone on the flow reads them; commenters, editors and the owner write (Sharing a flow).
- Where: select a node and write: the thread is pinned to that node (a badge with the count on it). With nothing selected it's pinned to the canvas where you are (a pin in the author's color). Click a badge or pin to open the thread.
- Replies, edits, delete: reply in the thread (
⌘↵sends); edit or delete what you wrote. The flow's owner can delete any entry. Deleting a thread's first entry deletes the thread. - @mentions: type
@and pick someone with a role on the flow. They get a bell and theflow.commentmessage (email or WhatsApp, per their settings) with a link that opens the thread (?comment=<id>). - Replies ring the thread: everyone else who wrote in it gets a bell.
- Resolve / Reopen: a resolved thread folds away under Resolved; it isn't deleted.
- Everything is live: whoever has the flow open sees new threads, replies and resolves at once.
Suggestions
- Suggest (header): your edits stay in your editor, on the flow as it was when you started, and a bar says Suggesting. Commenters use it to propose changes; editors can too.
- Send suggestion with an optional note, or Discard. Sending makes a draft canvas (named by your note, locked to you) for review; the owner gets a bell.
- In the Suggestions tab everyone sees them with what they'd change (added, changed, removed nodes). Review opens its draft on the stage (new nodes outlined green, changed ones amber); Hide goes back to main.
- Accept (editors) keeps the draft into main with a three-way merge, as Git does: what it changed comes in, edits others made meanwhile stay (see Canvases). A conflict stops it: open the draft from Canvases and keep it from there. Reject deletes the draft without changing anything. Its author gets a bell either way.
How it works
FlowComment { anchor: { canvasId, nodeId | position }, thread: [{ id, userId, text, mention, at, editedAt }], resolvedAt, resolvedBy }(src/lib/database/schema/flow/comment). A thread is pinned to the canvas it was made on; opening it switches to that canvas.- A suggestion is a draft canvas in the live document (
draft.isSubmitted), so there's nothing to fetch: everyone sees it arrive. - Actions:
src/actions/app/[workspace]/studio/comment(aStudioCommentList,Save,Remove,Resolve) and…/canvas(aStudioCanvasSuggest,Keep,Undo), each checked withflowAccess. - After every change the server sends a stateless message to the flow's live document (
collabNotify,src/lib/collab/notify.ts); editors fetch the list again. - Suggesting keeps your edits in the Studio store (
suggestion.draft.base) until you send them; main isn't touched until an editor accepts.
FAQ
Can a viewer comment?
No. Viewers read comments; ask the owner to make you a commenter.
What if the flow changed after I made a suggestion?
Accept merges only what you changed, onto main as it is then. If someone else changed the same part of a node, that's a conflict to settle before it can be kept.
Who gets notified about a comment?
People you @mention (bell and message), and, on a reply, everyone else in the thread (bell).