Skip to content

Fix consolidated Studio edge hover tools and prove browser behavior - #8656

Merged
sfmskywalker merged 9 commits into
codex/elsa-integration-programfrom
codex/studio-hover-lead
Oct 7, 2026
Merged

sfmskywalker merged 9 commits into
codex/elsa-integration-programfrom
codex/studio-hover-lead

Conversation

@sfmskywalker

@sfmskywalker sfmskywalker commented Oct 7, 2026 •

Copy link
Copy Markdown
Member

Hovering a Designer edge repeatedly can stack remove buttons or leave a previous edge’s button behind. Adopt Studio #1126, keeping one remove button on the hovered edge and clearing it across pointer transitions while preserving vertex tools.

The original four-file contribution is preserved with Gav’s authorship and exact source blobs from elsa-studio@5379ea79fec28705ae888b75cf5f03993ad666f0, mapped under src/studio. Separate corrections ignore delayed leave events from a previous edge and skip hover registration in read-only graphs. The original Studio PR remains open for the contribution-migration disposition under #8216.

The existing Studio ClientLib gate now checks out the exact PR head, runs its full Vitest/typecheck and production bundles, then exercises nine natural-pointer assertions and four mandatory handler-isolation controls against restored X6 in Chromium. The supplemental controls explicitly filter earlier leave/blank callbacks and require genuine destination entry with the old button still present; omitting that destination handler must fail the exact old-button-clear predicate. A new isolated fixture records source/dependency hashes and browser/event evidence; eight guard tests reject wrong heads, edited source and changed restored inputs. Missing mapped source fails instead of silently selecting the historical fallback. This is focused source-browser proof, separate from the paused #8643 package compatibility matrix.

Current candidate: 68d0e48d1eca94c4bfe2f8d3db5ec3d70159d980. Eight source-binding guards, JavaScript parse and diff checks pass; independent cumulative Elsa 3 source review is APPROVE + HIGH. Current-head hosted proof passed all thirteen browser records, 263 ClientLib tests, typecheck, both builds and eight guards; independent source/runtime review is APPROVE + HIGH. Greptile 5/5 is confirmed on this head with no unresolved threads. Broad Packages CI remains required before merge. Heavy local verification was not run while the host is overloaded.

Historical validation at 2bec5492c234c2f9a4c7300cd6f70fd7cd0cb3a3 passed 263 ClientLib tests, typecheck, both production bundles, nine natural browser assertions and broad Packages CI. Greptile's 4/5 coverage finding prompted the new supplemental controls; previous checks are not transferred to this candidate. The two earlier observer failures remain retained.

Refs #8653, #8216, #8194. Target: codex/elsa-integration-program; final promotion to main is owned by #8655. No npm publication or source publisher cutover is included.

Abyssalisk and others added 5 commits October 7, 2026 23:59
Ported from elsa-workflows/elsa-studio@5379ea7; map src/modules/Elsa.Studio.Workflows.Designer/ClientLib to src/studio/modules/Elsa.Studio.Workflows.Designer/ClientLib.
Only clear the hover tool when the leaving edge is still the active edge. Cover a late leave from edge A after edge B becomes hovered.
@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e32d6c95-3bea-4162-972d-8cb9857812f7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@sfmskywalker

Copy link
Copy Markdown
Member Author

Independent Elsa 3 source review: APPROVE + HIGH on exact 605b8548f3ecabf7c2fb450ed1405496e56c4f2b; lead agrees. Hosted runtime proof is still pending, so this is not merge acceptance.

The attributed four-file port matches all source blobs from Studio 5379ea79fec28705ae888b75cf5f03993ad666f0. Separate commits add the stale-leave guard and explicit read-only registration guard. The reviewer found the historical fallback could hide a missing imported Designer manifest; the integrated workflow now fails that condition. Eight source-binding guard tests, actionlint, JS parsing, lock consistency, detector branches and diff checks pass locally. No heavy local build/browser ran.

A read-only preflight retrieved the exact X6 2.19.2 tarball and verified its SHA-512 against the reviewed Designer lock. Its DOM/tool-event implementation supports the fixture selectors and native remove-button path. The vertices assertion counts a tool group/model entry, not visible bend handles on straight edges. Only the hosted Chromium run can establish pointer behavior.

CI is now running against this head, including Studio ClientLib run 37693636738. Greptile has started; Copilot was requested during PR creation but has delivered no review. Original Studio #1126 remains open. Publication, cutover and final-main promotion are not included in this PR.

@sfmskywalker

Copy link
Copy Markdown
Member Author

First hosted proof on 605b8548f3ecabf7c2fb450ed1405496e56c4f2b failed and is not accepted: run 37693636738.

  • Eight source-binding guards passed. Full ClientLib gate passed 263 tests in ten files, zero type errors, both production bundles and six required assets.
  • Real Chromium 149.0.7827.55 with restored X6 2.19.2 passed the first five browser assertions. outside-clears-hover failed; remove-tool entry/click and noninteractive cases did not run. Zero browser errors/blocked requests were recorded.
  • The failed receipt lacks per-assertion state, so it does not establish whether the button remained or the event-count assertion failed. Locked X6/x6-common source shows direct edge-to-outside transitions can emit edge leave without the graph-level leave event that the fixture additionally expected. The correction will observe the actual native container exit while retaining zero-button DOM/model and vertex-preservation assertions, plus sanitized per-assertion diagnostics. No product relaxation or synthetic event substitute is planned.

Retained failure artifact 11514283057, ZIP SHA-256 acb596e3408cf2a989d81ddc9541eb1124937854565e94c3293e6f59f0108fdb, receipt SHA-256 6ed4bd7cf9501683a2680fef2cd940580c624d8ee19f842b242a91cb68cd9d52, expiry 2026-10-21T22:04:42Z. Task #8653 returns to Assigned / Verification Failed while the correction is reviewed. No merge acceptance is claimed.

@sfmskywalker

Copy link
Copy Markdown
Member Author

Pushed correction e244afdfec20ecbcb5daf00b50b91f9a3794c6f8; independent Elsa 3 review is again APPROVE + HIGH for source, and the lead agrees. Native container exit is now observed independently of X6’s descendant-target leave dispatch. Exact outside coordinates, rendered/model button absence, retained vertex tool and pointer-outside checks remain required. AbortController cleanup prevents duplicate observers across reset. Every attempted browser assertion now retains fixed-category counts/booleans before teardown.

No product code changed in this correction. The first failure remains retained and unaccepted. New exact-head Studio ClientLib/browser run 37694342376, broad CI and Greptile review must pass before merge. Copilot was re-requested; no Copilot result is claimed.

@sfmskywalker

Copy link
Copy Markdown
Member Author

Second hosted proof at e244afdfec20ecbcb5daf00b50b91f9a3794c6f8 is failed, not accepted: run 37694342376. Frontend/guard/build steps passed again. The added observation now proves the outside transition cleared all model/rendered buttons and retained one vertex tool on each edge. Failure was specifically native-container-leave: the mouse observer recorded 15 enters but zero leaves, while X6 recorded edge leave and no graph leave. This is evidence against the observer assumption, not a stale-button finding. The final three browser cases remain unattempted.

Investigating X6 mouse-event interference before changing observation again. All behavior assertions stay required; no product change is justified by this receipt. Artifact 11514428543, ZIP sha256:7dad1b35a6f8710e677e1a4e3052c0fc9d3659041e1e00d85e23c71a6469bc30, receipt SHA-256 d506e8ed5f9242de26112b36bb0b5d80578266498874664f091c0ddb7b975447, expiry 2026-10-21T22:11:02Z. Task #8653 is Assigned / Verification Failed during correction.

@sfmskywalker

Copy link
Copy Markdown
Member Author

Third proof candidate is 2bec5492c234c2f9a4c7300cd6f70fd7cd0cb3a3; independent Elsa 3 source review again reports APPROVE + HIGH, and the lead agrees. Studio ClientLib/browser run 37695187365 is running on that exact head.

The fixture now observes trusted root PointerEvents in capture phase, requiring the actual 800×440 bounds, CSS :hover false, a trusted pointer outside the rectangle and outside the DOM hit subtree, and a positive root pointer-leave delta. All original tool-state/button-click/noninteractive assertions remain mandatory. The previous native mouse-counter anomaly is still unexplained; source review found no event monkeypatch or synthetic dispatch mechanism, so no claim of X6 interception is made. Both prior failed receipts remain unaccepted. No product source changed in either diagnostic correction.

Exact-head broad CI and automated review remain required. Superseded Packages runs are canceled only after their replacement starts. Copilot was requested again but has not delivered a review.

@sfmskywalker

Copy link
Copy Markdown
Member Author

Focused source and runtime proof is accepted on exact 2bec5492c234c2f9a4c7300cd6f70fd7cd0cb3a3; independent Elsa 3 review is APPROVE + HIGH for source and focused runtime, and the lead independently agrees. PR merge acceptance still awaits broad CI and exact-head Greptile 5/5.

Hosted Studio ClientLib run 37695187365, attempt 1, passed:

  • Eight source-binding guards; 263 ClientLib tests in ten files (including all ten hover cases), zero type errors, both production bundles and six required assets.
  • All nine unique native-pointer browser assertions against X6 2.19.2 in Chromium 149.0.7827.55, using Playwright 1.61.1 and esbuild 0.28.2; zero browser errors or external requests.
  • Outside transition: actual 800×440 bounds, trusted pointer leave, pointer outside rectangle/hit subtree and CSS hover false; buttons absent in DOM/model, vertex tools retained.
  • Actual remove-control entry and native click: A removed from DOM/model, B retained. Fresh noninteractive graph: repeated native entries on both edges, neither model nor DOM tools created; observer cleanup verified.

Lead and independent reviewer checked all 15 tracked source/fixture/workflow hashes against this Git head plus the restored ClientLib lock against the reviewed lock. The receipt retains 923 installed bundle input hashes and checks every input unchanged after teardown (939 inputs total). ZIP digest and sole receipt bytes were independently verified. Artifact 11515815039, ZIP SHA-256 a5b79a2f4582269e8677f8bfc06642ae50dc39cebfced7406d8eaa12dd8c48cc, receipt SHA-256 0f47263da1e86fcf1b14bf5079dbdc9c9d527d5498f17518350ceec931e890ff, expiry 2026-10-21T22:18:30Z.

Both earlier failed receipts remain in the record; their missing/unattempted cases are not retroactively passed. The old native mouse-counter anomaly remains unexplained. This is a focused source-helper browser proof with production integration reviewed and compiled; it does not replace the #8643 paired-package/full-Studio proof or authorize publication/cutover.

@greptile-apps

greptile-apps Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[Medium risk] Refactors edge hover tool registration in the workflow designer.

No blocking issues remain in the reviewed changes. The previous coverage gap is addressed, and there are no outstanding findings that prevent merging.

What we checked:

  • Earlier callbacks hide broken clearing: The supplemental checks suppress both earlier callbacks and require A's button to remain before destination entry. Delivered and omitted destination callbacks must produce opposite results.

Summary

The PR keeps one remove button on the hovered Designer edge, preserves vertex tools, and skips hover registration for read-only graphs. The workflow checks the exact candidate source and records Chromium evidence.

Four mandatory supplemental checks now isolate edge-entry and node-entry clearing. They suppress earlier leave and blank callbacks, require the old edge's button to remain immediately before destination entry, and compare delivered versus omitted destination callbacks. The pointer approaches the source edge from outside the graph to avoid an accidental destination entry during setup. These checks address the previous non-blocking coverage finding without presenting the supplemental paths as unmodified pointer transitions.

No outstanding findings remain.

Reviews (2) · Last reviewed commit: "test(studio): approach isolated hover pr..." · Reviewed by Greptile

Comment thread test/studio/browser/DesignerHover/run.mjs
@sfmskywalker

Copy link
Copy Markdown
Member Author

Exact-head source review checkpoint: 68d0e48d1eca94c4bfe2f8d3db5ec3d70159d980, tree c42466e3b6b23f6771511b0ff201832b3b9689d3.

Lead review and independent Luna 6 Extra High Elsa 3 review: APPROVE + HIGH, no actionable finding. Independent Sol 6.1 cumulative main-promotion source review also remains APPROVE + HIGH against main b38e7523f79297076e51701fd951c426145aa99c; this is prospective source review, not promotion approval.

The delta since 2bec5492... is limited to three fixture/documentation files. All nine natural cases remain; four mandatory controls now isolate destination callbacks, with genuine event order, old-button presence immediately before target entry and specific negative predicate rejection. The setup follows an outside-right/top route before entering A. Production helper bytes are unchanged. Eight input guards, JavaScript parse and diff checks passed. Preexisting worktree artifacts remain untouched.

Fresh exact-head hosted runs: Studio ClientLib/browser 37698660267, Packages 37698654855, and imported-source impact 37698660416. Runtime acceptance and Greptile 5/5 remain pending. Copilot review was requested; none has been delivered. Prior-head success is not current-head proof.

@sfmskywalker

Copy link
Copy Markdown
Member Author

Focused source/browser acceptance at 68d0e48d1eca94c4bfe2f8d3db5ec3d70159d980: lead accepted; independent Elsa 3 source and runtime review APPROVE + HIGH. Studio ClientLib/browser run 37698660267, attempt 1, completed successfully.

  • 263 ClientLib tests in ten files, zero type errors, both production frontend builds and six required assets; eight source-binding guards passed.
  • All nine natural-pointer browser checks passed, including trusted outside-boundary geometry, actual remove-tool click and noninteractive zero-tools behavior.
  • All four mandatory destination-handler isolation controls passed. Every record shows genuine A entry → A leave → blank hover → destination entry; one leave and one blank helper callback were suppressed. A's DOM/model button and vertex tool are each one immediately before destination handling. Delivered edge/node callbacks clear A's button; omitted callbacks keep it at one and make the exact old-A-clear predicate false. Both positive and negative cases retain vertex tools. The controls are explicitly fault injection, separate from the nine natural paths.
  • Zero browser errors and zero blocked external requests. X6 2.19.2, Playwright 1.61.1, esbuild 0.28.2, Chromium 149.0.7827.55.
  • Lead and independent reviewer downloaded/verified the single-receipt ZIP, matched all 15 tracked source inputs against this exact Git head, and matched the restored lock to its reviewed source. The receipt records 923 actual dependency inputs, guarded before and after execution; 939 total inputs.

Retained artifact 11516676825, expires 2026-10-21T22:52:39Z. ZIP SHA-256 19b047552217ba85738125b322e32fce13aef2a48cd58bb2750554b44c8dadd0; receipt SHA-256 63b6da54f9dcc2e22494f52408edd7a731260f168eed95fac547ea2c4792ec3d; bundle SHA-256 b5f27957f3d5f66ee19edbbd84be5c7dd9a49067efa0cb336858b304d04abf56.

Direct finding reply and runtime evidence; the addressed thread is resolved. Broad Packages CI and fresh Greptile 5/5 still gate merge. Copilot was requested but no review delivered; CodeRabbit's skipped-base success is not review evidence. This is focused source/X6 proof, not paused #8643 Hosted/package acceptance. Two earlier failed observer receipts remain preserved, and their old mouse-counter anomaly is not retroactively explained. No merge/publication is claimed.

@sfmskywalker

Copy link
Copy Markdown
Member Author

Lead acceptance for Task #8653 / PR #8656 at exact head 68d0e48d1eca94c4bfe2f8d3db5ec3d70159d980, tree c42466e3b6b23f6771511b0ff201832b3b9689d3, base eccc39fe15d2e525af866bd5a2e59f12821de381.

All three exact-head workflows completed successfully: Packages 37698654855, Studio ClientLib/browser 37698660267, and imported-source impact 37698660416. Broad tests: 4,870 unit/integration passes, zero failures, 144 skips; 226 component passes and one skip. Build/pack and coverage succeeded. Automatic publication selection, Feedz/NuGet publication and coverage deployment were intentionally skipped; imported affected tests were intentionally not selected for this frontend-only change. Skips are not provider proof.

Focused acceptance and retained artifact: 263 ClientLib tests, no type errors, both builds/six assets, eight input guards, nine natural browser cases and four mandatory destination-handler isolation controls; zero browser errors/external requests. Lead and independent Elsa 3 source/runtime review: APPROVE + HIGH. Independent cumulative source review also approved this prospective main delta. Greptile 5/5 explicitly binds this head; its sole finding was directly answered and its thread is resolved. Copilot was requested but no review delivered; CodeRabbit's skipped-base result is not substantive review evidence.

The original four-file Studio #1126 contribution preserves Gav's author identity and mapped source blobs from 5379ea79fec28705ae888b75cf5f03993ad666f0; defensive stale-leave/read-only changes and the source-bound browser fixture were reviewed separately. Original Studio PR remains open for explicit #8216 disposition. Earlier failed observer receipts stay retained; no claim that the historical mouse-counter anomaly was explained.

Pre-merge readback: OPEN, non-draft, CLEAN/MERGEABLE, unchanged base/head, no unresolved review threads, all rollup checks terminal and successful/intentionally skipped. Proceed with ordinary history-preserving merge, no bypass and no skip-ci directive. This accepts the bounded Studio slice on the program branch; #8655 owns final-main integration and verification. No npm publication, publisher cutover or #8643 Hosted/package acceptance is implied.

@sfmskywalker
sfmskywalker merged commit 9df9049 into codex/elsa-integration-program Oct 7, 2026
15 checks passed
@sfmskywalker
sfmskywalker deleted the codex/studio-hover-lead branch October 7, 2026 23:18
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