verify-app について
アプリの変更を隔離したインスタンスで検証し、証拠を記録するスキルです。開発者やレビュアー向けに、コマンドライン操作と機能別の検証手順を備えています。
主な機能
- 01チェックアウトごとの隔離インスタンス
- 02実行中インスタンスを操作するCLI
- 03機能マップと検証手順
- 04チェック、レポート、証拠の収集
- 05フェイクモデルと実モデルの検証経路
活用シーン
- 01レビュー前の機能変更の検証
- 02成功、失敗、永続化経路の実行
- 03PRで証拠と未検証項目を記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hachej/ boring-stack --skill verify-appインストール後、Claude Code で/verify-appを入力して読み込まれたか確認します。
詳細
アプリを検証する
このスキルが答える質問:今回の変更でどの機能に影響があり、隔離されたインスタンスでそれらをどう操作し、何をもって動作の証拠とするか?
Poteto の検証スキルに続く 2 つの要素です。リモートコントロール
(node scripts/verify.mjs。引数なしで全コマンドを表示)と機能マップ
(docs/verify/。領域ごとに 1 つのファイルがあり、同じ 4 つの H2、Sub-features、How
to get to it、Driving it with verify、Gotchas を含みます)。CLI は実行中のインスタンスを操作します。テストランナーではありません。検証では、コマンドを組み合わせてください。検証用のドライバースクリプトは決して作成しないでください。
CLI のうち、製品固有の部分(シード状態、doctor が監視するサーバーフォルダー、up の追加フラグ、ブラウザーのロケールと権限、レポートの文言)は scripts/verify-app.mjs にあります。それ以外は、どのアプリでも同じです。
フローを選ぶ
チェックアウトごとに専用のインスタンスが割り当てられます。ポート、データフォルダー、ブラウザー、ログはチェックアウトのパスから決まり、.verify/<port>/ に置かれます。Git worktree(git rev-parse --git-dir)はメインのチェックアウトや、ほかのエージェントの worktree と競合しません。
- 新しい worktree またはクローンの場合:
node scripts/verify.mjs setupで、依存関係と Chromium(不足している場合)をインストールし、ページをビルドしてからup、doctorを実行します。 - セットアップ済みの場合:
upの後にdoctorを実行します。 - 完了した場合:
downを実行します。cleanupでこのインスタンスのデータとログを削除します(cleanup --allではレポート、トレース、スクリーンショットも削除します)。worktree は、ブランチをプッシュした後、メインのチェックアウトから自分で削除してください。
doctor は fresh と表示する必要があります。そうでない場合は、問題が示されます。STALE BUNDLE(npm run build を実行)、STALE SERVER または commit changed(down の後に up を実行)、WRONG INSTANCE(ポートまたはブラウザーが別のものに属しています)。
手順
node scripts/verify.mjs features:変更が影響する領域をすべて特定し、そのファイルだけ(features <area>)を読みます。変更が複数の領域にまたがる場合は、journeysも読みます。変更に関係する規則をdocs/INVARIANTS.mdで確認します。node scripts/verify.mjs check:ゲートであり、プロジェクトのチェックコマンドです(project.md)。lint、コントラクト(機能マップ、規則、アーキテクチャルール)、単体テスト、形式モデル、型チェック+ビルド、バンドル内のシークレット、エンドツーエンドのジャーニーを実行します。ほかのことを評価する前に、これを通過する必要があります。反復作業中はcheck --fastを使います。contract単独の実行にはインストールは不要です。形式モデルには Java が必要です。Java がない場合は 実行されず、ゲートの結果は「不完全」となり、「合格」にはなりません(formal/README.md)。setupまたはup+doctor→fresh。report <area…>を実行すると、記入用テンプレート.verify/report-<branch>.mdが作成されます。- クリック操作で状態を作る代わりに、
seed <state>で必要な状態にインスタンスを設定します。空のインスタンスにするにはresetを使います。実行中の状態にする場合(再読み込み、または実行途中での切り替え)は、downを実行してからup --delay 4000を実行します。 mark "<what you test>"を実行してから、ユーザーと同じ方法で機能を操作します。open、click、type、upload、press、wait-settleを使います。- 証跡を収集します。操作の後と再読み込み後に
api <route>を実行します(open "/"で再読み込みされます)。network-summary --since-markで操作によるリクエスト、ステータス、失敗を確認します。console --errors --since-markでページエラーがないことを確認します。snapshot、またはプロダクトオーナー向けにscreenshotを使います。レビュー担当者が操作を再生する必要がある場合は、trace start…trace stopを使います(npx playwright show-trace <zip>)。ページのウェイトに関する確認にはperfを使います。 - どの状態でも規則を確認します。
a11yでアクセシブルな名前のないコントロールとタブ順序を確認します(APP-F6)。続けてviewport 375 812を実行し、overflowとscreenshotでスマートフォン幅を確認します(APP-F7)。その後、viewport 1440 900を実行します。 - デフォルトではモデルは偽物です。確認できるのは配線であり、文言ではありません。エージェントが書く内容を変更する場合は、
up --realが必要であることを明記します。up --realはエージェントの動作を確認する場合に限り、CODEX_AUTH_FILEにある Codex ログインを使って実行します。 - ユーザーから見えるものを追加または変更する場合は、同じブランチで
docs/verify/内の該当ファイルを更新します(複数の領域にまたがる場合は、test/e2e/内のジャーニーも更新します)。checkは、4つの H2 がないファイルを拒否します。規則の証明方法を変更する場合は、scripts/verify/VERIFY.jsonを更新します。checkは、証拠も記録された延期もない規則を拒否します。
証明の基準
証明では本番経路を実行し、懐疑的なレビュー担当者が納得できる結果を示します。
- ページを操作し、通常のサーバー呼び出しを通します。
evalはユーザー経路の実行後に状態を読み取ります。postはseedと同様に状態を準備するだけです。どちらも証明にはなりません。api/post --bearer <token>は、そのトークンの ID として動作します。 - インスタンスが
freshでない場合、そのインスタンスで得た証明は証拠になりません。 - 変更が影響する、到達可能なすべてのエントリーポイントと、成功、失敗、空、キャンセル/再実行、永続化の経路を網羅します(該当する経路は領域ファイルに記載されています。ジャーニー内の
page.route、または停止中のサーバーによってリクエストが失敗します)。 - トリガーと安定した最終状態をセットで示します(
mark、操作、--since-markの証拠)。 - ピクセルではなく副作用を確認します。保存されたレコード(
api /api/<route>)、実行行(api /api/runs)、再読み込み後またはdown/up後の状態を確認します。 - 偽のモデルが認められるのは、本番の境界(同じランタイム、サーバー、ウェブの下にあるモデルプロバイダー)の背後で動作する場合に限られます。ウェブまたはサーバーを経由しないものは、ページのカバレッジにはなりません。
- 到達できなかったもの(ネイティブのファイルピッカー、OS のドラッグ&ドロップ、実際のプロバイダー、本番環境のみ)を明記し、代わりに網羅した最も近い実際の経路も記載します。
証拠:まず最小コストで十分なものから
lint + contracts + unit tests → formal models → end-to-end journeys (fake models)
→ driven instance (verify) → real models on the instance (up --real)
→ the people's own use
あるレイヤーの合格は、より上位のレイヤーの主張を証明しません。単体テストの成功はページについて何も示さず、偽のモデルを使ったジャーニーは文言について何も示しません。
禁止事項
- リポジトリ、テスト、フィクスチャ、レポート、コミット済みのスクリーンショットのどこにも、実際のユーザーデータを含めないでください。創作したデータのみを使用してください。
- 本番環境をテストベッドにしないでください。
verify upのインスタンスは自分のものであり、本番環境はユーザーのものです(docs/verify/deploy.mdはデプロイ後に読み取り専用で確認します)。 - マージ、CI の成功、デプロイをもって「検証済み」としないでください。どこで何が実行されたかを確認するのがリリーススキルの役割であり、「不明」も有効な回答です。
検証済みとする前にレポートする
.verify/report-<branch>.md に記入し(report <area…> を使用)、プルリクエストの .github/pull_request_template.md のエビデンステーブルに貼り付けてください。
- コミット、
doctorの行、checkの結果(正式なモデルを実行したかどうかも含む)、モデル(偽物/実際のもの)。 - 領域ごとに、実行したパス、コマンド、観測された副作用(主要な出力)。
- スキップしたパス、または到達できなかったパス:それぞれを妨げるものと、代わりにカバーした最も近い実際のパス。
- ここで証明できていないこと(たとえば、文言の確認には実際のモデルが必要です)。