From f5a75149127fab568e7a8be6890dbe8c174fe909 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 22 Mar 2026 16:32:54 +0000 Subject: [PATCH 1/2] fix(difc): use for bold in details/summary and hide #unknown entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace **markdown bold** with HTML bold in the details/summary element since GitHub doesn't render markdown inside summary tags - Filter out events whose resolved reference is #unknown — these are unresolvable GitHub entities and are not valid entries to surface - If all events are #unknown the section is suppressed entirely Fixes #22264 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- actions/setup/js/gateway_difc_filtered.cjs | 19 ++++++-- .../setup/js/gateway_difc_filtered.test.cjs | 46 +++++++++++++++++-- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/actions/setup/js/gateway_difc_filtered.cjs b/actions/setup/js/gateway_difc_filtered.cjs index 56a7285feda..9660b447424 100644 --- a/actions/setup/js/gateway_difc_filtered.cjs +++ b/actions/setup/js/gateway_difc_filtered.cjs @@ -89,19 +89,30 @@ function generateDifcFilteredSection(filteredEvents) { return true; }); - const count = uniqueEvents.length; + // Filter out #unknown references — these are unresolvable GitHub entities and not valid entries + const validEvents = uniqueEvents.filter(event => { + if (event.html_url) return true; + const desc = event.description ? event.description.replace(/^[a-z-]+:(?!\/\/)/i, "") : null; + return desc !== "#unknown"; + }); + + if (validEvents.length === 0) { + return ""; + } + + const count = validEvents.length; const itemWord = count === 1 ? "item" : "items"; let section = "\n\n> [!NOTE]\n"; section += `>
\n`; - section += `> **🔒 Integrity filter blocked ${count} ${itemWord}**\n`; + section += `> 🔒 Integrity filter blocked ${count} ${itemWord}\n`; section += `>\n`; section += `> The following ${itemWord} were blocked because they don't meet the GitHub integrity level.\n`; section += `>\n`; const maxItems = 16; - const visibleEvents = uniqueEvents.slice(0, maxItems); - const remainingCount = uniqueEvents.length - visibleEvents.length; + const visibleEvents = validEvents.slice(0, maxItems); + const remainingCount = validEvents.length - visibleEvents.length; for (const event of visibleEvents) { let reference; diff --git a/actions/setup/js/gateway_difc_filtered.test.cjs b/actions/setup/js/gateway_difc_filtered.test.cjs index 414e8b689ab..4ca7eb25e6f 100644 --- a/actions/setup/js/gateway_difc_filtered.test.cjs +++ b/actions/setup/js/gateway_difc_filtered.test.cjs @@ -175,7 +175,7 @@ describe("gateway_difc_filtered.cjs", () => { expect(result).toContain("> [!NOTE]"); expect(result).toContain(">
"); expect(result).toContain(">
"); - expect(result).toContain("> **🔒 Integrity filter blocked 1 item**"); + expect(result).toContain("> 🔒 Integrity filter blocked 1 item"); expect(result).toContain("[#42](https://github.com/org/repo/issues/42)"); expect(result).toContain("`list_issues`"); expect(result).toContain("Integrity check failed"); @@ -202,7 +202,7 @@ describe("gateway_difc_filtered.cjs", () => { const result = generateDifcFilteredSection(events); expect(result).toContain("> [!NOTE]"); - expect(result).toContain("> **🔒 Integrity filter blocked 2 items**"); + expect(result).toContain("> 🔒 Integrity filter blocked 2 items"); expect(result).toContain("[#42](https://github.com/org/repo/issues/42)"); expect(result).toContain("[#99](https://github.com/org/repo/issues/99)"); }); @@ -318,7 +318,7 @@ describe("gateway_difc_filtered.cjs", () => { const result = generateDifcFilteredSection(events); - expect(result).toContain("> **🔒 Integrity filter blocked 2 items**"); + expect(result).toContain("> 🔒 Integrity filter blocked 2 items"); expect(result).toContain("[#42](https://github.com/org/repo/issues/42)"); expect(result).toContain("[#99](https://github.com/org/repo/issues/99)"); }); @@ -363,7 +363,7 @@ describe("gateway_difc_filtered.cjs", () => { const result = generateDifcFilteredSection(events); // Summary still shows the total count - expect(result).toContain("> **🔒 Integrity filter blocked 20 items**"); + expect(result).toContain("> 🔒 Integrity filter blocked 20 items"); // First 16 items rendered expect(result).toContain("[#1](https://github.com/org/repo/issues/1)"); expect(result).toContain("[#16](https://github.com/org/repo/issues/16)"); @@ -397,5 +397,43 @@ describe("gateway_difc_filtered.cjs", () => { expect(result).toContain("... and 1 more item"); expect(result).not.toContain("... and 1 more items"); }); + + it("should hide events with #unknown description (not valid GitHub entries)", () => { + const events = [ + { + type: "DIFC_FILTERED", + tool_name: "search_issues", + description: "github:#unknown", + reason: "has lower integrity than agent requires.", + }, + { + type: "DIFC_FILTERED", + tool_name: "list_issues", + reason: "Integrity check failed", + html_url: "https://github.com/org/repo/issues/42", + number: "42", + }, + ]; + + const result = generateDifcFilteredSection(events); + + // #unknown entry should be filtered out; only the valid item remains + expect(result).toContain("> 🔒 Integrity filter blocked 1 item"); + expect(result).not.toContain("#unknown"); + expect(result).toContain("[#42](https://github.com/org/repo/issues/42)"); + }); + + it("should return empty string when all events are #unknown", () => { + const events = [ + { + type: "DIFC_FILTERED", + tool_name: "search_issues", + description: "github:#unknown", + reason: "has lower integrity", + }, + ]; + + expect(generateDifcFilteredSection(events)).toBe(""); + }); }); }); From 18ddccd3ceaeb8cb74e9e44914092488bd252b4c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 22 Mar 2026 16:43:49 +0000 Subject: [PATCH 2/2] fix(difc): show #unknown entries using tool_name instead of hiding them Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> Agent-Logs-Url: https://github.com/github/gh-aw/sessions/b6d8ce61-4d24-4bc2-bb54-8d24ac9f9c21 --- actions/setup/js/gateway_difc_filtered.cjs | 20 +++++-------------- .../setup/js/gateway_difc_filtered.test.cjs | 15 +++++++++----- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/actions/setup/js/gateway_difc_filtered.cjs b/actions/setup/js/gateway_difc_filtered.cjs index 9660b447424..d7ba5fbccd6 100644 --- a/actions/setup/js/gateway_difc_filtered.cjs +++ b/actions/setup/js/gateway_difc_filtered.cjs @@ -89,18 +89,7 @@ function generateDifcFilteredSection(filteredEvents) { return true; }); - // Filter out #unknown references — these are unresolvable GitHub entities and not valid entries - const validEvents = uniqueEvents.filter(event => { - if (event.html_url) return true; - const desc = event.description ? event.description.replace(/^[a-z-]+:(?!\/\/)/i, "") : null; - return desc !== "#unknown"; - }); - - if (validEvents.length === 0) { - return ""; - } - - const count = validEvents.length; + const count = uniqueEvents.length; const itemWord = count === 1 ? "item" : "items"; let section = "\n\n> [!NOTE]\n"; @@ -111,8 +100,8 @@ function generateDifcFilteredSection(filteredEvents) { section += `>\n`; const maxItems = 16; - const visibleEvents = validEvents.slice(0, maxItems); - const remainingCount = validEvents.length - visibleEvents.length; + const visibleEvents = uniqueEvents.slice(0, maxItems); + const remainingCount = uniqueEvents.length - visibleEvents.length; for (const event of visibleEvents) { let reference; @@ -121,7 +110,8 @@ function generateDifcFilteredSection(filteredEvents) { reference = `[${label}](${event.html_url})`; } else { const desc = event.description ? event.description.replace(/^[a-z-]+:(?!\/\/)/i, "") : null; - reference = desc || (event.tool_name ? `\`${event.tool_name}\`` : "-"); + const validDesc = desc && desc !== "#unknown" ? desc : null; + reference = validDesc || (event.tool_name ? `\`${event.tool_name}\`` : "-"); } const tool = event.tool_name ? `\`${event.tool_name}\`` : "-"; const reason = (event.reason || "-").replace(/^Resource '[^']*' /, "").replace(/\n/g, " "); diff --git a/actions/setup/js/gateway_difc_filtered.test.cjs b/actions/setup/js/gateway_difc_filtered.test.cjs index 4ca7eb25e6f..9f4ba9cda0c 100644 --- a/actions/setup/js/gateway_difc_filtered.test.cjs +++ b/actions/setup/js/gateway_difc_filtered.test.cjs @@ -398,7 +398,7 @@ describe("gateway_difc_filtered.cjs", () => { expect(result).not.toContain("... and 1 more items"); }); - it("should hide events with #unknown description (not valid GitHub entries)", () => { + it("should show events with #unknown description using tool_name instead", () => { const events = [ { type: "DIFC_FILTERED", @@ -417,13 +417,14 @@ describe("gateway_difc_filtered.cjs", () => { const result = generateDifcFilteredSection(events); - // #unknown entry should be filtered out; only the valid item remains - expect(result).toContain("> 🔒 Integrity filter blocked 1 item"); + // Both entries should be shown; #unknown text hidden, tool_name used instead + expect(result).toContain("> 🔒 Integrity filter blocked 2 items"); expect(result).not.toContain("#unknown"); + expect(result).toContain("`search_issues`"); expect(result).toContain("[#42](https://github.com/org/repo/issues/42)"); }); - it("should return empty string when all events are #unknown", () => { + it("should show entry using tool_name when description is #unknown", () => { const events = [ { type: "DIFC_FILTERED", @@ -433,7 +434,11 @@ describe("gateway_difc_filtered.cjs", () => { }, ]; - expect(generateDifcFilteredSection(events)).toBe(""); + const result = generateDifcFilteredSection(events); + + expect(result).toContain("> 🔒 Integrity filter blocked 1 item"); + expect(result).toContain("`search_issues`"); + expect(result).not.toContain("#unknown"); }); }); });