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
    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