Skip to content

fix: restore Shimaraby/Shimacat sprites lost in upstream merge and remove Cat Flying #688

@takaokouji

Description

@takaokouji

Goal

スモウルビー公式キャラクターの Shimaraby / Shimacat スプライト・コスチュームが、upstream マージで消失していたため復元する。あわせて、Scratch トレードマークに該当する Cat Flying スプライト・コスチュームが除去テストの不備により残存していたので除去し、テスト不備も修正する。

背景・原因調査

Shimaraby / Shimacat 消失

  • 追加コミット: d6fb369bc2 (sprites), 1c3f91a216 (costumes), f2b5c09e5b (CDN hash 化)
  • 消失タイミング: PR feat: upstream merge 2026-05 (v13.7.2 — 284 commits, scratch-blocks v2) #630 マージコミット dedebb4ecd (feat/upstream-merge-2026-05) でマージ直前 (dedebb4ecd^1) は Shimacat 3 件存在、マージ後は 0。実は 1 つ前の v13.7.2 マージ (4e2ddc1406, 2026-05-03) でも同じ消失が起きており、2 連続で同じ衝突を見落としている。
  • アセット PNG は packages/scratch-gui/static/smalruby-assets/ に 4 枚すべて残存。

Cat Flying 残存

  • packages/scratch-gui/test/unit/lib/removed-trademarks.test.jstrademarkNames 配列で 'Cat-Flying' (ハイフン) と書かれているが、実データは 'Cat Flying' (スペース) のため検出をすり抜けていた。
  • sprites.json:3772Cat Flyingcostumes.json:2004,2019Cat Flying-a/b が現存。

Affected Files

  • packages/scratch-gui/src/lib/libraries/sprites.json — Cat Flying 削除、Shimaraby/Shimacat 追加 (Shark の後、Skeleton の前)
  • packages/scratch-gui/src/lib/libraries/costumes.json — Cat Flying-a/b 削除、Shimaraby-a/b, Shimacat-a/b 追加
  • packages/scratch-gui/test/unit/lib/removed-trademarks.test.js'Cat-Flying''Cat Flying' 修正
  • packages/scratch-gui/test/unit/lib/smalruby-original-sprites.test.js (新規) — Shimaraby/Shimacat 存在チェック
  • .claude/skills/upstream-merge/SKILL.md — マージチェックリストに Smalruby 独自 sprite/costume 保護項目を追記

packages/scratch-gui/src/assetsManifest.json の未コミット差分 (267 件追加 + 並び替え) は本件と無関係 (別件のメディアライブラリ再生成と思われる) のため本 PR では触らない

Implementation Steps

Phase 1: Cat Flying 除去 + テスト修正 (TDD)

  • [RED] removed-trademarks.test.js'Cat-Flying''Cat Flying' に修正 → 既存データで失敗することを確認
  • [GREEN] sprites.json から Cat Flying sprite を削除、costumes.json から Cat Flying-a/b を削除
  • [PASS] removed-trademarks.test.js pass + lint pass
  • [COMMIT & PUSH] fix: remove Cat Flying sprite/costume and fix trademark detection test
  • [MAKE PR]

Phase 2: Shimaraby / Shimacat 復元 (TDD)

  • [RED] 新規 test/unit/lib/smalruby-original-sprites.test.js を追加 (sprites.json に Shimaraby, Shimacat / costumes.json に Shimaraby-a, Shimaraby-b, Shimacat-a, Shimacat-b が存在することを assert) → 失敗を確認
  • [GREEN] f2b5c09e5b:sprites.json / 1c3f91a216:costumes.json の内容を参考に sprites.json (Shark の後、Skeleton の前) と costumes.json に Shimaraby/Shimacat エントリを再追加
  • [PASS] 新規テスト + 既存関連テスト + lint pass
  • [COMMIT & PUSH] fix: restore Smalruby original sprites Shimaraby/Shimacat lost in upstream merge
  • [UPDATE PR] Phase 2 のチェックボックスを check

Phase 3: 再発防止ドキュメント追加

  • .claude/skills/upstream-merge/SKILL.md に「sprites.json / costumes.json をマージするときは Smalruby 独自エントリ (Shimaraby, Shimacat) と削除済みトレードマーク (Cat, Cat Flying, Gobo, Pico, Pico Walking, Nano, Tera, Giga, Giga Walking) を必ず確認する」チェック項目を追記
  • [COMMIT & PUSH] docs(upstream-merge): add checklist for preserving Smalruby-original sprites and removed trademarks
  • [UPDATE PR] Phase 3 のチェックボックスを check

Phase DoD: CI 完了 + ブラウザ確認

  • CI green (gh pr checks <PR> --watch)
  • PR コメントのプレビュー URL を取得
  • Playwright MCP で DoD のブラウザ確認項目を実施
  • PR の DoD チェックボックスを更新

Definition of Done

  • removed-trademarks.test.js'Cat Flying' (スペース) が含まれ pass する
  • sprites.json / costumes.json から Cat Flying が完全に消えている
  • sprites.json に Shimaraby, Shimacat sprite が存在する
  • costumes.json に Shimaraby-a/b, Shimacat-a/b が存在する
  • smalruby-original-sprites.test.js pass
  • lint pass
  • CI green
  • ブラウザ確認 (Playwright MCP):
    • スプライトライブラリ (+アイコン → スプライトを選ぶ) を開いて Shimaraby と Shimacat が表示・選択できる
    • Shimaraby / Shimacat を追加するとステージに正しい位置・サイズで表示される (rotationCenter 含む)
    • スプライトライブラリの検索で "Cat Flying" が見つからない
    • コスチュームライブラリの検索で "Cat Flying" が見つからない
    • コスチュームライブラリで Shimaraby-a/b, Shimacat-a/b が選択できる

Test Plan

Type Timing Target
Unit tests (TDD) Phase 1, 2 で RED → GREEN removed-trademarks.test.js, smalruby-original-sprites.test.js
Browser verification Phase DoD Playwright MCP でスプライト/コスチュームライブラリ動作

Risks & Open Questions

  • なし (assetsManifest.json 未コミット差分は本 PR スコープ外、別件として後日対応)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions