Repository navigation
[Task] Adopt Studio edge-hover correction in consolidated Designer #8653
Description
Program: #8194
Parent: #8216
Source contribution: elsa-workflows/elsa-studio#1126 at 5379ea79fec28705ae888b75cf5f03993ad666f0
Objective and readiness
Carry the new Studio contribution fixing duplicate/stuck edge-remove buttons into the consolidated Designer, preserving contributor authorship and an explicit source-to-Core disposition. This bounded source-adoption Task is accepted on the program branch; #8655 owns final-main integration.
At intake, the lead and an independent read-only investigator reviewed the four-file source diff. At program merge 702376b501439e5244a0db8728d12b9da86eb5d9, imported create-graph.ts and vitest.config.ts are byte-identical to their source PR base versions (9a2452b82fd28eaeda80de785bafc73474b8a1e6 and 1478f0f18a1d5d4614a7add90e6164db6e706c3c). The helper and test do not exist in Core. No matching Core PR existed at intake; delivery subsequently used #8656. Both source and target heads were refreshed before adoption.
The original handler repeatedly appends edge tools and can leave a remove button behind. The source PR deduplicates tools and clears the previously hovered button when the pointer reaches another edge, node, blank canvas or outside the graph. The source PR itself had no hosted acceptance at intake; the Core delivery supplied the required proof below.
Scope
Adopt the existing contribution and retain its author attribution; map its four paths under src/studio/modules/Elsa.Studio.Workflows.Designer/ClientLib/. Keep source PR #1126 open for explicit owner disposition while linking the Core delivery. Do not open a competing Studio implementation or silently close the contributor PR. Preserve existing edge-interactivity policy, vertex tools, package IDs and unrelated designer behavior.
Review the source helper against the actual restored X6 version. The package declares ^2.18.1; inspection of X6 v2.19.0 is not proof of the eventual installed version. Add a defensive leave-edge guard and regression if required: enter A, enter B, then leave A must not remove B's button. Fake graph event tests alone do not prove browser event dispatch or remove-tool clickability.
Acceptance criteria
- Port/adopt the reviewed contribution with preserved attribution, source SHA mapping and focused Core PR against
codex/elsa-integration-program. - Keep at most one remove button and one vertex tool on the hovered edge, remove stale buttons on supported pointer transitions, and preserve read-only/noninteractive behavior.
- Retain the nine source event cases; cover stale leave from a previous edge without clearing the current hovered edge. Run ClientLib tests with type checking and production frontend build on the exact candidate head.
- Hosted real-X6 browser smoke exercises repeated enter, A-to-B transition, node/blank/outside transitions, moving onto the remove tool and clicking to remove the edge; repeat hover in noninteractive mode with no tools. Record exact restored X6 version and tested source. Synthetic event replay is distinct evidence, not a browser substitute.
- Lead reviews mapped integration and any defensive correction; independent Elsa 3 APPROVE + HIGH, Greptile 5/5 and repository exact-head CI pass before merge.
- Update [Feature] F2.4: Migration of contribution/release documentation and source ownership #8216 source contribution mapping with the merged Core commit and accurate original PR disposition. No npm publication or source-repository cutover is implied.
Execution constraints
Use an isolated worktree from the current program branch. Luna 6 Extra High is suitable for this bounded port; escalate integration ambiguity to the lead/Sol 6.1. Lead retains final integration and browser QA. No heavy local Node/browser/.NET workload while the host remains overloaded; use hosted verification. Use graph tools first for code discovery and preserve existing user changes. Do not broaden this into OIDC #809 or paused #8643 work.
Accepted program delivery — 2026-10-08
Core #8656 acceptance passed every scoped gate at reviewed 68d0e48d1eca94c4bfe2f8d3db5ec3d70159d980. Program merge 9df90490eee034088b4341b149986de6b9d317b0 has parents eccc39fe15d2e525af866bd5a2e59f12821de381 and 68d0e48d1eca94c4bfe2f8d3db5ec3d70159d980 and tree c42466e3b6b23f6771511b0ff201832b3b9689d3, exactly equal to the reviewed/tested candidate. The ordinary merge preserved history; no bypass or skip-ci directive was used. New merge-head CI is separate from the accepted slice-head results.
Packages 37698654855, Studio ClientLib/browser 37698660267 and imported-source impact 37698660416 all succeeded. Broad tests: 4,870 unit/integration passes, zero failures/144 skips; 226 component passes/one skip. Frontend: 263 tests, zero type errors, both builds/six assets and eight source guards. Focused runtime acceptance passed all nine natural browser cases and four mandatory handler-isolation/negative controls with exact source/dependency hashes. Independent Elsa 3 source/runtime APPROVE + HIGH and Greptile 5/5; no unresolved review threads. Copilot requested, no delivered review claimed.
The source mapping and original Studio #1126 OPEN disposition are recorded in #8216 and on the source PR. Gav's authorship and original four blobs are preserved. First/second failed observer receipts and the later coverage finding/fix remain recorded on #8656; prior failures were not retroactively passed. The old mouse-counter anomaly remains unexplained.
This Task is complete for its program-branch scope. #8655 owns final-main promotion and exact merged-main proof. #8216 remains open for its broader ownership/npm/source disposition; #8643 Hosted/package acceptance and release/publisher work remain separate. No publication, deployment, source PR closure or archival occurred.
Activity
sfmskywalker commentedon Oct 7, 2026
Readiness clarification while this Task remains queued: keep the existing
studio-clientlib-build.ymlsource gate (scripts/integration-program/build_studio_clientlibs.sh .) for the actual mapped Designer/DomInterop restore, generated-type validation, locked dependencies, Vitest/typecheck and production builds.The nine upstream cases use a fake Graph event dispatcher with real X6 Edge models. Preserve them and add the stale sequence A-enter, B-enter, A-leave: B must retain its single remove tool. This is distinct from browser evidence.
For browser acceptance, add a narrowly scoped source-head Chromium fixture that loads the actual production hover helper and a real X6 Graph. Exercise real pointer movement and the actual rendered remove button, including repeated entry, A-to-B, node/blank/outside transitions, moving onto and clicking the tool, and noninteractive mode. Record exact restored X6/Playwright versions and tested source. Verify the production graph initialization wires the helper. A source fixture may avoid unrelated server/database setup; it must not replace real DOM/X6 dispatch with
graph.trigger.The existing #8643 PackageCompatibility journey provides useful locked Playwright, selector and cleanup conventions, but its 36-cell matrix consumes immutable original package bytes. It cannot establish acceptance for this new source change; do not add this smoke to that compatibility ledger or treat a development-only matrix cell as accepted proof. No browser tests have been run for this Task yet. #8294 remains the sole active Task.
sfmskywalker commentedon Oct 7, 2026
Accepted through merged #8656 at
9df90490eee034088b4341b149986de6b9d317b0. All scoped exact-head gates passed; source mapping and disposition updated in #8216. #8656 (comment) Final-main integration remains under #8655.