fix: initialize orphaned blocks on failed connection check during des…#9718
Open
periperidev wants to merge 1 commit intoRaspberryPiFoundation:mainfrom
Open
fix: initialize orphaned blocks on failed connection check during des…#9718periperidev wants to merge 1 commit intoRaspberryPiFoundation:mainfrom
periperidev wants to merge 1 commit intoRaspberryPiFoundation:mainfrom
Conversation
Contributor
There was a problem hiding this comment.
Welcome! It looks like this is your first pull request in Blockly, so here are a couple of tips:
- You can find tips about contributing to Blockly and how to validate your changes on our developer site.
- We use conventional commits to make versioning the package easier. Make sure your commit message is in the proper format or learn how to fix it.
- If any of the other checks on this PR fail, you can click on them to learn why. It might be that your change caused a test failure, or that you need to double-check the style guide.
Thank you for opening this PR! A member of the Blockly team will review it soon.
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.
Body:
The basics
The details
Resolves
Fixes #9266
Proposed Changes
When a child block fails to connect to its parent during deserialization (e.g. due to a type check mismatch), the block
becomes an invisible "ghost" — it exists in the workspace data but has no SVG.
This PR fixes both deserialization paths:
core/xml.ts): After initializing descendants, detect orphaned blocks (new top-level blocks that aren'tdescendants of the top block) and call
initSvg()on them.core/serialization/blocks.ts): Log a warning instead of throwingBadConnectionCheckfor non-shadowblocks, allowing
initBlock()to run. Shadow blocks still throw.Both paths mark orphaned blocks as disabled via
setDisabledReason(true, 'orphaned_connection_check').Reason for Changes
When block definitions change (e.g. an input type changes from
LongtoInt), saved workspaces may contain blocks withstale connection types. Currently these blocks become invisible ghosts that trigger validation errors. After this fix, they
appear as visible, disabled, detached top-level blocks.
Test Coverage
xml_test.js— rendered and headless workspace orphan initializationjso_deserialization_test.jsto assert orphan behavior instead of throwjso_deserialization_test.js