本ファイルは雛形である..claude/verify-profile.md にコピーし,各節の説明と記入例をこのプロジェクトの内容に置き換えて使う.
cp .claude/skills/verify/profile-template.md .claude/verify-profile.md
.claude/verify-profile.md が存在するプロジェクトでのみ,/verify と /implement の Phase 1b(verifier による検証)が動作する.存在しなければ,検証はスキップされ従来どおり人間が動作確認する.
verifier はプロジェクト固有の知識を一切持たず,このファイルだけを頼りに検証する.書かれていないことは推測されるか,実行されない.
.gitignore に追加する(スクリーンショット・ログ・一時データをコミットしない)/sync-template で上書き・削除されない何を,どういう手段で操作して検証するかを 1〜3 行で書く.verifier はここで検証の全体像を掴む.
curl 相当のリクエストで確認するverifier がアクセスしてよい環境を書く.既定はローカルのみであり,この節に何も書かなければローカル以外への接続は行われない. staging 等の検証用環境を使わせる場合は,接続先を許可リストとして挙げ,「いじっても影響が無い」と判断した根拠を環境ごとに書く. 判断の主体は人間(プロジェクト側)であり,根拠の書かれていない環境は許可していないものとして扱われる(verifier は,ここに無い接続先を見つけても自分の判断で「影響なし」とみなさない). 本番はここに書いても許可されない(verifier はどんな場合もアクセスしない).
<例: http://localhost:3000(開発サーバー)・localhost:5432(開発 DB)><なし/下表のとおり>(使わない場合は「なし」と書き,下表を削除する)| 環境 | 接続先(許可リスト) | 影響が無いと判断した根拠 | 資格情報の受け渡し | テストデータの後始末 |
|---|---|---|---|---|
<例: staging> | <例: https://staging.example.com,https://api-staging.example.com> | <例: 本番とは別の DB を使う/実ユーザーがいない/メール・push 通知・課金が無効化されている> | <例: .env.verify.staging(.gitignore 済み.値は人間が配置する.検証専用アカウントのみ)> | <例: 「テストデータの規約」の接頭辞に従い,ランナーが実行の成否に関わらず物理削除する> |
<例: https://example.com,https://api.example.com(本番).どんな場合もアクセスしない>※ 許可した環境は他の開発者や CI も使っている可能性があるため,verifier は自分が作った検証用データだけを操作し,環境全体に効く破壊的な操作(DB のリセット・マイグレーション・デプロイ・設定変更等)は行わない(.claude/agents/verifier.md).
シナリオの置き場所・実行方法・出力先を書く.verifier はここに書かれたコマンドしか実行しない(推測で別のコマンドを試させない).
<例: .verify/<概要(kebab-case)>/scenario.<拡張子>><例: node scripts/verify/run.mjs <シナリオのパス>><例: .verify/<概要>/run-<日時>/>(.gitignore 済み).実行ごとに別ディレクトリへ出力され,前回の証拠は上書きされない<例: result.json(判定の一覧)・*.png(スクリーンショット)・server.log(サーバーログ)>※ verifier に許可されているコマンド(.claude/agents/verifier.md の tools)に含まれない実行コマンドは,実行のたびに許可を求められる.常用するなら .claude/settings.json の permissions.allow に追加するか,許可済みのランタイム経由で実行できる形にしておく.
満たされていなければ「検証不能」とする条件と,その確認コマンドを書く.verifier が自力で解消してよい操作があればそれも明記する(書いていない操作はしない).
| 前提条件 | 確認方法 | 満たされない場合 |
|---|---|---|
<例: 依存がインストール済み> | <例: ls node_modules> | <例: npm ci を実行してよい> |
<例: ローカル DB が起動している> | <例: <DB の status コマンド>> | <例: <起動コマンド> を実行してよい> |
<例: ブラウザ実行環境が導入済み> | <例: <バージョン確認コマンド>> | <例: 検証不能とし,導入コマンドを人間に案内する> |
<例: 環境変数ファイルがある> | <例: ls .env.local> | <例: 検証不能(値は人間しか知らないため)> |
※ 開発サーバーの起動・停止は実行基盤(ランナー)が行う.verifier に手作業で起動させない.
認証をどう通すか,どのロール・ユーザーで検証できるかを書く.認証が無いプロジェクトは「認証なし」と書く.
launchLoggedIn({ role }) がログイン済みのセッションを返す.role は admin / editor / viewer / null(未ログイン).ロールごとに別ユーザーなので,権限の確認はロールごとにセッションを分けるVERIFY_TOKEN 環境変数にローカル発行のトークンが入る.ランナーが権限違いのトークンを 3 種類用意する検証で作るデータの命名・後始末・触ってはいけないデータを書く.検証データが本番やリポジトリに混入する事故はここの不備で起きる.
<例: verify-> で始める<接頭辞> で始まるデータと従属レコードを成否に関わらず物理削除する(論理削除では残る.残ると seed の書き出し等を通じてリポジトリへ混入しうる)<例: シードデータ(既存の組織・ユーザー)は編集・削除しない.更新系の確認は自分で作った verify- データに対して行う>フレームワーク固有の注意点.「待てずに落ちる」「セレクタが当たらない」の原因になる癖をここに書く.
disabled で表現している画面がある.対象画面の実装を見て検証方法を選ぶ不具合と誤認しやすい既知の現象.ここに書いていないものは verifier が不具合として報告する.
検証中に実行してはいけない操作.人間のローカル環境を壊す操作は必ずここに書く.
<例: ローカル DB のリセットコマンド(人間の作業データが消える)><例: 「検証対象の環境」で許可していない接続先へのアクセス(CLI・MCP 経由を含む).本番への操作は許可リストに関わらず禁止><例: 許可した環境(staging 等)での,自分が作った検証データ以外の更新・削除,および環境全体に効く操作(リセット・マイグレーション・デプロイ・設定変更)><例: マイグレーションの適用(適用は人間に依頼する)>そのままコピーして動く最小のシナリオを載せる.verifier はこれを出発点にシナリオを書く.ヘルパーの引数と,チェックの書き方(アサーションの方法)を必ず含める.
<例: 実際に動くシナリオのコードをここに貼る> - ヘルパーの一覧と引数(セッションの起動・チェックの記録・アサーション) - 1 チェック = 「何がどうなるべきか」が分かる名前を付ける - 失敗しても次のチェックへ進み,成否どちらでも証拠(スクリーンショット・出力)を残す - 画面を伴わないチェック(API・CLI のみ)の書き方 - 後始末(作成したデータ・起動したプロセス)はランナー側で行うため,シナリオには書かない
検証を安定させるための,実行基盤(ランナー)側の要件.シナリオの実行・環境の準備・後始末を担うスクリプトをプロジェクト側に用意し,以下を満たすこと(運用で分かった失敗を踏まえた要件であり,満たさないと検証が不安定になったり事故につながる).
run-<日時>/ 等).再実行で前回のスクリーンショット・結果を上書きしない(不具合の証拠が消える)実行基盤はプロジェクトの認証方式・データストアに強く依存するため,テンプレートには同梱していない.Web アプリ(ヘッドレスブラウザ)向けの実装例は以下を参照する.
※ 1 回の検証にかかるコストは規模にもよるが小さくない(目安: 10 分前後).挙動に関係しない変更で走らせないよう,/implement の Phase 1b には実行判定がある.