Skip to content

fix: initialize orphaned blocks on failed connection check during des…#9718

Open
periperidev wants to merge 1 commit intoRaspberryPiFoundation:mainfrom
periperidev:fix/orphan-block-init
Open

fix: initialize orphaned blocks on failed connection check during des…#9718
periperidev wants to merge 1 commit intoRaspberryPiFoundation:mainfrom
periperidev:fix/orphan-block-init

Conversation

@periperidev
Copy link
Copy Markdown

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:

  • XML path (core/xml.ts): After initializing descendants, detect orphaned blocks (new top-level blocks that aren't
    descendants of the top block) and call initSvg() on them.
  • JSON path (core/serialization/blocks.ts): Log a warning instead of throwing BadConnectionCheck for non-shadow
    blocks, 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 Long to Int), saved workspaces may contain blocks with
stale 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

  • 2 new tests in xml_test.js — rendered and headless workspace orphan initialization
  • Updated "Bad checks" test in jso_deserialization_test.js to assert orphan behavior instead of throw
  • 1 new rendered workspace SVG test in jso_deserialization_test.js
  • All existing mocha tests pass (0 failures)

@periperidev periperidev requested a review from a team as a code owner April 13, 2026 13:32
@periperidev periperidev requested a review from maribethb April 13, 2026 13:32
@github-actions github-actions bot added the PR: fix Fixes a bug label Apr 13, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

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.

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

Labels

PR: fix Fixes a bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

XML deserializes weirdly on failed connection

2 participants