Self-Healing E2E テストガイド
GitHub Webhook → Self-Healing → PR コメント投稿までの E2E テストを実行する手順です。
概要
このガイドでは、以下のフローを1本通して確認します:
- モック Webhook を送信
- Self-Healing Service が実行される
- GuardianAgent がレビューを実行
- PR にコメントが投稿される
- ダッシュボードで履歴を確認
事前準備
1. Self-Healing 設定ファイルの確認
プロジェクトルートに .nexus/self_healing.config.json を作成(または確認):
{
"label": "self-healing",
"allowed_target_branches": ["main"],
"test_command": "pytest -q",
"allow_test_modification": false,
"allow_deletions": false
}
2. テスト用 PR の準備
GitHub 側でテスト用 PR を用意:
- 対象リポジトリ:
yourname/yourrepo - base branch: 設定ファイルの
allowed_target_branchesに合わせる(例:main) - HEAD がテスト失敗するような状態の PR を作成
- ラベル
self-healingを付ける(またはconfig.labelに合わせる) - HEAD SHA を取得:
cd /path/to/your/local/repo git rev-parse HEAD # → 例: 0123abcd4567ef89...
3. GitHub トークンの準備(オプション)
PR コメント投稿をテストする場合:
- GitHub Personal Access Token を作成
repoスコープを付与- 環境変数に設定:
export GITHUB_SELF_HEALING_TOKEN=ghp_xxxxxxxxxxxx
実行手順
1. NexusCore サーバの起動
cd /path/to/nexuscore-project
# 仮想環境を有効化
source myenv_linux/bin/activate # WSL/Linux
# または
.\venv\Scripts\activate # Windows
# 環境変数を設定
export NEXUS_PROJECT_ROOT=$(pwd)
export GITHUB_SELF_HEALING_TOKEN=<PR へのコメント投稿ができるトークン> # 可能なら
# Flask サーバを起動
python src/nexuscore/api/server.py
サーバが http://127.0.0.1:5001 で起動していることを確認。
2. モック Webhook の送信
別のターミナルで:
cd /path/to/nexuscore-project
source myenv_linux/bin/activate # 必要なら
python tools/mock_github_pr_webhook.py \
--url http://127.0.0.1:5001/api/github/webhook \
--repo-full-name yourname/yourrepo \
--pr-number 1 \
--head-sha 0123abcd4567ef89 \
--label self-healing \
--base-branch main
3. 期待される挙動
サーバ側ログ
ターミナルのサーバ側ログに以下が表示される:
INFO - GitHub webhook received: event=pull_request delivery=xxx
INFO - Processing self-healing for yourname/yourrepo PR #1 (head=0123abc)
INFO - Cloning repo: https://github.com/yourname/yourrepo.git -> ...
INFO - Running tests with command: pytest -q
...
PR コメント(GITHUB_SELF_HEALING_TOKEN が設定されている場合)
対象 PR に NexusCore のコメントが1件追加され、以下が表示される:
- Status:
fixed/not_fixed/no_issues/blocked_testsなどのステータス - Guardian Review セクション(GuardianAgent がレビューした場合):
- Status:
approvedまたはneeds_manual_review - Comment: GuardianAgent が生成した説明コメント
- Status:
- Patch Preview セクション:
diff ...形式でパッチの内容が表示
確認ポイント
1. PR コメントで確認すること
PR を開いて、Self-Healing コメントに以下が含まれているか確認:
- ✅ Status 行(
fixed/not_fixed/blocked_testsなど) - ✅ Guardian Review セクション(GuardianAgent が実行された場合)
- ✅ Patch Preview セクション(パッチが生成された場合)
- ✅ Run ID と Session ID
2. ローカルログ・履歴で確認すること
実行履歴ファイル
cat .nexus/history/self_healing.log.jsonl | tail -1 | jq .
確認項目:
statusが期待通り(fixed/not_fixedなど)details.guardian_status/details.guardian_commentが入っているdetails.patch_previewが入っている(パッチが生成された場合)
Streamlit ダッシュボード
./scripts/run_self_healing_dashboard.sh .
ブラウザで以下を確認:
- Total runs が増えている
- 最新の Run が表示されている
- Status Summary に新しいステータスが反映されている
- Recent Runs に詳細が表示されている
トラブルシューティング
Webhook が受け付けられない
症状: 404 Not Found または 405 Method Not Allowed
解決方法:
- サーバが起動しているか確認
- URL が正しいか確認(
/api/github/webhook) - Flask サーバのポート番号を確認(デフォルト: 5001)
ラベルが一致しない
症状: "PR does not meet criteria for self-healing (missing label, draft, etc.)"
解決方法:
- PR に
self-healingラベルが付いているか確認 - 設定ファイルの
labelと一致しているか確認 --labelオプションで正しいラベル名を指定
ブランチが許可されていない
症状: "Ignoring PR with base branch 'xxx' (allowed: ['main'])"
解決方法:
- PR の base ブランチが
allowed_target_branchesに含まれているか確認 --base-branchオプションで正しいブランチ名を指定- 設定ファイルの
allowed_target_branchesを確認
PR コメントが投稿されない
症状: Self-Healing は実行されるが PR にコメントが追加されない
解決方法:
GITHUB_SELF_HEALING_TOKENが設定されているか確認- トークンに
repoスコープが付与されているか確認 - GitHub API のレート制限に達していないか確認
テストが実行されない
症状: "Tests already passing. No self-healing needed." が返される
解決方法:
- テストが実際に失敗する状態になっているか確認
test_commandが正しいか確認- テストコマンドを手動で実行して確認
次のステップ
- 実際の GitHub リポジトリで Webhook を設定
- CI/CD パイプラインに統合
- カスタムエージェントの追加
- より複雑なテストケースの追加