Protected session capture: `Parse agent logs for step summary` fails when the engine step never ran

オープン 初心者向け
#76,936 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
78/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
github-actions, go, javascript
領域
ci-cd, testing

調査の方向性

pkg/workflow/compiler_yaml_ai_execution.go の generateLogParsing と近くにあるコンパイラのテストを読んでください。保護されたキャプチャパーサー ID の扱いを確認し、条件付きパースステップと、他のエンジンで動作が変わらないことをカバーするテストを追加してください。両方のケースが検証され、保護されたキャプチャパーサーが steps.agentic_execution.outcome が skipped の場合にのみスキップされることを確認できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

ai-inspected

This issue was posted by Claude Code using claude-opus-5-5 on behalf of David.

Symptom

With protected-session-capture: true, a step that fails before the engine step (a failed PR checkout, a custom pre-agent gate that exits 1) leaves a second error on the agent job:

ERR_VALIDATION: AWF protected session capture could not be verified or published; no shared-log fallback is permitted

The engine step is skipped, so no capture can exist. The error reads as a capture integrity failure and hides the step that actually failed.

Example on v1.2.1 with the pydantic-ai engine: https://github.com/pydantic/pydantic-ai/actions/runs/43072677386. Checkout PR branch fails, Execute Pydantic AI CLI is skipped, and Parse agent logs for step summary fails with the error above.

Cause

generateLogParsing emits the parse step with an unconditional if: always():
https://github.com/github/gh-aw/blob/e478cc24ba638ef0668efd15d244daa4c1b0c405/pkg/workflow/compiler_yaml_ai_execution.go#L252-L254

With protected capture on, runLogParser calls readProtectedCommandOutput on GH_AW_AGENT_OUTPUT before any parsing:
https://github.com/github/gh-aw/blob/e478cc24ba638ef0668efd15d244daa4c1b0c405/actions/setup/js/log_parser_bootstrap.cjs#L282

Its fs.lstatSync throws on the capture directory AWF never created:
https://github.com/github/gh-aw/blob/e478cc24ba638ef0668efd15d244daa4c1b0c405/actions/setup/js/protected_command_output.cjs#L41

The catch block reports that as an unverifiable capture:
https://github.com/github/gh-aw/blob/e478cc24ba638ef0668efd15d244daa4c1b0c405/actions/setup/js/log_parser_bootstrap.cjs#L666-L676

Proposed fix

In generateLogParsing, when the engine has protected session capture enabled (the case protectedSessionCaptureParserID already handles), emit:

if: always() && steps.agentic_execution.outcome != 'skipped'

Keep if: always() for every other engine. Add a compiler test that asserts the new condition for a protected-capture engine and the unchanged one otherwise.

Why this cannot mask a real missing capture

AWF writes the capture only inside the agentic_execution step. If that step started at all (success, failure or cancelled), its outcome is not skipped, the parse step runs, and readProtectedCommandOutput fails closed exactly as today. The Actions runner sets the outcome, so no step in the job can change it. Only the case where no capture can exist is skipped.

The steps that already require steps.parse_agent_logs.outcome == 'success' (Ingest agent output and the agent output uploads) are skipped today when the parse step fails, and stay skipped.

主要言語
Go
スター
5.6k
フォーク
625
平均マージ
5時間 39分
マージ済み PR(30日)
796

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

github/gh-aw のほかの issue

github/gh-aw の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。