Skip to content

Add report_incomplete safe output type to prevent tool-failure comments from being classified as successful runs#24796

Merged
pelikhan merged 5 commits intomainfrom
copilot/fix-gh-aw-verdict-handling
Apr 6, 2026
Merged

Add report_incomplete safe output type to prevent tool-failure comments from being classified as successful runs#24796
pelikhan merged 5 commits intomainfrom
copilot/fix-gh-aw-verdict-handling

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 6, 2026

When an agent posts a comment describing a tool failure (e.g., MCP crash, missing auth, 404 on private repo), gh-aw classifies the run as successful if the agent exited 0 and emitted any safe output. This makes a failure narrative indistinguishable from a real review verdict.

New report_incomplete safe output type

A first-class signal agents can emit when a task cannot be completed due to infrastructure or tool failures. The handler itself succeeds (the signal is valid); handle_agent_failure.cjs detects it and activates failure handling regardless of agent exit code or other outputs emitted alongside it.

report_incomplete is a built-in safe output with the same level of support as noop, missing_tool, and missing_data.

Schema:

  • reason (required, string ≤1024 chars) — why the task could not be performed
  • details (optional, string ≤65000 chars) — extended diagnostics

Configuration (same options as missing_tool/missing_data):

  • create-issue (default: true) — create/update a GitHub tracking issue for incomplete runs
  • title-prefix (default: "[incomplete]") — prefix for tracking issue titles
  • labels — labels to add to created issues

Example usage in a prompt:

If required tools are unavailable, call report_incomplete with a concise reason.
Do not use add_comment to describe infrastructure failures.

Changes

handle_agent_failure.cjs

  • Scans raw agent output for report_incomplete items; sets hasReportIncomplete = true
  • hasReportIncomplete is added to the early-return guard — failure handling always activates when present
  • hasOnlyNoopOutputs bypass is conditioned on !hasReportIncomplete so noop+incomplete correctly escalates
  • New buildReportIncompleteContext() surfaces reasons in failure issues/comments with a note that any co-emitted safe outputs describe the failure state, not a completed action

safe_output_handler_manager.cjs

  • Adds report_incomplete and create_report_incomplete_issue to HANDLER_MAP
  • collectMissingMessages now includes report_incomplete items for footer generation

missing_info_formatter.cjs / missing_messages_helper.cjs

  • formatReportIncomplete and generateReportIncompleteSection for HTML details sections in safe output footers
  • generateMissingInfoSections updated to include incomplete signals

create_report_incomplete_issue.cjs (new)

  • Issue-creation handler using buildMissingIssueHandler, matching create_missing_tool_issue.cjs pattern

Go compiler (pkg/workflow/)

  • ReportIncompleteConfig is a type alias for IssueReportingConfig (same as MissingToolConfig/MissingDataConfig), enabling create-issue, title-prefix, and labels config fields
  • create_report_incomplete_issue added to handler registry
  • report-incomplete property added to main_workflow_schema.json
  • 'Record Incomplete' conclusion job step with GH_AW_REPORT_INCOMPLETE_* env vars and incomplete_count output, mirroring the 'Record Missing Tool' step
  • Added to SafeOutputsConfig, imports merge, internalSafeOutputs
  • Enabled by default when safe-outputs is configured (same as noop)
  • Validation config: defaultMax: 5, sanitized reason and details fields

safe_outputs_tools.json (both copies)

  • New MCP tool definition for report_incomplete so agents can call it via the safe-outputs server


✨ PR Review Safe Output Test - Run 24016631773

💥 [THE END] — Illustrated by Smoke Claude · ● 226.2K ·

Adds a first-class report_incomplete safe output type that allows agents to
signal that a task could not be completed due to infrastructure or tool
failures (e.g., MCP crash, missing auth, inaccessible resources).

Key changes:
- New report_incomplete_handler.cjs: records the incompletion reason/details
- safe_outputs_tools.json (both copies): add report_incomplete MCP tool definition
- safe_output_handler_manager.cjs: add report_incomplete to HANDLER_MAP
- handle_agent_failure.cjs: detect report_incomplete in agent output and
  activate failure handling even when agent exits 0 and emitted other outputs
- pkg/workflow/report_incomplete.go: ReportIncompleteConfig struct and parser
- pkg/workflow/compiler_types.go: add ReportIncomplete field to SafeOutputsConfig
- pkg/workflow/safe_outputs_validation_config.go: add validation rules
- pkg/workflow/safe_outputs_tools.go: add to internalSafeOutputs
- pkg/workflow/safe_outputs_config.go: enable by default when safe-outputs configured
- pkg/workflow/compiler_safe_outputs_config.go: add to handler registry
- pkg/workflow/imports.go: add case and merge support
- safe_output_validation_config_test.go: add to expected types
- report_incomplete_handler.test.cjs: 11 new tests for handler

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/ff7092cf-8e1f-482d-8853-bc91dda8aa34

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix gh-aw handling of comment-based review verdicts Add report_incomplete safe output type to prevent tool-failure comments from being classified as successful runs Apr 6, 2026
Copilot AI requested a review from pelikhan April 6, 2026 01:11
@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented Apr 6, 2026

@copilot this is a builtin safe output like noop or missing_data or missing_tool . Provide the same level of support

…_data

- Change ReportIncompleteConfig to type alias for IssueReportingConfig
  (adds create-issue, title-prefix, labels support like MissingToolConfig)
- parseReportIncompleteConfig uses parseIssueReportingConfig
- Default config now has CreateIssue: true (matching missing_tool/missing_data)
- Add create_report_incomplete_issue.cjs handler using buildMissingIssueHandler
- Add create_report_incomplete_issue to HANDLER_MAP and compiler registry
- Add report-incomplete property to main_workflow_schema.json (required to compile)
- Add 'Record Incomplete' conclusion job step with GH_AW_REPORT_INCOMPLETE_* env vars
- Add incomplete_count output to conclusion job
- Update collectMissingMessages to include report_incomplete items
- Update missing_info_formatter.cjs with formatReportIncomplete and
  generateReportIncompleteSection; update generateMissingInfoSections
- Update missing_messages_helper.cjs type annotation to include reportIncomplete
- Add TestReportIncompleteStepInConclusionJob test

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c7f6a31b-305d-4de3-839e-58d4f4eac40a

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 6, 2026

@copilot this is a builtin safe output like noop or missing_data or missing_tool . Provide the same level of support

Done in ba3e04e. report_incomplete now has the same level of support as missing_tool, missing_data, and noop:

  • ReportIncompleteConfig is a type alias for IssueReportingConfig (same as MissingToolConfig), with create-issue, title-prefix, and labels fields
  • create_report_incomplete_issue.cjs handler using buildMissingIssueHandler
  • create_report_incomplete_issue in HANDLER_MAP and compiler registry
  • report-incomplete property added to main_workflow_schema.json
  • 'Record Incomplete' conclusion job step with GH_AW_REPORT_INCOMPLETE_* env vars and incomplete_count output
  • collectMissingMessages now includes report_incomplete items
  • missing_info_formatter.cjs with formatReportIncomplete and generateReportIncompleteSection
  • missing_messages_helper.cjs updated type to include reportIncomplete

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw HSxKGUGg8p5k (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw --property=CPUQubuild --property=MemoryHigh=170M 64/pkg/tool/linux_amd64/vet -20 bin/WALinuxAgent-2.15.1.3-py3.12.egg -collect-logs 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha /home/REDACTED/work/gh-aw/gh-aw/.github/workflows config /usr/bin/git remote.origin.urgit 9225587/b046/vetrev-parse $name) { has--show-toplevel git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows config /opt/hostedtoolcache/go/1.25.8/x64/bin/bash remote.origin.urgit 9225587/b205/vetrev-parse 64/pkg/tool/linu--show-toplevel bash (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha ithub/workflows x_amd64/vet /usr/bin/chmod tierignore --local ed } } chmod &#43;x k/gh-aw/gh-aw/.github/workflows x_amd64/vet /usr/bin/git rt committer.name x_amd64/compile git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha tions-lock.json from .github/aw to pkg/workflow/--ignore-path -buildtags /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linu--log-level=error -errorsas -ifaceassert -nilfunc /opt/hostedtoolcrev-parse -ato�� tted&#34; -buildtags repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -errorsas -ifaceassert -nilfunc bash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --noprofile ache/go/1.25.8/x-f /usr/bin/git ./../pkg/workflogit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel iptables /usr/bin/git f/tags/eac588ad8git security es/.bin/sh git rev-�� /ref/tags/v8 git /usr/bin/gh ithub/workflows (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel ll 2&gt;&amp;1 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha xterm-color 64/pkg/tool/linu../../../**/*.json /usr/bin/git w/js/**/*.json&#39; git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha -aw-actions/git/ref/tags/v1.0.0 bash /usr/bin/git --noprofile -tests repository(owne--show-toplevel git rev-�� --show-toplevel bash /usr/bin/git ithub/workflows (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha k/gh-aw/gh-aw/.github/workflows config /usr/bin/git remote.origin.urgit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /opt/hostedtoolcache/node/24.14.1/x64/bin/node --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha xterm-color 64/pkg/tool/linu../../../**/*.json /usr/bin/git w/js/**/*.json&#39; git (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha graphql -f /home/REDACTED/go/bin/node -f owner=github -f node /opt�� view -- /usr/bin/docker name 9225587/b029/vetrev-parse .cfg docker (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha graphql -f er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel -f owner=github -f node /opt�� view -- /usr/bin/git name 9225587/b028/vetrev-parse odules/npm/node_--show-toplevel git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq .object.sha ithub/workflows /home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/viteowner=github /home/REDACTED/node_modules/.bin/node node --conditions ed } } node /hom�� ithub/workflows **/*.cjs /home/REDACTED/work/gh-aw/gh-aw/node_modules/.bin/sh **/*.json --ignore-path ../../../.pretti--show-toplevel sh (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq .object.sha ath ../../../.pr**/*.json .cfg 64/pkg/tool/linu../../../.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq .object.sha ath ../../../.pr**/*.json (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .visibility from .github/aw to pkg/workflow/--ignore-path (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq .object.sha k/gh-aw/gh-aw/.github/workflows 64/pkg/tool/linux_amd64/vet /usr/bin/git --noprofile (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq .object.sha --noprofile x_amd64/vet me: String!) { repository(owner: $owner, name:-f --local ithub/workflows/rev-parse x_amd64/vet node /hom�� ithub/workflows **/*.cjs /home/REDACTED/work/_temp/uv-python-dir/sh l --ignore-path ed } } sh (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq .object.sha ithub/workflows x_amd64/vet (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq .object.sha --show-toplevel /opt/hostedtoolcconfig /usr/bin/git /tmp/go-build355git -trimpath de/node/bin/sh git rev-�� --show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linu**/*.cjs /usr/bin/git &#39;**/*.ts&#39; &#39;**/*./bin/sh /tmp/go-build355-c r: $owner, name:git-upload-pack &#39;origin&#39; git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha (http block)
  • https://api.github.com/repos/githubnext/agentics/git/ref/tags/-
    • Triggering command: /usr/bin/gh gh api /repos/githubnext/agentics/git/ref/tags/- --jq .object.sha --noprofile (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq .object.sha /tmp/go-build355-f -trimpath 1/x64/lib/node_m-f -p internal/fuzz -lang=go1.25 /opt/hostedtoolcghcr.io/github/serena-mcp-server:latest -uns�� &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-p-f /tmp/go-build3559225587/b143/vetowner=github 3276008/b001/workflow.test go1.25.8 -c=4 -nolocalimports 3276008/b001/worrev-parse (http block)

If you need me to access, download, or install something from one of these locations, you can either:

@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented Apr 6, 2026

@copilot review how missing_tool / missing_data is handled and make sure report_incomplete is well handled.

…nd manifest exclusion

- safe_output_manifest.cjs: add report_incomplete to NOT_LOGGED_TYPES (metadata
  signal like missing_tool/missing_data — should not be logged as a GitHub item)
- safe_output_manifest.test.cjs: assert report_incomplete is in NOT_LOGGED_TYPES
  and extractCreatedItemFromResult returns null for it
- safe_output_handler_manager.cjs: fix stale comment about collecting messages
- safe_output_handler_manager.test.cjs: add test for report_incomplete collection
  in result.missings.reportIncomplete; add reportIncomplete to empty-array assertion

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/cce3df3d-5fed-482a-867d-4d2c8a32dd80

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 6, 2026

@copilot review how missing_tool / missing_data is handled and make sure report_incomplete is well handled.

Done in 36a1c5f. Comparison findings and fixes:

Gap found: report_incomplete was missing from NOT_LOGGED_TYPES in safe_output_manifest.cjs. Without this, successful report_incomplete handler results were passed through extractCreatedItemFromResult and logged to the manifest as if they created GitHub items — incorrect behavior since report_incomplete is a metadata signal like noop/missing_tool/missing_data.

Fixed:

  • safe_output_manifest.cjs: added report_incomplete to NOT_LOGGED_TYPES with updated doc comment
  • safe_output_manifest.test.cjs: asserts NOT_LOGGED_TYPES.has("report_incomplete") and extractCreatedItemFromResult("report_incomplete", ...) returns null
  • safe_output_handler_manager.test.cjs: added test verifying report_incomplete signals are collected into result.missings.reportIncomplete; updated empty-array assertion to include reportIncomplete
  • safe_output_handler_manager.cjs: fixed stale comment that still said "Collect missing_tool and missing_data messages first"

@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented Apr 6, 2026

@copilot use w3c-spec-writer to update the safe outputs specification .md

- New §7.3 entry for report_incomplete type with MCP Tool Schema,
  Operational Semantics, Configuration Parameters, Security Requirements,
  Required Permissions, and Notes — formatted consistently with noop,
  missing_tool, and missing_data
- Version bumped 1.15.0 → 1.16.0, publication date updated to 2026-04-06
- §2.1 C2 conformance: added missing_tool, missing_data, report_incomplete
  to mandatory types list
- §10.2 Ordering: system types bullet now lists all four system types
- §12 conformance checklist: mandatory types extended to include
  missing_tool, missing_data, report_incomplete

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/88c3a0dc-7b62-409d-bf7f-5d7bc6799ab3

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 6, 2026

@copilot use w3c-spec-writer to update the safe outputs specification .md

Done in 772a791. The Safe Outputs MCP Gateway Specification (v1.16.0) now documents report_incomplete:

  • New §7.3 entry for report_incomplete with MCP Tool Schema, Operational Semantics, Configuration Parameters, Security Requirements, Required Permissions, and Notes — formatted at the same level of detail as noop
  • §2.1 C2 conformance mandatory types updated to include missing_tool, missing_data, report_incomplete
  • §10.2 Ordering: system types bullet updated to list all four system types
  • §12 conformance checklist extended accordingly

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

✅ All tools validated successfully! Agent Container Smoke Test confirms agent container is ready.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing...

@github-actions github-actions bot removed the smoke label Apr 6, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

🌑 The shadows whisper... Smoke Codex failed. The oracle requires further meditation...

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

Agent Container Tool Check

Tool Status Version
bash 5.2.21
sh available
git 2.53.0
jq 1.7
yq 4.52.5
curl 8.5.0
gh 2.89.0
node 20.20.2
python3 3.12.3
go 1.24.13
java 21.0.10
dotnet 10.0.201

Result: 12/12 tools available ✅

Overall Status: PASS

🔧 Tool validation by Agent Container Smoke Test · ● 162.7K ·

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

Smoke Test: Copilot - 24016631769 (triggered by PR #24796)

Test Result
GitHub MCP
MCP Scripts GH CLI
Serena MCP ⚠️
Playwright
Web Fetch
File Writing
Bash Tool
Discussion Interaction
Build gh-aw
Discussion Creation
Workflow Dispatch
PR Review

Overall: ⚠️ PARTIAL PASS (11/12)

@pelikhan @Copilot

📰 BREAKING: Report filed by Smoke Copilot · ● 1.1M ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #24796 adds report_incomplete as a new safe output type across all compiled workflows. The changes are consistent and well-structured — each workflow gets the new schema validation block and a Record Incomplete conclusion step. The incomplete_count output is properly wired through. No issues found.

📰 BREAKING: Report filed by Smoke Copilot · ● 1.1M

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@pelikhan pelikhan marked this pull request as ready for review April 6, 2026 02:55
Copilot AI review requested due to automatic review settings April 6, 2026 02:55
@pelikhan pelikhan merged commit dcae774 into main Apr 6, 2026
210 of 214 checks passed
@pelikhan pelikhan deleted the copilot/fix-gh-aw-verdict-handling branch April 6, 2026 02:56
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 6, 2026

Smoke Test Results — Run 24016631773

Core (#1–12): ✅✅✅✅✅❌✅✅✅✅✅✅
PR Review (#13–19): ✅✅✅⚠️✅✅⚠️

Overall: PARTIAL (Tavily ❌ rate limit, 2 skipped ⚠️)

💥 [THE END] — Illustrated by Smoke Claude · ● 226.2K ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💥 Automated smoke test review - all systems nominal!

💥 [THE END] — Illustrated by Smoke Claude · ● 226.2K

mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/config.json << 'GH_AW_SAFE_OUTPUTS_CONFIG_90d43679201c8362_EOF'
{"add_comment":{"max":10},"create_discussion":{"expires":24,"fallback_to_issue":true,"max":2},"create_issue":{"expires":48,"group":true,"labels":["cookie"],"max":5},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"push_repo_memory":{"memories":[{"dir":"/tmp/gh-aw/repo-memory/default","id":"default","max_file_count":100,"max_file_size":102400,"max_patch_size":10240}]}}
{"add_comment":{"max":10},"create_discussion":{"expires":24,"fallback_to_issue":true,"max":2},"create_issue":{"expires":48,"group":true,"labels":["cookie"],"max":5},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"push_repo_memory":{"memories":[{"dir":"/tmp/gh-aw/repo-memory/default","id":"default","max_file_count":100,"max_file_size":102400,"max_patch_size":10240}]},"report_incomplete":{}}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new report_incomplete safe output is correctly added to the config map here. This ensures agents can signal task incompletion distinctly from success, which is a key improvement over the previous behavior where tool failures were misclassified as successful runs.

@@ -959,6 +975,7 @@ jobs:
group: "gh-aw-conclusion-agent-performance-analyzer"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The incomplete_count output mirrors the pattern of noop_message and tools_reported — good consistency. Downstream jobs can now gate on this output to detect incomplete agent runs without parsing raw output.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new first-class report_incomplete safe output type so agents can explicitly signal “could not complete due to tool/infra failure,” ensuring gh-aw failure handling activates even when the agent exits 0 and emits other safe outputs.

Changes:

  • Go compiler: adds report-incomplete config plumbing (types, schema, validation), enables it by default when safe-outputs is present, and wires a “Record Incomplete” conclusion step + incomplete_count output.
  • JS safe-outputs runtime: registers report_incomplete + create_report_incomplete_issue, collects/prints incomplete signals in footers, and updates the manifest/tool definitions.
  • Regenerates many .lock.yml workflows to include the new handler config and conclusion step.
Show a summary per file
File Description
pkg/workflow/safe_outputs_validation_config.go Adds validation/sanitization rules for report_incomplete fields.
pkg/workflow/safe_outputs_tools.go Marks report_incomplete as an internal/system safe output (not user-selectable).
pkg/workflow/safe_outputs_config.go Enables/parses report-incomplete configuration (default-on behavior).
pkg/workflow/safe_output_validation_config_test.go Ensures report_incomplete appears in validation-config JSON output.
pkg/workflow/report_incomplete.go Introduces ReportIncompleteConfig alias + parser hook.
pkg/workflow/notify_comment.go Adds “Record Incomplete” step in the conclusion job and exposes incomplete_count output.
pkg/workflow/noop_in_conclusion_test.go Adds compilation test ensuring the conclusion step/output are generated for report-incomplete.
pkg/workflow/imports.go Merges/imports report-incomplete safe output config across imports.
pkg/workflow/compiler_types.go Adds ReportIncomplete to SafeOutputsConfig.
pkg/workflow/compiler_safe_outputs_config.go Registers report_incomplete + create_report_incomplete_issue handlers into the handler registry.
pkg/parser/schemas/main_workflow_schema.json Adds safe-outputs.report-incomplete schema and defaults/disable option.
actions/setup/js/safe_outputs_tools.json Adds MCP tool definition for report_incomplete.
actions/setup/js/safe_output_manifest.test.cjs Extends manifest tests to include report_incomplete in NOT_LOGGED_TYPES behavior.
actions/setup/js/safe_output_manifest.cjs Adds report_incomplete to NOT_LOGGED_TYPES list.
actions/setup/js/safe_output_handler_manager.test.cjs Adds test that report_incomplete signals are collected alongside other missing/message types.
actions/setup/js/safe_output_handler_manager.cjs Registers handlers and collects report_incomplete signals for footer generation.
actions/setup/js/report_incomplete_handler.cjs Implements handler factory for report_incomplete safe output messages.
actions/setup/js/missing_messages_helper.cjs Extends missing-message storage/types to include report_incomplete.
actions/setup/js/missing_info_formatter.cjs Adds formatting + HTML details section generation for incomplete signals.
actions/setup/js/create_report_incomplete_issue.cjs Adds issue-creation handler for incomplete runs (tracking issue/comment aggregation).
.github/workflows/workflow-generator.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/video-analyzer.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/typist.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/test-dispatcher.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/terminal-stylist.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/super-linter.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/sub-issue-closer.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/step-name-alignment.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/smoke-codex.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/smoke-agent-scoped-approved.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/smoke-agent-public-none.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/smoke-agent-all-none.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/smoke-agent-all-merged.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/security-review.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/security-compliance.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/scout.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/research.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/repository-quality-improver.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/repo-tree-map.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/repo-audit-analyzer.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/release.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/plan.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/pdf-summary.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/notion-issue-summary.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/lockfile-stats.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/issue-triage-agent.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/issue-monster.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/grumpy-reviewer.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/gpclean.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/go-pattern-detector.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/github-remote-mcp-auth-test.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/duplicate-code-detector.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/draft-pr-cleanup.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/dev.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/dev-hawk.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/dependabot-burner.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-syntax-error-quality.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-semgrep-scan.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-security-red-team.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-secrets-analysis.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-regulatory.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-observability-report.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-malicious-code-scan.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-file-diet.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-fact.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-compiler-quality.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-cli-tools-tester.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-choice-test.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/daily-assign-issue-to-user.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/commit-changes-analyzer.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/breaking-change-checker.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/brave.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/bot-detection.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/archie.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/ai-moderator.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.
.github/workflows/agent-persona-explorer.lock.yml Regenerated workflow lock to include report_incomplete handlers + conclusion step/output.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 176/199 changed files
  • Comments generated: 1

Comment on lines +20 to +27
const main = buildMissingIssueHandler({
handlerType: HANDLER_TYPE,
defaultTitlePrefix: "[incomplete]",
defaultLabels: ["agentic-workflows"],
itemsField: "incomplete_signals",
templatePath: `${process.env.RUNNER_TEMP}/gh-aw/prompts/missing_tool_issue.md`,
templateListKey: "incomplete_signals_list",
buildCommentHeader: runUrl => [`## Incomplete Run Reported`, ``, `The agent reported that the task could not be completed during [workflow run](${runUrl}):`, ``],
Copy link

Copilot AI Apr 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

templatePath points to missing_tool_issue.md, but this handler renders templateListKey: "incomplete_signals_list". The missing_tool_issue.md template only contains {missing_tools_list}, so incomplete issues will be created with an unresolved placeholder. Add a dedicated template (e.g. report_incomplete_issue.md) containing {incomplete_signals_list} and update templatePath (or change templateListKey to match the referenced template).

Copilot uses AI. Check for mistakes.
This was referenced Apr 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

gh-aw treats a comment-based review verdict as successful even when the agent only reported tool failures

3 participants