Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
156 commits
Select commit Hold shift + click to select a range
8a8c633
fix: run stacks in response to click events (#1)
gonfunko Apr 22, 2024
28ea54a
fix: use toolboxitemid instead of id as the identifier attribute for …
gonfunko Apr 30, 2024
ac4280e
fix: handle modern workspace comment events (#3)
gonfunko Jun 12, 2024
29bdbd1
fix: handle new custom block comment events (#4)
gonfunko Jul 9, 2024
8ba4f9e
fix: add the hat extension to extension hat blocks (#5)
gonfunko Sep 3, 2024
42efd32
fix: add the monitor block extension to extension monitor blocks (#6)
gonfunko Sep 3, 2024
686996a
refactor: use block styles instead of colors (#7)
gonfunko Sep 5, 2024
ced972e
fix: update VM state when blocks are removed from an input previously…
gonfunko Sep 16, 2024
ae67b9b
fix: fix bug that could result in the VM's representation of shadow b…
gonfunko Oct 8, 2024
a135fb5
style: run "eslint --fix ."
cwillisf Oct 11, 2024
9136cd0
style: copy style changes from gonfunko/modern-blockly
cwillisf Feb 20, 2025
e8e9603
ci: enable alpha and beta releases
cwillisf Oct 18, 2024
8263b70
fix: use scratch-blocks@^2.0.0-beta
cwillisf Oct 18, 2024
36652ad
ci: make temporary "spork" release channel
cwillisf Oct 21, 2024
603b852
chore(deps): update deps for spork test
cwillisf Oct 21, 2024
f633995
fix: Fix test failures. (#10)
gonfunko Nov 14, 2024
c07586b
chore(deps): update deps for spork test
cwillisf Dec 11, 2024
baf68a2
build: fix webpack-dev-server configuration
cwillisf Dec 20, 2024
f0f1c14
chore(deps): update deps for spork test
cwillisf Feb 11, 2025
aedce8a
Replace text-encoding polyfill
adroitwhiz Mar 9, 2021
d67cb26
fix: temporarily disable functionality in scratch-gui for compatibili…
gonfunko Apr 19, 2024
eaaca29
fix: show the correct toolbox based on sprites or the stage being sel…
gonfunko Apr 23, 2024
818227b
fix: modify inject options to reflect Scratch behaviors (#5)
gonfunko Apr 23, 2024
7c75828
fix: add support for Scratch-style procedures (#6)
gonfunko Apr 24, 2024
fde8293
fix: reenable the Scratch colour eyedropper
gonfunko Apr 24, 2024
3baa9bb
fix: patch the getCheckboxState method in the new flyout (#7)
gonfunko Apr 26, 2024
fbffc14
fix: select extension categories when added (#8)
gonfunko Apr 30, 2024
5de68f1
fix: Use toolboxitemid instead of id as the identifier attribute for …
gonfunko Apr 30, 2024
c0b3d0e
fix: preserve toolbox scroll position when switching between sprites/…
gonfunko May 1, 2024
b7e7854
fix: call reportValue on the ScratchBlocks module instead of the work…
gonfunko May 3, 2024
0cd556f
fix: call the new glow methods on ScratchBlocks (#12)
gonfunko May 6, 2024
9ecec90
fix: adjust key event filtering to fix the when key pressed block (#13)
gonfunko May 7, 2024
2d6e676
refactor: simplify toolbox refreshing behavior (#14)
gonfunko May 16, 2024
1c69194
fix: allow typing into comments (#15)
gonfunko Jul 8, 2024
2d07d0b
feat: plumb Scratch variable support into the UI (#16)
gonfunko Aug 2, 2024
b30a1c3
fix: specify the function to be used for prompting about variables (#17)
gonfunko Aug 5, 2024
f7fc9dc
fix: update the toolbox in response to procedure deletion/creation (#18)
gonfunko Aug 6, 2024
8bcd420
chore: don't specify the renderer/theme (#20)
gonfunko Aug 12, 2024
4638b40
fix: only refresh the toolbox when procedures are created via undo (#19)
gonfunko Aug 12, 2024
64b7d3d
fix: add pinch to zoom support (#21)
BeksOmega Aug 21, 2024
217a3c0
fix: make dropdown menu shadow block colors consistent (#22)
gonfunko Sep 3, 2024
77c4e2f
refactor: use block styles instead of directly specifying block color…
gonfunko Sep 11, 2024
9703bc6
refactor: improve efficiency of toolbox updates (#24)
gonfunko Sep 12, 2024
52ac752
fix: partially roll back flyout optimization (#25)
gonfunko Sep 16, 2024
15904a2
fix: prevent exception when switching languages (#27)
gonfunko Sep 18, 2024
1955a6f
fix: fix bug that prevented displaying the procedure editor modal on …
gonfunko Sep 18, 2024
565acd6
fix: avoid clearing the state of the sensing_of block by refreshing t…
gonfunko Oct 2, 2024
3fbb132
refactor: fix compatibility with checkboxes and category status indic…
gonfunko Oct 14, 2024
800b185
chore(deps): update scratch-blocks for unforking test
cwillisf Oct 18, 2024
50f031c
fix(release): release beta branch under beta label(?)
cwillisf Oct 19, 2024
6d07604
chore(deps): update deps for spork test
cwillisf Oct 21, 2024
f28a71d
chore(deps): update deps for spork test
cwillisf Dec 11, 2024
c2a5fe2
style: re-apply existing lint rules
cwillisf Dec 11, 2024
e017b95
fix: update "colour" property names for dark theme and mocks
cwillisf Dec 17, 2024
6177c0e
test: update dynamic block tests for colour -> style
cwillisf Dec 17, 2024
2f08990
test: fix theme injection tests
cwillisf Dec 17, 2024
fbae21e
fix: fix preserving toolbox scroll position for new continuous toolbo…
gonfunko Feb 4, 2025
fcdb0c3
chore(deps): update deps for spork test
cwillisf Feb 11, 2025
4d1e43a
style: lint fixes
cwillisf Feb 11, 2025
199055e
Revert "fix: adjust key event filtering to fix the when key pressed b…
cwillisf Feb 13, 2025
fd6deb2
test: move Selenium debugging info to files in test-results/
cwillisf Feb 19, 2025
5127c73
test: update XPath expressions for Blockly v12 beta
cwillisf Feb 13, 2025
9f1f9c3
Merge branch 'develop' into spork
cwillisf Feb 21, 2025
ff757e4
Merge branch 'develop' into spork
cwillisf Feb 22, 2025
f2e9e2b
test: update more XPath expressions for Blockly v12
cwillisf Feb 24, 2025
d985234
fix: variables got shy when flipping between code and project view
cwillisf Feb 25, 2025
35244af
Merge branch 'develop' into spork
cwillisf Mar 4, 2025
3958758
Merge branch 'build-script-improvements' into spork
cwillisf Mar 4, 2025
c5054ba
test: avoid false positives in xpath @class tests
cwillisf Mar 5, 2025
aaba89a
Merge branch 'develop' into spork
cwillisf Mar 5, 2025
0f13ad8
Merge branch 'develop' into spork
cwillisf Mar 5, 2025
4651f48
Merge branch 'develop' into spork
cwillisf Mar 5, 2025
08891ce
ci: fix(?) pushing from the publish workflow
cwillisf Mar 5, 2025
cd8f57a
ci: move commitlint into its own separate workflow
cwillisf Mar 5, 2025
6e4f7bb
ci: try again to get the push to work
cwillisf Mar 5, 2025
9030d5c
ci: temporarily disable publishing to NPM
cwillisf Mar 6, 2025
a233860
ci: temporarily disable pre-build/test in publish workflow
cwillisf Mar 6, 2025
c34518b
ci: determine tag for "npm publish" from branch name
cwillisf Mar 6, 2025
8408a2a
ci: make release commit message pass commitlint
cwillisf Mar 6, 2025
5aa2727
ci: re-enable publish steps that were disabled for testing purposes
cwillisf Mar 6, 2025
8942bdd
ci: publish to NPM under a tag determined by branch
cwillisf Mar 6, 2025
0a4788a
Merge branch 'develop' into spork
cwillisf Mar 6, 2025
d19570d
ci: publish all builds to GH Pages
cwillisf May 2, 2025
4b31377
ci: clean up stale GH Pages subdirectories
cwillisf May 2, 2025
dce9a08
fix: use derived IDs for block comments (#11)
gonfunko Feb 24, 2025
198e941
fix(deps): update to scratch-blocks@2.0.0-spork.5
cwillisf Sep 2, 2025
78c4e2e
fix: use serialization wrapper (#32)
gonfunko Aug 1, 2025
26ffd97
fix: plumb `FieldNote` through to the VM (#33)
gonfunko Aug 1, 2025
5f6b6a4
Merge branch 'develop' into spork
cwillisf Sep 3, 2025
d0a73c5
style: use single quotes to fix lint
cwillisf Sep 3, 2025
677f663
test: update comment ID in engine adapter test
cwillisf Sep 3, 2025
ab60931
ci: de-matrix GH Pages deploy
cwillisf Sep 3, 2025
92427b6
ci: output more info for debugging GHA
cwillisf Sep 4, 2025
0f959e1
ci: skip GH Pages publish from fork PRs
cwillisf Sep 4, 2025
504f261
Merge remote-tracking branch 'origin/develop' into spork
cwillisf Dec 4, 2025
c69bbc7
chore(deps): update deps for spork test
cwillisf Dec 4, 2025
0487565
fix: Fix test failures. (#10)
gonfunko Nov 14, 2024
a9110b7
fix: only attempt to blur when the currently focused element is the C…
adzhindzhi Feb 12, 2026
f581090
chore(deps): update dependency webpack to v5.105.2
renovate[bot] Feb 15, 2026
5216e12
Merge remote-tracking branch 'origin/develop' into spork
cwillisf Feb 19, 2026
e084e0b
style: fix scratch-vm lint
cwillisf Feb 19, 2026
b17d293
style: match formatting in develop to reduce diff noise
cwillisf Feb 19, 2026
11d6aa8
chore(deps): update dependency tap to v21.6.1
renovate[bot] Feb 22, 2026
d8ceec0
feat: export modal for usage in NGP
hgeorgiev-creator Feb 23, 2026
cf3bf9e
chore(deps): update dependency eslint to v9.39.3
renovate[bot] Feb 23, 2026
b07ac4f
fix: lint errors fixed
hgeorgiev-creator Feb 23, 2026
d033317
fix: new line at the bottom added
hgeorgiev-creator Feb 23, 2026
a1350ab
chore(deps): update dependency tap to v21.6.2
renovate[bot] Feb 23, 2026
37568e0
fix: resolve oops on dragging code to backpack
cwillisf Feb 20, 2026
ef586ff
style(deps): update dependency eslint-config-scratch to v12.0.50
renovate[bot] Feb 23, 2026
6b872e5
chore: changed fallback to untranslated words instead of empty string
kbangelov Feb 24, 2026
2299886
Merge pull request #453 from scratchfoundation/export-modals
KManolov3 Feb 24, 2026
d6da8b3
Merge pull request #454 from kbangelov/task/uepr-517-return-untransla…
KManolov3 Feb 24, 2026
6fd21b2
Merge pull request #443 from scratchfoundation/hotfix/text-field-not-…
adzhindzhi Feb 25, 2026
dcca1dd
chore(release): 12.7.0 [skip ci]
Feb 25, 2026
c5d1bb2
fix(deps): update dependency scratch-storage to v6.1.9
renovate[bot] Feb 25, 2026
ced8f78
chore(deps): update node.js to v24.14.0
renovate[bot] Feb 27, 2026
2e0b2a1
style(deps): update dependency eslint-config-scratch to v12.0.51
renovate[bot] Feb 27, 2026
8d97d5f
fix(deps): update dependency scratch-blocks to v2.0.0-spork.8
cwillisf Feb 27, 2026
4a4dbb2
fix(deps): update dependency scratch-storage to v6.1.10
renovate[bot] Feb 28, 2026
3ac8a9b
chore(deps): update dependency webpack to v5.105.3
renovate[bot] Mar 1, 2026
1981a6d
fix(deps): update dependency scratch-blocks to v2.0.0-spork.9
cwillisf Mar 2, 2026
bc1efd8
fix(deps): adapt to modernized scratch-blocks spork build output
cwillisf Mar 3, 2026
aa682e5
fix(deps): fix build with scratch-blocks@2.0.0-spork.11
cwillisf Mar 3, 2026
fb81be3
fix(deps): update dependency scratch-webpack-configuration to v3.1.2
renovate[bot] Mar 3, 2026
84d290b
fix: don't try to load sounds in 'Make a Block' dialog
cwillisf Mar 3, 2026
c67c0a7
Merge branch 'develop' into spork
cwillisf Mar 3, 2026
74db37e
Merge branch 'develop' into spork
cwillisf Mar 3, 2026
70b1982
test: fix flyout block scopes
cwillisf Mar 3, 2026
2cec3ae
fix(deps): update dependency scratch-storage to v6.1.11
renovate[bot] Mar 4, 2026
8629cbe
Merge branch 'develop' into spork
cwillisf Mar 4, 2026
f8760f6
fix(deps)!: update scratch-blocks to v2.0.0
cwillisf Mar 4, 2026
99c4cd3
Merge pull request #214 from scratchfoundation/spork
cwillisf Mar 4, 2026
810ac12
fix(deps): pin dependencies (#425)
renovate[bot] Mar 5, 2026
d4f2215
ci: attempt to fix test result reporting
cwillisf Mar 6, 2026
1500f88
chore(deps): update dependency terser-webpack-plugin to v5.3.17
renovate[bot] Mar 6, 2026
5f6f603
ci: retry GH Pages action in case of commit race
cwillisf Mar 6, 2026
5e9a65a
fix(deps): update dependency scratch-blocks to v2.0.3 (#459)
renovate[bot] Mar 6, 2026
7452dfc
Merge pull request #464 from scratchfoundation/deploy-pages-with-retry
cwillisf Mar 6, 2026
d7ca93a
style(deps): update dependency eslint-config-scratch to v13.0.2
renovate[bot] Mar 6, 2026
d8d4e07
Merge pull request #457 from scratchfoundation/renovate/eslint-config…
cwillisf Mar 6, 2026
49e1234
chore(deps): update dependency webpack to v5.105.4
renovate[bot] Mar 6, 2026
3adf0dd
chore(release): 13.0.0 [skip ci]
Mar 6, 2026
af460f9
fix(deps): update dependency immutable to v3.8.3 [security] (#460)
renovate[bot] Mar 7, 2026
93a9638
style(deps): update dependency eslint-config-scratch to v13.0.5
renovate[bot] Mar 7, 2026
42ea882
chore(deps): update dependency npm to v10.9.5
renovate[bot] Mar 8, 2026
6ac1480
feat: merge upstream scratch-editor changes (146 commits)
takaokouji Mar 8, 2026
72ff13d
fix: resolve lint errors from upstream merge
takaokouji Mar 8, 2026
9cbdc76
fix: add react, react-dom, redux as direct dependencies
takaokouji Mar 8, 2026
4227838
chore: update upstream merge history
takaokouji Mar 8, 2026
2045066
docs: add upstream merge documentation
takaokouji Mar 8, 2026
06e3fe4
fix: adapt to scratch-blocks v2.0.0 API changes
takaokouji Mar 8, 2026
4f2a507
fix: fix remaining unit test failures from upstream merge
takaokouji Mar 8, 2026
c5397b8
fix: update integration tests for scratch-blocks v2 DOM changes
takaokouji Mar 8, 2026
1e06354
fix: remove TAP_REPORTER=junit from CI to fix scratch-vm test failure
takaokouji Mar 8, 2026
cb9a310
fix: mock Date constructor in mesh v2 test to fix CI flakiness
takaokouji Mar 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions .github/actions/deploy-pages-with-retry/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Deploy GitHub Pages with retry

description: Deploy to GitHub Pages and retry failed deploy attempts with a delay.

inputs:
github_token:
description: GitHub token used by peaceiris/actions-gh-pages
required: true
publish_dir:
description: Directory to publish
required: true
destination_dir:
description: Destination subdirectory in gh-pages branch
required: true
full_commit_message:
description: Full commit message for the deploy commit
required: true
retry_delay_seconds:
description: Delay in seconds between retries
required: false
default: "5"

runs:
using: composite
steps:
- name: Deploy (attempt 1)
id: deploy_pages_attempt_1
continue-on-error: true
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
with:
github_token: ${{ inputs.github_token }}
publish_dir: ${{ inputs.publish_dir }}
destination_dir: ${{ inputs.destination_dir }}
full_commit_message: ${{ inputs.full_commit_message }}

- name: Wait before retry (attempt 2)
if: ${{ steps.deploy_pages_attempt_1.outcome == 'failure' }}
shell: bash
run: sleep "${{ inputs.retry_delay_seconds }}"

- name: Deploy (attempt 2)
id: deploy_pages_attempt_2
if: ${{ steps.deploy_pages_attempt_1.outcome == 'failure' }}
continue-on-error: true
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
with:
github_token: ${{ inputs.github_token }}
publish_dir: ${{ inputs.publish_dir }}
destination_dir: ${{ inputs.destination_dir }}
full_commit_message: ${{ inputs.full_commit_message }}

- name: Wait before retry (attempt 3)
if: ${{ steps.deploy_pages_attempt_2.outcome == 'failure' }}
shell: bash
run: sleep "${{ inputs.retry_delay_seconds }}"

- name: Deploy (attempt 3)
if: ${{ steps.deploy_pages_attempt_2.outcome == 'failure' }}
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
with:
github_token: ${{ inputs.github_token }}
publish_dir: ${{ inputs.publish_dir }}
destination_dir: ${{ inputs.destination_dir }}
full_commit_message: ${{ inputs.full_commit_message }}
14 changes: 0 additions & 14 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,8 @@ jobs:
run: npm run build:dev
- name: Lint
run: npm run lint
- name: Create test-results directories
run: |
mkdir -p packages/scratch-vm/test-results
mkdir -p packages/scratch-gui/test-results
- name: Run Unit Tests
env:
TAP_REPORTER: junit
TAP_REPORTER_FILE: test-results/unit-tests-results.xml
run: npm run test:unit
- name: Store Test Results
if: always() # Even if tests fail
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: test-output-unit
path: |
packages/*/test-results/*

integration-test-vm:
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
24.13.1
24.14.0
20 changes: 14 additions & 6 deletions .upstream-merge-history.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
{
"lastMerge": {
"date": "2026-02-14",
"upstreamCommit": "5f063605b67927f01647f56a8abf28b972a292bd",
"smalrubyCommit": "8220cde2ad0589dc5decfae18ae17ca66c57562b",
"mergeCommit": "58b3f1c7c",
"notes": "PR #431 green flag keyboard focus fix - 93 upstream commits merged"
"date": "2026-03-08",
"upstreamCommit": "42ea882750bd1c3b1544df33cfa794efa2a6d907",
"smalrubyCommit": "fe2bee4d37263f1d814235843d118b66406f5762",
"mergeCommit": "6ac14806a",
"notes": "146 upstream commits merged - scratch-blocks v2.0.0, release 13.0.0"
},
"previousMerges": []
"previousMerges": [
{
"date": "2026-02-14",
"upstreamCommit": "5f063605b67927f01647f56a8abf28b972a292bd",
"smalrubyCommit": "8220cde2ad0589dc5decfae18ae17ca66c57562b",
"mergeCommit": "58b3f1c7c",
"notes": "PR #431 green flag keyboard focus fix - 93 upstream commits merged"
}
]
}
34 changes: 34 additions & 0 deletions notes/upstream/merge-2026-03/conflict-resolutions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Conflict Resolutions - 2026-03 Upstream Merge

## Files with Conflicts

### Known Conflicts (Resolved)
- [x] `package-lock.json` - Regenerated with `npm install --legacy-peer-deps`
- [x] `packages/scratch-gui/package.json` - Kept @smalruby naming, merged deps
- [x] `packages/scratch-render/package.json` - Kept @smalruby naming, bumped version
- [x] `packages/scratch-svg-renderer/package.json` - Kept @smalruby naming, bumped version
- [x] `packages/scratch-vm/package.json` - Kept @smalruby naming, bumped version
- [x] `packages/task-herder/package.json` - Kept @smalruby naming, bumped version

### Unexpected Conflicts (Manual Resolution)
- [x] `.github/workflows/ci.yml` (DU) - Kept deletion (Smalruby uses own CI)
- [x] `packages/scratch-gui/src/lib/settings/color-mode/dark/__mocks__/index.js` (DU) - Accepted upstream
- [x] `packages/scratch-gui/src/lib/settings/color-mode/default/__mocks__/index.js` (DU) - Accepted upstream
- [x] `packages/scratch-gui/eslint.config.mjs` - Kept Smalruby additions + upstream globalIgnores, updated import/core-modules to import-x/core-modules
- [x] `packages/scratch-gui/src/containers/blocks.jsx` - Kept Smalruby logic (Ruby tab guard, fromRuby cleanup), updated ScratchBlocks API calls to v2.0.0
- [x] `packages/scratch-gui/test/integration/blocks-standalone.test.js` - Imported both `until` and `scopeForFlyoutBlock`
- [x] `packages/scratch-gui/test/integration/blocks.test.js` - Imported both `until` and `scopeForFlyoutBlock`
- [x] `packages/scratch-gui/test/integration/localization.test.js` - Kept Smalruby version (Japanese locale test)

## Post-Merge Fixes
- Added `blockDisplayInitialState` export alias to `block-display.js` reducer
- Added `redux` to `import-x/no-unresolved` ignore in eslint config
- Fixed `colorMode` destructuring in blocks.jsx (needed by CustomProcedures)
- Added `react`, `react-dom`, `redux` as direct dependencies (were peer deps only)

## ScratchBlocks v2.0.0 API Changes Applied
- `ScratchBlocks.prompt` → `ScratchBlocks.dialog.setPrompt()`
- `ScratchBlocks.statusButtonCallback` → `ScratchBlocks.StatusIndicatorLabel.statusButtonCallback`
- `ScratchBlocks.Xml.textToDom` → `ScratchBlocks.utils.xml.textToDom`
- `ScratchBlocks.Xml.clearWorkspaceAndLoadFromXml` → `ScratchBlocks.clearWorkspaceAndLoadFromXml`
- `this.workspace.reportValue()` → `this.ScratchBlocks.reportValue()`
23 changes: 23 additions & 0 deletions notes/upstream/merge-2026-03/progress.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Upstream Merge Progress - 2026-03

## Info
- **Date**: 2026-03-08
- **Branch**: feat/upstream-merge-2026-03
- **Upstream commits**: 146
- **Previous merge commit**: 5f063605b67927f01647f56a8abf28b972a292bd

## Steps

| Step | Status | Time |
|------|--------|------|
| Prerequisites | ✅ | 2026-03-08 |
| Branch creation | ✅ | 2026-03-08 |
| Merge execution | ✅ | 2026-03-08 |
| Conflict resolution | ✅ | 2026-03-08 |
| Lint | ✅ | 2026-03-08 |
| Build | ✅ | 2026-03-08 |
| Unit tests | ✅ | 2026-03-08 |
| Integration tests | ✅ | 2026-03-08 |
| CI check | ⏳ Running | |
| Documentation | ✅ | 2026-03-08 |
| PR creation | ✅ | PR #238 |
40 changes: 40 additions & 0 deletions notes/upstream/merge-2026-03/test-results.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Test Results - 2026-03 Upstream Merge

## Lint
✅ Passed (3 pre-existing warnings)

## Build
✅ Passed (dev build, warnings only)

## Unit Tests
✅ Passed (183 suites, 1582/1583 passed, 1 skipped)

## Integration Tests
✅ Passed (local)

- smalruby-tutorials.test.js: 3/3 ✅
- block-display-modal.test.js: 7/7 ✅
- gemini-modal.test.js: 1/1 ✅
- ruby-tab-completion-and-indent.test.js: ✅ (skipped: 12)
- tutorial-block-restriction.test.js: 3/3 ✅
- palette-toggle.test.js: 4/4 ✅
- backpack.test.js: ✅
- ruby-tab.test.js: ✅
- menu-bar.test.js: ✅
- project-loading.test.js: ✅
- sprites.test.js: ✅
- blocks.test.js: ✅
- localization.test.js: 4/4 ✅

### Fixes Required for scratch-blocks v2
- `clickText` → `clickBlocksCategory` for toolbox category clicks (DOM structure changed)
- `.blocklyToolboxDiv` → `.blocklyToolbox` CSS selector (class name changed)
- `import Blockly from 'scratch-blocks'` → `import * as Blockly from 'scratch-blocks'` (no default export)
- `Blockly.utils.genUid()` → `Blockly.utils.idGenerator.genUid()` (API changed)
- `Blockly.NAME_TYPE` → `Blockly.Names.NameType` (API changed)

## CI Status
⏳ Running - https://github.com/smalruby/smalruby3-editor/actions/runs/22818709584

### Known CI Issue
- "Lint commit messages" workflow fails due to upstream commits with headers >100 characters. This is expected for merge branches and not a blocking issue.
Loading
Loading