plate について
plateは、ローカルリポジトリの作業を完了し、成果物を検証してコミットし、適切な手順で公開するワークフロー技能です。通常のPRや積み重ね型PRに対し、明確なルーティングと検証手順を必要とするコーディングエージェント向けです。
主な機能
- 01コミットとPRの作業分類
- 02必要な成果物の作成と検証
- 03リポジトリの品質ゲート実行
- 04指定ファイルのステージと安全なコミット
- 05通常および積み重ね型PRの公開
活用シーン
- 01公開せずに完了済みの変更をコミット
- 02ブランチを新規PRとして準備・公開
- 03既存の構成を保ってPRを更新
- 04PRスタックの作成や保守
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ paulnsorensen/ easy-cheese --skill plateインストール後、Claude Code で/plateを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
wedge.tomlevals/evals.jsonevals/files/body-concise-docs/branch.txtevals/files/body-no-phantom-claims/branch.txtevals/files/body-no-slop/branch.txtevals/files/diagram-cross-module-flow/branch.txtevals/files/diagram-sequence-protocol/branch.txtevals/files/explicit-one-pr-over-layers/branch.txtevals/files/explicit-stack-no-boundaries/branch.txtevals/files/grouped-by-shared-files/branch.txtevals/files/independent-two-routines/branch.txtevals/files/independent-unrelated/branch.txtevals/files/plan-shape-normalize/branch.txtevals/files/push-auth-failure/branch.txtevals/files/separate-pr-request/branch.txtevals/files/single-cohesive-over-ceiling/branch.txtevals/files/single-cure-span/branch.txtevals/files/single-small-fix/branch.txtevals/files/stack-protocol-impl-wiring/branch.txtevals/files/stack-refactor-then-feature/branch.txtreferences/commands.mddurable-writes.mdgh-stack.mdgit-town.mdgt.mdordinary-pr.mdsetup.mdstacks.mdtopology.md詳細
/plate
Plate はレビュー前にローカル作業を完了します。必要な成果物を仕上げ、検証し、安全にコミットして、適切な公開経路を選択します。
フェーズの開始
python3 skills/plate/scripts/plate.pyz wheypoint-resolve --ref <slug> を実行します。
authoritative の場合はそのレコードを使用します。working_context は、最初にまとめて実行する tilth_read の対象です。
not-found の場合はコールドスタートで続行します。legacy の場合はそのソースとスラッグを表示してから続行します。
gated、ambiguous、error の場合は停止し、ペイロードを表示します。
注意喚起として示される stale-commit と grounded-path-missing の指摘を表示します。
Plate はスラッグを解決して結果を読み取りますが、wheypoint リビジョンのコミットや公開は行いません。
ルーティングガード
モードを選択する前に、担当範囲を確認します。
/plate が担当するのは、ステージング、コミット、プッシュ、通常のプルリクエストの変更、プルリクエストスタックの変更です。
/plateはコード品質のレビューを行いません。独自の目的でレビュー対象範囲を算出することもありません。レビューは/ageの担当です。- GitHub の調査、レビュー、コメント、CI、マージ、Issue、ワークフロー、リリース、検索、管理は
/plateの対象外です。 ローカルでの公開トランザクションが不要な場合は、ghCLI を直接使用します。 プルリクエストのフィードバックや CI の失敗に対応する場合は、/affinageを使用します。 - GitHub や差分の状態を読み取る、または評価するだけのリクエストは、モードを選択する前に
/plateの担当範囲から外れます。 そのため、これを/plateにルーティングするのは、Plate の担当範囲の誤りです。 - 破壊的な削除、履歴の書き換え、安全でない強制プッシュ、保護ブランチの変更には、ユーザーの明示的な許可が必要です。
分類してから参照ファイルを1つ読み込む
すべての呼び出しを、必ず次のいずれか1つのモードに分類します。参照ファイルは一度に1つだけ読み込みます。他のファイルは読み込まないでください。
| モード | トリガー | 読み込むファイル |
|---|---|---|
| コミットのみ | 公開せずにローカル作業を保存する | references/durable-writes.md |
| トポロジーの事前確認 | 別のワークフローがコミットやブランチを作成する前に、新しい PR の構成を永続化する | references/topology.md |
| 新規 PR | ブランチに PR が存在せず、公開が要求されている | references/topology.md |
| 既存 PR | 現在のトポロジーを維持して PR を更新する | references/ordinary-pr.md |
| スタックのメンテナンス | スタックの作成、同期、積み直し、提出、復旧、または明示的な公開 | references/stacks.md |
スタックの調査は、要求されたスタック変更の手順としてのみ行います。変更を伴わないスタックの調査リクエストは /plate の対象外として、gh CLI にルーティングします。
新規 PR の作業では、次の順序で参照ファイルを読み込みます。各ファイルは個別に読み込み、次のファイルを読み込む前に閉じます。
references/topology.mdを読み込みます。トポロジーを解決します。Plate が決定し、ユーザーには尋ねません。singleまたはorthogonal_flatの形状ではreferences/ordinary-pr.mdを読み込みます。スタック構成ではreferences/stacks.mdを読み込みます。- スタック構成では、
references/stacks.mdに記載されたプロバイダー参照ファイルを1つだけ読み込みます。 プロバイダー参照ファイルはgt.md、git-town.md、gh-stack.mdです。 使用可能なプロバイダーがない場合は、references/stacks.mdからsetup.mdに案内されます。
既存のプルリクエストでスタックを使用している場合は、references/stacks.md を読み込みます。単一ブランチのプッシュだけで済ませないでください。
厳格ゲート
--hard を受け取ったら、レビュー用に作業を初めて共有する直前に /hard-cheese を実行します。
このゲートには、1 つの JSON コンテキストを渡します。最終成果物の一覧、完了状況の行、追跡対象の成果物の差分ダイジェスト、品質ゲートの結果を含めます。
それ以前の実装スナップショットは渡さないでください。
ゲートのステータスを読み取ります。その後、次の表に従います。
| ゲートのステータス | 応答 |
|---|---|
PASS | 公開を続行します |
LOGGED | 公開を続行します。記録された指摘事項をプルリクエスト本文に記載します |
ERROR | 公開する前にユーザーに確認します。ゲートのエラーを報告します |
FAILED | quality gate で停止します。公開しないでください。作業を修正します |
ERROR の確認には、共有質問トランスポートを使用します。
../cheese/references/ask-user-question.md を参照してください。
ツールのルーティング
- スタックプロバイダーを選択する前に、
python3 skills/plate/scripts/plate.pyz stack-toolsを実行します。 このコマンドは Graphite、Git Town、gh stackを検出します。リポジトリの状態は変更しません。 - リポジトリ、リモート、PR の状態には Git と GitHub を使用します。スタックの状態には、選択したプロバイダーの CLI を使用します。
- 追跡対象の成果物の編集には、リポジトリのコードインテリジェンスバックエンドを使用します。読み取りにも同じバックエンドを使用します。
code-intelligence-routing.mdに従ってバックエンドを選択します。references/durable-writes.mdの手順に従います。最新のタグ付き読み取り、古くなった情報に基づかない単一の書き込み、差分の読み戻しの順に行います。 名前付きパスを使用します。シェルのリダイレクトは使用しないでください。 - 永続化する Wiki の知識は
/wiki-ingest経由で送信します。Hallouminate ツリーを直接編集しないでください。 - 一時的な完了レポートと PR 本文のファイルは
.cheese/の下に置きます。ステージしないでください。 - スラッシュコマンドはホスト側の表現であり、制御モデルではありません。ホストの例を示す前に、機能の名前を明示します。
../cheese/references/harness-portability.mdを参照してください。
汎用トランザクション
コミットのみの作業と通常の PR 作業では、このトランザクションを使用します。スタック作業では、references/stacks.md のレイヤーごとのトランザクションを使用します。
- 最終執筆ゲート — 約束または要求されたすべての成果物を列挙します。各成果物を作成し、読み戻します。
references/durable-writes.mdに従います。必要な書き込みが欠けている場合、または検証できない場合は停止します。 - 検証 — リポジトリの品質ゲートを実行します。easy-cheese、または
just checkを定義しているリポジトリでは、just checkを使用します。 品質ゲートに失敗した場合は、コミットも公開もしないでください。 - 確認 — 状態、差分全体、最近のログを読み取ります。対象のファイル一式を確認します。
- ステージ — 名前を指定したファイルのみを追加します。ツリー全体をステージしないでください。
一時的な
.cheese/レポートはステージせず、追跡対象の Wiki とドキュメントの変更は含めます。 リポジトリに Hallouminate Wiki がある場合は、未コミットの.hallouminate/wiki/パスがないかgit statusで確認します。 セッション中に以前行った書き込みも含めます。Git に無視されていない限り、これらの書き込みもステージします。 Wiki の更新はこのトランザクションで公開します。後から公開しないでください。 - コミット — 理由を説明する Conventional Commit メッセージを使用します。ユーザーから要求されない限り、コミットを修正しないでください。 フックを回避しないでください。
- 検証 — 状態とコミットされたファイル一式を確認します。
- 要求があれば公開 —
references/ordinary-pr.mdに従います。公開後に PR を読み取り、検証します。
コミットのみのモードは、検証後に終了します。プッシュも PR の作成もしません。
コミットの規約
ステージングする前に、git status、差分全体、最近のコミットを確認します。
認証情報、.env ファイル、説明のない大きなバイナリファイルは受け付けません。対象とするパスはすべて明示してステージングします。
次の形式を使用します。
type(scope): short description
Optional body when the rationale needs it.
件名を最初に記述します。中立的なトーンを使用します。件名には変更内容を最初に記載します。 任意の本文には、レビュー担当者に必要な情報のみを記載します。本文は短くします。物語調の文章、トーンやスラングは省きます。
次のタイプを使用します:feat、fix、refactor、chore、docs、test、style。
フックに失敗した場合は、失敗の原因を修正します。成果物に変更があった場合は、文書作成と品質ゲートを再実行します。
指定された各ファイルを再ステージングします。新しいコミットを作成します。
複数行のコミットメッセージには、単一引用符で囲んだ heredoc の区切り文字を使用します。この区切り文字により、バッククォートとドル記号がシェルによって展開されません。
プロジェクトがハーネスの ID を受け入れる場合は、任意で Co-Authored-By: <name> <email> トレーラーを付けます。それ以外の場合は、トレーラーを省略します。
ステージング後に、インデックスに登録された差分を確認します。作業ツリーの差分が空でも、すべての変更がステージング済みの場合があります。
インデックスに登録された差分を読み、ステージング済みの状態と変更なしの状態を区別します。
レビュー単位ごとにコミットを1つ作成します。単一の PR にはコミットを1つ、スタックの各レイヤーにはそれぞれコミットを1つ作成します。 コミットごとのレビューを目的に PR を構成しないでください。システムは各コミットの承認状況を追跡しません。 品質ゲートは通常、ブランチの先端でのみ実行されます。1つのコミットへのフィードバックによって、ほかのコミットも遅延します。 1つの PR で複数のコミットを使用するのは、単純な手順を短く連ねる場合に限ります。変更全体を小さく保ちます。
停止
停止の報告には、モード、失敗したステップ、失敗の責任者を必ず明記します。
ステップ名には、classify、topology、durable write、quality gate、stage/commit、publish、terminal validation のいずれかを正確に使用します。
停止および完了の報告には、../age/references/voice.md の共通の文体ルールを適用します。
- Plate-owned — このスキルが誤った呼び出し形式またはルートを選択しました。
不正な書き込み、古い書き込み、読み取りの省略、ステージングするパスの未指定などが該当します。
ツリー全体のステージングも Plate-owned です。モードと参照先が一致しない場合も Plate-owned です。
/ageのレビュー作業、または公開以外の GitHub 作業は、Plate-owned のルーティングエラーです。 次の復旧ルールを使用します:呼び出し形式またはルーティングを修正してから、そのステップを再試行する - Environment-owner — 認証、権限、フック、ネットワーク、プロバイダーの有効化、または共有バックエンドが原因で失敗しました。 報告では、責任を持つシステムを明記します。呼び出し形式が誤っているかのように再試行してはいけません。 また、失敗を回避するためにゲートを弱めたり、未指定のパスをステージングしたり、読み取り確認を省略したりしてはいけません。
品質ゲートの失敗は、作業を出荷できないことを示します。そのため、quality gate で停止します。その後、作業を修正します。
完了
最終確認の証拠を一時的な JSON ファイルに書き込みます。
python3 skills/plate/scripts/plate.pyz validate-publication <state.json> を実行します。
このコマンドが valid: true を含む正規化済みの証拠を返した場合に限り、完了を報告します。
{
"mode": "new-pr",
"topology": "single",
"provider": "ordinary",
"artifacts": [
{"target": "docs/adr/example.md", "backend": "tilth", "verified": true}
],
"gate": {"command": "just check", "result": "pass"},
"commits": ["0123456789abcdef0123456789abcdef01234567"],
"pr_plan": {
"contract_version": {
"schema_uri": "https://schemas.easy-cheese.dev/pr-plan",
"major": "1",
"minor": "0"
},
"shape": "single",
"target_branch": "main",
"groups": [
{
"branch": "feature",
"title": "docs: example ADR",
"base": "main",
"commits": ["0123456789abcdef0123456789abcdef01234567"],
"depends_on": []
}
]
},
"prs": [
{
"url": "https://github.com/example/repo/pull/42",
"base": "main",
"head": "feature",
"verified": true
}
],
"risk": "none"
}
選択したモードでコミットまたは PR を作成しない場合は、commits または prs に空のリストを使用します。
トポロジーの事前確認は、公開トランザクションと品質ゲートの前に停止します。
そのため、トポロジーの事前確認では gate: {"command": "n/a", "result": "n/a"} を使用します。
生成されたバンドルに含まれるコマンド一覧は、references/commands.md を参照してください。