MCP HubMCP Hub
Вернуться к навыкам

add-puzzle-type

pjt222
Обновлено 2 days ago
6 просмотров
17
2
17
Посмотреть на GitHub
Другоеgeneral

О программе

Этот навык создает основу для нового типа пазла, интегрируя его в более чем 10 точек подключения конвейера jigsawR. Он генерирует основной модуль, подключает его к конвейерам генерации, размещения, отрисовки и смежности, а также обновляет связанные компоненты. Используйте его при добавлении полностью нового типа пазла, чтобы обеспечить сквозное покрытие без пропуска точек интеграции.

Быстрая установка

Claude Code

Рекомендуется
Основной
npx skills add pjt222/agent-almanac -a claude-code
Команда плагинаАльтернативный
/plugin add https://github.com/pjt222/agent-almanac
Git клонированиеАльтернативный
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/add-puzzle-type

Скопируйте и вставьте эту команду в Claude Code для установки этого навыка

Документация


name: add-puzzle-type description: > jigsawRの10以上のパイプライン統合ポイントにまたがる新しいパズルタイプを スキャフォールドする。コアパズルモジュールを作成し、統合パイプライン (生成、配置、レンダリング、隣接)に接続し、ggpuzzleのgeom/statレイヤーを 追加し、DESCRIPTIONとconfig.ymlを更新し、Shinyアプリを拡張し、包括的な テストスイートを作成する。パッケージに完全に新しいパズルタイプを追加する場合や、 10ポイント統合チェックリストに従ってエンドツーエンドで漏れがないようにする場合に使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: jigsawr complexity: advanced language: R tags: jigsawr, puzzle-type, pipeline, integration, scaffold locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16

パズルタイプの追加

jigsawRのすべてのパイプライン統合ポイントにまたがる新しいパズルタイプをスキャフォールドする。

使用タイミング

  • パッケージに完全に新しいパズルタイプを追加する場合
  • 確立された統合チェックリスト(CLAUDE.md 10ポイントパイプライン)に従う場合
  • 新しいタイプをエンドツーエンドで接続する際に漏れがないようにする場合

入力

  • 必須: 新しいタイプ名(小文字、例:"triangular"
  • 必須: ジオメトリの説明(ピースの形状/配置方法)
  • 必須: 外部パッケージが必要かどうか(Suggestsに追加)
  • 任意: 標準パラメータ(grid、size、seed、tabsize、offset)以外のパラメータリスト
  • 任意: 参照実装またはアルゴリズムソース

手順

ステップ1: コアパズルモジュールの作成

内部生成関数を持つR/<type>_puzzle.Rを作成する:

#' Generate <type> puzzle pieces (internal)
#' @noRd
generate_<type>_pieces_internal <- function(params, seed) {
  # 1. RNG状態の初期化
  # 2. ピースジオメトリの生成
  # 3. エッジパスの構築(SVGパスデータ)
  # 4. 隣接関係の計算
  # 5. リストを返す: pieces, edges, adjacency, metadata
}

構造についてはR/voronoi_puzzle.RまたはR/snic_puzzle.Rのパターンに従う。

期待結果: 関数が$pieces$edges$adjacency$metadataを含むリストを返す。

失敗時: generate_voronoi_pieces_internal()の返却構造と比較して、不足しているリスト要素や不正な型を特定する。

ステップ2: jigsawR_clean.Rへの接続

R/jigsawR_clean.Rを編集する:

  1. valid_typesベクトルに"<type>"を追加
  2. paramsセクションにタイプ固有のパラメータ抽出を追加
  3. タイプ固有の制約のバリデーションロジックを追加
  4. ファイル名プレフィックスマッピングを追加(例:"<type>" -> "<type>_"
# valid_typesに追加
valid_types <- c("rectangular", "hexagonal", "concentric", "voronoi", "snic", "<type>")

期待結果: generate_puzzle(type = "<type>")が「unknown type」エラーなく受け入れられる。

失敗時: タイプ文字列が正確なスペルでvalid_typesに追加されているか、パラメータ抽出が必要なタイプ固有引数をすべてカバーしているか確認する。

ステップ3: unified_piece_generation.Rへの接続

R/unified_piece_generation.Rを編集する:

  1. generate_pieces_internal()にディスパッチケースを追加
  2. タイプがPILES記法をサポートする場合、フュージョン処理を追加
# switch/dispatchに追加
"<type>" = generate_<type>_pieces_internal(params, seed)

期待結果: タイプがディスパッチされるとピースが生成される。

失敗時: ディスパッチケース文字列がタイプ名と正確に一致し、generate_<type>_pieces_internalがパズルモジュールから定義・エクスポートされているか確認する。

ステップ4: piece_positioning.Rへの接続

R/piece_positioning.Rを編集する:

新しいタイプの配置ディスパッチを追加する。ほとんどのタイプは共有配置ロジックを使用するが、カスタム処理が必要なものもある。

期待結果: apply_piece_positioning()が新しいタイプをエラーなく処理し、ピースが正しい座標に配置される。

失敗時: 新しいタイプにカスタム配置ロジックが必要か、共有配置パスを再利用できるか確認する。デフォルトパスが適用されない場合はディスパッチケースを追加する。

ステップ5: unified_renderer.Rへの接続

R/unified_renderer.Rを編集する:

  1. render_puzzle_svg()にレンダリングケースを追加
  2. エッジパス関数を追加:get_<type>_edge_paths()
  3. ピース名関数を追加:get_<type>_piece_name()

期待結果: 正しいピース輪郭とエッジパスを持つ新しいタイプのSVG出力が生成される。

失敗時: get_<type>_edge_paths()が有効なSVGパスデータを返し、get_<type>_piece_name()が各ピースに一意の識別子を生成しているか確認する。

ステップ6: adjacency_api.Rへの接続

R/adjacency_api.Rを編集する:

get_neighbors()get_adjacency()が新しいタイプで動作するようにネイバーディスパッチを追加する。

期待結果: get_neighbors(result, piece_id)がパズル内の任意のピースに対して正しいネイバーを返す。

失敗時: 隣接ディスパッチが正しいデータ構造を返しているか確認する。小さなグリッドでテストし、ジオメトリに対してネイバー関係を手動で検証する。

ステップ7: ggpuzzle Geomレイヤーの追加

R/geom_puzzle.Rを編集する:

make_puzzle_layer()ファクトリーを使用してgeom_puzzle_<type>()を作成する:

#' @export
geom_puzzle_<type> <- function(mapping = NULL, data = NULL, ...) {
  make_puzzle_layer(type = "<type>", mapping = mapping, data = data, ...)
}

期待結果: ggplot() + geom_puzzle_<type>(aes(...))がエラーなくレンダリングされる。

失敗時: make_puzzle_layer()が正しいタイプ文字列を受け取り、geom関数が@export経由でNAMESPACEにエクスポートされているか確認する。

ステップ8: Statディスパッチの追加

R/stat_puzzle.Rを編集する:

  1. タイプ固有のデフォルトパラメータを追加
  2. compute_panel()にディスパッチケースを追加

期待結果: statレイヤーがパズルジオメトリを正しく計算し、期待される数のポリゴンを生成する。

失敗時: compute_panel()ディスパッチケースが必要なカラム(xygrouppiece_id)を含むデータフレームを返し、デフォルトパラメータが新しいタイプに適切か確認する。

ステップ9: DESCRIPTIONの更新

DESCRIPTIONを編集する:

  1. Descriptionフィールドのテキストに新しいタイプを追加
  2. 新しいパッケージをSuggests:に追加(外部依存がある場合)
  3. Collate:を更新して新しいRファイルを含める(アルファベット順)

期待結果: devtools::document()が成功する。リストされていないファイルに関するNOTEがない。

失敗時: 新しいRファイルがCollate:フィールドにアルファベット順でリストされており、新しいSuggestsパッケージがバージョン制約とともに正しくスペルされているか確認する。

ステップ10: config.ymlの更新

inst/config.ymlを編集する:

新しいタイプのデフォルトと制約を追加する:

<type>:
  grid:
    default: [3, 3]
    min: [2, 2]
    max: [20, 20]
  size:
    default: [300, 300]
    min: [100, 100]
    max: [2000, 2000]
  tabsize:
    default: 20
    min: 5
    max: 50
  # タイプ固有のパラメータをここに追加

期待結果: 設定が有効なYAMLである。デフォルト値がgenerate_puzzle()で使用されたとき動作するパズルを生成する。

失敗時: yaml::yaml.load_file("inst/config.yml")でYAMLを検証する。デフォルトのgridとsize値が適切なパズルを生成するか確認する(小さすぎず大きすぎず)。

ステップ11: Shinyアプリの拡張

inst/shiny-app/app.Rを編集する:

  1. UIタイプセレクターに新しいタイプを追加
  2. タイプ固有パラメータの条件付きUIパネルを追加
  3. サーバーサイドの生成ロジックを追加

期待結果: Shinyアプリのドロップダウンに新しいタイプが表示され、選択するとパズルが生成される。

失敗時: UIセレクターのchoices引数にタイプが追加されており、タイプ固有パラメータの条件付きパネルがconditionalPanel(condition = "input.type == '<type>'")を使用し、サーバーサイドハンドラーが正しいパラメータを渡しているか確認する。

ステップ12: テストスイートの作成

tests/testthat/test-<type>-puzzles.Rを作成する:

test_that("<type> puzzle generates correct piece count", { ... })
test_that("<type> puzzle respects seed reproducibility", { ... })
test_that("<type> adjacency returns valid neighbors", { ... })
test_that("<type> fusion merges pieces correctly", { ... })
test_that("<type> geom layer renders without error", { ... })
test_that("<type> SVG output is well-formed", { ... })
test_that("<type> config constraints are enforced", { ... })

タイプが外部パッケージを必要とする場合、テストをskip_if_not_installed()でラップする。

期待結果: すべてのテストがパスする。外部依存が欠落していない限りスキップはない。

失敗時: 各統合ポイントを個別にチェックする。最も一般的な問題はディスパッチケースの欠落である — grep -rn "switch\|valid_types" R/を実行してすべてのディスパッチ場所を見つける。

バリデーション

  • generate_puzzle(type = "<type>")が有効な出力を生成する
  • 10のすべての統合ポイントが正しく接続されている
  • devtools::test()が新しいテストでパスする
  • devtools::check()が0エラー、0警告を返す
  • Shinyアプリが新しいタイプをレンダリングする
  • 設定制約が強制される(最小/最大バリデーション)
  • 隣接関係とフュージョンが正しく動作する
  • ggpuzzle geomレイヤーがエラーなくレンダリングされる
  • devtools::document()が成功する(NAMESPACEが更新される)

よくある落とし穴

  • ディスパッチケースの欠落: 10以上のファイルのうち1つを忘れるとサイレントな失敗や「unknown type」エラーが発生する
  • 負の数でのstrsplit: paste(a, b, sep = "-")で隣接キーを作成する際、負のピースラベルが"1--1"のようなキーを生成する。代わりに"|"セパレータを使用し、"\\|"で分割する
  • 出力にcat()を使用: 常にcliパッケージのロギングラッパー(log_infolog_warnなど)を使用する
  • Collate順: DESCRIPTIONのCollateフィールドはアルファベット順または依存関係順でなければならない
  • Config.yml形式: YAMLが有効か確認する。yaml::yaml.load_file("inst/config.yml")でテストする

関連スキル

  • generate-puzzle — スキャフォールド後に新しいタイプをテストする
  • run-puzzle-tests — 統合を検証するための完全なテストスイートを実行する
  • validate-piles-notation — 新しいタイプでフュージョンをテストする
  • write-testthat-tests — テスト記述の一般的なパターン
  • write-roxygen-docs — 新しいgeom関数のドキュメントを作成する

GitHub репозиторий

pjt222/agent-almanac
Путь: i18n/ja/skills/add-puzzle-type
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

llamaguard

Другое

LlamaGuard — это модель от Meta с 7–8 миллиардами параметров для модерации входных и выходных данных больших языковых моделей по шести категориям безопасности, таким как насилие и разжигание ненависти. Она обеспечивает точность 94–95% и может быть развернута с помощью vLLM, Hugging Face или Amazon SageMaker. Используйте этот навык, чтобы легко интегрировать фильтрацию контента и защитные механизмы в ваши ИИ-приложения.

Просмотреть навык

cost-optimization

Другое

Этот навык Claude помогает разработчикам оптимизировать облачные расходы за счет правильного подбора ресурсов, стратегий тегирования и анализа затрат. Он предоставляет framework для сокращения облачных расходов и внедрения управления затратами в AWS, Azure и GCP. Используйте его, когда вам нужно проанализировать расходы на инфраструктуру, оптимизировать ресурсы или уложиться в бюджетные ограничения.

Просмотреть навык

quantizing-models-bitsandbytes

Другое

Этот навык выполняет квантизацию LLM до 8-битной или 4-битной точности с использованием библиотеки bitsandbytes, обеспечивая сокращение использования памяти на 50-75% при минимальной потере точности. Он идеально подходит для запуска больших моделей при ограниченной памяти GPU или для ускорения вывода, поддерживая форматы INT8, NF4 и FP4. Навык интегрируется с HuggingFace Transformers и позволяет использовать обучение QLoRA и 8-битные оптимизаторы.

Просмотреть навык

dispatching-parallel-agents

Другое

Этот навык Claude распределяет нескольких агентов для исследования и устранения трёх и более независимых проблем параллельно. Он предназначен для сценариев с несвязанными сбоями, которые можно устранить без общего состояния или зависимостей. Ключевая возможность — параллельное решение проблем, где за каждую независимую предметную область назначается отдельный агент для максимальной эффективности.

Просмотреть навык