From 4eb4c18f7d7b04aa58b269a6b247622e3f9bee8c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 23:59:04 +0000 Subject: [PATCH 1/6] Initial plan From 7ad6f2e96eb4709c699b4bfaab3afb8c176657dc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 00:03:38 +0000 Subject: [PATCH 2/6] Initial planning: Update failure handling to use parent issue strategy Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/daily-team-status.lock.yml | 1 + .github/workflows/smoke-claude.lock.yml | 2 +- .github/workflows/smoke-codex.lock.yml | 2 +- .github/workflows/smoke-copilot.lock.yml | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index 00cef91f7d1..a7b075ce00a 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -468,6 +468,7 @@ jobs: allowed_domains: [], firewall_enabled: true, awf_version: "v0.8.2", + awmg_version: "v0.0.14", steps: { firewall: "squid" }, diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index c593c3aa1ce..0ffae514b38 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -719,7 +719,7 @@ jobs: allowed_domains: ["api.github.com","defaults","github","playwright"], firewall_enabled: true, awf_version: "v0.8.2", - awmg_version: "v0.0.14", + awmg_version: "latest", steps: { firewall: "squid" }, diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 825fd0f35a3..546a8b8b225 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -809,7 +809,7 @@ jobs: allowed_domains: ["api.github.com","defaults","github","playwright"], firewall_enabled: true, awf_version: "v0.8.2", - awmg_version: "v0.0.14", + awmg_version: "latest", steps: { firewall: "squid" }, diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index b845f08e641..f04beef63c4 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -708,7 +708,7 @@ jobs: allowed_domains: ["api.github.com","defaults","github","node","playwright"], firewall_enabled: true, awf_version: "v0.8.2", - awmg_version: "v0.0.14", + awmg_version: "latest", steps: { firewall: "squid" }, From a36ef5264eb0fd2a639f42669104b35bca50f1fe Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 00:07:18 +0000 Subject: [PATCH 3/6] Implement parent issue strategy for failed workflow issues Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/handle_agent_failure.cjs | 169 ++++++++ .../setup/js/handle_agent_failure.test.cjs | 369 +++++++++++++++--- 2 files changed, 483 insertions(+), 55 deletions(-) diff --git a/actions/setup/js/handle_agent_failure.cjs b/actions/setup/js/handle_agent_failure.cjs index b4ffa9c9969..56146af678a 100644 --- a/actions/setup/js/handle_agent_failure.cjs +++ b/actions/setup/js/handle_agent_failure.cjs @@ -7,6 +7,156 @@ const { getFooterAgentFailureIssueMessage, getFooterAgentFailureCommentMessage, const { renderTemplate } = require("./messages_core.cjs"); const fs = require("fs"); +/** + * Search for or create the parent issue for all agentic workflow failures + * @returns {Promise<{number: number, node_id: string}>} Parent issue number and node ID + */ +async function ensureParentIssue() { + const { owner, repo } = context.repo; + const parentTitle = "[aw] Agentic Workflow Issues"; + const parentLabel = "agentic-workflows"; + + core.info(`Searching for parent issue: "${parentTitle}"`); + + // Search for existing parent issue + const searchQuery = `repo:${owner}/${repo} is:issue is:open label:${parentLabel} in:title "${parentTitle}"`; + + try { + const searchResult = await github.rest.search.issuesAndPullRequests({ + q: searchQuery, + per_page: 1, + }); + + if (searchResult.data.total_count > 0) { + const existingIssue = searchResult.data.items[0]; + core.info(`Found existing parent issue #${existingIssue.number}: ${existingIssue.html_url}`); + return { + number: existingIssue.number, + node_id: existingIssue.node_id, + }; + } + } catch (error) { + core.warning(`Error searching for parent issue: ${getErrorMessage(error)}`); + } + + // Create parent issue if it doesn't exist + core.info("No parent issue found, creating one"); + + const parentBody = `# Agentic Workflow Failures + +This issue tracks all failures from agentic workflows in this repository. Each failed workflow run creates a sub-issue linked here for organization and easy filtering. + +## Purpose + +This parent issue helps you: +- View all workflow failures in one place by checking the sub-issues below +- Filter out failure issues from your main issue list using \`no:parent-issue\` +- Track the health of your agentic workflows over time + +## Sub-Issues + +All individual workflow failure issues are linked as sub-issues below. Click on any sub-issue to see details about a specific failure. + +## Troubleshooting Failed Workflows + +### Using debug-agentic-workflow Agent (Recommended) + +The fastest way to investigate a failure is with the **debug-agentic-workflow** custom agent: + +1. In GitHub Copilot Chat, type \`/agent\` and select **debug-agentic-workflow** +2. When prompted, provide the workflow run URL +3. The agent will help you analyze logs, identify root causes, and suggest fixes + +### Using gh-aw CLI + +You can also debug failures using the \`gh-aw\` CLI: + +\`\`\`bash +# Download and analyze workflow logs +gh aw logs + +# Audit a specific workflow run +gh aw audit +\`\`\` + +### Manual Investigation + +1. Click on a sub-issue to see the failed workflow details +2. Follow the workflow run link in the issue +3. Review the agent job logs for error messages +4. Check the workflow configuration in your repository + +## Resources + +- [GitHub Agentic Workflows Documentation](https://github.com/githubnext/gh-aw) +- [Troubleshooting Guide](https://github.com/githubnext/gh-aw/blob/main/docs/troubleshooting.md) + +--- + +> This issue is automatically managed by GitHub Agentic Workflows. Do not close this issue manually.`; + + try { + const newIssue = await github.rest.issues.create({ + owner, + repo, + title: parentTitle, + body: parentBody, + labels: [parentLabel], + }); + + core.info(`✓ Created parent issue #${newIssue.data.number}: ${newIssue.data.html_url}`); + return { + number: newIssue.data.number, + node_id: newIssue.data.node_id, + }; + } catch (error) { + core.error(`Failed to create parent issue: ${getErrorMessage(error)}`); + throw error; + } +} + +/** + * Link an issue as a sub-issue to a parent issue + * @param {string} parentNodeId - GraphQL node ID of the parent issue + * @param {string} subIssueNodeId - GraphQL node ID of the sub-issue + * @param {number} parentNumber - Parent issue number (for logging) + * @param {number} subIssueNumber - Sub-issue number (for logging) + */ +async function linkSubIssue(parentNodeId, subIssueNodeId, parentNumber, subIssueNumber) { + core.info(`Linking issue #${subIssueNumber} as sub-issue of #${parentNumber}`); + + try { + // Use GraphQL to link the sub-issue + await github.graphql( + `mutation($parentId: ID!, $subIssueId: ID!) { + addSubIssue(input: {issueId: $parentId, subIssueId: $subIssueId}) { + issue { + id + number + } + subIssue { + id + number + } + } + }`, + { + parentId: parentNodeId, + subIssueId: subIssueNodeId, + } + ); + + core.info(`✓ Successfully linked #${subIssueNumber} as sub-issue of #${parentNumber}`); + } catch (error) { + const errorMessage = getErrorMessage(error); + if (errorMessage.includes("Field 'addSubIssue' doesn't exist") || errorMessage.includes("not yet available")) { + core.warning(`Sub-issue API not available. Issue #${subIssueNumber} created but not linked to parent.`); + } else { + core.warning(`Failed to link sub-issue: ${errorMessage}`); + } + } +} + /** * Handle agent job failure by creating or updating a failure tracking issue * This script is called from the conclusion job when the agent job has failed @@ -31,6 +181,15 @@ async function main() { const { owner, repo } = context.repo; + // Ensure parent issue exists first + let parentIssue; + try { + parentIssue = await ensureParentIssue(); + } catch (error) { + core.warning(`Could not create parent issue, proceeding without parent: ${getErrorMessage(error)}`); + // Continue without parent issue + } + // Sanitize workflow name for title const sanitizedWorkflowName = sanitizeContent(workflowName, { maxLength: 100 }); const issueTitle = `[aw] ${sanitizedWorkflowName} failed`; @@ -181,6 +340,16 @@ The debug agent will help you: }); core.info(`✓ Created new issue #${newIssue.data.number}: ${newIssue.data.html_url}`); + + // Link as sub-issue to parent if parent issue was created + if (parentIssue) { + try { + await linkSubIssue(parentIssue.node_id, newIssue.data.node_id, parentIssue.number, newIssue.data.number); + } catch (error) { + core.warning(`Could not link issue as sub-issue: ${getErrorMessage(error)}`); + // Continue even if linking fails + } + } } } catch (error) { core.warning(`Failed to create or update failure tracking issue: ${getErrorMessage(error)}`); diff --git a/actions/setup/js/handle_agent_failure.test.cjs b/actions/setup/js/handle_agent_failure.test.cjs index 3db118a19b3..6e6f31495f1 100644 --- a/actions/setup/js/handle_agent_failure.test.cjs +++ b/actions/setup/js/handle_agent_failure.test.cjs @@ -68,24 +68,243 @@ describe("handle_agent_failure.cjs", () => { }); describe("when agent job failed", () => { - it("should create a new issue when no existing issue is found", async () => { - // Mock no existing issues - mockGithub.rest.search.issuesAndPullRequests.mockResolvedValue({ - data: { - total_count: 0, - items: [], + it("should create parent issue and link sub-issue when creating new failure issue", async () => { + // Mock no existing parent issue - will create it + mockGithub.rest.search.issuesAndPullRequests + .mockResolvedValueOnce({ + // First search: parent issue + data: { total_count: 0, items: [] }, + }) + .mockResolvedValueOnce({ + // Second search: failure issue + data: { total_count: 0, items: [] }, + }); + + // Mock parent issue creation + mockGithub.rest.issues.create + .mockResolvedValueOnce({ + // Parent issue + data: { + number: 1, + html_url: "https://github.com/test-owner/test-repo/issues/1", + node_id: "I_parent_1", + }, + }) + .mockResolvedValueOnce({ + // Failure issue + data: { + number: 42, + html_url: "https://github.com/test-owner/test-repo/issues/42", + node_id: "I_sub_42", + }, + }); + + // Mock GraphQL sub-issue linking + mockGithub.graphql = vi.fn().mockResolvedValue({ + addSubIssue: { + issue: { id: "I_parent_1", number: 1 }, + subIssue: { id: "I_sub_42", number: 42 }, }, }); - mockGithub.rest.issues.create.mockResolvedValue({ + await main(); + + // Verify parent issue was searched for + expect(mockGithub.rest.search.issuesAndPullRequests).toHaveBeenCalledWith({ + q: expect.stringContaining('repo:test-owner/test-repo is:issue is:open label:agentic-workflows in:title "[aw] Agentic Workflow Issues"'), + per_page: 1, + }); + + // Verify parent issue was created + expect(mockGithub.rest.issues.create).toHaveBeenCalledWith({ + owner: "test-owner", + repo: "test-repo", + title: "[aw] Agentic Workflow Issues", + body: expect.stringContaining("This issue tracks all failures from agentic workflows"), + labels: ["agentic-workflows"], + }); + + // Verify parent body contains troubleshooting info + const parentCreateCall = mockGithub.rest.issues.create.mock.calls[0][0]; + expect(parentCreateCall.body).toContain("debug-agentic-workflow"); + expect(parentCreateCall.body).toContain("gh aw logs"); + expect(parentCreateCall.body).toContain("gh aw audit"); + expect(parentCreateCall.body).toContain("no:parent-issue"); + + // Verify failure issue was created + expect(mockGithub.rest.issues.create).toHaveBeenCalledWith({ + owner: "test-owner", + repo: "test-repo", + title: "[aw] Test Workflow failed", + body: expect.stringContaining("agentic workflow **Test Workflow** has failed"), + labels: ["agentic-workflows"], + }); + + // Verify sub-issue was linked + expect(mockGithub.graphql).toHaveBeenCalledWith( + expect.stringContaining("addSubIssue"), + { + parentId: "I_parent_1", + subIssueId: "I_sub_42", + } + ); + + expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("Created parent issue #1")); + expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("Created new issue #42")); + expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("Successfully linked #42 as sub-issue of #1")); + }); + + it("should reuse existing parent issue when it exists", async () => { + // Mock existing parent issue + mockGithub.rest.search.issuesAndPullRequests + .mockResolvedValueOnce({ + // First search: existing parent issue + data: { + total_count: 1, + items: [ + { + number: 5, + html_url: "https://github.com/test-owner/test-repo/issues/5", + node_id: "I_parent_5", + }, + ], + }, + }) + .mockResolvedValueOnce({ + // Second search: no failure issue + data: { total_count: 0, items: [] }, + }); + + // Mock failure issue creation only (parent already exists) + mockGithub.rest.issues.create.mockResolvedValueOnce({ data: { number: 42, html_url: "https://github.com/test-owner/test-repo/issues/42", + node_id: "I_sub_42", + }, + }); + + // Mock GraphQL sub-issue linking + mockGithub.graphql = vi.fn().mockResolvedValue({ + addSubIssue: { + issue: { id: "I_parent_5", number: 5 }, + subIssue: { id: "I_sub_42", number: 42 }, }, }); await main(); + // Verify parent issue was found (not created) + expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("Found existing parent issue #5")); + + // Verify only failure issue was created (not parent) + expect(mockGithub.rest.issues.create).toHaveBeenCalledTimes(1); + expect(mockGithub.rest.issues.create).toHaveBeenCalledWith({ + owner: "test-owner", + repo: "test-repo", + title: "[aw] Test Workflow failed", + body: expect.any(String), + labels: ["agentic-workflows"], + }); + + // Verify sub-issue was linked to existing parent + expect(mockGithub.graphql).toHaveBeenCalledWith(expect.stringContaining("addSubIssue"), { + parentId: "I_parent_5", + subIssueId: "I_sub_42", + }); + }); + + it("should handle sub-issue API not available gracefully", async () => { + // Mock searches + mockGithub.rest.search.issuesAndPullRequests + .mockResolvedValueOnce({ + data: { total_count: 0, items: [] }, + }) + .mockResolvedValueOnce({ + data: { total_count: 0, items: [] }, + }); + + // Mock issue creation + mockGithub.rest.issues.create + .mockResolvedValueOnce({ + data: { number: 1, html_url: "https://example.com/1", node_id: "I_1" }, + }) + .mockResolvedValueOnce({ + data: { number: 42, html_url: "https://example.com/42", node_id: "I_42" }, + }); + + // Mock GraphQL failure (sub-issue API not available) + mockGithub.graphql = vi.fn().mockRejectedValue(new Error("Field 'addSubIssue' doesn't exist on type 'Mutation'")); + + await main(); + + // Verify both issues were created + expect(mockGithub.rest.issues.create).toHaveBeenCalledTimes(2); + + // Verify warning was logged + expect(mockCore.warning).toHaveBeenCalledWith(expect.stringContaining("Sub-issue API not available")); + }); + + it("should continue if parent issue creation fails", async () => { + // Mock searches + mockGithub.rest.search.issuesAndPullRequests + .mockResolvedValueOnce({ + data: { total_count: 0, items: [] }, + }) + .mockResolvedValueOnce({ + data: { total_count: 0, items: [] }, + }); + + // Mock parent issue creation failure, but failure issue creation succeeds + mockGithub.rest.issues.create + .mockRejectedValueOnce(new Error("API Error creating parent")) + .mockResolvedValueOnce({ + data: { number: 42, html_url: "https://example.com/42", node_id: "I_42" }, + }); + + await main(); + + // Verify warning about parent issue creation + expect(mockCore.warning).toHaveBeenCalledWith(expect.stringContaining("Could not create parent issue")); + + // Verify failure issue was still created + expect(mockGithub.rest.issues.create).toHaveBeenCalledWith({ + owner: "test-owner", + repo: "test-repo", + title: "[aw] Test Workflow failed", + body: expect.any(String), + labels: ["agentic-workflows"], + }); + }); + + it("should create a new issue when no existing issue is found", async () => { + // Mock no existing issues (parent search + failure issue search) + mockGithub.rest.search.issuesAndPullRequests + .mockResolvedValueOnce({ + data: { total_count: 0, items: [] }, + }) + .mockResolvedValueOnce({ + data: { total_count: 0, items: [] }, + }); + + mockGithub.rest.issues.create + .mockResolvedValueOnce({ + // Parent issue + data: { number: 1, html_url: "https://example.com/1", node_id: "I_1" }, + }) + .mockResolvedValueOnce({ + // Failure issue + data: { + number: 42, + html_url: "https://github.com/test-owner/test-repo/issues/42", + node_id: "I_42", + }, + }); + + mockGithub.graphql = vi.fn().mockResolvedValue({}); + + await main(); + // Verify search was called expect(mockGithub.rest.search.issuesAndPullRequests).toHaveBeenCalledWith({ q: expect.stringContaining('repo:test-owner/test-repo is:issue is:open label:agentic-workflows in:title "[aw] Test Workflow failed"'), @@ -101,16 +320,16 @@ describe("handle_agent_failure.cjs", () => { labels: ["agentic-workflows"], }); - // Verify body contains required sections - const createCall = mockGithub.rest.issues.create.mock.calls[0][0]; - expect(createCall.body).toContain("## Problem"); - expect(createCall.body).toContain("## How to investigate"); - expect(createCall.body).toContain("debug-agentic-workflow"); - expect(createCall.body).toContain("https://github.com/test-owner/test-repo/actions/runs/123"); - expect(createCall.body).toContain("/); + const failureIssueCreateCall = mockGithub.rest.issues.create.mock.calls[1][0]; + expect(failureIssueCreateCall.body).toContain("/); }); }); }); From a50b28bdc3f9d97c2e8a6e772751a7c70912be77 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 00:17:17 +0000 Subject: [PATCH 4/6] Complete parent issue implementation for failed workflows Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .../setup/js/handle_agent_failure.test.cjs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/actions/setup/js/handle_agent_failure.test.cjs b/actions/setup/js/handle_agent_failure.test.cjs index 6e6f31495f1..92b701ff031 100644 --- a/actions/setup/js/handle_agent_failure.test.cjs +++ b/actions/setup/js/handle_agent_failure.test.cjs @@ -141,13 +141,10 @@ describe("handle_agent_failure.cjs", () => { }); // Verify sub-issue was linked - expect(mockGithub.graphql).toHaveBeenCalledWith( - expect.stringContaining("addSubIssue"), - { - parentId: "I_parent_1", - subIssueId: "I_sub_42", - } - ); + expect(mockGithub.graphql).toHaveBeenCalledWith(expect.stringContaining("addSubIssue"), { + parentId: "I_parent_1", + subIssueId: "I_sub_42", + }); expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("Created parent issue #1")); expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("Created new issue #42")); @@ -256,11 +253,9 @@ describe("handle_agent_failure.cjs", () => { }); // Mock parent issue creation failure, but failure issue creation succeeds - mockGithub.rest.issues.create - .mockRejectedValueOnce(new Error("API Error creating parent")) - .mockResolvedValueOnce({ - data: { number: 42, html_url: "https://example.com/42", node_id: "I_42" }, - }); + mockGithub.rest.issues.create.mockRejectedValueOnce(new Error("API Error creating parent")).mockResolvedValueOnce({ + data: { number: 42, html_url: "https://example.com/42", node_id: "I_42" }, + }); await main(); From e104612531a0efa4138a2f642d806cf8d8683f8c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 00:33:43 +0000 Subject: [PATCH 5/6] Add 1-day expiration to parent issue for failed workflows Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/handle_agent_failure.cjs | 7 ++++++- actions/setup/js/handle_agent_failure.test.cjs | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/actions/setup/js/handle_agent_failure.cjs b/actions/setup/js/handle_agent_failure.cjs index 56146af678a..3c79f0c0914 100644 --- a/actions/setup/js/handle_agent_failure.cjs +++ b/actions/setup/js/handle_agent_failure.cjs @@ -42,7 +42,7 @@ async function ensureParentIssue() { // Create parent issue if it doesn't exist core.info("No parent issue found, creating one"); - const parentBody = `# Agentic Workflow Failures + const parentBodyContent = `# Agentic Workflow Failures This issue tracks all failures from agentic workflows in this repository. Each failed workflow run creates a sub-issue linked here for organization and easy filtering. @@ -95,6 +95,11 @@ gh aw audit > This issue is automatically managed by GitHub Agentic Workflows. Do not close this issue manually.`; + // Add expiration marker (1 day from now) + const expirationDate = new Date(); + expirationDate.setDate(expirationDate.getDate() + 1); + const parentBody = `${parentBodyContent}\n\n`; + try { const newIssue = await github.rest.issues.create({ owner, diff --git a/actions/setup/js/handle_agent_failure.test.cjs b/actions/setup/js/handle_agent_failure.test.cjs index 92b701ff031..58096ad56a7 100644 --- a/actions/setup/js/handle_agent_failure.test.cjs +++ b/actions/setup/js/handle_agent_failure.test.cjs @@ -130,6 +130,8 @@ describe("handle_agent_failure.cjs", () => { expect(parentCreateCall.body).toContain("gh aw logs"); expect(parentCreateCall.body).toContain("gh aw audit"); expect(parentCreateCall.body).toContain("no:parent-issue"); + expect(parentCreateCall.body).toContain("/); // Verify failure issue was created expect(mockGithub.rest.issues.create).toHaveBeenCalledWith({ From 5cb1ca016b37b0638459847bb2ebc536e7187e50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 01:32:47 +0000 Subject: [PATCH 6/6] Change parent issue expiration from 1 day to 7 days Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/handle_agent_failure.cjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/actions/setup/js/handle_agent_failure.cjs b/actions/setup/js/handle_agent_failure.cjs index 3c79f0c0914..1700e9c0f16 100644 --- a/actions/setup/js/handle_agent_failure.cjs +++ b/actions/setup/js/handle_agent_failure.cjs @@ -95,9 +95,9 @@ gh aw audit > This issue is automatically managed by GitHub Agentic Workflows. Do not close this issue manually.`; - // Add expiration marker (1 day from now) + // Add expiration marker (7 days from now) const expirationDate = new Date(); - expirationDate.setDate(expirationDate.getDate() + 1); + expirationDate.setDate(expirationDate.getDate() + 7); const parentBody = `${parentBodyContent}\n\n`; try {