Skip to content

[Diagram Editor] Circular fork operations and edit-popover positioning - #219

Open
ArizmendiWan wants to merge 12 commits into
open-rmf:mainfrom
ArizmendiWan:fork-redesign
Open

ArizmendiWan wants to merge 12 commits into
open-rmf:mainfrom
ArizmendiWan:fork-redesign

Conversation

@ArizmendiWan

@ArizmendiWan ArizmendiWan commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Fork and join operations are easier to distinguish from processing nodes when rendered as compact circles. This PR keeps Fork Clone, Fork Result, Split, Unzip, and Join as separate operations, updates their static port styling, and places edit popovers beside the selected node within the available canvas.

Progress tracing, WebSocket batching, message-flow animations, and playback are preserved in #228. This PR retains the existing runtime and interaction API.

Demo

Circular operations: Clone, Result, Unzip, Split, Join

Validation

  • All 160 frontend and REST integration tests pass.
  • TypeScript and Biome checks pass.
  • Embedded frontend rebuilt for this scope.
  • Verified that this source diff and the progress PR together preserve every source change from c5c45c2.

The two PRs target main independently. Their generated frontend archives must be rebuilt when combining them.

GenAI Use

We follow OSRA's policy on GenAI tools.

  • I used a GenAI tool in this PR.
  • I did not use GenAI.

Generated-by: Codex

Signed-off-by: ArizmendiWan <2311602492@qq.com>
- Refactor popover positioning logic for better UX, enhance fork operation handling, and clean up unused code.

- Update styles for node handles and improve layout options for compact nodes.

Signed-off-by: ArizmendiWan <2311602492@qq.com>
… icons, and enhance node styles.

Signed-off-by: ArizmendiWan <2311602492@qq.com>
# Conflicts:
#	diagram-editor/dist.tar.gz
#	diagram-editor/frontend/diagram-editor.tsx
Signed-off-by: ArizmendiWan <2311602492@qq.com>
# Conflicts:
#	diagram-editor/dist.tar.gz
@mxgrey

mxgrey commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

This small visual change is a huge improvement in helping the diagram structure feel more intuitive to users.

I would just recommend two tweaks:

  • Let's not combine Fork Clone, Fork Result, and Split into a single UI. Instead we continue to treat them as different operations, but render them all as the new circle shape.
  • Let's also use this circle shape for unzip.

…edge styling.

Signed-off-by: ArizmendiWan <2311602492@qq.com>
@ArizmendiWan

Copy link
Copy Markdown
Contributor Author
  • Kept Fork Clone, Fork Result, and Split as separate circular operations, and made Unzip circular.
  • Replaced the blinking streaming handle with an edge glow for every message. Frequent messages keep the edge glowing; it fades once messages stop.

Signed-off-by: ArizmendiWan <2311602492@qq.com>
Signed-off-by: ArizmendiWan <2311602492@qq.com>
Signed-off-by: ArizmendiWan <2311602492@qq.com>
…sual feedback for interaction completion.

Signed-off-by: ArizmendiWan <2311602492@qq.com>
@ArizmendiWan ArizmendiWan changed the title Fork redesign UI/UX improvements around fork operations and progress visualizations Aug 22, 2026
@mxgrey

mxgrey commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Based on testing it looks like c5c45c2 has fixed the issue reported in #225 🎉

Comment thread src/trace.rs Outdated
}

#[derive(Resource, Default)]
struct OperationLifecycleTracker {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ArizmendiWan I appreciate that you've taken the initiative to come up with this operation activity tracker since I haven't been able to set aside time for it, but I think the methodology here is more brute force than I'd prefer.

I haven't fully digested all the implementation details, but it looks to me like your approach is to put guardrails on the outside of all operations broadly to try to infer their levels of activity.

If we were to go a level deeper, I believe there will be more direct ways to assess the ongoing activities of an operation. For example, ActiveTasksStorage and ScopedSessionStorage tell us information about what is happening inside of an async service or a scope respectively. I was planning on adding a new method to the Operation trait to check an operation's liveliness, and each operation implementation can check their respective components as needed. This is similar to how Reachability is implemented.

My main concern about the approach you're using here is it might not generalize well. It makes assumptions from the outside about what can or cannot happen on the inside of an operation. For example, what if we some day have an operation where a single input message internally produces numerous parallel threads of operation which are not directly observable from the outside?

I'll try to find some time this week or early next week to implement what I have in mind.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have narrowed the scope this PR to its initial intention, as the progress visualization and the events need further consideration.

Signed-off-by: ArizmendiWan <2311602492@qq.com>
@ArizmendiWan ArizmendiWan changed the title UI/UX improvements around fork operations and progress visualizations [Diagram Editor] Circular fork operations and edit-popover positioning Sep 22, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants