fix: keep hotspot conditional branches coherent across UI and persistence#42
Merged
trmquang93 merged 1 commit intomainfrom Apr 27, 2026
Merged
Conversation
…ence Conditional connections carry two indicators — `connectionPath` (renderer) and `conditionGroupId` (modal/grouping). They could drift apart in three flows, producing branches that rendered as conditional but reopened as plain navigate (or vice versa): - saveHotspot wrote per-branch connections without a shared conditionGroupId - deleteConnection on a hotspot branch left the owning hotspot.conditions stale - convertToConditionalGroup / addToConditionalGroup updated connections only, not the hotspot, so HotspotModal opened with a stale single target - legacy v1–v9 .drawd files could load with mismatched indicators Fixes: - New canonical `isConditionalConnection` predicate in utils/connectionHelpers.js - saveHotspot now stamps a single shared conditionGroupId across each branch and its api-success/api-error sub-branches - deleteConnection rebuilds hotspot.conditions from surviving branches, collapsing back to plain navigate when only one remains - convert/addToConditionalGroup mirror the new branch onto the hotspot - importFlow heals legacy mismatches in two idempotent passes
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.
Summary
Conditional connections carry two indicators —
connectionPath(renderer) andconditionGroupId(modal/grouping). These could drift apart, producing branches that rendered as conditional but reopened in plain navigate mode. This PR makes hotspot-backed conditional groups coherent across creation, mutation, deletion, and load.isConditionalConnectionpredicate inutils/connectionHelpers.js; consumed byConnectionEditModalanduseInteractionCallbacks.saveHotspotnow stamps a single sharedconditionGroupIdacross each branch and its api-success/api-error sub-branches.deleteConnectionon a hotspot branch rebuildshotspot.conditionsfrom surviving connections and collapses back to plain navigate when only one remains.convertToConditionalGroup/addToConditionalGroupmirror new branches onto the hotspot, soHotspotModalopens with the full set.importFlowheals legacy v1–v9 files in two idempotent passes (path → groupId, groupId → path).Test plan
npm run lintcleannpm test— 699/699 pass (new tests inuseScreenManager.test.jsandimportFlow.test.js)HotspotModalreopens with the right remaining conditionsconnectionPath/conditionGroupIdand confirm both renderer and modal agree