From cd9854e0995361b1eec37152a665f3835aee5933 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:40:02 +0000 Subject: [PATCH 1/2] Initial plan From 03071370a0c4da6dd30f049975aeed1820fd5c37 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 15:13:42 +0000 Subject: [PATCH 2/2] fix: silently skip add_comment when no triggering context (schedule runs) - add_comment.cjs: add `skipped: true` to max count reached return so exceeding the per-run comment limit is a graceful skip, not a failure - safe_output_handler_manager.cjs: log all skipped messages (not just code-push types) so add_comment skips are visible in CI logs; add a "Skipped (no context or limit reached)" summary line for transparency - add_comment.test.cjs: assert `skipped: true` on the max-count result The core fix (returning skipped:true when target is "triggering" but no issue/PR context exists, e.g. schedule runs) was already in place in add_comment.cjs + safe_output_helpers.cjs. These changes improve logging visibility and extend the skipped semantics to the max-count path. Agent-Logs-Url: https://github.com/github/gh-aw/sessions/7679435a-c1b7-4a0c-b3d7-4204d76aafad Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/add_comment.cjs | 1 + actions/setup/js/add_comment.test.cjs | 1 + actions/setup/js/safe_output_handler_manager.cjs | 10 +++++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/actions/setup/js/add_comment.cjs b/actions/setup/js/add_comment.cjs index d8ae88b7736..72ed50ff224 100644 --- a/actions/setup/js/add_comment.cjs +++ b/actions/setup/js/add_comment.cjs @@ -330,6 +330,7 @@ async function main(config = {}) { core.warning(`Skipping add_comment: max count of ${maxCount} reached`); return { success: false, + skipped: true, error: `Max count of ${maxCount} reached`, }; } diff --git a/actions/setup/js/add_comment.test.cjs b/actions/setup/js/add_comment.test.cjs index 625f8e671e9..25438cef186 100644 --- a/actions/setup/js/add_comment.test.cjs +++ b/actions/setup/js/add_comment.test.cjs @@ -2027,6 +2027,7 @@ describe("add_comment", () => { expect(result1.success).toBe(true); expect(result2.success).toBe(true); expect(result3.success).toBe(false); + expect(result3.skipped).toBe(true); expect(result3.error).toMatch(/max count/i); }); }); diff --git a/actions/setup/js/safe_output_handler_manager.cjs b/actions/setup/js/safe_output_handler_manager.cjs index 54b0c612220..6ba10b9bfb7 100644 --- a/actions/setup/js/safe_output_handler_manager.cjs +++ b/actions/setup/js/safe_output_handler_manager.cjs @@ -481,9 +481,7 @@ async function processMessages(messageHandlers, messages, onItemCreated = null) // Skipped results should NOT trigger fail-fast cancellation of subsequent messages. if (result && result.success === false && result.skipped === true && !result.deferred) { const msg = result.error || "Handler returned success: false with skipped: true"; - if (CODE_PUSH_TYPES.has(messageType)) { - core.info(`⏭ Message ${i + 1} (${messageType}) skipped — ${msg}`); - } + core.info(`⏭ Message ${i + 1} (${messageType}) skipped — ${msg}`); results.push({ type: messageType, messageIndex: i, @@ -1090,6 +1088,7 @@ async function main() { const skippedStandaloneResults = processingResult.results.filter(r => r.skipped && r.reason === "Handled by standalone step"); const skippedCustomJobResults = processingResult.results.filter(r => r.skipped && r.reason === "Handled by custom safe output job"); const skippedNoHandlerResults = processingResult.results.filter(r => !r.success && !r.skipped && r.error?.includes("No handler loaded")); + const skippedHandlerResults = processingResult.results.filter(r => r.skipped && !r.reason && !r.deferred && !r.cancelled); core.info(`\n=== Processing Summary ===`); core.info(`Total messages: ${processingResult.results.length}`); @@ -1101,6 +1100,11 @@ async function main() { if (deferredCount > 0) { core.info(`Deferred: ${deferredCount}`); } + if (skippedHandlerResults.length > 0) { + core.info(`Skipped (no context or limit reached): ${skippedHandlerResults.length}`); + const skippedHandlerTypes = [...new Set(skippedHandlerResults.map(r => r.type))]; + core.info(` Types: ${skippedHandlerTypes.join(", ")}`); + } if (skippedStandaloneResults.length > 0) { core.info(`Skipped (standalone step): ${skippedStandaloneResults.length}`); const standaloneTypes = [...new Set(skippedStandaloneResults.map(r => r.type))];