テストパターンカタログ

テストパターン一覧

Retail AI Ops Copilotで使うべき検証パターンを、実行結果ではなく「何を証明するか」「何を証明しないか」の単位で整理する。 静的検査、単体テスト、契約テスト、ローカルデータ確認、コンパイル、結合確認、画面E2Eを混ぜず、後続のセマンティックモデル、ゴールデン評価、Streamlit、Cortex準備度、RBAC/コストガードレール準備度へ渡せる形にする。

証跡レベル

同じ「テスト」でも、証明できる範囲が違う。準備状況の報告ではレベル名と限界を一緒に残す。

証跡: 静的リント ファイル、HTML、ドキュメント、台帳、グラフ構造を読む。実サービスや実データの成功は証明しない。
証跡: フィクスチャ単体テスト ローカルフィクスチャやモック入力に対する決定的テスト。関数、変換、通知生成などの小さい単位を検証し、外部送信や実APIの成功とは分ける。
証跡: UIコンポーネント簡易確認 StreamlitなどのUI部品とHTTP起動を軽く検査する。Playwright、実ブラウザDOM、スクリーンショット、回答品質、実環境外部実行とは分ける。
証跡: 契約テスト シード、モデル、API、ワークフロー状態、評価ケースなどの契約を検査する。契約外の品質は別テストが必要。
証跡: ローカルデータあり 現在のシード、フィクスチャ、出力値を使う。ローカルデータの妥当性と実ウェアハウスの妥当性は同一ではない。
証跡: コンパイルのみ dbtやツールが構文解析、依存解決、生成をできることを示す。実環境実行成功にはしない。
証跡: 実環境結合テスト 対象サービス、ロール、スキーマ、ウェアハウス、成功/失敗ログがそろう実結合証跡。ダミー環境や単体テストとは別扱い。
証跡: 利用者向けE2Eテスト 人間が見る画面、回答品質、承認フローまで検証する。内部関数、単体テスト、コンパイルだけでは代替できない。
証跡: ワークフロー契約 状態語、報告責務、反映手順などの運用契約を検査する。実送信や成果物レビューの代替ではない。
証跡: 評価パターン ゴールデン評価や回答品質回帰の検査設計。実行済みE2E結果とは分けて扱う。

状態語と証跡境界

並列セッションと遠隔Issue運用では、送信、受理、報告、レビュー、統合判断を同じ言葉で扱わない。

委任文あり / 送信済み posted / delivered

タスクやペイン送信が存在する段階。担当セッションが読んで作業を受けた証拠ではない。

受理済み / 報告済み accepted / reported

担当セッションが受理または報告した段階。成果物の正しさや統合可否はまだ別確認。

レビュー済み / 統合判断可能 reviewed / integration_ready

監督側レビューと統合判断の語。レーン単独のHTML実装では宣言しない。

パターン一覧

各パターンは「使うべきか」「証明すること」「証明しないこと」を同じ粒度で見る。

カテゴリ: dbt準備度 証跡: コンパイルのみ

dbt解析 / 空コンパイル

現在のプロジェクト状況

main 6580c3b のRAIOPS-4で、資格情報なしの一時プロファイルを使い、dbt設定とモデルが解釈・空コンパイルできることを確認した。tools/check_dbt_static_contract.pytests/test_dbt_static_contract.py も通過し、CI品質ゲート 28577692921 とPagesビルド 28577691531 も成功している。

使うべきか

使う。dbt編集の最初の安全確認。ただしSnowflake実環境でデータを読めた証明にはしない。

コマンドまたは証跡

dbt parse --project-dir dbt --profiles-dir /tmp/retail-ai-ops-dbt-profiles
dbt compile --no-populate-cache --no-introspect --empty

何を証明するか

YAML、Jinja、マクロ、セレクタ、テスト定義が構文上壊れておらず、レビュー可能なdbt生成物へ進めること。

何を証明しないか

実環境dbtビルド/テストは未証明。Snowflake実接続、ウェアハウス上の行数、ロール権限、Snowflake実データ上のdbtテスト成功、SQL結果正当性、Cortex Analyst、回答品質、Streamlit E2Eは証明しない。証跡ラベル: NOT_EXECUTED_NOT_PROVEN

再利用先

プロジェクトファミリー、クライアント納品向け汎用スキル、Backlog受入基準、ドキュメントテンプレート。

関連ノードまたはレーン

dbtステージング/中間/マート、RAIOPS-4 dbt品質ゲート、セマンティックモデル準備度。

次アクションまたはブロッカー

実環境資格情報を使う別レーンでdbt seed/build/testを実行し、ターゲット、ロール、スキーマ、失敗したテスト名を残す。

カテゴリ: Snowpark実行境界 証跡: 契約フローE2E 証跡: 失敗時JSON証跡の整合

RAIOPS-12 Snowpark評価/トレース補強境界

現在のプロジェクト状況

main 6eb57f7 に、Snowparkで評価結果とトレース情報を補強する契約が統合済み。実装コミットは 1471323ea7ac076eb57f7。CI品質ゲート 28580571344 とPages実行 28580570625 は成功し、フィードバック反映コミットは 2734ecb

使うべきか

使う。SnowparkやCortexの実環境経路へ進む前に、ローカル契約、実行時失敗のJSON証跡、負例境界を分け、失敗時にローカルフィクスチャ成功へ黙って逃げないことを固定する。

コマンドまたは証跡

python3 -m retail_ai_ops.eval_runner --jsonl-output /tmp/raiops12-eval.jsonl
python3 tools/run_snowpark_enrichment.py --runtime-mode local_explicit_test --eval-jsonl /tmp/raiops12-eval.jsonl --output /tmp/raiops12-enrichment.json
python3 tools/run_snowpark_enrichment.py --runtime-mode snowpark --eval-jsonl /tmp/raiops12-eval.jsonl --output /tmp/raiops12-snowpark.json
pytest -q tests/test_snowpark_enrichment.py
pytest -q

何を証明するか

明示したローカル評価JSONLを集計し、18件の品質期待と8件の既知ギャップを分けて出せること。Snowparkモードでは前提不足のときに終了コード2で止まり、どの層の不足かを失敗JSONに残す。監査用の正確なキーは quality_passed=18known_gaps_observed=8live_external_executed=falselocal_fallback_used=false などで確認する。

追加で固定した負例

James修正後、入力欠落と不正JSONLでも失敗JSONを書き、成功時と失敗時のJSONが後続工程で同じ形で読めることをテストした。Harveyの第三者テスト、対象pytest、全体pytest、Linnaeusの契約フローE2Eはいずれもローカル証跡として成功。

何を証明しないか

Snowflake実接続成功、Snowparkセッション作成、ストアドプロシージャ / UDF / dbt Pythonモデル実行、Cortex実行、トレース保存への実環境保存、SQL結果正当性、回答品質は証明しない。Pages成功は公開ビルド証跡であり、実環境ランタイム証跡ではない。

再利用先

Snowpark実行層、評価/トレース補強、ツールアダプタ、トレース保存、ゴールデン評価、失敗時JSON証跡の整合、Backlog受入基準。

関連ノードまたはレーン

RAIOPS-12、Snowpark Python、ゴールデン評価、トレース保存、エラー分類、L6公開面更新。

次アクションまたはブロッカー

実環境資格情報とSnowpark実行環境が揃う別レーンで、ターゲット、ロール/スキーマ、ストアドプロシージャ/UDF/dbt Pythonモデル、Cortex境界、失敗時JSON証跡を別証跡として追加する。ローカル契約を実環境成功に読み替えない。

カテゴリ: 実環境トレース境界 証跡: main統合済み / Cloudflare Pages反映済み 証跡: 環境変数不足時に代替へ逃げない

RAIOPS-7 実環境トレースランナー境界

現在のプロジェクト状況

RAIOPS-7はソース統合 b1a8568 と証跡修正 1555300 がmain統合済み。CI品質ゲート 28573780045 とPagesビルド 28573778991 は成功。候補 8408616 のローカル静的境界証跡をPages向け説明へ反映し、L4第三者テストも通過している。L5実環境境界レーンはSnowflake資格情報なしで停止。

使うべきか

使う。実環境実行を始める前に、環境変数不足時の明示停止、暗黙フォールバック禁止、トレース項目契約、秘密情報らしいエラーのマスキングを安いローカル静的証跡で固定する。

コマンドまたは証跡

tools/run_live_trace.py --runtime snowflake --trace-path ...
tools/run_live_trace.py --runtime local_explicit_test --trace-path ...
tests/test_planner_and_trace.py
tests/test_streamlit_browser_e2e.py

何を証明するか

環境変数不足時のトレースは error_category=live_prerequisite_missinglive_external_attempted=falselive_external_executed=falselocal_fallback_used=false。疑似実環境失敗では live_external_attempted=true かつ live_external_executed=false。明示ローカルトレースは6レコードで、SQLを含む行も request_text は元の質問として残り、生成SQLとは分離されている。

何を証明しないか

Snowflake/Cortexの実環境成功、Cortex Analyst実行、Snowflake OPSテーブル書き込み、Slack/Backlog/API/Webhookの実送信、SQL結果正当性、回答品質、本番運用向けの観測性は証明しない。

再利用先

ツールアダプタ、トレースロガー、トレース保存、実環境統合準備度、公開面の証跡境界。

関連ノードまたはレーン

RAIOPS-7、ツールアダプタ、トレースロガー、L2統合候補、L4第三者テスト、L5実環境境界レーン。

次アクションまたはブロッカー

実環境Snowflake/Cortex資格情報が揃うまでは実環境成功扱いにしない。live_external_attemptedlive_external_executed を同一視しない。

カテゴリ: RBAC / コストガードレール 証跡: 契約フローE2E 証跡: モックコネクタ単体

RAIOPS-13 RBAC / LLM安全 / コストトレース境界

現在のプロジェクト状況

main 45c867d にRAIOPS-13のRBAC、コストガードレール、LLM安全フィールド、Snowflakeセッション制御が統合済み。CI品質ゲート 28584336684 とPagesビルド 28584336044 は成功。証跡は .agent-feedback/SUBAGENT_INVOCATIONS.mdINV-20260702-044 から INV-20260702-047、実装レポートは docs/project-management/raiops13-rbac-cost-guardrail-report.md

使うべきか

使う。RBAC、LLM安全フィールド、生データ/個人情報の安全停止、コストガードレール、Snowflakeクライアントのセッションパラメータ、トレースメタデータ整合を、実環境資格情報なしでも壊れにくい契約として固定する。

コマンドまたは証跡

pytest -q tests/test_planner_and_trace.py70 passed
pytest -q116 passed, 2 skipped
node tools/check_parallel_session_guardrails.mjsnode tools/check_feedback_reflection.mjspython3 tools/sync_obsidian_docs.py --direction checkgit diff --check はmain側確認済み。

何を証明するか

ROLE_BOUNDARIESLLM_SAFE_FIELDS が計画とトレースに入ること、生データ/個人情報フィールドヒントが sensitive_or_raw_data_request で安全停止すること、安全でない RETAIL_AI_OPS_LLM_SAFE_FIELDS と非正のコスト値が安全側停止になること、SQL limit とトレースメタデータが設定と一致すること、疑似Snowflakeコネクタが QUERY_TAGSTATEMENT_TIMEOUT_IN_SECONDS を受けること。

何を証明しないか

Snowflake実クエリ、実ロール付与/RLS/IAM、リソースモニター作成、ウェアハウス履歴上のクエリタグ確認、Snowflake OPS.COPILOT_TRACE_LOG への書き込み、Cortex Analyst/Search/Agents実行、SQL結果正当性、回答品質、本番FinOpsダッシュボードは証明しない。証跡ラベル: NOT_EXECUTED_NOT_PROVEN

再利用先

RBAC / アクセス制御、コストガードレール、プランナー、エージェントルーター、ツールアダプタ、トレースロガー、トレース保存、Backlog受入基準、公開面の証跡境界。

関連ノードまたはレーン

RAIOPS-13、RBAC、コストガードレール、プランナー、エージェントルーター、ツールアダプタ、トレースロガー、トレース保存、L6公開面更新。

次アクションまたはブロッカー

実環境資格情報と権限が揃う別レーンで、Snowflakeロール、セッションパラメータ、リソースモニター、トレース書き込み、Cortex実行を別証跡として追加する。ローカル契約やモックコネクタ成功を実環境成功やintegration_readyとして扱わない。

カテゴリ: KPI契約 証跡: 契約テスト 証跡: ローカルデータあり

dbtスキーマ / 汎用テスト / 個別SQLテスト / 静的契約ゲート

現在のプロジェクト状況

main 6580c3b のRAIOPS-4で、モデルのスキーマテスト、汎用テスト、dbt/tests/singular/dbt/seeds/schema.yml、KPIシード契約、再集計リスクの負例フィクスチャを静的契約ゲートへ統合。tools/check_dbt_static_contract.py とpytest 7件、CI品質ゲート 28577692921、Pagesビルド 28577691531 は成功。

使うべきか

使う。セマンティックモデルとゴールデン評価へ渡すKPI定義、粒度、率系/再集計リスクの最低契約を守る。

コマンドまたは証跡

python3 tools/check_dbt_static_contract.py
.venv/bin/python -m pytest tests/test_dbt_static_contract.py -q
dbt/models/**/schema.yml
dbt/tests/generic/*.sql
dbt/tests/singular/*.sql
dbt/seeds/schema.yml

何を証明するか

モデル列のnot_null/unique/rangeなどの契約、汎用テストマクロ、KPIシード行、未対応/ギャップ表現、再集計注意の個別SQL契約がリポジトリ内に静的に存在し、解釈・コンパイル可能な状態であること。

何を証明しないか

実環境dbtビルド/テストは未証明。Snowflake実データ上のdbtテスト成功、SQL結果正当性、Cortex Analyst、回答品質、Streamlit E2E、率KPIを月別以外へ安全に再集計できることは証明しない。証跡ラベル: NOT_EXECUTED_NOT_PROVEN

再利用先

プロジェクト内、プロジェクトファミリー、リント・CI、Backlog受入基準、クライアント納品向け汎用スキル。

関連ノードまたはレーン

kpi_definitions シード、mart_retail_monthly_kpi、セマンティック入力、評価入力。

次アクションまたはブロッカー

実環境資格情報を使う別レーンでdbt seed/build/testを実行し、Snowflakeターゲット、ロール、スキーマ、行数、失敗したテスト名、SQL結果正当性を別証跡として追加する。率系KPIの再集計はセマンティック/ゴールデン評価側のケースへ接続する。

カテゴリ: セマンティック契約 証跡: 契約テスト 証跡: ローカル静的検証器

率KPIの変異テスト / 分母ゼロ防止

現在のプロジェクト状況

L5コミット ef6a825 をローカル静的レビュー候補として反映。tests/test_semantic_contract.pytools/validate_semantic_contract.py --json、全体pytestで、セマンティック契約の負例を検出できることを確認している。監査用ラベル: reviewed-candidate_local-static

使うべきか

使う。率KPIを保存済み率のまま SUM / AVG する誤用と、分母ゼロ防止の欠落をセマンティック契約変更時に早く検知する。

コマンドまたは証跡

PYTHONDONTWRITEBYTECODE=1 pytest -q tests/test_semantic_contract.py
PYTHONDONTWRITEBYTECODE=1 python3 tools/validate_semantic_contract.py --json
PYTHONDONTWRITEBYTECODE=1 pytest -q

何を証明するか

セマンティック検証器が、保存済み率の SUM / AVG 誤用と、分母ゼロ防止の契約違反をローカル静的に検出できること。

何を証明しないか

Snowflake実行、Cortex Analyst登録または実応答、SQL結果正当性、回答品質、実環境外部実行は証明しない。L4ブラウザE2Eは別証跡で扱い、セマンティック検証器の追加進捗には加算しない。

再利用先

セマンティックKPIモデル、検証済みクエリ、ゴールデン評価の率KPIケース、CIの契約検証器、Backlog受入基準。

関連ノードまたはレーン

セマンティックKPIモデル、dbtテスト、ゴールデン評価、L5セマンティック検証器レーン。

次アクションまたはブロッカー

実環境Snowflake/Cortex、SQL結果正当性、回答品質は別証跡で追加する。L4ブラウザE2EはUI証跡として扱い、セマンティック公開面の進捗には加算しない。

カテゴリ: 通知ワークフロー 証跡: フィクスチャ単体テスト

Backlog / Slack 外部送信なしシミュレーション Nodeテスト

現在のプロジェクト状況

このリポジトリ群では、外部送信しない通知シミュレーションをテストパターンとして扱う。このブランチ単体では、main統合前のレーン成果物が未搭載の場合がある。監査用モード名: private_simulation

使うべきか

使う。遠隔報告やBacklog/Slack文面の決定的テストとして有効。ただし実送信の証跡語と分ける。

コマンドまたは証跡

node --test tests/backlog_slack_notification.test.mjs
--mode private_simulation
sent_external=false

何を証明するか

フィクスチャ入力から本文、重複抑止、宛先メタデータ、外部送信しない安全経路が期待通りになること。

何を証明しないか

実Slack投稿、実Backlog API送信、相手ペインの受理、GitHub Issue上の報告確認。

再利用先

プロジェクトファミリー、クライアント納品向け汎用スキル、Backlog受入基準、ドキュメントテンプレート。

関連ノードまたはレーン

遠隔Issue報告、Backlog/Slack通知レーン、並列セッション運用。

次アクションまたはブロッカー

main統合後に現物ファイル名でコマンドを固定し、実送信確認とは別の実環境結合項目を作る。

カテゴリ: 構成図品質 証跡: 静的リント

構成図品質リント

現在のプロジェクト状況

接続線の幾何、テキスト配置、構成図品質をまとめて見るNodeラッパーがある。構成図HTMLの変更時に必須ゲートとして扱う。

使うべきか

使う。公開Pagesの構成図品質を安定させるための低コストで決定的な静的ゲート。

コマンドまたは証跡

node tools/check_diagram_quality.mjs
tools/check_diagram_connectors.mjs
tools/check_diagram_text_layout.mjs

何を証明するか

HTML/SVGの接続線、矢印、ラベル、テキストはみ出しなどのページ品質ルールが壊れていないこと。

何を証明しないか

ビジネスロジック、dbt契約、元画像との芸術的忠実度、Snowflake/Cortex実行成功。

再利用先

リント・CI、プロジェクトファミリー、クライアント納品向け汎用スキル、ドキュメントテンプレート。

関連ノードまたはレーン

構成図HTML、構成図レビューレーン、準備度オーバーレイ。

次アクションまたはブロッカー

構成図変更時だけでなく、公開前のPages簡易確認と組み合わせる。今回のテストパターンページ自体には構成図リントを適用しない。

カテゴリ: フィードバック反映ワークフロー 証跡: 静的リント 証跡: ワークフロー契約

フィードバック反映リント

現在のプロジェクト状況

tools/check_feedback_reflection.mjsがプロジェクト内台帳、ルール、子スキルの構造を検査する。

使うべきか

使う。レビュワー指摘や改善手順を反映する変更では必須。今回のHTMLレーンでは編集禁止のため提案に留める。

コマンドまたは証跡

node tools/check_feedback_reflection.mjs
.agent-feedback/構造、プロジェクトスキル、子スキル一覧。

何を証明するか

台帳行、target_scopetrigger_decision、子スキル経路などの構造的な反映漏れがないこと。

何を証明しないか

自然言語上の全トリガーを人間が拾えたこと、反映内容の品質、mainセッションの統合承認。

再利用先

プロジェクト内、リント・CI、クライアント納品向け汎用スキル、Backlog受入基準。

関連ノードまたはレーン

フィードバック台帳、エージェントスキル統制、レビュー引き継ぎ。

次アクションまたはブロッカー

共有スキルや台帳更新はこのレーンでは行わず、mainセッションで反映可否を決める。

カテゴリ: 並列セッションワークフロー 証跡: 静的リント 証跡: ワークフロー契約

並列セッションガードレールリント

現在のプロジェクト状況

親スキルとタスク分割文書にガードレールがある。専用リントは候補で、現時点では文書レビューと関連リントで補助している。

使うべきか

使うべき。posted、delivered、accepted、reported、reviewed、integration_readyの混同を機械的に止める余地が大きい。

コマンドまたは証跡

parallel-session-review-orchestration/SKILL.md
docs/project-management/parallel-session-task-split-20260630.md
将来の状態語リント。

何を証明するか

タスクブリーフ、レーン報告、レビュー引き継ぎで状態語が段階別に書かれていることを検知できる。

何を証明しないか

相手ペインが実際に作業を受理したこと、成果物がレビュー済みであること、統合してよいこと。

再利用先

プロジェクトファミリー、クライアント納品向け汎用スキル、リント・CI、Backlog受入基準。

関連ノードまたはレーン

並列委任、遠隔Issue報告、オーケストレーター側レビュー。

次アクションまたはブロッカー

mainセッションでリント化対象の文面と誤検知許容度を決める。レーン単独ではintegration_readyを宣言しない。

カテゴリ: Pythonランタイム 証跡: フィクスチャ単体テスト 証跡: ローカルデータあり

Python pytest プランナー / トレース / Obsidian同期

現在のプロジェクト状況

tests/test_planner_and_trace.pytests/test_sync_obsidian_docs.pyがある。pytestを実行できる環境がない場合は環境未整備として扱う。

使うべきか

使う。LLMルーティング、安全停止、トレース、ゴールデン評価フィクスチャ、ドキュメント同期の局所回帰を安く検知できる。

コマンドまたは証跡

python3 -m pytest -q
python3 tools/sync_obsidian_docs.py --direction check

何を証明するか

ローカルPython環境でプランナー/トレースやドキュメント同期のフィクスチャが期待通り動くこと。

何を証明しないか

Cortex、Snowflake、Streamlitの実環境動作、公開Pages到達、LLM回答品質の網羅性。

再利用先

プロジェクト内、プロジェクトファミリー、リント・CI、Backlog受入基準。

関連ノードまたはレーン

エージェントプランナー、トレース記録、Obsidianドキュメントミラー、ゴールデン評価シード。

次アクションまたはブロッカー

pytest未導入なら実施済みにしない。Python環境固定後にコマンド、ランタイム、スキップ理由を報告形式へ入れる。

カテゴリ: Streamlit UI簡易確認 証跡: コンポーネント簡易確認 証跡: HTTP起動確認

RAIOPS-11 Streamlitコンポーネント簡易確認

現在のプロジェクト状況

L4コミット 7b3656d9 を、ローカルのコンポーネント簡易確認済み候補として公開面へ反映。mainセッション/オーケストレーター再実行ではStreamlit UI簡易確認と全体pytestが成功している。監査用ラベル: reviewed-candidate_local-component-smoke

使うべきか

使う。Streamlitの利用者向け表示経路を作り始めた段階で、暗黙フォールバックやフィクスチャ成功条件の緩みを安く止める。

コマンドまたは証跡

tests/test_streamlit_ui_e2e_smoke.py
docs/project-management/raiops11-ui-e2e-smoke-report.md
python3 -m retail_ai_ops.eval_runnerEVAL_EXIT=19/10 passed、既知ギャップは golden-005 のみ。

何を証明するか

Snowflake資格情報なしで暗黙フォールバックしないこと、local_explicit_testだけがフィクスチャ成功扱いになること。構造化KPI、追加質問、曖昧質問、未対応質問、危険操作の5シナリオで、ルート、ツール計画、SQLリクエスト、結果、引用、トレース保存、人間承認候補を確認する。

何を証明しないか

Playwrightまたは実ブラウザDOM操作、スクリーンショット、レスポンシブ、アクセシビリティ、Snowflake / Cortex実環境実行、回答品質、SQL結果正当性、外部Slack/Backlog送信は未証明。利用者向けE2E未満として扱う。証跡ラベル: live_external_executed=false

再利用先

Streamlit UI、アプリ実行層、トレース記録、人間承認候補表示、Cloudflare Pages公開面の証跡境界。

関連ノードまたはレーン

Streamlit UI、アプリ実行層、エージェントルーター、プランナー、ゴールデン評価、人手レビューキュー。

次アクションまたはブロッカー

Playwrightまたは実ブラウザDOM、スクリーンショット、レスポンシブ、アクセシビリティ、実環境Snowflake/Cortex、回答品質、SQL結果正当性は別証跡として追加する。

カテゴリ: StreamlitブラウザE2E 証跡: 利用者向けE2E / ブラウザE2E 証跡: ローカル出力

RAIOPS-11 StreamlitブラウザE2E

現在のプロジェクト状況

main統合 65ff7c3 の監督セッション再実行では、初回ブラウザE2Eで1件のタイミング不安定を検出し、直後の再実行で6件成功した。直前の修正後 c150168 でもブラウザE2EとUI簡易確認が成功している。

使うべきか

使う。コンポーネント簡易確認では見えない、実ブラウザDOM、チャット入力、タブ表示、SQLプレビュー、結果、トレース保存、スクリーンショットの利用者経路を検査する。

コマンドまたは証跡

tests/test_streamlit_browser_e2e.py
tests/test_streamlit_ui_e2e_smoke.py
requirements-e2e.txt
outputs/raiops11-browser-e2e/*.png / *.jsonl はローカル実行証跡。

何を証明するか

Playwright ChromiumでStreamlitサーバーをサブプロセス起動し、/_stcore/health 待機後に主要シナリオを実ブラウザ経由で確認すること。Snowflake資格情報欠落時は明示停止し、ローカルフィクスチャへ暗黙フォールバックせず、不要な欠落証跡ファイルも作らない。

何を証明しないか

Snowflake/Cortex UIの実環境連携、実SQL結果正当性、回答品質、レスポンシブ/アクセシビリティ/クロスブラウザ網羅、外部Slack/Backlog送信、本番承認キュー永続化は証明しない。初回の引用DOM失敗は、直後再実行成功後もDOMタイミング不安定リスクとして残す。

再利用先

Streamlit UI、アプリ実行層、SQLプレビュー、トレース記録、人間承認候補表示、公開面の証跡境界。

関連ノードまたはレーン

Streamlit UI、データアナリスト、アプリ実行層、トレースロガー、人手レビューキュー、L4 RAIOPS-11ブラウザE2Eレーン。

次アクションまたはブロッカー

実環境UI結合、回答品質、SQL結果正当性、アクセシビリティ/レスポンシブ、クロスブラウザ確認は別証跡として追加する。コンポーネント簡易確認とブラウザE2Eを実環境成功として扱わない。トレース/スクリーンショットはgit管理外のローカル出力として扱う。

カテゴリ: 回答品質 証跡: ローカル静的フィクスチャ 証跡: 評価パターン

ゴールデン評価 / 利用者向け回答品質

現在のプロジェクト状況

main統合 65ff7c3 の監督セッション再実行では、pytestとNodeの外部送信なしシミュレーションが成功した。L4修正後 c150168 のローカル静的フィクスチャ評価では、18件の品質期待が通り、8件の既知ギャップを観測し、想定外失敗はなかった。監査用の正確なカウンターは後続の証跡欄に残す。

使うべきか

使う。dbt契約だけでは防げない、質問意図、KPI粒度、未対応回答、率系再集計の品質劣化を検知する。

コマンドまたは証跡

python -m retail_ai_ops.eval_runner
python -m retail_ai_ops.eval_runner --strict-known-gaps
.venv/bin/pytest -q
node --test tests/backlog_slack_notification.test.mjs

何を証明するか

ローカル静的フィクスチャ評価で、18件の品質期待が通り、8件の既知ギャップが想定通り観測され、想定外失敗がないこと。厳格な既知ギャップモードでは既知ギャップを失敗として扱い、品質ゲート圧力を残す。監査用キー: evaluation_mode=local_static_fixturequality_passed=18known_gaps_observed=8matched_expectation=26

何を証明しないか

Snowflake実行、Cortex実呼び出し、UI操作性、全質問の正しさ、セマンティック契約とプランナーの完全整合は証明しない。証跡ラベル: live_external_executed=false

再利用先

プロジェクトファミリー、クライアント納品向け汎用スキル、Backlog受入基準、ドキュメントテンプレート。

関連ノードまたはレーン

セマンティックモデル、ゴールデン評価、Streamlit UI、Cortex Analyst/Search/Agents準備度。

次アクションまたはブロッカー

厳格な既知ギャップモードは品質ゲート圧力として別扱い。ブランチ内証跡レポートのカウンターが変わった場合は、古い正確なカウンター行を残さず更新してから公開面へ反映する。

カテゴリ: 統合証跡の鮮度管理 証跡: 静的リント 証跡: ワークフロー契約

統合証跡レポートのカウンター鮮度

現在のプロジェクト状況

main統合 65ff7c3 はCI品質ゲート 28563040190 とPagesデプロイ 28563039370 が成功。L2修正 c150168 後のL4再確認で、品質期待18件、既知ギャップ8件、厳格モード失敗8件、期待一致26件を再確認した。ただしintegration_readyとは扱わない。

使うべきか

使う。評価カウンターが変わるたびに公開面、ブランチ内レポート、リントトークンのどれかが古いままだと、ローカル静的証跡と公開Pages証跡がずれる。

コマンドまたは証跡

git diff --check HEAD~1..HEAD
rgで旧カウンター行の不在確認
node tools/check_public_surface_links.mjs

何を証明するか

公開説明が最新のローカル静的評価カウンターを参照し、古いレポートを正として扱っていないこと。

何を証明しないか

実環境Snowflake/Cortex実行、実SQL結果正当性、回答品質そのもの、Pages公開後のHTTP 200。

再利用先

ゴールデン評価、統合証跡レポート、公開面リント、並列セッション引き継ぎ。

関連ノードまたはレーン

L2統合証跡更新、L4最終統合テスト確認、L5最終ブラウザE2E、ゴールデン評価、docs/index、公開面レーン。

次アクションまたはブロッカー

新しいカウンター変更を公開する場合は、ローカル静的評価、ブラウザE2E、実環境結合、公開Pagesを同じ状態語へ畳まない。

カテゴリ: Cloudflare Pagesドキュメント 証跡: 静的リント

HTML構文解析 / リンク / ローカルプレビュー確認

現在のプロジェクト状況

構成図やレビュー補助HTMLを公開面として扱うため、HTMLパーサー、リンク確認、ローカルプレビューをレーン内で実施できる。

使うべきか

使う。docs/index.htmlから到達できること、タイトル、主要語、はみ出しがないことを確認する。

コマンドまたは証跡

python3 - <<'PY'でHTMLパーサー検査
rg -n "test-patterns.html|テストパターン" docs/index.html docs/project-management/test-patterns.html
ローカルホストプレビュー。

何を証明するか

静的HTMLとして壊れておらず、入口から到達でき、人間が読む主文言が存在すること。

何を証明しないか

Cloudflare Pages上のHTTP 200、CI通過、コンテンツの設計妥当性、実環境結合準備度。

再利用先

プロジェクトファミリー、リント・CI、ドキュメントテンプレート、Backlog受入基準。

関連ノードまたはレーン

docs/index.html、プロジェクト管理HTML、公開レビュー面。

次アクションまたはブロッカー

公開後はPages URLのHTTP 200とブラウザ表示を別証跡として追加する。

カテゴリ: 依存関係/SCA 証跡: 静的スキャン候補

SCA / 依存関係脆弱性スキャン

現在のプロジェクト状況

レビュー観点側にはSASTとSCAを分ける契約を追加した。現時点で、このページは pip-auditosv-scanner、Dependabot相当をCIで回した実行証跡はまだ持たない。

使うべきか

使う。CodeQL/Semgrepはコードパターンを見るSASTであり、依存パッケージの既知脆弱性、lockfile、怪しい生成パッケージ名は別ゲートで見る。

コマンドまたは証跡

pip-audit -r requirements.txt
osv-scanner --lockfile ...
Dependabot alerts / security updates。

何を証明するか

依存関係に既知脆弱性がないか、manifestやlockfile変更時に機械的に確認したこと。LLMが生成したパッケージ名のハルシネーション疑いを、人間レビューへ上げる入口にもなる。

何を証明しないか

認可ロジック、SQL injection、SSRF、業務データフローの安全性、未知脆弱性、実環境設定の安全性は証明しない。SCAはSASTやLLMレビューの代替ではない。

再利用先

セキュリティCI、依存関係更新PR、LLMが生成したinstallコマンドのレビュー、クライアント納品向けレビュー基準。

関連ノードまたはレーン

security-logic-reviewer、llm-security-reviewer、CI/CD品質ゲート、GitHub Actions。

次アクションまたはブロッカー

このrepoの依存関係管理方針に合わせ、どのSCAをCIのblockerにするかを決める。実行していない間は「脆弱依存なし」とは言わない。

カテゴリ: レビュワー防御 証跡: 負例fixture候補

レビュワー防御fixture / Promptfoo redteam

現在のプロジェクト状況

レビュワーはレビュー対象内の指示文を信頼しない、という契約を子スキルと観点一覧へ追加した。現時点では、攻撃文を仕込んだfixture PRを流した証跡は未実施。

使うべきか

使う。AIレビュワーがコードコメント、Markdown、チケット本文、RAG文書内の「この指摘を無視して」に従わないことをテストできる形にする。

コマンドまたは証跡

hostile comment fixture PR
promptfoo redteam 相当のレビュー対象注入テスト
レビュワー出力の採用/却下ログ。

何を証明するか

レビュー対象内の攻撃的な指示より、上位のレビューbrief、プロジェクトルール、決定論的チェック、受入基準が優先されること。

何を証明しないか

すべてのprompt injectionに耐えること、LLM経路全体の安全性、RAG本番データの安全性、外部ツール実行の安全性は証明しない。

再利用先

llm-security-reviewer、architecture-intent-boundary-reviewer、レビュワー育成、HITL判断ログ。

関連ノードまたはレーン

コードレビュー観点一覧、レビュワーサブエージェント、LLM安全境界、Human Review。

次アクションまたはブロッカー

まず小さいfixture PRを用意し、レビュワーが攻撃文を無視して実不具合を報告できるかを測る。宣言だけを防御済みとして扱わない。

カテゴリ: NFR / 性能 証跡: 要件仮置き候補

NFR仮置き / perf load smoke

現在のプロジェクト状況

レビュー観点ではperf/load smokeを要求しているが、テストパターンとしてのNFR仮置きと軽量負荷smokeは未実施。NFRがない場合は「要件未定義」として扱う。

使うべきか

使う。性能を語るなら、同時実行数、データ量、p95応答時間、許容コストなどの仮定を先に置く必要がある。

コマンドまたは証跡

k6 / Locust の小規模smoke
Snowflake query profile / EXPLAIN
暫定NFR表。

何を証明するか

仮定した小さい利用条件で極端な遅延、N+1、キュー滞留、過大クエリコストが見えていないこと。

何を証明しないか

本番負荷、ピーク時間帯、長期運用コスト、Snowflake warehouse sizing、SLA/SLO達成は証明しない。NFR未定義なら合否ではなく要件不足。

再利用先

scale-nfr-reviewer、CI品質ゲート、コストガードレール、Backlog受入基準。

関連ノードまたはレーン

Streamlit UI、Cortex Agents、Snowpark Python、dbt mart、CI/CD品質ゲート。

次アクションまたはブロッカー

暫定NFRを決める。例: 小規模学習環境で同時数、サンプルデータ量、p95閾値、E2E複数回実行時のコストリスクを明記する。

カテゴリ: 冪等性 / 障害注入 証跡: 負例fixture候補

冪等キー / 外部API障害注入

現在のプロジェクト状況

通知シミュレーションでは重複抑止の考え方があるが、同一payloadを複数回処理して副作用が1回に収まる冪等キーテストとしては未整理。429/500/Timeout注入も未実施。

使うべきか

使う。外部送信、承認、通知、書き込み、ジョブ再実行がある経路では、リトライや再実行が二重実行を起こさないことを先に固定する。

コマンドまたは証跡

same payload x N fixture
429 / 500 / Timeout injection
retry count / stop condition assertion
failure artifact schema check。

何を証明するか

同じ入力を繰り返しても副作用が1回に収まること、外部I/O失敗時にリトライ回数、停止条件、フォールバック、失敗artifactが契約どおり残ること。

何を証明しないか

実Slack/Backlog/Snowflake/Cortex送信成功、本番ネットワーク障害全般、長時間障害時の運用復旧、全APIの障害網羅は証明しない。

再利用先

availability-resilience-reviewer、concurrency-race-reviewer、通知/承認/外部連携、失敗artifact契約。

関連ノードまたはレーン

Human Review、外部MCP境界、Backlog/Slack通知、トレース保存、CI/CD品質ゲート。

次アクションまたはブロッカー

外部サービスへ実送信しないprivate simulationから始め、同一payload再実行と障害注入をfixture化する。

カテゴリ: 評価 / dbt 証跡: 評価パターン候補

Golden Eval二層化 / dbt unit tests

現在のプロジェクト状況

ローカル静的フィクスチャ評価、schema/generic/singular dbt契約はある。一方で、Cortex Analyst evaluations、verified queries、DeepEval/pytestのCIゲート化、dbt unit tests、dbt-expectationsは未実施。

使うべきか

使う。評価はローカル静的評価とCortex/verified query側の評価を分け、dbtも静的契約、unit、expectations、実環境build/testを分ける。

コマンドまたは証跡

DeepEval/pytest-style regression
Cortex Analyst evaluations / verified queries
dbt unit tests
dbt-expectations
dbt build/test target run。

何を証明するか

質問回答品質とKPI定義の回帰を、ローカルfixtureと実Cortex/verified query候補の二層で見る設計。dbtの粒度、null、重複、期待値をより細かく固定する。

何を証明しないか

現時点のローカル評価だけではCortex実応答、Snowflake実データ、実環境dbt build/test、回答品質の本番保証は証明しない。

再利用先

data-kpi-correctness-reviewer、test-gap-reviewer、Semantic Views、Golden Eval、dbt Projects。

関連ノードまたはレーン

dbt staging/marts/tests、Semantic KPI Model、Cortex Analyst、Golden Eval、CI/CD品質ゲート。

次アクションまたはブロッカー

まずローカル評価をCIで扱える形へ整理し、次にverified queryやCortex Analyst evaluationsの実行条件を分けて設計する。

カテゴリ: 観測性 / Trace Store 証跡: ADR候補

AI_OBSERVABILITY_EVENTS比較ADR / Trace Store

現在のプロジェクト状況

自作Trace Store路線の契約と公開説明はあるが、Snowflake-nativeの AI_OBSERVABILITY_EVENTS などで代替できないかの比較ADRはまだない。

使うべきか

使う。自作トレース保存は学習や承認ゲート連動に価値がある一方、Snowflake-native observabilityで足りるなら運用を軽くできる。

コマンドまたは証跡

ADR / design note
AI observability source comparison
Trace Store schema contract
承認ゲート連動の必要性。

何を証明するか

なぜ自作Trace Storeを残すのか、またはSnowflake-native observabilityへ寄せるのかを、監査、承認連動、学習目的、ローカル証跡性、運用コストの軸で判断したこと。

何を証明しないか

実Snowflakeテーブル書き込み、AI_OBSERVABILITY_EVENTSの本番利用成功、Cortex実行、全トレース項目の網羅性は証明しない。

再利用先

Trace Store、AI Observability、Human Review、運用証跡、アーキテクチャADR。

関連ノードまたはレーン

トレース保存、Snowpark評価/トレース補強、Cortex Agents、AI Observability。

次アクションまたはブロッカー

現行Trace Storeの目的を棚卸しし、Snowflake-native observabilityで代替できる項目と自作で残す項目をADR化する。

カテゴリ: 整形 / レビュー前段 証跡: pre-commit候補

pre-commit整形レイヤー / レビュー判断との分離

現在のプロジェクト状況

観点一覧と子スキルでは、整形はレビュワーの仕事ではなくpre-commit/CI checkに寄せる方針を追加した。実際のpre-commit設定としては未整備の範囲が残る。

使うべきか

使う。空白、改行、import順、SQL整形のように機械が一意に直せるものをレビュワーコメントへ混ぜると、受理率や見逃しテーマの信号が薄くなる。

コマンドまたは証跡

prettier --check
ruff format --check
sqlfluff fix/check
pre-commit hook / CI check。

何を証明するか

レビュー前に機械的な整形差分がなく、レビュワーは命名、責務、複雑性、コメント品質、契約、証跡境界へ集中できること。

何を証明しないか

命名の妥当性、設計の良さ、責務分離、可読性、業務ロジックの正しさは証明しない。これらはLLM/人間レビューの対象として残す。

再利用先

pre-commit、CI品質ゲート、coupling-boundary-reviewer、architecture-intent-boundary-reviewer。

関連ノードまたはレーン

GitHub Actions / CI/CD品質ゲート、レビュワーサブエージェント、実装レーン。

次アクションまたはブロッカー

このrepoの実ファイル構成に合わせて、Prettier/Ruff/sqlfluffの対象範囲とCI fail条件を決める。レビュー中に自動整形でdiffを書き換えない。

このプロジェクトで使う順序

最初からすべてを実環境E2Eにしない。安い検知で契約を固め、実環境と利用者向け確認は別証跡として積む。

1. 静的検査 / コンパイル

HTML、ドキュメント、構成図、dbt解析/コンパイルで構造破損を先に止める。

2. 契約 / フィクスチャ

シード、マート、通知、ワークフロー状態の契約をローカルフィクスチャで固定する。

3. 実環境結合

Snowflake、Backlog、Slack、Cortexなどはターゲットと実ログを添えて別証跡にする。

4. 利用者向け評価

ゴールデン評価、Streamlit、Cortex回答の品質は、ユーザーが見る経路として検証する。