Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
521 changes: 0 additions & 521 deletions .claude/commands/upstream-merge.md

This file was deleted.

19 changes: 19 additions & 0 deletions .claude/rules/code-style.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,25 @@ export default MyComponent;
- Follow existing reducer/action patterns for consistency
- Keep state shape flat when possible

## Smalruby Marker Comments

upstream のファイルに Smalruby 固有のコードを追加する際は、必ず **マーカーコメント** で囲む。

```javascript
// === Smalruby: Start of <機能名> ===
// ... Smalruby 固有のコード ...
// === Smalruby: End of <機能名> ===
```

- Start と End は必ずペアにする
- `<機能名>` は英語で、何の機能かわかる名前にする
- ファイル全体が Smalruby 固有の場合はファイル冒頭に `// === Smalruby: This file is Smalruby-specific (<説明>) ===`
- マーカーを追加・削除したら、該当パッケージの `development.md` のマーカー一覧を更新する

詳細は各パッケージの development.md を参照:
- `.claude/rules/scratch-gui/development.md` — scratch-gui のマーカー一覧
- `.claude/rules/scratch-vm/development.md` — scratch-vm のマーカー一覧

## Documentation

### JSDoc Comments
Expand Down
55 changes: 55 additions & 0 deletions .claude/rules/scratch-gui/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,61 @@ The GUI is built as a PWA. Assets and manifest are generated by:
- `webpack-pwa-manifest` plugin (build)
- `workbox-webpack-plugin` (build)

## Smalruby Marker Blocks

Smalruby のカスタムコードは upstream ファイルの中に **マーカーコメント** で囲んで配置する。
upstream merge 時にコンフリクトを解決しやすくするための仕組み。

### マーカーの書式

```javascript
// === Smalruby: Start of <機能名> ===
// ... Smalruby 固有のコード ...
// === Smalruby: End of <機能名> ===
```

ファイル全体が Smalruby 固有の場合:
```javascript
// === Smalruby: This file is Smalruby-specific (<説明>) ===
```

### ルール

1. **upstream ファイルに Smalruby コードを追加するときは必ずマーカーで囲む**
2. **マーカー内のコードだけを変更する** — マーカー外は upstream の管轄
3. **新しいマーカーを追加したら、このセクションに記載する**
4. **マーカーを削除する場合は、このセクションからも削除する**

### 現在のマーカー一覧

| ファイル | 機能名 | 説明 |
|----------|--------|------|
| `src/reducers/gui.ts` | Redux state registry | Smalruby reducer の import |
| `src/reducers/gui.ts` | initial state | Smalruby 初期 state の展開 |
| `src/reducers/gui.ts` | reducers | Smalruby reducer の登録 |
| `src/containers/cards.jsx` | tutorial glow animation | チュートリアルのハイライトアニメーション |
| `src/containers/connection-modal.jsx` | meshV2 initial step feature | Mesh v2 接続初期ステップ |
| `src/containers/connection-modal.jsx` | meshV2 connected message feature | Mesh v2 接続済みメッセージ |
| `src/containers/connection-modal.jsx` | meshV2 back button feature | Mesh v2 戻るボタン |
| `src/components/cards/cards.jsx` | tutorial glow animation | チュートリアル UI のハイライト |
| `src/components/connection-modal/connection-modal.jsx` | network filter detection feature | ネットワークフィルター検出 |
| `src/components/connection-modal/connection-modal.jsx` | meshV2 initial step feature | Mesh v2 初期ステップ UI |
| `src/components/connection-modal/connected-step.jsx` | meshV2 connected message feature | Mesh v2 接続済みステップ UI |
| `src/components/gui/gui.jsx` | Redux action props prevention | Redux action props の伝播防止 |

### Smalruby 固有ファイル(ファイル全体がマーカー)

| ファイル | 説明 |
|----------|------|
| `src/components/connection-modal/mesh-v2-initial-step.jsx` | Mesh v2 初期接続ステップコンポーネント |
| `src/components/connection-modal/mesh-v2-network-filtered-step.jsx` | Mesh v2 ネットワークフィルター検出コンポーネント |
| `src/reducers/smalruby-registry.ts` | Smalruby reducer/state の一括エクスポート |

### 関連ファイル

マーカーで囲まれたコードが参照するファイル:
- `src/reducers/smalruby-registry.ts` — gui.ts のマーカーから参照

## Development Notes

- The webpack config loads environment variables from monorepo root `.env` file
Expand Down
31 changes: 31 additions & 0 deletions .claude/rules/scratch-vm/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,37 @@ The mesh v2 extension uses AWS AppSync for real-time collaboration:

5. **Only after all tests pass and lint is clean**, commit and push.

## Smalruby Marker Blocks

Smalruby のカスタムコードは upstream ファイルの中に **マーカーコメント** で囲んで配置する。
upstream merge 時にコンフリクトを解決しやすくするための仕組み。

### マーカーの書式

```javascript
// === Smalruby: Start of <機能名> ===
// ... Smalruby 固有のコード ...
// === Smalruby: End of <機能名> ===
```

### ルール

1. **upstream ファイルに Smalruby コードを追加するときは必ずマーカーで囲む**
2. **マーカー内のコードだけを変更する** — マーカー外は upstream の管轄
3. **新しいマーカーを追加したら、このセクションに記載する**
4. **マーカーを削除する場合は、このセクションからも削除する**

### 現在のマーカー一覧

| ファイル | 機能名 | 説明 |
|----------|--------|------|
| `src/extension-support/extension-manager.js` | extension registration | Smalruby 拡張機能の登録 |

### 関連ファイル

マーカーで囲まれたコードが参照するファイル:
- `src/extension-support/smalruby-extensions.js` — extension-manager.js のマーカーから参照

## Development Notes

- The VM exports both Node.js and browser builds
Expand Down
47 changes: 47 additions & 0 deletions .claude/skills/upstream-merge/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
name: upstream-merge
description: "/upstream:merge - Interactive Upstream Merge Workflow. upstream scratch-editor の変更を Smalruby に取り込む半自動ワークフロー。"
---

# /upstream:merge - Interactive Upstream Merge Workflow

upstream scratch-editor の変更を Smalruby fork に取り込む半自動ワークフロー。

## ワークフロー全体像

| Phase | ファイル | 内容 |
|-------|----------|------|
| 1 | `phase1-prepare.md` | Prerequisites確認 → ブランチ作成 → マージ実行 |
| 2 | `phase2-conflicts.md` | コンフリクト解決ガイド(既知パターン + ガイダンス) |
| 3 | `phase3-validation.md` | コミット → lint → build → テスト → CI |
| 4 | `phase4-finalize.md` | merge history更新 → PR作成 → 手動テスト |

リファレンス(必要時に読み込む):

| ファイル | 内容 |
|----------|------|
| `reference-api-migration.md` | ScratchBlocks API 変更一覧 |
| `reference-test-patterns.md` | テスト修正の既知パターン集 |

## 進め方

1. Phase 1 から順番に実行する
2. 各フェーズの開始時に該当ファイルを読み込む
3. コンフリクト解決やテスト修正で詰まったら、リファレンスファイルを読み込む
4. 各フェーズが完了したら次のフェーズに進む

## 絶対に守るルール

- **`git add .` は使わない** — `git add -u` (tracked files のみ) を使う
- **`notes/` は絶対にコミットしない** — `.gitignore` で除外済みだが、明示パス指定や `-f` で追加されうる
- **ファイル指定で add** — merge history 更新時は `git add .upstream-merge-history.json` のみ
- **PR マージは `--merge`** — squash merge は禁止。`gh pr merge <number> --merge --delete-branch`
- **ドキュメントはPRの説明文に記載** — リポジトリにファイルとしてコミットしない

## 開始

Phase 1 のファイルを読み込んで開始:

```
.claude/skills/upstream-merge/phase1-prepare.md
```
76 changes: 76 additions & 0 deletions .claude/skills/upstream-merge/phase1-prepare.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Phase 1: Prepare — Prerequisites + Branch Creation + Merge Execution

## Step 1: Prerequisites Check

### 1.1 Git状態確認

```bash
git status
git branch --show-current
git remote -v | grep upstream
```

- Working directory が clean であること
- Current branch が `develop` であること
- Upstream remote が設定されていること

未設定の場合:
```bash
git remote add upstream https://github.com/scratchfoundation/scratch-editor.git
```

### 1.2 Merge履歴読み込み

`.upstream-merge-history.json` を読み込み、前回 merge の commit ID を取得する。
ファイルが存在しない場合はエラー。

### 1.3 Upstream差分確認

**重要**: `git fetch upstream` は絶対に使わない(gh-pages を含む全ブランチを取得してしまう)。

```bash
git fetch -p upstream develop
git log <lastMerge.upstreamCommit>..upstream/develop --oneline --format="%h %s"
```

- 新しい commit 数を表示
- 最新10件の commit message を表示

### 1.4 ユーザー確認

- "X commits を merge します。続行しますか?"
- Yes / No / View all commits の選択肢

---

## Step 2: Merge Branch Creation

```bash
DATE=$(date +%Y-%m)
git checkout -b feat/upstream-merge-$DATE
```

---

## Step 3: Merge Execution

```bash
git merge upstream/develop --no-commit --no-ff
```

### Conflict検出

```bash
git status --porcelain
```

- `UU` で始まる行 = unmerged conflicts
- conflict がある場合は **Phase 2** (`phase2-conflicts.md`) を読み込んで解決する
- conflict がない場合は **Phase 3** (`phase3-validation.md`) に進む

---

## 次のフェーズ

- コンフリクトあり → `phase2-conflicts.md` を読み込む
- コンフリクトなし → `phase3-validation.md` を読み込む
Loading
Loading