mcpField
S
senpi-qa

senpi-qa

github.com/code-yeongyuテスト・品質70.4k78 回インストール今日更新
リポジトリ

senpi-qa について

omo Senpi アダプターとタスクエンジン向けの QA スキルです。単体テストだけに頼らず、実際の senpi バイナリを使うライブテスト、隔離されたエージェントディレクトリ、ローカル証跡の管理手順を定めています。

主な機能

  1. 01senpi によるライブ QA
  2. 02アダプターとタスクのライフサイクル検証
  3. 03エージェントディレクトリの隔離
  4. 04解決済みパスへの証跡保存
  5. 05ライブ検証と単体テストの区別

活用シーン

  1. 01ライブセッションでのアダプター動作確認
  2. 02タスクの開始、ストリーミング、終了状態の検証
  3. 03チームへの配信と再起動復旧の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/code-yeongyu/oh-my-openagent --skill senpi-qa

インストール後、Claude Code で/senpi-qaを入力して読み込まれたか確認します。

同梱ファイルscripts/resolve-evidence-dir.mjsscripts/resolve-evidence-dir.test.mjs

詳細

Senpi QA

REAL な senpi バイナリを実際に実行して、omo Senpi アダプター(packages/omo-senpi/)とタスクエンジン (packages/senpi-task/)の QA を行います。ここではユニットテストは実地 QA として認められません。bun run test:senpi はパッケージのゲートであり、packages/omo-senpi/scripts/qa/ のドライバーがハーネスの証明になります。

基本ルール

  • 証拠を保存するパスは必ず 1 か所です。 すべての成果物を .omo/evidence/omo-senpi-adapter/<slug>/ に保存してください。scripts/resolve-evidence-dir.mjs でパスを決定し、それ以外は使わないでください。パスを手入力すると、実行結果が local-ignore/qa-evidence/ や、ワークツリーのルートにある .qa-evidence/ のような場所に保存されることがあります。これらは無視対象ルートの外にあるため、誤ってコミットされてしまいます(#8703)。
  • 証拠はローカルにとどめます。 .omo/evidence/ は gitignore 対象であり、追跡対象の証拠を監査するテストでは、証拠パスが追跡対象になっているとビルドが失敗します。成果物に対して git add -f を実行しないでください。PR の本文に概要と決定的な抜粋を記載します。
  • 実際のエージェントディレクトリには手を加えません。 ライブドライバーは独自の隔離された SENPI_CODING_AGENT_DIR を構築し、呼び出し元から渡されたものは意図的に無視するため、サンドボックスとして ~/.senpi/agent が使われることはありません。ドライバーの realSenpiUntouched/変更パスのフィールドと、隔離されたエージェントディレクトリのパスを報告してください。ディレクトリ全体のダイジェストは補助的な証拠として扱い、それだけでは証明になりません。
  • バイナリがない場合は、何も報告しないのではなく SKIP です。 senpi が見つからない場合、ライブドライバーは実際のホームディレクトリにフォールバックせず、最終 JSON で SKIP または FAIL を報告します。SKIP は合格ではありません。証拠 README にその旨を記載してください。
  • キャプチャした JSON が証拠です。 ディスク上にファイルがなければ QA は行われていないため、コミットもプッシュもできません。このファイルは実行したマシン上での実行を証明するものであり、コミットに含めるものではありません。

まず証拠ディレクトリを決定する

ev="$(node .agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs \
  --repo-root "$(git rev-parse --show-toplevel)" --slug <YYYYMMDD>-<short-slug>)"
mkdir -p "$ev"

リゾルバーは絶対パスを返し、何も作成しないため、ディレクトリをいつ作成するかは呼び出し元が決めます。slug は小文字、数字、ハイフンで構成される相対パスの 1 セグメントです(20260820-senpi-qa-contract)。区切り文字、./..、パストラバーサル、絶対パス、git ルート以外のパスは拒否されます。拒否時はゼロ以外の終了コードと、問題のある slug を示すメッセージが返されます。

ルーター:ケースを選ぶ

変更内容実行コマンド証明できること
アダプターコード全般(高速な前提条件チェック)node packages/omo-senpi/scripts/qa/drive.mjs --self-testドライバーと隔離ハーネス自体が動作すること
ライブセッションに到達するアダプターの配線node packages/omo-senpi/scripts/qa/drive.mjsプラグインを読み込み、エージェントディレクトリを隔離した状態での実際の senpi 実行と、実ホームディレクトリに起因する変更がないこと
タスクのライフサイクル(単一タスク+バッチ)SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/task-e2e.mjsライブタスクの開始/ストリーム/終端状態
チームの配信、シャットダウン、再取得、再起動時のリカバリーSENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/team-e2e.mjs注入の配信と、重複のないリカバリー
タスク RPC ドライバーのスクリプトnode packages/omo-senpi/scripts/qa/task-rpc-e2e.mjs --self-testRPC サーフェスの契約
タスクへのスキル配信SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/task-load-skills-e2e.mjsスキルが子タスクに届くこと
継続動作node packages/omo-senpi/scripts/qa/probe-continuation.mjsターンが想定どおり続くこと
DAG ステートマシン/ランナーbun test packages/senpi-taskユニットテストとカオス不変条件(ライブ実行の証明ではありません)

次のように、ドライバーの出力先に決定したディレクトリを指定します。

TASK_E2E_OUT_DIR="$ev/live-task-dag" SENPI_BIN="$(command -v senpi)" \
  node packages/omo-senpi/scripts/qa/task-e2e.mjs

パッケージのゲート

tsgo --noEmit -p packages/omo-senpi/tsconfig.json
bun run test:senpi

エビデンス README を作成する

各実行では、再実行しなくてもレビュー担当者が読める $ev/README.md が残ります。 必須セクションは、ルートの AGENTS.md に記載されたリポジトリ全体のエビデンスルールです (何をテスト/観察したか、なぜそれで十分なのか、 何を省略したか)。Senpi では、ドライバーの変更パス/分離フィールドとサンドボックスのエージェントディレクトリのパスを記録します。一部のドライバーはサンドボックスのパスを削除せずに報告するため、呼び出し元はタスク所有のサンドボックスをすべて削除し、クリーンアップレシートを作成する前に子 PID が終了状態にあることを確認する必要があります。

コメント