Skip to content

fix: downgrade scratch-blocks from v2.0.3 to v1.3.0 to restore custom block argument dragging #270

@takaokouji

Description

@takaokouji

Goal

upstream のマージ(6ac14806a)で取り込まれた scratch-blocks v2.0.0(spork ブランチ)により、「定義」ブロックの引数がドラッグできなくなる致命的な不具合が発生した(Discussion smalruby/smalruby3-develop#74)。

scratch-blocks を v2.0.3 → v1.3.0 に戻し、upstream の spork 関連変更(50ファイル)と Smalruby の v2 適応コミット(8個)をすべて巻き戻す。

調査結果

項目 詳細
upstream マージ前 fe2bee4d3(scratch-blocks 1.3.0)
upstream マージ 6ac14806a(146コミット、spork含む)
spork マージ(upstream内) 99c4cd34f(scratch-blocks v2.0.0 導入)
spork 直前の upstream 2cec3ae79(scratch-blocks 1.3.0)
spork で変更されたソースファイル 22ファイル(src/)
spork で変更されたテスト/設定 28ファイル
Smalruby v2 適応コミット 8個
spork 影響ファイルに触った Smalruby コミット 3個(blocks.jsx ×2, blocks.js ×1)

Affected Files

scratch-blocks バージョン変更:

  • packages/scratch-gui/package.json — 2.0.3 → 1.3.0、react等の直接依存削除
  • packages/scratch-vm/package.json — 2.0.3 → 1.3.0
  • package-lock.json — npm install で再生成

upstream ソースファイル復元(22ファイル、2cec3ae79 の状態へ):

  • packages/scratch-gui/src/containers/blocks.jsx — ★要注意: Smalruby の palette toggle 修正あり
  • packages/scratch-gui/src/lib/blocks.js — ★要注意: Smalruby の gesture recovery 修正あり
  • packages/scratch-gui/src/containers/backpack.jsx
  • packages/scratch-gui/src/containers/custom-procedures.jsx
  • packages/scratch-gui/src/lib/backpack/block-to-image.js
  • packages/scratch-gui/src/lib/define-dynamic-block.js
  • packages/scratch-gui/src/lib/make-toolbox-xml.js
  • packages/scratch-gui/src/lib/radix-ui-context-menu.js
  • packages/scratch-gui/src/lib/settings/color-mode/blockHelpers.js
  • packages/scratch-gui/src/lib/settings/color-mode/dark/index.js + __mocks__/
  • packages/scratch-gui/src/lib/settings/color-mode/default/index.js + __mocks__/
  • packages/scratch-gui/src/lib/settings/color-mode/high-contrast/index.js
  • packages/scratch-gui/src/components/context-menu/context-menu.jsx
  • packages/scratch-gui/src/components/monitor/monitor.jsx
  • packages/scratch-gui/src/components/sprite-selector-item/sprite-selector-item.jsx
  • packages/scratch-vm/src/engine/adapter.js
  • packages/scratch-vm/src/engine/blocks.js
  • packages/scratch-vm/src/engine/comment.js
  • packages/scratch-vm/src/engine/runtime.js
  • packages/scratch-vm/src/serialization/sb3.js

Smalruby v2 適応の巻き戻し(8コミットの変更):

  • packages/scratch-gui/src/lib/ruby-generator/index.js
  • packages/scratch-gui/src/lib/ruby-to-blocks-converter/block-utils.js
  • packages/scratch-gui/src/lib/ruby-to-blocks-converter/my-blocks.js
  • packages/scratch-gui/src/lib/ruby-to-blocks-converter/variable-utils.js
  • packages/scratch-gui/src/lib/generator.js
  • packages/scratch-gui/src/components/block-display-modal/block-display-modal.jsx
  • packages/scratch-gui/src/lib/blocks-screenshot.js
  • packages/scratch-gui/src/lib/vm-listener-hoc.jsx
  • CSS ファイル 2個、統合テスト 3ファイル

Implementation Steps

  • Phase 1: upstream ソースファイルの pre-spork 復元(22ファイル → 2cec3ae79 状態へ。blocks.jsxblocks.js は Smalruby 固有変更を維持しつつ手動マージ)
  • Phase 2: scratch-blocks ダウングレード(v2.0.3 → v1.3.0)+ 依存関係修正 + npm install
  • Phase 3: Smalruby v2 適応コードの巻き戻し(8コミット分: Ruby converter, generator, blocks-screenshot, palette toggle, CSS, keyboard events)
  • Phase 4: upstream テスト/設定ファイルの pre-spork 復元(14ファイル)
  • Phase 5: ビルド・テスト確認(build:dev, ユニットテスト, 統合テスト)
  • Phase 6: ブラウザ動作確認(Playwright で「定義」ブロック引数ドラッグ動作を確認)

Test Plan

Type Timing Target
ユニットテスト Phase 3-5 Ruby converter, generator, blocks-screenshot
統合テスト Phase 4-5 block-display, palette-toggle, localization
ブラウザ確認 Phase 6 定義ブロック引数ドラッグ、基本操作

Risks & Open Questions

  1. コンフリクトリスク: blocks.jsx は spork で 200行以上変更 + Smalruby の palette toggle 修正あり → 手動マージ必要
  2. 依存関係の互換性: upstream の他の依存パッケージ(eslint-config-scratch v13 等)が scratch-blocks v1.3.0 と互換性があるか要確認
  3. upstream 再マージ時の影響: 将来 upstream を再度マージする際、spork 変更が再度入る可能性 → scratch-blocks v2 の定義ブロック問題が修正されていることを確認してからマージする
  4. radix-ui-context-menu.js: spork で削除された可能性あり → 復元が必要か確認

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions