From f029cabc77e4f853888ba145132b78b7df5a8925 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 12:24:32 +0000 Subject: [PATCH 1/6] Initial plan From d3312af7bc6e22946fea6fd43d69755e0f27bb2a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 12:49:13 +0000 Subject: [PATCH 2/6] fix: close-older-issues uses caller workflow ID as marker to prevent 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> --- .../agent-performance-analyzer.lock.yml | 1 + .../workflows/agent-persona-explorer.lock.yml | 1 + .github/workflows/ai-moderator.lock.yml | 1 + .github/workflows/archie.lock.yml | 1 + .github/workflows/artifacts-summary.lock.yml | 1 + .github/workflows/audit-workflows.lock.yml | 1 + .github/workflows/auto-triage-issues.lock.yml | 1 + .github/workflows/blog-auditor.lock.yml | 1 + .github/workflows/bot-detection.lock.yml | 1 + .github/workflows/brave.lock.yml | 1 + .../breaking-change-checker.lock.yml | 1 + .github/workflows/changeset.lock.yml | 1 + .github/workflows/ci-coach.lock.yml | 1 + .github/workflows/ci-doctor.lock.yml | 1 + .../claude-code-user-docs-review.lock.yml | 1 + .../cli-consistency-checker.lock.yml | 1 + .../workflows/cli-version-checker.lock.yml | 1 + .github/workflows/cloclo.lock.yml | 1 + .../workflows/code-scanning-fixer.lock.yml | 1 + .github/workflows/code-simplifier.lock.yml | 1 + .../commit-changes-analyzer.lock.yml | 1 + .github/workflows/contribution-check.lock.yml | 1 + .../workflows/copilot-agent-analysis.lock.yml | 1 + .../copilot-cli-deep-research.lock.yml | 1 + .../copilot-pr-merged-report.lock.yml | 1 + .../copilot-pr-nlp-analysis.lock.yml | 1 + .../copilot-pr-prompt-analysis.lock.yml | 1 + .../copilot-session-insights.lock.yml | 1 + .github/workflows/craft.lock.yml | 1 + .../daily-architecture-diagram.lock.yml | 1 + .../daily-assign-issue-to-user.lock.yml | 1 + .github/workflows/daily-choice-test.lock.yml | 1 + .../workflows/daily-cli-performance.lock.yml | 1 + .../workflows/daily-cli-tools-tester.lock.yml | 1 + .github/workflows/daily-code-metrics.lock.yml | 1 + .../workflows/daily-compiler-quality.lock.yml | 1 + .../daily-copilot-token-report.lock.yml | 1 + .github/workflows/daily-doc-healer.lock.yml | 1 + .github/workflows/daily-doc-updater.lock.yml | 1 + .github/workflows/daily-fact.lock.yml | 1 + .github/workflows/daily-file-diet.lock.yml | 1 + .../workflows/daily-firewall-report.lock.yml | 1 + .../workflows/daily-issues-report.lock.yml | 1 + .../daily-malicious-code-scan.lock.yml | 1 + .../daily-mcp-concurrency-analysis.lock.yml | 1 + .../daily-multi-device-docs-tester.lock.yml | 1 + .github/workflows/daily-news.lock.yml | 1 + .../daily-observability-report.lock.yml | 1 + .../daily-performance-summary.lock.yml | 1 + .github/workflows/daily-regulatory.lock.yml | 1 + .../daily-rendering-scripts-verifier.lock.yml | 1 + .../workflows/daily-repo-chronicle.lock.yml | 1 + .../daily-safe-output-optimizer.lock.yml | 1 + .../daily-safe-outputs-conformance.lock.yml | 1 + .../workflows/daily-secrets-analysis.lock.yml | 1 + .../daily-security-red-team.lock.yml | 1 + .github/workflows/daily-semgrep-scan.lock.yml | 1 + .../daily-syntax-error-quality.lock.yml | 1 + .../daily-team-evolution-insights.lock.yml | 1 + .github/workflows/daily-team-status.lock.yml | 1 + .../daily-testify-uber-super-expert.lock.yml | 1 + .../workflows/daily-workflow-updater.lock.yml | 1 + .github/workflows/dead-code-remover.lock.yml | 1 + .github/workflows/deep-report.lock.yml | 1 + .github/workflows/delight.lock.yml | 1 + .github/workflows/dependabot-burner.lock.yml | 1 + .../workflows/dependabot-go-checker.lock.yml | 1 + .github/workflows/dev-hawk.lock.yml | 1 + .github/workflows/dev.lock.yml | 1 + .../developer-docs-consolidator.lock.yml | 1 + .github/workflows/dictation-prompt.lock.yml | 1 + .../workflows/discussion-task-miner.lock.yml | 1 + .github/workflows/docs-noob-tester.lock.yml | 1 + .github/workflows/draft-pr-cleanup.lock.yml | 1 + .../duplicate-code-detector.lock.yml | 1 + .../example-workflow-analyzer.lock.yml | 1 + .github/workflows/firewall-escape.lock.yml | 1 + .../workflows/functional-pragmatist.lock.yml | 1 + .../github-mcp-structural-analysis.lock.yml | 1 + .../github-mcp-tools-report.lock.yml | 1 + .../github-remote-mcp-auth-test.lock.yml | 1 + .../workflows/glossary-maintainer.lock.yml | 1 + .github/workflows/go-fan.lock.yml | 1 + .github/workflows/go-logger.lock.yml | 1 + .../workflows/go-pattern-detector.lock.yml | 1 + .github/workflows/gpclean.lock.yml | 1 + .github/workflows/grumpy-reviewer.lock.yml | 1 + .github/workflows/hourly-ci-cleaner.lock.yml | 1 + .../workflows/instructions-janitor.lock.yml | 1 + .github/workflows/issue-arborist.lock.yml | 1 + .github/workflows/issue-monster.lock.yml | 1 + .github/workflows/issue-triage-agent.lock.yml | 1 + .github/workflows/jsweep.lock.yml | 1 + .../workflows/layout-spec-maintainer.lock.yml | 1 + .github/workflows/lockfile-stats.lock.yml | 1 + .github/workflows/mcp-inspector.lock.yml | 1 + .github/workflows/mergefest.lock.yml | 1 + .../workflows/notion-issue-summary.lock.yml | 1 + .github/workflows/org-health-report.lock.yml | 1 + .github/workflows/pdf-summary.lock.yml | 1 + .github/workflows/plan.lock.yml | 1 + .github/workflows/poem-bot.lock.yml | 1 + .github/workflows/portfolio-analyst.lock.yml | 1 + .../workflows/pr-nitpick-reviewer.lock.yml | 1 + .github/workflows/pr-triage-agent.lock.yml | 1 + .../prompt-clustering-analysis.lock.yml | 1 + .github/workflows/python-data-charts.lock.yml | 1 + .github/workflows/q.lock.yml | 1 + .github/workflows/refiner.lock.yml | 1 + .github/workflows/release.lock.yml | 1 + .../workflows/repo-audit-analyzer.lock.yml | 1 + .github/workflows/repo-tree-map.lock.yml | 1 + .../repository-quality-improver.lock.yml | 1 + .github/workflows/research.lock.yml | 1 + .github/workflows/safe-output-health.lock.yml | 1 + .../schema-consistency-checker.lock.yml | 1 + .github/workflows/scout.lock.yml | 1 + ...ecurity-alert-burndown.campaign.g.lock.yml | 1 + .../workflows/security-compliance.lock.yml | 1 + .github/workflows/security-review.lock.yml | 1 + .../semantic-function-refactor.lock.yml | 1 + .github/workflows/sergo.lock.yml | 1 + .../workflows/slide-deck-maintainer.lock.yml | 1 + .github/workflows/smoke-agent.lock.yml | 1 + .github/workflows/smoke-claude.lock.yml | 1 + .github/workflows/smoke-codex.lock.yml | 1 + .github/workflows/smoke-copilot-arm.lock.yml | 1 + .github/workflows/smoke-copilot.lock.yml | 1 + .../smoke-create-cross-repo-pr.lock.yml | 1 + .github/workflows/smoke-gemini.lock.yml | 1 + .github/workflows/smoke-multi-pr.lock.yml | 1 + .github/workflows/smoke-project.lock.yml | 1 + .github/workflows/smoke-temporary-id.lock.yml | 1 + .github/workflows/smoke-test-tools.lock.yml | 1 + .../smoke-update-cross-repo-pr.lock.yml | 1 + .../workflows/smoke-workflow-call.lock.yml | 1 + .../workflows/stale-repo-identifier.lock.yml | 1 + .../workflows/static-analysis-report.lock.yml | 1 + .../workflows/step-name-alignment.lock.yml | 1 + .github/workflows/sub-issue-closer.lock.yml | 1 + .github/workflows/super-linter.lock.yml | 1 + .../workflows/technical-doc-writer.lock.yml | 1 + .github/workflows/terminal-stylist.lock.yml | 1 + .../test-create-pr-error-handling.lock.yml | 1 + .github/workflows/test-dispatcher.lock.yml | 1 + .../test-project-url-default.lock.yml | 1 + .github/workflows/tidy.lock.yml | 1 + .github/workflows/typist.lock.yml | 1 + .../workflows/ubuntu-image-analyzer.lock.yml | 1 + .github/workflows/unbloat-docs.lock.yml | 1 + .github/workflows/video-analyzer.lock.yml | 1 + .../weekly-editors-health-check.lock.yml | 1 + .../workflows/weekly-issue-summary.lock.yml | 1 + .../weekly-safe-outputs-spec-review.lock.yml | 1 + .github/workflows/workflow-generator.lock.yml | 1 + .../workflow-health-manager.lock.yml | 1 + .../workflows/workflow-normalizer.lock.yml | 1 + .../workflow-skill-extractor.lock.yml | 1 + actions/setup/js/close_older_discussions.cjs | 16 +++++ .../setup/js/close_older_discussions.test.cjs | 58 +++++++++++++++++++ actions/setup/js/close_older_issues.cjs | 15 +++++ actions/setup/js/close_older_issues.test.cjs | 47 +++++++++++++++ actions/setup/js/create_discussion.cjs | 10 +++- actions/setup/js/create_issue.cjs | 16 +++-- pkg/workflow/compiler_safe_outputs_job.go | 7 +++ .../compiler_safe_outputs_job_test.go | 5 +- 166 files changed, 323 insertions(+), 9 deletions(-) diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index 43fcde8463..bd3ace6e35 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -1323,6 +1323,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "agent-performance-analyzer" GH_AW_WORKFLOW_NAME: "Agent Performance Analyzer - Meta-Orchestrator" diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index ec46ea3a0b..c15220e68f 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -1137,6 +1137,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "agent-persona-explorer" GH_AW_WORKFLOW_NAME: "Agent Persona Explorer" diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index 47d721a991..88fcafdd75 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -1078,6 +1078,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_WORKFLOW_ID: "ai-moderator" GH_AW_WORKFLOW_NAME: "AI Moderator" diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index f7ef7d844f..4a28b8ef67 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -1119,6 +1119,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ“Š *Diagram rendered by [{workflow_name}]({run_url})*\",\"footerWorkflowRecompile\":\"\\u003e ๐Ÿ”ง *Workflow sync report by [{workflow_name}]({run_url}) for {repository}*\",\"footerWorkflowRecompileComment\":\"\\u003e ๐Ÿ”„ *Update from [{workflow_name}]({run_url}) for {repository}*\",\"runStarted\":\"๐Ÿ“ [{workflow_name}]({run_url}) is analyzing the architecture for this {event_type}...\",\"runSuccess\":\"๐ŸŽจ [{workflow_name}]({run_url}) has completed the architecture visualization. โœ…\",\"runFailure\":\"๐Ÿ“ [{workflow_name}]({run_url}) encountered an issue and could not complete the architecture diagram. Check the [run logs]({run_url}) for details.\"}" GH_AW_WORKFLOW_ID: "archie" diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 1dc3d74ca2..3cd5935b02 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -1008,6 +1008,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "artifacts-summary" GH_AW_WORKFLOW_NAME: "Artifacts Summary" diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 61e4005b4c..b59183e88d 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -1341,6 +1341,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "audit-workflows-daily" GH_AW_WORKFLOW_ID: "audit-workflows" diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index 73b34cb3c0..be10b2989c 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -1126,6 +1126,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "auto-triage-issues" GH_AW_WORKFLOW_NAME: "Auto-Triage Issues" diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 8afcd9607c..2647992e19 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -1132,6 +1132,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "blog-auditor-weekly" GH_AW_WORKFLOW_ID: "blog-auditor" diff --git a/.github/workflows/bot-detection.lock.yml b/.github/workflows/bot-detection.lock.yml index 5a241c0eb4..b5d7c682b9 100644 --- a/.github/workflows/bot-detection.lock.yml +++ b/.github/workflows/bot-detection.lock.yml @@ -1840,6 +1840,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "bot-detection" GH_AW_WORKFLOW_NAME: "Bot Detection" diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index 36051c0e8c..bfeb6b8f4b 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -1104,6 +1104,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿฆ *Search results brought to you by [{workflow_name}]({run_url})*\",\"footerWorkflowRecompile\":\"\\u003e ๐Ÿ”„ *Maintenance report by [{workflow_name}]({run_url}) for {repository}*\",\"runStarted\":\"๐Ÿ” Brave Search activated! [{workflow_name}]({run_url}) is venturing into the web on this {event_type}...\",\"runSuccess\":\"๐Ÿฆ Mission accomplished! [{workflow_name}]({run_url}) has returned with the findings. Knowledge acquired! ๐Ÿ†\",\"runFailure\":\"๐Ÿ” Search interrupted! [{workflow_name}]({run_url}) {status}. The web remains unexplored...\"}" GH_AW_WORKFLOW_ID: "brave" diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index 3823108ae6..5f7ebdd01c 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -1097,6 +1097,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e โš ๏ธ *Compatibility report by [{workflow_name}]({run_url})*\",\"footerWorkflowRecompile\":\"\\u003e ๐Ÿ› ๏ธ *Workflow maintenance by [{workflow_name}]({run_url}) for {repository}*\",\"runStarted\":\"๐Ÿ”ฌ Breaking Change Checker online! [{workflow_name}]({run_url}) is analyzing API compatibility on this {event_type}...\",\"runSuccess\":\"โœ… Analysis complete! [{workflow_name}]({run_url}) has reviewed all changes. Compatibility verdict delivered! ๐Ÿ“‹\",\"runFailure\":\"๐Ÿ”ฌ Analysis interrupted! [{workflow_name}]({run_url}) {status}. Compatibility status unknown...\"}" GH_AW_TRACKER_ID: "breaking-change-checker" diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 2ec377926d..516df5ea1b 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -1156,6 +1156,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_ENGINE_MODEL: "gpt-5.1-codex-mini" GH_AW_WORKFLOW_ID: "changeset" diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 854b81d988..2fcdd47f7a 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -1134,6 +1134,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "ci-coach-daily" GH_AW_WORKFLOW_ID: "ci-coach" diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 71c6ee0fc3..50cde3f29e 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -1307,6 +1307,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: "gpt-5.1-codex-mini" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿฉบ *Diagnosis provided by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿฅ CI Doctor reporting for duty! [{workflow_name}]({run_url}) is examining the patient on this {event_type}...\",\"runSuccess\":\"๐Ÿฉบ Examination complete! [{workflow_name}]({run_url}) has delivered the diagnosis. Prescription issued! ๐Ÿ’Š\",\"runFailure\":\"๐Ÿฅ Medical emergency! [{workflow_name}]({run_url}) {status}. Doctor needs assistance...\"}" diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index 2a4603e700..c91df1639b 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -1093,6 +1093,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "claude-code-user-docs-review" GH_AW_WORKFLOW_ID: "claude-code-user-docs-review" diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index ce5e046bcf..1d6c5e5091 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -1017,6 +1017,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "cli-consistency-checker" GH_AW_WORKFLOW_NAME: "CLI Consistency Checker" diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 4d53167cbd..d2d95ddeea 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -1119,6 +1119,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "cli-version-checker" GH_AW_WORKFLOW_NAME: "CLI Version Checker" diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 0ea1ec906c..8555fd5d33 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -1496,6 +1496,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐ŸŽค *Magnifique! Performance by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐ŸŽต Comme d'habitude! [{workflow_name}]({run_url}) takes the stage on this {event_type}...\",\"runSuccess\":\"๐ŸŽค Bravo! [{workflow_name}]({run_url}) has delivered a stunning performance! Standing ovation! ๐ŸŒŸ\",\"runFailure\":\"๐ŸŽต Intermission... [{workflow_name}]({run_url}) {status}. The show must go on... eventually!\"}" GH_AW_WORKFLOW_ID: "cloclo" diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 3ee3fc33b2..14ae1596c2 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -1245,6 +1245,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "code-scanning-fixer" GH_AW_WORKFLOW_NAME: "Code Scanning Fixer" diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index e8296568ca..f132fba3d1 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -1110,6 +1110,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "code-simplifier" GH_AW_WORKFLOW_ID: "code-simplifier" diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index 3e6c68e45b..44a46d366f 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -1070,6 +1070,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "commit-changes-analyzer" GH_AW_WORKFLOW_NAME: "Commit Changes Analyzer" diff --git a/.github/workflows/contribution-check.lock.yml b/.github/workflows/contribution-check.lock.yml index a90771c888..be843c1359 100644 --- a/.github/workflows/contribution-check.lock.yml +++ b/.github/workflows/contribution-check.lock.yml @@ -1098,6 +1098,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "contribution-check" GH_AW_WORKFLOW_NAME: "Contribution Check" diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index 5a1a92f54b..1c65beac94 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -1213,6 +1213,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "copilot-agent-analysis" GH_AW_WORKFLOW_NAME: "Copilot Agent PR Analysis" diff --git a/.github/workflows/copilot-cli-deep-research.lock.yml b/.github/workflows/copilot-cli-deep-research.lock.yml index c95e0f6c0c..ba9a524271 100644 --- a/.github/workflows/copilot-cli-deep-research.lock.yml +++ b/.github/workflows/copilot-cli-deep-research.lock.yml @@ -1131,6 +1131,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "copilot-cli-deep-research" GH_AW_WORKFLOW_NAME: "Copilot CLI Deep Research Agent" diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 5854b7243b..95fa67822b 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -1178,6 +1178,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "copilot-pr-merged-report" GH_AW_WORKFLOW_NAME: "Daily Copilot PR Merged Report" diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 023c39a25f..e0bc093e1c 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -1227,6 +1227,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "copilot-pr-nlp-analysis" GH_AW_WORKFLOW_NAME: "Copilot PR Conversation NLP Analysis" diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index b26c4e951b..ad252ac35a 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -1151,6 +1151,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "copilot-pr-prompt-analysis" GH_AW_WORKFLOW_NAME: "Copilot PR Prompt Pattern Analysis" diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 25905656aa..73e0490da6 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -1292,6 +1292,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "copilot-session-insights" GH_AW_WORKFLOW_NAME: "Copilot Session Insights" diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index 879590f600..a3fbb0029a 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -1142,6 +1142,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e โš’๏ธ *Crafted with care by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ› ๏ธ Master Crafter at work! [{workflow_name}]({run_url}) is forging a new workflow on this {event_type}...\",\"runSuccess\":\"โš’๏ธ Masterpiece complete! [{workflow_name}]({run_url}) has crafted your workflow. May it serve you well! ๐ŸŽ–๏ธ\",\"runFailure\":\"๐Ÿ› ๏ธ Forge cooling down! [{workflow_name}]({run_url}) {status}. The anvil awaits another attempt...\"}" GH_AW_WORKFLOW_ID: "craft" diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index ecbe696414..a37b8c4cbb 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -1045,6 +1045,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "daily-architecture-diagram" GH_AW_WORKFLOW_NAME: "Architecture Diagram Generator" diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index 86323bcdf5..4587481ca1 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -1036,6 +1036,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "daily-assign-issue-to-user" GH_AW_WORKFLOW_NAME: "Auto-Assign Issue" diff --git a/.github/workflows/daily-choice-test.lock.yml b/.github/workflows/daily-choice-test.lock.yml index 0ef51a685d..846e02fcbf 100644 --- a/.github/workflows/daily-choice-test.lock.yml +++ b/.github/workflows/daily-choice-test.lock.yml @@ -1030,6 +1030,7 @@ jobs: runs-on: ubuntu-slim timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_SAFE_OUTPUTS_STAGED: "true" GH_AW_TRACKER_ID: "daily-choice-test" diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index 450d9ae2b5..dbd6b7b83a 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -1323,6 +1323,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-cli-performance" GH_AW_WORKFLOW_ID: "daily-cli-performance" diff --git a/.github/workflows/daily-cli-tools-tester.lock.yml b/.github/workflows/daily-cli-tools-tester.lock.yml index 25d0bcad42..d79fb5d232 100644 --- a/.github/workflows/daily-cli-tools-tester.lock.yml +++ b/.github/workflows/daily-cli-tools-tester.lock.yml @@ -1090,6 +1090,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "daily-cli-tools-tester" GH_AW_WORKFLOW_NAME: "Daily CLI Tools Exploratory Tester" diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index f2958e6075..284fbedfc4 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -1270,6 +1270,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "daily-code-metrics" GH_AW_WORKFLOW_ID: "daily-code-metrics" diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index be3f241ebb..3a93aa1886 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -1066,6 +1066,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-compiler-quality" GH_AW_WORKFLOW_ID: "daily-compiler-quality" diff --git a/.github/workflows/daily-copilot-token-report.lock.yml b/.github/workflows/daily-copilot-token-report.lock.yml index c7bc84243f..a208f9b307 100644 --- a/.github/workflows/daily-copilot-token-report.lock.yml +++ b/.github/workflows/daily-copilot-token-report.lock.yml @@ -1238,6 +1238,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-copilot-token-report" GH_AW_WORKFLOW_ID: "daily-copilot-token-report" diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index a87cc51b8f..5cf43241f7 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -1234,6 +1234,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "daily-doc-healer" GH_AW_WORKFLOW_ID: "daily-doc-healer" diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index e43c36dbe9..e011f13593 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -1161,6 +1161,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "daily-doc-updater" GH_AW_WORKFLOW_ID: "daily-doc-updater" diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 1b32859878..0444d0c2e6 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -963,6 +963,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_ENGINE_MODEL: "gpt-5.1-codex-mini" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿชถ *Penned with care by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ“œ Hark! The muse awakens โ€” [{workflow_name}]({run_url}) begins its verse upon this {event_type}...\",\"runSuccess\":\"โœจ Lo! [{workflow_name}]({run_url}) hath woven its tale to completion, like a sonnet finding its final rhyme. ๐ŸŒŸ\",\"runFailure\":\"๐ŸŒง๏ธ Alas! [{workflow_name}]({run_url}) {status}, its quill fallen mid-verse. The poem remains unfinished...\"}" diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 872cafb25f..34be8f3611 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -1113,6 +1113,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-file-diet" GH_AW_WORKFLOW_ID: "daily-file-diet" diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 963176d84f..23c808d491 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -1178,6 +1178,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-firewall-report" GH_AW_WORKFLOW_ID: "daily-firewall-report" diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index ff82e41227..b9854b4543 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -1213,6 +1213,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_TRACKER_ID: "daily-issues-report" GH_AW_WORKFLOW_ID: "daily-issues-report" diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index f3826c5d10..893050992d 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -927,6 +927,7 @@ jobs: security-events: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "malicious-code-scan" GH_AW_WORKFLOW_ID: "daily-malicious-code-scan" diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index 4d1a51a8f6..ee06e7acbb 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -1116,6 +1116,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "mcp-concurrency-analysis" GH_AW_WORKFLOW_ID: "daily-mcp-concurrency-analysis" diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 533e1d1569..c31ff3288d 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -1208,6 +1208,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "daily-multi-device-docs-tester" GH_AW_WORKFLOW_ID: "daily-multi-device-docs-tester" diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 73de7452a8..c2de182391 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -1300,6 +1300,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-news-weekday" GH_AW_WORKFLOW_ID: "daily-news" diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index b3b6447ca3..f347673113 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -1178,6 +1178,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_TRACKER_ID: "daily-observability-report" GH_AW_WORKFLOW_ID: "daily-observability-report" diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index 0bd963eb88..1fafc613dd 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -1654,6 +1654,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-performance-summary" GH_AW_WORKFLOW_ID: "daily-performance-summary" diff --git a/.github/workflows/daily-regulatory.lock.yml b/.github/workflows/daily-regulatory.lock.yml index 17983ad038..5905b2f7cc 100644 --- a/.github/workflows/daily-regulatory.lock.yml +++ b/.github/workflows/daily-regulatory.lock.yml @@ -1559,6 +1559,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-regulatory" GH_AW_WORKFLOW_ID: "daily-regulatory" diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 0015edf74e..16bfa4e85c 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -1289,6 +1289,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "daily-rendering-scripts-verifier" GH_AW_WORKFLOW_ID: "daily-rendering-scripts-verifier" diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index d7aad031eb..ea86c6e147 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -1108,6 +1108,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-repo-chronicle" GH_AW_WORKFLOW_ID: "daily-repo-chronicle" diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index 179dc68697..987d4615e2 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -1252,6 +1252,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "daily-safe-output-optimizer" GH_AW_WORKFLOW_NAME: "Daily Safe Output Tool Optimizer" diff --git a/.github/workflows/daily-safe-outputs-conformance.lock.yml b/.github/workflows/daily-safe-outputs-conformance.lock.yml index f0d65a65ed..7758245323 100644 --- a/.github/workflows/daily-safe-outputs-conformance.lock.yml +++ b/.github/workflows/daily-safe-outputs-conformance.lock.yml @@ -1086,6 +1086,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "safe-outputs-conformance" GH_AW_WORKFLOW_ID: "daily-safe-outputs-conformance" diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index 9ff7dba5ac..47b54cef39 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -1072,6 +1072,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-secrets-analysis" GH_AW_WORKFLOW_ID: "daily-secrets-analysis" diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index aca72e57fe..4cfc6416aa 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -1090,6 +1090,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "security-red-team" GH_AW_WORKFLOW_ID: "daily-security-red-team" diff --git a/.github/workflows/daily-semgrep-scan.lock.yml b/.github/workflows/daily-semgrep-scan.lock.yml index 3f364a8f83..a2c2ba02ec 100644 --- a/.github/workflows/daily-semgrep-scan.lock.yml +++ b/.github/workflows/daily-semgrep-scan.lock.yml @@ -1060,6 +1060,7 @@ jobs: security-events: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "daily-semgrep-scan" GH_AW_WORKFLOW_NAME: "Daily Semgrep Scan" diff --git a/.github/workflows/daily-syntax-error-quality.lock.yml b/.github/workflows/daily-syntax-error-quality.lock.yml index 68acacfeb8..279a1c9a10 100644 --- a/.github/workflows/daily-syntax-error-quality.lock.yml +++ b/.github/workflows/daily-syntax-error-quality.lock.yml @@ -1050,6 +1050,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-syntax-error-quality" GH_AW_WORKFLOW_ID: "daily-syntax-error-quality" diff --git a/.github/workflows/daily-team-evolution-insights.lock.yml b/.github/workflows/daily-team-evolution-insights.lock.yml index d5aa6c5d24..debe387646 100644 --- a/.github/workflows/daily-team-evolution-insights.lock.yml +++ b/.github/workflows/daily-team-evolution-insights.lock.yml @@ -1071,6 +1071,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "daily-team-evolution-insights" GH_AW_WORKFLOW_ID: "daily-team-evolution-insights" diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index 163e8dbfef..13a0a625de 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -1081,6 +1081,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-team-status" GH_AW_WORKFLOW_ID: "daily-team-status" diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index dce970b799..250cfe91ea 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -1213,6 +1213,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-testify-uber-super-expert" GH_AW_WORKFLOW_ID: "daily-testify-uber-super-expert" diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 2f51037d06..99d103b874 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -1047,6 +1047,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "daily-workflow-updater" GH_AW_WORKFLOW_ID: "daily-workflow-updater" diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index bfdd55af83..3a766b3d2e 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -1131,6 +1131,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "dead-code-remover" GH_AW_WORKFLOW_NAME: "Dead Code Removal Agent" diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 005b6eedda..5d8fa3ae1b 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -1338,6 +1338,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_TRACKER_ID: "deep-report-intel-agent" GH_AW_WORKFLOW_ID: "deep-report" diff --git a/.github/workflows/delight.lock.yml b/.github/workflows/delight.lock.yml index 4d40f31a15..6096d2d96a 100644 --- a/.github/workflows/delight.lock.yml +++ b/.github/workflows/delight.lock.yml @@ -1216,6 +1216,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ“Š *User experience analysis by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ“Š Delight Agent starting! [{workflow_name}]({run_url}) is analyzing user-facing aspects for improvement opportunities...\",\"runSuccess\":\"โœ… Analysis complete! [{workflow_name}]({run_url}) has identified targeted improvements for user experience.\",\"runFailure\":\"โš ๏ธ Analysis interrupted! [{workflow_name}]({run_url}) {status}. Please review the logs...\"}" GH_AW_TRACKER_ID: "delight-daily" diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index 0b3a416adc..e2f6484a79 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -1054,6 +1054,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "dependabot-burner" GH_AW_WORKFLOW_NAME: "Dependabot Burner" diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index 0776eadcec..3e49a00d40 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -1064,6 +1064,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "dependabot-go-checker" GH_AW_WORKFLOW_NAME: "Dependabot Dependency Checker" diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index 9cc8a45a34..a513d4d6c8 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -1137,6 +1137,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿฆ… *Observed from above by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿฆ… Dev Hawk circles the sky! [{workflow_name}]({run_url}) is monitoring this {event_type} from above...\",\"runSuccess\":\"๐Ÿฆ… Hawk eyes report! [{workflow_name}]({run_url}) has completed reconnaissance. Intel delivered! ๐ŸŽฏ\",\"runFailure\":\"๐Ÿฆ… Hawk down! [{workflow_name}]({run_url}) {status}. The skies grow quiet...\"}" GH_AW_WORKFLOW_ID: "dev-hawk" diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index 13b8b9a1fb..69bfbbdda0 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -1014,6 +1014,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "dev" GH_AW_WORKFLOW_NAME: "Dev" diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 7871a8965d..de15d941e0 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -1240,6 +1240,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "developer-docs-consolidator" GH_AW_WORKFLOW_NAME: "Developer Documentation Consolidator" diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 0486cb0999..3c9e53b626 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -1048,6 +1048,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "dictation-prompt" GH_AW_WORKFLOW_NAME: "Dictation Prompt Generator" diff --git a/.github/workflows/discussion-task-miner.lock.yml b/.github/workflows/discussion-task-miner.lock.yml index 3b615e1af9..9d51acf23c 100644 --- a/.github/workflows/discussion-task-miner.lock.yml +++ b/.github/workflows/discussion-task-miner.lock.yml @@ -1191,6 +1191,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ” *Task mining by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ” Discussion Task Miner starting! [{workflow_name}]({run_url}) is scanning discussions for code quality improvements...\",\"runSuccess\":\"โœ… Task mining complete! [{workflow_name}]({run_url}) has identified actionable code quality tasks. ๐Ÿ“Š\",\"runFailure\":\"โš ๏ธ Task mining interrupted! [{workflow_name}]({run_url}) {status}. Please review the logs...\"}" GH_AW_TRACKER_ID: "discussion-task-miner" diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index aff39e46ea..67f1884f5a 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -1059,6 +1059,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "docs-noob-tester" GH_AW_WORKFLOW_NAME: "Documentation Noob Tester" diff --git a/.github/workflows/draft-pr-cleanup.lock.yml b/.github/workflows/draft-pr-cleanup.lock.yml index ac2491f649..f571668874 100644 --- a/.github/workflows/draft-pr-cleanup.lock.yml +++ b/.github/workflows/draft-pr-cleanup.lock.yml @@ -1066,6 +1066,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"runStarted\":\"๐Ÿงน Starting draft PR cleanup... [{workflow_name}]({run_url}) is reviewing draft PRs for staleness\",\"runSuccess\":\"โœ… Draft PR cleanup complete! [{workflow_name}]({run_url}) has reviewed and processed stale drafts.\",\"runFailure\":\"โŒ Draft PR cleanup failed! [{workflow_name}]({run_url}) {status}. Some draft PRs may not be processed.\"}" GH_AW_WORKFLOW_ID: "draft-pr-cleanup" diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 8cc5bd29c5..2227fbabbd 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -1060,6 +1060,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_WORKFLOW_ID: "duplicate-code-detector" GH_AW_WORKFLOW_NAME: "Duplicate Code Detector" diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 4f5aa8ea57..1ce9a155c1 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -1130,6 +1130,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "example-workflow-analyzer" GH_AW_WORKFLOW_NAME: "Weekly Workflow Analysis" diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index 9798c00630..473c135892 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -1212,6 +1212,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "firewall-escape" GH_AW_WORKFLOW_ID: "firewall-escape" diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index adc30d9d85..dc5f7f9ab7 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -1060,6 +1060,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "functional-pragmatist" GH_AW_WORKFLOW_ID: "functional-pragmatist" diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index cbe2858c53..f37017484d 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -1166,6 +1166,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "github-mcp-structural-analysis" GH_AW_WORKFLOW_NAME: "GitHub MCP Structural Analysis" diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 2cde7a5481..d0b1750e6b 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -1197,6 +1197,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "github-mcp-tools-report" GH_AW_WORKFLOW_NAME: "GitHub MCP Remote Server Tools Report Generator" diff --git a/.github/workflows/github-remote-mcp-auth-test.lock.yml b/.github/workflows/github-remote-mcp-auth-test.lock.yml index 82a1cf3d62..2059ad1ac2 100644 --- a/.github/workflows/github-remote-mcp-auth-test.lock.yml +++ b/.github/workflows/github-remote-mcp-auth-test.lock.yml @@ -1017,6 +1017,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: "gpt-5.1-codex-mini" GH_AW_WORKFLOW_ID: "github-remote-mcp-auth-test" diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 90e1f22ce9..c4cbce13f2 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -1133,6 +1133,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "glossary-maintainer" GH_AW_WORKFLOW_NAME: "Glossary Maintainer" diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index eb5050409d..3c9eec8ea6 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -1136,6 +1136,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "go-fan-daily" GH_AW_WORKFLOW_ID: "go-fan" diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 313b933f69..dee57ac6a4 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -1324,6 +1324,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "go-logger" GH_AW_WORKFLOW_NAME: "Go Logger Enhancement" diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index 5888e73ee9..fd89872950 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -1128,6 +1128,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "go-pattern-detector" GH_AW_WORKFLOW_NAME: "Go Pattern Detector" diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index 1cdcda2be6..4d413e995c 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -1051,6 +1051,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "gpclean" GH_AW_WORKFLOW_NAME: "GPL Dependency Cleaner (gpclean)" diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 7337146a3f..c18269bca0 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -1184,6 +1184,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ˜ค *Reluctantly reviewed by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ˜ค *sigh* [{workflow_name}]({run_url}) is begrudgingly looking at this {event_type}... This better be worth my time.\",\"runSuccess\":\"๐Ÿ˜ค Fine. [{workflow_name}]({run_url}) finished the review. It wasn't completely terrible. I guess. ๐Ÿ™„\",\"runFailure\":\"๐Ÿ˜ค Great. [{workflow_name}]({run_url}) {status}. As if my day couldn't get any worse...\"}" GH_AW_WORKFLOW_ID: "grumpy-reviewer" diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index 8a43dd371e..171aa03a5e 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -1159,6 +1159,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "hourly-ci-cleaner" GH_AW_WORKFLOW_ID: "hourly-ci-cleaner" diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 289779d6ee..844a5d3414 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -1152,6 +1152,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "instructions-janitor" GH_AW_WORKFLOW_NAME: "Instructions Janitor" diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index e3c06127e9..c0a8cf7082 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -1123,6 +1123,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_WORKFLOW_ID: "issue-arborist" GH_AW_WORKFLOW_NAME: "Issue Arborist" diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 74933f77a6..62d15cdeaa 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -1123,6 +1123,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: "gpt-5.1-codex-mini" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿช *Om nom nom by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿช ISSUE! ISSUE! [{workflow_name}]({run_url}) hungry for issues on this {event_type}! Om nom nom...\",\"runSuccess\":\"๐Ÿช YUMMY! [{workflow_name}]({run_url}) ate the issues! That was DELICIOUS! Me want MORE! ๐Ÿ˜‹\",\"runFailure\":\"๐Ÿช Aww... [{workflow_name}]({run_url}) {status}. No cookie for monster today... ๐Ÿ˜ข\"}" diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index 7cfb3e3046..7499aefc47 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -1010,6 +1010,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "issue-triage-agent" GH_AW_WORKFLOW_NAME: "Issue Triage Agent" diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index aacfcddced..92e36f5d9d 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -1096,6 +1096,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "jsweep-daily" GH_AW_WORKFLOW_ID: "jsweep" diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 6e7a02bcb2..9235aabd18 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -1089,6 +1089,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "layout-spec-maintainer" GH_AW_WORKFLOW_ID: "layout-spec-maintainer" diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 9cf72f7840..25f9c00195 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -1092,6 +1092,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "lockfile-stats" GH_AW_WORKFLOW_NAME: "Lockfile Statistics Analysis Agent" diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index a3b71d78f8..acf6b17109 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -1693,6 +1693,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "mcp-inspector" GH_AW_WORKFLOW_NAME: "MCP Inspector Agent" diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 2443a3195c..f83a50b015 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -1137,6 +1137,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "mergefest" GH_AW_WORKFLOW_NAME: "Mergefest" diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index 6cbcea25b1..79c4593c03 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -994,6 +994,7 @@ jobs: runs-on: ubuntu-slim timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "notion-issue-summary" GH_AW_WORKFLOW_NAME: "Issue Summary to Notion" diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index c44ec36451..f837b06a92 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -1104,6 +1104,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "org-health-report" GH_AW_WORKFLOW_NAME: "Organization Health Report" diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index b0f6c98d1b..59147498db 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -1213,6 +1213,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ“„ *Summary compiled by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ“– Page by page! [{workflow_name}]({run_url}) is reading through this {event_type}...\",\"runSuccess\":\"๐Ÿ“š TL;DR ready! [{workflow_name}]({run_url}) has distilled the essence. Knowledge condensed! โœจ\",\"runFailure\":\"๐Ÿ“– Reading interrupted! [{workflow_name}]({run_url}) {status}. The document remains unsummarized...\"}" GH_AW_WORKFLOW_ID: "pdf-summary" diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index e7f8c4668a..bd7e71a719 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -1175,6 +1175,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "plan" GH_AW_WORKFLOW_NAME: "Plan Command" diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 4ef0c4d5e3..03360c5bc8 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -1819,6 +1819,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_ENGINE_MODEL: "gpt-5" GH_AW_SAFE_OUTPUTS_STAGED: "true" diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index 46c99c8a44..e52edb8d79 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -1189,6 +1189,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "portfolio-analyst-weekly" GH_AW_WORKFLOW_ID: "portfolio-analyst" diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index 4c6fb951e1..b48aaf10b6 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -1289,6 +1289,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ” *Meticulously inspected by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ”ฌ Adjusting monocle... [{workflow_name}]({run_url}) is scrutinizing every pixel of this {event_type}...\",\"runSuccess\":\"๐Ÿ” Nitpicks catalogued! [{workflow_name}]({run_url}) has documented all the tiny details. Perfection awaits! โœ…\",\"runFailure\":\"๐Ÿ”ฌ Lens cracked! [{workflow_name}]({run_url}) {status}. Some nitpicks remain undetected...\"}" GH_AW_WORKFLOW_ID: "pr-nitpick-reviewer" diff --git a/.github/workflows/pr-triage-agent.lock.yml b/.github/workflows/pr-triage-agent.lock.yml index d1eb2cced9..cef773782c 100644 --- a/.github/workflows/pr-triage-agent.lock.yml +++ b/.github/workflows/pr-triage-agent.lock.yml @@ -1197,6 +1197,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"runStarted\":\"๐Ÿ” Starting PR triage analysis... [{workflow_name}]({run_url}) is categorizing and prioritizing agent-created PRs\",\"runSuccess\":\"โœ… PR triage complete! [{workflow_name}]({run_url}) has analyzed and categorized PRs. Check the issue for detailed report.\",\"runFailure\":\"โŒ PR triage failed! [{workflow_name}]({run_url}) {status}. Some PRs may not be triaged.\"}" GH_AW_WORKFLOW_ID: "pr-triage-agent" diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index f5db3e3f1a..745a468320 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -1223,6 +1223,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "prompt-clustering-analysis" GH_AW_WORKFLOW_NAME: "Copilot Agent Prompt Clustering Analysis" diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 67984b1f38..335b388d18 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -1173,6 +1173,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "python-data-charts" GH_AW_WORKFLOW_NAME: "Python Data Visualization Generator" diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 1363f9439a..66f146b8f2 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -1350,6 +1350,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐ŸŽฉ *Equipped by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ”ง Pay attention, 007! [{workflow_name}]({run_url}) is preparing your gadgets for this {event_type}...\",\"runSuccess\":\"๐ŸŽฉ Mission equipment ready! [{workflow_name}]({run_url}) has optimized your workflow. Use wisely, 007! ๐Ÿ”ซ\",\"runFailure\":\"๐Ÿ”ง Technical difficulties! [{workflow_name}]({run_url}) {status}. Even Q Branch has bad days...\"}" GH_AW_WORKFLOW_ID: "q" diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 7df034e459..189a41aeb2 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -1146,6 +1146,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"runStarted\":\"๐Ÿ” Starting code refinement... [{workflow_name}]({run_url}) is analyzing PR #${{ github.event.pull_request.number }} for style alignment and security issues\",\"runSuccess\":\"โœ… Refinement complete! [{workflow_name}]({run_url}) has created a PR with improvements for PR #${{ github.event.pull_request.number }}\",\"runFailure\":\"โŒ Refinement failed! [{workflow_name}]({run_url}) {status} while processing PR #${{ github.event.pull_request.number }}\"}" GH_AW_WORKFLOW_ID: "refiner" diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index f3d058dc3f..0135123399 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -1311,6 +1311,7 @@ jobs: contents: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "release" GH_AW_WORKFLOW_NAME: "Release" diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index 83ec537f4d..1a6c64d1a2 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -1043,6 +1043,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "repo-audit-analyzer" GH_AW_WORKFLOW_NAME: "Repository Audit & Agentic Workflow Opportunity Analyzer" diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 12f862319a..21ba9542a9 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -1009,6 +1009,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "repo-tree-map" GH_AW_WORKFLOW_NAME: "Repository Tree Map Generator" diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 526df500e6..a9855b10e1 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -1047,6 +1047,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "repository-quality-improver" GH_AW_WORKFLOW_NAME: "Repository Quality Improvement Agent" diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 7900300b5b..c2677b8b88 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -1035,6 +1035,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "research" GH_AW_WORKFLOW_NAME: "Basic Research Agent" diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 9343f5a1b8..701f0bdf5a 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -1185,6 +1185,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "safe-output-health" GH_AW_WORKFLOW_NAME: "Safe Output Health Monitor" diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index f015909716..2b4668cd18 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -1093,6 +1093,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "schema-consistency-checker" GH_AW_WORKFLOW_NAME: "Schema Consistency Checker" diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index ccaa45bc8d..317ce5ae79 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -1352,6 +1352,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ”ญ *Intelligence gathered by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ•๏ธ Scout on patrol! [{workflow_name}]({run_url}) is blazing trails through this {event_type}...\",\"runSuccess\":\"๐Ÿ”ญ Recon complete! [{workflow_name}]({run_url}) has charted the territory. Map ready! ๐Ÿ—บ๏ธ\",\"runFailure\":\"๐Ÿ•๏ธ Lost in the wilderness! [{workflow_name}]({run_url}) {status}. Sending search party...\"}" GH_AW_WORKFLOW_ID: "scout" diff --git a/.github/workflows/security-alert-burndown.campaign.g.lock.yml b/.github/workflows/security-alert-burndown.campaign.g.lock.yml index 7ee68da62b..312325d34b 100644 --- a/.github/workflows/security-alert-burndown.campaign.g.lock.yml +++ b/.github/workflows/security-alert-burndown.campaign.g.lock.yml @@ -1498,6 +1498,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "security-alert-burndown.campaign.g" GH_AW_WORKFLOW_NAME: "Security Alert Burndown" diff --git a/.github/workflows/security-compliance.lock.yml b/.github/workflows/security-compliance.lock.yml index a75988b8a0..c1059fab96 100644 --- a/.github/workflows/security-compliance.lock.yml +++ b/.github/workflows/security-compliance.lock.yml @@ -1151,6 +1151,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "security-compliance" GH_AW_WORKFLOW_NAME: "Security Compliance Campaign" diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index a4c4ade5ab..af1d4909c9 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -1263,6 +1263,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ”’ *Security review by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ” [{workflow_name}]({run_url}) is analyzing this {event_type} for security implications...\",\"runSuccess\":\"๐Ÿ”’ [{workflow_name}]({run_url}) completed the security review.\",\"runFailure\":\"โš ๏ธ [{workflow_name}]({run_url}) {status} during security review.\"}" GH_AW_WORKFLOW_ID: "security-review" diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 99450dd76b..9aa5ba1f2f 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -1164,6 +1164,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "semantic-function-refactor" GH_AW_WORKFLOW_NAME: "Semantic Function Refactoring" diff --git a/.github/workflows/sergo.lock.yml b/.github/workflows/sergo.lock.yml index 59cdea5c6b..c937fd30c5 100644 --- a/.github/workflows/sergo.lock.yml +++ b/.github/workflows/sergo.lock.yml @@ -1135,6 +1135,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_TRACKER_ID: "sergo-daily" GH_AW_WORKFLOW_ID: "sergo" diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 6d69cff80c..b8375be9f1 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -1200,6 +1200,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "slide-deck-maintainer" GH_AW_WORKFLOW_ID: "slide-deck-maintainer" diff --git a/.github/workflows/smoke-agent.lock.yml b/.github/workflows/smoke-agent.lock.yml index 26c18fadc7..5fe8b4a285 100644 --- a/.github/workflows/smoke-agent.lock.yml +++ b/.github/workflows/smoke-agent.lock.yml @@ -1130,6 +1130,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿค– *Smoke test by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿค– [{workflow_name}]({run_url}) is looking for a Smoke issue to assign...\",\"runSuccess\":\"โœ… [{workflow_name}]({run_url}) completed. Issue assigned to the agentic-workflows agent.\",\"runFailure\":\"โŒ [{workflow_name}]({run_url}) {status}. Check the logs for details.\"}" GH_AW_WORKFLOW_ID: "smoke-agent" diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 0e3379dc23..19d735f62f 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -2709,6 +2709,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ’ฅ *[THE END] โ€” Illustrated by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ’ฅ **WHOOSH!** [{workflow_name}]({run_url}) springs into action on this {event_type}! *[Panel 1 begins...]*\",\"runSuccess\":\"๐ŸŽฌ **THE END** โ€” [{workflow_name}]({run_url}) **MISSION: ACCOMPLISHED!** The hero saves the day! โœจ\",\"runFailure\":\"๐Ÿ’ซ **TO BE CONTINUED...** [{workflow_name}]({run_url}) {status}! Our hero faces unexpected challenges...\"}" GH_AW_WORKFLOW_ID: "smoke-claude" diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 5c4d107de9..35c3e39324 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -1604,6 +1604,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "codex" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ”ฎ *The oracle has spoken through [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ”ฎ The ancient spirits stir... [{workflow_name}]({run_url}) awakens to divine this {event_type}...\",\"runSuccess\":\"โœจ The prophecy is fulfilled... [{workflow_name}]({run_url}) has completed its mystical journey. The stars align. ๐ŸŒŸ\",\"runFailure\":\"๐ŸŒ‘ The shadows whisper... [{workflow_name}]({run_url}) {status}. The oracle requires further meditation...\"}" GH_AW_WORKFLOW_ID: "smoke-codex" diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index b5e70bb79a..65c971232b 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -2128,6 +2128,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ“ฐ *BREAKING: Report filed by [{workflow_name}]({run_url})*\",\"appendOnlyComments\":true,\"runStarted\":\"๐Ÿ“ฐ BREAKING: [{workflow_name}]({run_url}) is now investigating this {event_type}. Sources say the story is developing...\",\"runSuccess\":\"๐Ÿ“ฐ VERDICT: [{workflow_name}]({run_url}) has concluded. All systems operational. This is a developing story. ๐ŸŽค\",\"runFailure\":\"๐Ÿ“ฐ DEVELOPING STORY: [{workflow_name}]({run_url}) reports {status}. Our correspondents are investigating the incident...\"}" GH_AW_WORKFLOW_ID: "smoke-copilot-arm" diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 2cc70e0230..4bc8099d46 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -2167,6 +2167,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ“ฐ *BREAKING: Report filed by [{workflow_name}]({run_url})*\",\"appendOnlyComments\":true,\"runStarted\":\"๐Ÿ“ฐ BREAKING: [{workflow_name}]({run_url}) is now investigating this {event_type}. Sources say the story is developing...\",\"runSuccess\":\"๐Ÿ“ฐ VERDICT: [{workflow_name}]({run_url}) has concluded. All systems operational. This is a developing story. ๐ŸŽค\",\"runFailure\":\"๐Ÿ“ฐ DEVELOPING STORY: [{workflow_name}]({run_url}) reports {status}. Our correspondents are investigating the incident...\"}" GH_AW_WORKFLOW_ID: "smoke-copilot" diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index bdc4a74306..96aa7728b1 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -1262,6 +1262,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ”ฌ *Cross-repo smoke test by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ”ฌ [{workflow_name}]({run_url}) is testing cross-repo PR creation in githubnext/gh-aw-side-repo...\",\"runSuccess\":\"โœ… [{workflow_name}]({run_url}) successfully created a cross-repo PR in githubnext/gh-aw-side-repo!\",\"runFailure\":\"โŒ [{workflow_name}]({run_url}) failed to create a cross-repo PR: {status}\"}" GH_AW_WORKFLOW_ID: "smoke-create-cross-repo-pr" diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 0174fa3d57..06ebb27042 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -1345,6 +1345,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "gemini" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e โœจ *[{workflow_name}]({run_url}) โ€” Powered by Gemini*\",\"runStarted\":\"โœจ Gemini awakens... [{workflow_name}]({run_url}) begins its journey on this {event_type}...\",\"runSuccess\":\"๐Ÿš€ [{workflow_name}]({run_url}) **MISSION COMPLETE!** Gemini has spoken. โœจ\",\"runFailure\":\"โš ๏ธ [{workflow_name}]({run_url}) {status}. Gemini encountered unexpected challenges...\"}" GH_AW_WORKFLOW_ID: "smoke-gemini" diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index f97b978146..790cd13ced 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -1221,6 +1221,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿงช *Multi PR smoke test by [{workflow_name}]({run_url})*\",\"appendOnlyComments\":true,\"runStarted\":\"๐Ÿงช [{workflow_name}]({run_url}) is now testing multiple PR creation...\",\"runSuccess\":\"โœ… [{workflow_name}]({run_url}) successfully created multiple PRs.\",\"runFailure\":\"โŒ [{workflow_name}]({run_url}) failed to create multiple PRs. Check the logs.\"}" GH_AW_WORKFLOW_ID: "smoke-multi-pr" diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index 5d254f25ea..e362415024 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -1614,6 +1614,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿงช *Project smoke test report by [{workflow_name}]({run_url})*\",\"appendOnlyComments\":true,\"runStarted\":\"๐Ÿงช [{workflow_name}]({run_url}) is now testing project operations...\",\"runSuccess\":\"โœ… [{workflow_name}]({run_url}) completed successfully. All project operations validated.\",\"runFailure\":\"โŒ [{workflow_name}]({run_url}) encountered failures. Check the logs for details.\"}" GH_AW_WORKFLOW_ID: "smoke-project" diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 81c1595a71..ed178a2e5d 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -1215,6 +1215,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿงช *Temporary ID smoke test by [{workflow_name}]({run_url})*\",\"appendOnlyComments\":true,\"runStarted\":\"๐Ÿงช [{workflow_name}]({run_url}) is now testing temporary ID functionality...\",\"runSuccess\":\"โœ… [{workflow_name}]({run_url}) completed successfully. Temporary ID validation passed.\",\"runFailure\":\"โŒ [{workflow_name}]({run_url}) encountered failures. Check the logs for details.\"}" GH_AW_WORKFLOW_ID: "smoke-temporary-id" diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index 2278d8fdbd..93c2071e91 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -1102,6 +1102,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ”ง *Tool validation by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ”ง Starting tool validation... [{workflow_name}]({run_url}) is checking the agent container tools...\",\"runSuccess\":\"โœ… All tools validated successfully! [{workflow_name}]({run_url}) confirms agent container is ready.\",\"runFailure\":\"โŒ Tool validation failed! [{workflow_name}]({run_url}) detected missing tools: {status}\"}" GH_AW_WORKFLOW_ID: "smoke-test-tools" diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index 91acf67561..388316b8bb 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -1243,6 +1243,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ“œ *Cross-repo PR update smoke test by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ“œ [{workflow_name}]({run_url}) is adding the next Odyssey line to githubnext/gh-aw-side-repo PR #1...\",\"runSuccess\":\"โœ… [{workflow_name}]({run_url}) successfully updated the cross-repo PR with a new Odyssey line!\",\"runFailure\":\"โŒ [{workflow_name}]({run_url}) failed to update the cross-repo PR: {status}\"}" GH_AW_WORKFLOW_ID: "smoke-update-cross-repo-pr" diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml index 50734e98e1..3bb6c1cf08 100644 --- a/.github/workflows/smoke-workflow-call.lock.yml +++ b/.github/workflows/smoke-workflow-call.lock.yml @@ -1047,6 +1047,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ” *workflow_call smoke test by [{workflow_name}]({run_url})*\",\"appendOnlyComments\":true,\"runStarted\":\"๐Ÿ” [{workflow_name}]({run_url}) is validating workflow_call checkout...\",\"runSuccess\":\"โœ… [{workflow_name}]({run_url}) successfully validated workflow_call checkout.\",\"runFailure\":\"โŒ [{workflow_name}]({run_url}) failed to validate workflow_call checkout. Check the logs.\"}" GH_AW_WORKFLOW_ID: "smoke-workflow-call" diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index a2e2297cf7..d129083032 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -1170,6 +1170,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ” *Analysis by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ” Stale Repository Identifier starting! [{workflow_name}]({run_url}) is analyzing repository activity...\",\"runSuccess\":\"โœ… Analysis complete! [{workflow_name}]({run_url}) has finished analyzing stale repositories.\",\"runFailure\":\"โš ๏ธ Analysis interrupted! [{workflow_name}]({run_url}) {status}.\"}" GH_AW_WORKFLOW_ID: "stale-repo-identifier" diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index c2ede0459e..ebcbdd03a5 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -1167,6 +1167,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "static-analysis-report" GH_AW_WORKFLOW_NAME: "Static Analysis Report" diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index 75a584bd3c..ce929504af 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -1118,6 +1118,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "step-name-alignment" GH_AW_WORKFLOW_NAME: "Step Name Alignment" diff --git a/.github/workflows/sub-issue-closer.lock.yml b/.github/workflows/sub-issue-closer.lock.yml index 3c8b84d293..482be85afb 100644 --- a/.github/workflows/sub-issue-closer.lock.yml +++ b/.github/workflows/sub-issue-closer.lock.yml @@ -1107,6 +1107,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "sub-issue-closer" GH_AW_WORKFLOW_NAME: "Sub-Issue Closer" diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 69ba9b1d95..b76f88c9c7 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -1066,6 +1066,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "super-linter" GH_AW_WORKFLOW_NAME: "Super Linter Report" diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 5f28476190..0eb9d703c0 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -1200,6 +1200,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ“ *Documentation by [{workflow_name}]({run_url})*\",\"runStarted\":\"โœ๏ธ The Technical Writer begins! [{workflow_name}]({run_url}) is documenting this {event_type}...\",\"runSuccess\":\"๐Ÿ“ Documentation complete! [{workflow_name}]({run_url}) has written the docs. Clear as crystal! โœจ\",\"runFailure\":\"โœ๏ธ Writer's block! [{workflow_name}]({run_url}) {status}. The page remains blank...\"}" GH_AW_WORKFLOW_ID: "technical-doc-writer" diff --git a/.github/workflows/terminal-stylist.lock.yml b/.github/workflows/terminal-stylist.lock.yml index ed91c41f51..5d7eac577c 100644 --- a/.github/workflows/terminal-stylist.lock.yml +++ b/.github/workflows/terminal-stylist.lock.yml @@ -1017,6 +1017,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "terminal-stylist" GH_AW_WORKFLOW_NAME: "Terminal Stylist" diff --git a/.github/workflows/test-create-pr-error-handling.lock.yml b/.github/workflows/test-create-pr-error-handling.lock.yml index 69280996c7..46c52fbe2e 100644 --- a/.github/workflows/test-create-pr-error-handling.lock.yml +++ b/.github/workflows/test-create-pr-error-handling.lock.yml @@ -1124,6 +1124,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "test-create-pr-error-handling" GH_AW_WORKFLOW_NAME: "Test Create PR Error Handling" diff --git a/.github/workflows/test-dispatcher.lock.yml b/.github/workflows/test-dispatcher.lock.yml index 4493cf07db..023cb3ccc8 100644 --- a/.github/workflows/test-dispatcher.lock.yml +++ b/.github/workflows/test-dispatcher.lock.yml @@ -955,6 +955,7 @@ jobs: actions: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "test-dispatcher" GH_AW_WORKFLOW_NAME: "Test Dispatcher Workflow" diff --git a/.github/workflows/test-project-url-default.lock.yml b/.github/workflows/test-project-url-default.lock.yml index 1851397f2c..ae10a673ba 100644 --- a/.github/workflows/test-project-url-default.lock.yml +++ b/.github/workflows/test-project-url-default.lock.yml @@ -1198,6 +1198,7 @@ jobs: contents: read timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "test-project-url-default" GH_AW_WORKFLOW_NAME: "Test Project URL Explicit Requirement" diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index e3c1d3771c..755437de2b 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -1240,6 +1240,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "tidy" GH_AW_WORKFLOW_NAME: "Tidy" diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index e279801618..9c247a2591 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -1103,6 +1103,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_WORKFLOW_ID: "typist" GH_AW_WORKFLOW_NAME: "Typist - Go Type Analysis" diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 5f22966a29..68f31de5ee 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -1129,6 +1129,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "ubuntu-image-analyzer" GH_AW_WORKFLOW_ID: "ubuntu-image-analyzer" diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index f9367f2866..0da645c607 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -1413,6 +1413,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "claude" GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e ๐Ÿ—œ๏ธ *Compressed by [{workflow_name}]({run_url})*\",\"runStarted\":\"๐Ÿ“ฆ Time to slim down! [{workflow_name}]({run_url}) is trimming the excess from this {event_type}...\",\"runSuccess\":\"๐Ÿ—œ๏ธ Docs on a diet! [{workflow_name}]({run_url}) has removed the bloat. Lean and mean! ๐Ÿ’ช\",\"runFailure\":\"๐Ÿ“ฆ Unbloating paused! [{workflow_name}]({run_url}) {status}. The docs remain... fluffy.\"}" GH_AW_WORKFLOW_ID: "unbloat-docs" diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index 572bb54c8c..2c7db953f7 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -1058,6 +1058,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "video-analyzer" GH_AW_WORKFLOW_NAME: "Video Analysis Agent" diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index 8c3d15ffa4..88d36f683a 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -1132,6 +1132,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "weekly-editors-health-check" GH_AW_WORKFLOW_ID: "weekly-editors-health-check" diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index e1b2c0e510..5863920a08 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -1087,6 +1087,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "weekly-issue-summary" GH_AW_WORKFLOW_ID: "weekly-issue-summary" diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index f895d835df..99cf200587 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -1043,6 +1043,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "weekly-safe-outputs-spec-review" GH_AW_WORKFLOW_ID: "weekly-safe-outputs-spec-review" diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml index 46910006d4..228009ab2a 100644 --- a/.github/workflows/workflow-generator.lock.yml +++ b/.github/workflows/workflow-generator.lock.yml @@ -1211,6 +1211,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "workflow-generator" GH_AW_WORKFLOW_NAME: "Workflow Generator" diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index 7ef22cec83..474ac69a73 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -1324,6 +1324,7 @@ jobs: pull-requests: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "workflow-health-manager" GH_AW_WORKFLOW_NAME: "Workflow Health Manager - Meta-Orchestrator" diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index 4f0991c2e9..d66ece5da7 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -1100,6 +1100,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_TRACKER_ID: "workflow-normalizer" GH_AW_WORKFLOW_ID: "workflow-normalizer" diff --git a/.github/workflows/workflow-skill-extractor.lock.yml b/.github/workflows/workflow-skill-extractor.lock.yml index c59b65673c..fbdf454487 100644 --- a/.github/workflows/workflow-skill-extractor.lock.yml +++ b/.github/workflows/workflow-skill-extractor.lock.yml @@ -1104,6 +1104,7 @@ jobs: issues: write timeout-minutes: 15 env: + GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/${{ github.workflow }}" GH_AW_ENGINE_ID: "copilot" GH_AW_WORKFLOW_ID: "workflow-skill-extractor" GH_AW_WORKFLOW_NAME: "Workflow Skill Extractor" diff --git a/actions/setup/js/close_older_discussions.cjs b/actions/setup/js/close_older_discussions.cjs index a65ab526ec..fbbf03a03b 100644 --- a/actions/setup/js/close_older_discussions.cjs +++ b/actions/setup/js/close_older_discussions.cjs @@ -57,6 +57,7 @@ async function searchOlderDiscussions(github, owner, repo, workflowId, categoryI number title url + body category { id } @@ -79,10 +80,15 @@ async function searchOlderDiscussions(github, owner, repo, workflowId, categoryI // 1. Must not be the excluded discussion (newly created one) // 2. Must not be already closed // 3. If categoryId is specified, must match + // 4. Body must contain the exact workflow-id marker (GitHub search tokenizes on + // delimiters so "foo" matches "foo-bar"; exact match prevents cross-workflow closes) core.info("Filtering search results..."); let filteredCount = 0; let excludedCount = 0; let closedCount = 0; + let markerMismatchCount = 0; + + const exactMarker = ``; const filtered = result.search.nodes .filter( @@ -109,6 +115,15 @@ async function searchOlderDiscussions(github, owner, repo, workflowId, categoryI return false; } + // Exact-match the marker in the discussion body to prevent GitHub search + // substring tokenization from matching related workflow IDs + // (e.g. "foo" would otherwise match discussions from "foo-bar") + if (!d.body?.includes(exactMarker)) { + markerMismatchCount++; + core.info(` Excluding discussion #${d.number} (body does not contain exact marker)`); + return false; + } + filteredCount++; core.info(` โœ“ Discussion #${d.number} matches criteria: ${d.title}`); return true; @@ -127,6 +142,7 @@ async function searchOlderDiscussions(github, owner, repo, workflowId, categoryI core.info(` - Matched discussions: ${filteredCount}`); core.info(` - Excluded new discussion: ${excludedCount}`); core.info(` - Excluded closed discussions: ${closedCount}`); + core.info(` - Excluded marker mismatch: ${markerMismatchCount}`); return filtered; } diff --git a/actions/setup/js/close_older_discussions.test.cjs b/actions/setup/js/close_older_discussions.test.cjs index 0360b2ab9a..418cd5f0db 100644 --- a/actions/setup/js/close_older_discussions.test.cjs +++ b/actions/setup/js/close_older_discussions.test.cjs @@ -54,6 +54,7 @@ describe("close_older_discussions.cjs", () => { number: 5, title: "Weekly Report - 2024-01", url: "https://github.com/testowner/testrepo/discussions/5", + body: "", category: { id: "DIC_test123" }, closed: false, }, @@ -62,6 +63,7 @@ describe("close_older_discussions.cjs", () => { number: 10, // This is the new discussion, should be excluded title: "Weekly Report - 2024-02", url: "https://github.com/testowner/testrepo/discussions/10", + body: "", category: { id: "DIC_test123" }, closed: false, }, @@ -93,6 +95,7 @@ describe("close_older_discussions.cjs", () => { number: 5, title: "Open Report", url: "https://github.com/testowner/testrepo/discussions/5", + body: "", category: { id: "DIC_test123" }, closed: false, }, @@ -101,6 +104,7 @@ describe("close_older_discussions.cjs", () => { number: 6, title: "Closed Report", url: "https://github.com/testowner/testrepo/discussions/6", + body: "", category: { id: "DIC_test123" }, closed: true, // Already closed }, @@ -125,6 +129,7 @@ describe("close_older_discussions.cjs", () => { number: 5, title: "Matching Report", url: "https://github.com/testowner/testrepo/discussions/5", + body: "", category: { id: "DIC_test123" }, closed: false, }, @@ -158,6 +163,7 @@ describe("close_older_discussions.cjs", () => { number: 5, title: "Report in right category", url: "https://github.com/testowner/testrepo/discussions/5", + body: "", category: { id: "DIC_reports" }, closed: false, }, @@ -166,6 +172,7 @@ describe("close_older_discussions.cjs", () => { number: 6, title: "Report in wrong category", url: "https://github.com/testowner/testrepo/discussions/6", + body: "", category: { id: "DIC_general" }, closed: false, }, @@ -197,6 +204,7 @@ describe("close_older_discussions.cjs", () => { number: 5, title: "Report 1", url: "https://github.com/testowner/testrepo/discussions/5", + body: "", category: { id: "DIC_reports" }, closed: false, }, @@ -205,6 +213,7 @@ describe("close_older_discussions.cjs", () => { number: 6, title: "Report 2", url: "https://github.com/testowner/testrepo/discussions/6", + body: "", category: { id: "DIC_general" }, closed: false, }, @@ -223,6 +232,51 @@ describe("close_older_discussions.cjs", () => { expect(result).toHaveLength(2); }); + + it("should exclude discussions whose body does not contain the exact marker", async () => { + const { searchOlderDiscussions } = await import("./close_older_discussions.cjs"); + + mockGithub.graphql.mockResolvedValueOnce({ + search: { + nodes: [ + { + id: "D_exact", + number: 5, + title: "Exact match", + url: "https://github.com/testowner/testrepo/discussions/5", + body: "", + category: { id: "DIC_test123" }, + closed: false, + }, + { + id: "D_substr", + number: 6, + title: "Substring match - should be excluded", + url: "https://github.com/testowner/testrepo/discussions/6", + // Related-but-longer workflow ID - GitHub search may match this + // but exact filtering should exclude it + body: "", + category: { id: "DIC_test123" }, + closed: false, + }, + { + id: "D_nomarker", + number: 7, + title: "No marker - should be excluded", + url: "https://github.com/testowner/testrepo/discussions/7", + body: "Discussion without any marker", + category: { id: "DIC_test123" }, + closed: false, + }, + ], + }, + }); + + const result = await searchOlderDiscussions(mockGithub, "testowner", "testrepo", "test-workflow", "DIC_test123", 99); + + expect(result).toHaveLength(1); + expect(result[0].number).toBe(5); + }); }); describe("closeOlderDiscussions", () => { @@ -238,6 +292,7 @@ describe("close_older_discussions.cjs", () => { number: 5, title: "Old Report", url: "https://github.com/testowner/testrepo/discussions/5", + body: "", category: { id: "DIC_test123" }, closed: false, }, @@ -290,6 +345,7 @@ describe("close_older_discussions.cjs", () => { number: i + 1, title: `Old Report ${i + 1}`, url: `https://github.com/testowner/testrepo/discussions/${i + 1}`, + body: "", category: { id: "DIC_test123" }, closed: false, })); @@ -366,6 +422,7 @@ describe("close_older_discussions.cjs", () => { number: 5, title: "Will Fail", url: "https://github.com/testowner/testrepo/discussions/5", + body: "", category: { id: "DIC_test123" }, closed: false, }, @@ -374,6 +431,7 @@ describe("close_older_discussions.cjs", () => { number: 6, title: "Will Succeed", url: "https://github.com/testowner/testrepo/discussions/6", + body: "", category: { id: "DIC_test123" }, closed: false, }, diff --git a/actions/setup/js/close_older_issues.cjs b/actions/setup/js/close_older_issues.cjs index 4a3e94a1cd..df5811dc7a 100644 --- a/actions/setup/js/close_older_issues.cjs +++ b/actions/setup/js/close_older_issues.cjs @@ -59,10 +59,15 @@ async function searchOlderIssues(github, owner, repo, workflowId, excludeNumber) // Filter results: // 1. Must not be the excluded issue (newly created one) // 2. Must not be a pull request + // 3. Body must contain the exact workflow-id marker (GitHub search tokenizes on + // delimiters so "foo" matches "foo-bar"; exact match prevents cross-workflow closes) core.info("Filtering search results..."); let filteredCount = 0; let pullRequestCount = 0; let excludedCount = 0; + let markerMismatchCount = 0; + + const exactMarker = ``; const filtered = result.data.items .filter(item => { @@ -79,6 +84,15 @@ async function searchOlderIssues(github, owner, repo, workflowId, excludeNumber) return false; } + // Exact-match the marker in the issue body to prevent GitHub search + // substring tokenization from matching related workflow IDs + // (e.g. "foo" would otherwise match issues from "foo-bar") + if (!item.body?.includes(exactMarker)) { + markerMismatchCount++; + core.info(` Excluding issue #${item.number} (body does not contain exact marker)`); + return false; + } + filteredCount++; core.info(` โœ“ Issue #${item.number} matches criteria: ${item.title}`); return true; @@ -94,6 +108,7 @@ async function searchOlderIssues(github, owner, repo, workflowId, excludeNumber) core.info(` - Matched issues: ${filteredCount}`); core.info(` - Excluded pull requests: ${pullRequestCount}`); core.info(` - Excluded new issue: ${excludedCount}`); + core.info(` - Excluded marker mismatch: ${markerMismatchCount}`); return filtered; } diff --git a/actions/setup/js/close_older_issues.test.cjs b/actions/setup/js/close_older_issues.test.cjs index b72b1eeb0f..354c158f62 100644 --- a/actions/setup/js/close_older_issues.test.cjs +++ b/actions/setup/js/close_older_issues.test.cjs @@ -38,12 +38,14 @@ describe("close_older_issues", () => { title: "Weekly Report - 2024-01", html_url: "https://github.com/owner/repo/issues/123", labels: [], + body: "", }, { number: 124, title: "Weekly Report - 2024-02", html_url: "https://github.com/owner/repo/issues/124", labels: [], + body: "", }, ], }, @@ -69,12 +71,14 @@ describe("close_older_issues", () => { title: "Weekly Report - 2024-01", html_url: "https://github.com/owner/repo/issues/123", labels: [], + body: "", }, { number: 124, title: "Weekly Report - 2024-02", html_url: "https://github.com/owner/repo/issues/124", labels: [], + body: "", }, ], }, @@ -102,6 +106,7 @@ describe("close_older_issues", () => { title: "Issue", html_url: "https://github.com/owner/repo/issues/123", labels: [], + body: "", }, { number: 124, @@ -109,6 +114,7 @@ describe("close_older_issues", () => { html_url: "https://github.com/owner/repo/pull/124", labels: [], pull_request: {}, + body: "", }, ], }, @@ -131,6 +137,43 @@ describe("close_older_issues", () => { expect(results).toHaveLength(0); }); + + it("should exclude issues whose body does not contain the exact marker", async () => { + mockGithub.rest.search.issuesAndPullRequests.mockResolvedValue({ + data: { + items: [ + { + number: 123, + title: "Matching issue", + html_url: "https://github.com/owner/repo/issues/123", + labels: [], + body: "Some content\n", + }, + { + number: 124, + title: "Substring match - should be excluded", + html_url: "https://github.com/owner/repo/issues/124", + labels: [], + // Body has a related-but-longer workflow ID - GitHub search may match this + // but exact filtering should exclude it + body: "Some content\n", + }, + { + number: 125, + title: "No marker - should be excluded", + html_url: "https://github.com/owner/repo/issues/125", + labels: [], + body: "Issue without any marker", + }, + ], + }, + }); + + const results = await searchOlderIssues(mockGithub, "owner", "repo", "test-workflow", 999); + + expect(results).toHaveLength(1); + expect(results[0].number).toBe(123); + }); }); describe("addIssueComment", () => { @@ -208,6 +251,7 @@ describe("close_older_issues", () => { title: "Prefix - Old Issue", html_url: "https://github.com/owner/repo/issues/123", labels: [], + body: "", }, ], }, @@ -238,6 +282,7 @@ describe("close_older_issues", () => { title: `Issue ${i}`, html_url: `https://github.com/owner/repo/issues/${i}`, labels: [], + body: "", }); } @@ -269,12 +314,14 @@ describe("close_older_issues", () => { title: "Issue 1", html_url: "https://github.com/owner/repo/issues/123", labels: [], + body: "", }, { number: 124, title: "Issue 2", html_url: "https://github.com/owner/repo/issues/124", labels: [], + body: "", }, ], }, diff --git a/actions/setup/js/create_discussion.cjs b/actions/setup/js/create_discussion.cjs index 02ed4e7590..417c74a43d 100644 --- a/actions/setup/js/create_discussion.cjs +++ b/actions/setup/js/create_discussion.cjs @@ -509,6 +509,12 @@ async function main(config = {}) { const workflowName = process.env.GH_AW_WORKFLOW_NAME || "Workflow"; const workflowId = process.env.GH_AW_WORKFLOW_ID || ""; + // GH_AW_CALLER_WORKFLOW_ID is set at runtime to `github.repository/github.workflow`. + // When multiple workflows call the same reusable workflow via workflow_call they all + // share the same GH_AW_WORKFLOW_ID, so we use the caller identity as the marker to + // prevent close-older-discussions from crossing workflow boundaries. + const callerWorkflowId = process.env.GH_AW_CALLER_WORKFLOW_ID || ""; + const effectiveWorkflowId = callerWorkflowId || workflowId; const runId = context.runId; const githubServer = process.env.GITHUB_SERVER_URL || "https://github.com"; const runUrl = context.payload.repository ? `${context.payload.repository.html_url}/actions/runs/${runId}` : `${githubServer}/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`; @@ -526,8 +532,8 @@ async function main(config = {}) { // Add standalone workflow-id marker for searchability (consistent with comments) // Always add XML markers even when footer is disabled - if (workflowId) { - bodyLines.push(``, generateWorkflowIdMarker(workflowId)); + if (effectiveWorkflowId) { + bodyLines.push(``, generateWorkflowIdMarker(effectiveWorkflowId)); } bodyLines.push(""); diff --git a/actions/setup/js/create_issue.cjs b/actions/setup/js/create_issue.cjs index 46695ee5cc..f3e17657d7 100644 --- a/actions/setup/js/create_issue.cjs +++ b/actions/setup/js/create_issue.cjs @@ -431,6 +431,12 @@ async function main(config = {}) { const workflowSource = process.env.GH_AW_WORKFLOW_SOURCE ?? ""; const workflowSourceURL = process.env.GH_AW_WORKFLOW_SOURCE_URL ?? ""; const workflowId = process.env.GH_AW_WORKFLOW_ID ?? ""; + // GH_AW_CALLER_WORKFLOW_ID is set at runtime to `github.repository/github.workflow`. + // When multiple workflows call the same reusable workflow via workflow_call they all + // share the same GH_AW_WORKFLOW_ID, so we use the caller identity as the marker to + // prevent close-older-issues from crossing workflow boundaries. + const callerWorkflowId = process.env.GH_AW_CALLER_WORKFLOW_ID ?? ""; + const effectiveWorkflowId = callerWorkflowId || workflowId; const { runId } = context; const githubServer = process.env.GITHUB_SERVER_URL ?? "https://github.com"; const runUrl = context.payload.repository ? `${context.payload.repository.html_url}/actions/runs/${runId}` : `${githubServer}/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`; @@ -450,8 +456,8 @@ async function main(config = {}) { // Add standalone workflow-id marker for searchability (consistent with comments) // Always add XML markers even when footer is disabled - if (workflowId) { - bodyLines.push(``, generateWorkflowIdMarker(workflowId)); + if (effectiveWorkflowId) { + bodyLines.push(``, generateWorkflowIdMarker(effectiveWorkflowId)); } bodyLines.push(""); @@ -509,10 +515,10 @@ async function main(config = {}) { // Close older issues if enabled if (closeOlderIssuesEnabled) { - if (workflowId) { - core.info(`Attempting to close older issues for ${qualifiedItemRepo}#${issue.number} using workflow-id: ${workflowId}`); + if (effectiveWorkflowId) { + core.info(`Attempting to close older issues for ${qualifiedItemRepo}#${issue.number} using workflow-id: ${effectiveWorkflowId}`); try { - const closedIssues = await closeOlderIssues(github, repoParts.owner, repoParts.repo, workflowId, { number: issue.number, html_url: issue.html_url }, workflowName, runUrl); + const closedIssues = await closeOlderIssues(github, repoParts.owner, repoParts.repo, effectiveWorkflowId, { number: issue.number, html_url: issue.html_url }, workflowName, runUrl); if (closedIssues.length > 0) { core.info(`Closed ${closedIssues.length} older issue(s)`); } diff --git a/pkg/workflow/compiler_safe_outputs_job.go b/pkg/workflow/compiler_safe_outputs_job.go index afba428923..2d9d690d58 100644 --- a/pkg/workflow/compiler_safe_outputs_job.go +++ b/pkg/workflow/compiler_safe_outputs_job.go @@ -365,6 +365,13 @@ func (c *Compiler) buildJobLevelSafeOutputEnvVars(data *WorkflowData, workflowID // This is used for branch naming in create_pull_request and other operations envVars["GH_AW_WORKFLOW_ID"] = fmt.Sprintf("%q", workflowID) + // Set GH_AW_CALLER_WORKFLOW_ID to the runtime caller identity. + // When a reusable workflow is called via workflow_call, multiple callers share the + // 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 }}"` + // Add workflow metadata that's common to all steps envVars["GH_AW_WORKFLOW_NAME"] = fmt.Sprintf("%q", data.Name) diff --git a/pkg/workflow/compiler_safe_outputs_job_test.go b/pkg/workflow/compiler_safe_outputs_job_test.go index 3f6539d848..4fcba64abd 100644 --- a/pkg/workflow/compiler_safe_outputs_job_test.go +++ b/pkg/workflow/compiler_safe_outputs_job_test.go @@ -232,8 +232,9 @@ func TestBuildJobLevelSafeOutputEnvVars(t *testing.T) { }, workflowID: "test-workflow", expectedVars: map[string]string{ - "GH_AW_WORKFLOW_ID": `"test-workflow"`, - "GH_AW_WORKFLOW_NAME": `"Test Workflow"`, + "GH_AW_WORKFLOW_ID": `"test-workflow"`, + "GH_AW_WORKFLOW_NAME": `"Test Workflow"`, + "GH_AW_CALLER_WORKFLOW_ID": `"${{ github.repository }}/${{ github.workflow }}"`, }, checkContains: true, }, From 826b53c34f104153f3e3e36418f8ac3d61df8698 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 13:32:03 +0000 Subject: [PATCH 3/6] fix: use gh-aw-workflow-call-id tag for caller disambiguation, keep gh-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> --- actions/setup/js/close_older_discussions.cjs | 21 ++++++--- .../setup/js/close_older_discussions.test.cjs | 43 +++++++++++++++++++ actions/setup/js/close_older_issues.cjs | 21 ++++++--- actions/setup/js/close_older_issues.test.cjs | 36 ++++++++++++++++ actions/setup/js/create_discussion.cjs | 16 ++++--- .../js/create_discussion_fallback.test.cjs | 4 ++ actions/setup/js/create_issue.cjs | 24 ++++++----- actions/setup/js/generate_footer.cjs | 15 +++++++ 8 files changed, 151 insertions(+), 29 deletions(-) diff --git a/actions/setup/js/close_older_discussions.cjs b/actions/setup/js/close_older_discussions.cjs index fbbf03a03b..1372e109dc 100644 --- a/actions/setup/js/close_older_discussions.cjs +++ b/actions/setup/js/close_older_discussions.cjs @@ -25,9 +25,13 @@ const GRAPHQL_DELAY_MS = 500; * @param {string} workflowId - Workflow ID to match in the marker * @param {string|undefined} categoryId - Optional category ID to filter by * @param {number} excludeNumber - Discussion number to exclude (the newly created one) + * @param {string} [callerWorkflowId] - Optional calling workflow identity for precise filtering. + * When set, filters by the `gh-aw-workflow-call-id` marker so callers sharing the same + * reusable workflow do not close each other's discussions. Falls back to `gh-aw-workflow-id` + * when not provided (backward compat for discussions created before this fix). * @returns {Promise>} Matching discussions */ -async function searchOlderDiscussions(github, owner, repo, workflowId, categoryId, excludeNumber) { +async function searchOlderDiscussions(github, owner, repo, workflowId, categoryId, excludeNumber, callerWorkflowId) { core.info(`Starting search for older discussions in ${owner}/${repo}`); core.info(` Workflow ID: ${workflowId || "(none)"}`); core.info(` Exclude discussion number: ${excludeNumber}`); @@ -80,15 +84,17 @@ async function searchOlderDiscussions(github, owner, repo, workflowId, categoryI // 1. Must not be the excluded discussion (newly created one) // 2. Must not be already closed // 3. If categoryId is specified, must match - // 4. Body must contain the exact workflow-id marker (GitHub search tokenizes on - // delimiters so "foo" matches "foo-bar"; exact match prevents cross-workflow closes) + // 4. Body must contain the exact marker for this workflow. + // When callerWorkflowId is set, match `gh-aw-workflow-call-id` so that callers + // sharing the same reusable workflow do not close each other's discussions. + // Fall back to `gh-aw-workflow-id` for backward compat with older discussions. core.info("Filtering search results..."); let filteredCount = 0; let excludedCount = 0; let closedCount = 0; let markerMismatchCount = 0; - const exactMarker = ``; + const exactMarker = callerWorkflowId ? `` : ``; const filtered = result.search.nodes .filter( @@ -208,9 +214,10 @@ async function closeDiscussionAsOutdated(github, owner, repo, discussionId) { * @param {{number: number, url: string}} newDiscussion - The newly created discussion * @param {string} workflowName - Name of the workflow * @param {string} runUrl - URL of the workflow run + * @param {string} [callerWorkflowId] - Optional calling workflow identity for precise filtering * @returns {Promise>} List of closed discussions */ -async function closeOlderDiscussions(github, owner, repo, workflowId, categoryId, newDiscussion, workflowName, runUrl) { +async function closeOlderDiscussions(github, owner, repo, workflowId, categoryId, newDiscussion, workflowName, runUrl, callerWorkflowId) { const result = await closeOlderEntities( github, owner, @@ -222,7 +229,9 @@ async function closeOlderDiscussions(github, owner, repo, workflowId, categoryId { entityType: "discussion", entityTypePlural: "discussions", - searchOlderEntities: searchOlderDiscussions, + // Use a closure so callerWorkflowId is forwarded to searchOlderDiscussions without going + // through the closeOlderEntities extraArgs mechanism (which appends excludeNumber last) + searchOlderEntities: (gh, o, r, wid, ...args) => searchOlderDiscussions(gh, o, r, wid, ...args, callerWorkflowId), getCloseMessage: params => getCloseOlderDiscussionMessage({ newDiscussionUrl: params.newEntityUrl, diff --git a/actions/setup/js/close_older_discussions.test.cjs b/actions/setup/js/close_older_discussions.test.cjs index 418cd5f0db..52521da688 100644 --- a/actions/setup/js/close_older_discussions.test.cjs +++ b/actions/setup/js/close_older_discussions.test.cjs @@ -277,6 +277,49 @@ describe("close_older_discussions.cjs", () => { expect(result).toHaveLength(1); expect(result[0].number).toBe(5); }); + + it("should filter by gh-aw-workflow-call-id when callerWorkflowId is provided", async () => { + const { searchOlderDiscussions } = await import("./close_older_discussions.cjs"); + + mockGithub.graphql.mockResolvedValueOnce({ + search: { + nodes: [ + { + id: "D_same_caller", + number: 5, + title: "Same caller - should be included", + url: "https://github.com/testowner/testrepo/discussions/5", + body: "\n", + category: { id: "DIC_test123" }, + closed: false, + }, + { + id: "D_diff_caller", + number: 6, + title: "Different caller - should be excluded", + url: "https://github.com/testowner/testrepo/discussions/6", + body: "\n", + category: { id: "DIC_test123" }, + closed: false, + }, + { + id: "D_old", + number: 7, + title: "Old discussion without call-id - should be excluded", + url: "https://github.com/testowner/testrepo/discussions/7", + body: "", + category: { id: "DIC_test123" }, + closed: false, + }, + ], + }, + }); + + const result = await searchOlderDiscussions(mockGithub, "testowner", "testrepo", "my-reusable-workflow", "DIC_test123", 99, "owner/repo/CallerA"); + + expect(result).toHaveLength(1); + expect(result[0].number).toBe(5); + }); }); describe("closeOlderDiscussions", () => { diff --git a/actions/setup/js/close_older_issues.cjs b/actions/setup/js/close_older_issues.cjs index df5811dc7a..ab52812755 100644 --- a/actions/setup/js/close_older_issues.cjs +++ b/actions/setup/js/close_older_issues.cjs @@ -22,9 +22,13 @@ const API_DELAY_MS = 500; * @param {string} repo - Repository name * @param {string} workflowId - Workflow ID to match in the marker * @param {number} excludeNumber - Issue number to exclude (the newly created one) + * @param {string} [callerWorkflowId] - Optional calling workflow identity for precise filtering. + * When set, filters by the `gh-aw-workflow-call-id` marker so callers sharing the same + * reusable workflow do not close each other's issues. Falls back to `gh-aw-workflow-id` + * when not provided (backward compat for issues created before this fix). * @returns {Promise}>>} Matching issues */ -async function searchOlderIssues(github, owner, repo, workflowId, excludeNumber) { +async function searchOlderIssues(github, owner, repo, workflowId, excludeNumber, callerWorkflowId) { core.info(`Starting search for older issues in ${owner}/${repo}`); core.info(` Workflow ID: ${workflowId || "(none)"}`); core.info(` Exclude issue number: ${excludeNumber}`); @@ -59,15 +63,17 @@ async function searchOlderIssues(github, owner, repo, workflowId, excludeNumber) // Filter results: // 1. Must not be the excluded issue (newly created one) // 2. Must not be a pull request - // 3. Body must contain the exact workflow-id marker (GitHub search tokenizes on - // delimiters so "foo" matches "foo-bar"; exact match prevents cross-workflow closes) + // 3. Body must contain the exact marker for this workflow. + // When callerWorkflowId is set, match `gh-aw-workflow-call-id` so that callers + // sharing the same reusable workflow do not close each other's issues. + // Fall back to `gh-aw-workflow-id` for backward compat with older issues. core.info("Filtering search results..."); let filteredCount = 0; let pullRequestCount = 0; let excludedCount = 0; let markerMismatchCount = 0; - const exactMarker = ``; + const exactMarker = callerWorkflowId ? `` : ``; const filtered = result.data.items .filter(item => { @@ -198,13 +204,16 @@ function getCloseOlderIssueMessage({ newIssueUrl, newIssueNumber, workflowName, * @param {{number: number, html_url: string}} newIssue - The newly created issue * @param {string} workflowName - Name of the workflow * @param {string} runUrl - URL of the workflow run + * @param {string} [callerWorkflowId] - Optional calling workflow identity for precise filtering * @returns {Promise>} List of closed issues */ -async function closeOlderIssues(github, owner, repo, workflowId, newIssue, workflowName, runUrl) { +async function closeOlderIssues(github, owner, repo, workflowId, newIssue, workflowName, runUrl, callerWorkflowId) { const result = await closeOlderEntities(github, owner, repo, workflowId, newIssue, workflowName, runUrl, { entityType: "issue", entityTypePlural: "issues", - searchOlderEntities: searchOlderIssues, + // Use a closure so callerWorkflowId is forwarded to searchOlderIssues without going + // through the closeOlderEntities extraArgs mechanism (which appends excludeNumber last) + searchOlderEntities: (gh, o, r, wid, ...args) => searchOlderIssues(gh, o, r, wid, ...args, callerWorkflowId), getCloseMessage: params => getCloseOlderIssueMessage({ newIssueUrl: params.newEntityUrl, diff --git a/actions/setup/js/close_older_issues.test.cjs b/actions/setup/js/close_older_issues.test.cjs index 354c158f62..742de2214e 100644 --- a/actions/setup/js/close_older_issues.test.cjs +++ b/actions/setup/js/close_older_issues.test.cjs @@ -174,6 +174,42 @@ describe("close_older_issues", () => { expect(results).toHaveLength(1); expect(results[0].number).toBe(123); }); + + it("should filter by gh-aw-workflow-call-id when callerWorkflowId is provided", async () => { + mockGithub.rest.search.issuesAndPullRequests.mockResolvedValue({ + data: { + items: [ + { + number: 123, + title: "Same caller - should be included", + html_url: "https://github.com/owner/repo/issues/123", + labels: [], + body: "\n", + }, + { + number: 124, + title: "Different caller - should be excluded", + html_url: "https://github.com/owner/repo/issues/124", + labels: [], + // Different caller shares the same reusable workflow-id but has a different call-id + body: "\n", + }, + { + number: 125, + title: "Old issue without call-id - should be excluded", + html_url: "https://github.com/owner/repo/issues/125", + labels: [], + body: "", + }, + ], + }, + }); + + const results = await searchOlderIssues(mockGithub, "owner", "repo", "my-reusable-workflow", 999, "owner/repo/CallerA"); + + expect(results).toHaveLength(1); + expect(results[0].number).toBe(123); + }); }); describe("addIssueComment", () => { diff --git a/actions/setup/js/create_discussion.cjs b/actions/setup/js/create_discussion.cjs index 417c74a43d..11d408caa0 100644 --- a/actions/setup/js/create_discussion.cjs +++ b/actions/setup/js/create_discussion.cjs @@ -16,7 +16,7 @@ const { createAuthenticatedGitHubClient } = require("./handler_auth.cjs"); const { removeDuplicateTitleFromDescription } = require("./remove_duplicate_title.cjs"); const { getErrorMessage } = require("./error_helpers.cjs"); const { createExpirationLine, generateFooterWithExpiration } = require("./ephemerals.cjs"); -const { generateWorkflowIdMarker } = require("./generate_footer.cjs"); +const { generateWorkflowIdMarker, generateWorkflowCallIdMarker } = require("./generate_footer.cjs"); const { sanitizeLabelContent } = require("./sanitize_label_content.cjs"); const { tryEnforceArrayLimit } = require("./limit_enforcement_helpers.cjs"); const { logStagedPreviewInfo } = require("./staged_preview.cjs"); @@ -511,10 +511,9 @@ async function main(config = {}) { const workflowId = process.env.GH_AW_WORKFLOW_ID || ""; // GH_AW_CALLER_WORKFLOW_ID is set at runtime to `github.repository/github.workflow`. // When multiple workflows call the same reusable workflow via workflow_call they all - // share the same GH_AW_WORKFLOW_ID, so we use the caller identity as the marker to - // prevent close-older-discussions from crossing workflow boundaries. + // share the same GH_AW_WORKFLOW_ID. We embed a separate gh-aw-workflow-call-id marker + // with the caller's identity so close-older-discussions can distinguish callers precisely. const callerWorkflowId = process.env.GH_AW_CALLER_WORKFLOW_ID || ""; - const effectiveWorkflowId = callerWorkflowId || workflowId; const runId = context.runId; const githubServer = process.env.GITHUB_SERVER_URL || "https://github.com"; const runUrl = context.payload.repository ? `${context.payload.repository.html_url}/actions/runs/${runId}` : `${githubServer}/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`; @@ -532,8 +531,13 @@ async function main(config = {}) { // Add standalone workflow-id marker for searchability (consistent with comments) // Always add XML markers even when footer is disabled - if (effectiveWorkflowId) { - bodyLines.push(``, generateWorkflowIdMarker(effectiveWorkflowId)); + if (workflowId) { + bodyLines.push(``, generateWorkflowIdMarker(workflowId)); + } + // Add workflow-call-id marker when available to allow close-older-discussions to + // distinguish callers that share the same reusable workflow (and GH_AW_WORKFLOW_ID) + if (callerWorkflowId) { + bodyLines.push(generateWorkflowCallIdMarker(callerWorkflowId)); } bodyLines.push(""); diff --git a/actions/setup/js/create_discussion_fallback.test.cjs b/actions/setup/js/create_discussion_fallback.test.cjs index 2f2b787f1f..7623550fe2 100644 --- a/actions/setup/js/create_discussion_fallback.test.cjs +++ b/actions/setup/js/create_discussion_fallback.test.cjs @@ -55,6 +55,10 @@ describe("create_discussion fallback with close_older_discussions", () => { html_url: "https://github.com/owner/repo/issues/123", labels: [], state: "open", + // body must contain the exact gh-aw-workflow-id marker so the + // exact-body filter passes (GH_AW_CALLER_WORKFLOW_ID is not set + // in these tests, so we fall back to gh-aw-workflow-id matching) + body: "", }, ], }, diff --git a/actions/setup/js/create_issue.cjs b/actions/setup/js/create_issue.cjs index f3e17657d7..8e1837debf 100644 --- a/actions/setup/js/create_issue.cjs +++ b/actions/setup/js/create_issue.cjs @@ -28,7 +28,7 @@ function resetIssuesToAssignCopilot() { const { sanitizeLabelContent } = require("./sanitize_label_content.cjs"); const { sanitizeTitle, applyTitlePrefix } = require("./sanitize_title.cjs"); const { generateFooterWithMessages } = require("./messages_footer.cjs"); -const { generateWorkflowIdMarker } = require("./generate_footer.cjs"); +const { generateWorkflowIdMarker, generateWorkflowCallIdMarker } = require("./generate_footer.cjs"); const { getTrackerID } = require("./get_tracker_id.cjs"); const { generateTemporaryId, isTemporaryId, normalizeTemporaryId, getOrGenerateTemporaryId, replaceTemporaryIdReferences } = require("./temporary_id.cjs"); const { resolveTargetRepoConfig, resolveAndValidateRepo } = require("./repo_helpers.cjs"); @@ -433,10 +433,9 @@ async function main(config = {}) { const workflowId = process.env.GH_AW_WORKFLOW_ID ?? ""; // GH_AW_CALLER_WORKFLOW_ID is set at runtime to `github.repository/github.workflow`. // When multiple workflows call the same reusable workflow via workflow_call they all - // share the same GH_AW_WORKFLOW_ID, so we use the caller identity as the marker to - // prevent close-older-issues from crossing workflow boundaries. + // share the same GH_AW_WORKFLOW_ID. We embed a separate gh-aw-workflow-call-id marker + // with the caller's identity so close-older-issues can distinguish callers precisely. const callerWorkflowId = process.env.GH_AW_CALLER_WORKFLOW_ID ?? ""; - const effectiveWorkflowId = callerWorkflowId || workflowId; const { runId } = context; const githubServer = process.env.GITHUB_SERVER_URL ?? "https://github.com"; const runUrl = context.payload.repository ? `${context.payload.repository.html_url}/actions/runs/${runId}` : `${githubServer}/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`; @@ -456,8 +455,13 @@ async function main(config = {}) { // Add standalone workflow-id marker for searchability (consistent with comments) // Always add XML markers even when footer is disabled - if (effectiveWorkflowId) { - bodyLines.push(``, generateWorkflowIdMarker(effectiveWorkflowId)); + if (workflowId) { + bodyLines.push(``, generateWorkflowIdMarker(workflowId)); + } + // Add workflow-call-id marker when available to allow close-older-issues to + // distinguish callers that share the same reusable workflow (and GH_AW_WORKFLOW_ID) + if (callerWorkflowId) { + bodyLines.push(generateWorkflowCallIdMarker(callerWorkflowId)); } bodyLines.push(""); @@ -515,10 +519,10 @@ async function main(config = {}) { // Close older issues if enabled if (closeOlderIssuesEnabled) { - if (effectiveWorkflowId) { - core.info(`Attempting to close older issues for ${qualifiedItemRepo}#${issue.number} using workflow-id: ${effectiveWorkflowId}`); + if (workflowId) { + core.info(`Attempting to close older issues for ${qualifiedItemRepo}#${issue.number} using workflow-id: ${workflowId}`); try { - const closedIssues = await closeOlderIssues(github, repoParts.owner, repoParts.repo, effectiveWorkflowId, { number: issue.number, html_url: issue.html_url }, workflowName, runUrl); + const closedIssues = await closeOlderIssues(github, repoParts.owner, repoParts.repo, workflowId, { number: issue.number, html_url: issue.html_url }, workflowName, runUrl, callerWorkflowId); if (closedIssues.length > 0) { core.info(`Closed ${closedIssues.length} older issue(s)`); } @@ -530,8 +534,6 @@ async function main(config = {}) { core.warning("Close older issues enabled but GH_AW_WORKFLOW_ID environment variable not set - skipping"); } } - - // Handle grouping - find or create parent issue and link sub-issue if (groupEnabled && !effectiveParentIssueNumber) { // Use workflow name as the group ID const groupId = workflowName; diff --git a/actions/setup/js/generate_footer.cjs b/actions/setup/js/generate_footer.cjs index aea78d5b23..0e6d91b4ab 100644 --- a/actions/setup/js/generate_footer.cjs +++ b/actions/setup/js/generate_footer.cjs @@ -109,9 +109,24 @@ function generateExpiredEntityFooter(workflowName, runUrl, workflowId) { return footer; } +/** + * Generates a standalone workflow-call-id XML comment marker for close-older-issues + * disambiguation. This marker contains the calling workflow's runtime identity + * (`github.repository/github.workflow`) and is used to distinguish multiple + * callers that share the same reusable workflow (and therefore the same + * `gh-aw-workflow-id`). + * + * @param {string} callerWorkflowId - Calling workflow identifier (e.g. "owner/repo/WorkflowName") + * @returns {string} Standalone workflow-call-id XML comment marker + */ +function generateWorkflowCallIdMarker(callerWorkflowId) { + return ``; +} + module.exports = { generateXMLMarker, generateWorkflowIdMarker, + generateWorkflowCallIdMarker, getWorkflowIdMarkerContent, generateExpiredEntityFooter, }; From e610db2f5d84a1af4ab848be2c4894a6dfd8a26a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:27:23 +0000 Subject: [PATCH 4/6] fix: resolve TS2556 spread errors and use shared marker helpers in close_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> --- actions/setup/js/close_older_discussions.cjs | 6 +-- actions/setup/js/close_older_issues.cjs | 6 +-- actions/setup/js/generate_footer.test.cjs | 40 ++++++++++++++++++++ 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/actions/setup/js/close_older_discussions.cjs b/actions/setup/js/close_older_discussions.cjs index 1372e109dc..39b809b22a 100644 --- a/actions/setup/js/close_older_discussions.cjs +++ b/actions/setup/js/close_older_discussions.cjs @@ -3,7 +3,7 @@ const { getCloseOlderDiscussionMessage } = require("./messages_close_discussion.cjs"); const { getErrorMessage } = require("./error_helpers.cjs"); -const { getWorkflowIdMarkerContent } = require("./generate_footer.cjs"); +const { getWorkflowIdMarkerContent, generateWorkflowIdMarker, generateWorkflowCallIdMarker } = require("./generate_footer.cjs"); const { sanitizeContent } = require("./sanitize_content.cjs"); const { closeOlderEntities, MAX_CLOSE_COUNT: SHARED_MAX_CLOSE_COUNT } = require("./close_older_entities.cjs"); @@ -94,7 +94,7 @@ async function searchOlderDiscussions(github, owner, repo, workflowId, categoryI let closedCount = 0; let markerMismatchCount = 0; - const exactMarker = callerWorkflowId ? `` : ``; + const exactMarker = callerWorkflowId ? generateWorkflowCallIdMarker(callerWorkflowId) : generateWorkflowIdMarker(workflowId); const filtered = result.search.nodes .filter( @@ -231,7 +231,7 @@ async function closeOlderDiscussions(github, owner, repo, workflowId, categoryId entityTypePlural: "discussions", // Use a closure so callerWorkflowId is forwarded to searchOlderDiscussions without going // through the closeOlderEntities extraArgs mechanism (which appends excludeNumber last) - searchOlderEntities: (gh, o, r, wid, ...args) => searchOlderDiscussions(gh, o, r, wid, ...args, callerWorkflowId), + searchOlderEntities: (gh, o, r, wid, categoryId, excludeNumber) => searchOlderDiscussions(gh, o, r, wid, categoryId, excludeNumber, callerWorkflowId), getCloseMessage: params => getCloseOlderDiscussionMessage({ newDiscussionUrl: params.newEntityUrl, diff --git a/actions/setup/js/close_older_issues.cjs b/actions/setup/js/close_older_issues.cjs index ab52812755..f4d6d1639f 100644 --- a/actions/setup/js/close_older_issues.cjs +++ b/actions/setup/js/close_older_issues.cjs @@ -1,7 +1,7 @@ // @ts-check /// -const { getWorkflowIdMarkerContent } = require("./generate_footer.cjs"); +const { getWorkflowIdMarkerContent, generateWorkflowIdMarker, generateWorkflowCallIdMarker } = require("./generate_footer.cjs"); const { sanitizeContent } = require("./sanitize_content.cjs"); const { closeOlderEntities, MAX_CLOSE_COUNT: SHARED_MAX_CLOSE_COUNT } = require("./close_older_entities.cjs"); @@ -73,7 +73,7 @@ async function searchOlderIssues(github, owner, repo, workflowId, excludeNumber, let excludedCount = 0; let markerMismatchCount = 0; - const exactMarker = callerWorkflowId ? `` : ``; + const exactMarker = callerWorkflowId ? generateWorkflowCallIdMarker(callerWorkflowId) : generateWorkflowIdMarker(workflowId); const filtered = result.data.items .filter(item => { @@ -213,7 +213,7 @@ async function closeOlderIssues(github, owner, repo, workflowId, newIssue, workf entityTypePlural: "issues", // Use a closure so callerWorkflowId is forwarded to searchOlderIssues without going // through the closeOlderEntities extraArgs mechanism (which appends excludeNumber last) - searchOlderEntities: (gh, o, r, wid, ...args) => searchOlderIssues(gh, o, r, wid, ...args, callerWorkflowId), + searchOlderEntities: (gh, o, r, wid, excludeNumber) => searchOlderIssues(gh, o, r, wid, excludeNumber, callerWorkflowId), getCloseMessage: params => getCloseOlderIssueMessage({ newIssueUrl: params.newEntityUrl, diff --git a/actions/setup/js/generate_footer.test.cjs b/actions/setup/js/generate_footer.test.cjs index 93d4928991..b7e88fa562 100644 --- a/actions/setup/js/generate_footer.test.cjs +++ b/actions/setup/js/generate_footer.test.cjs @@ -34,6 +34,7 @@ global.context = mockContext; describe("generate_footer.cjs", () => { let generateXMLMarker; let generateWorkflowIdMarker; + let generateWorkflowCallIdMarker; let getWorkflowIdMarkerContent; beforeEach(async () => { @@ -51,6 +52,7 @@ describe("generate_footer.cjs", () => { const module = await import("./generate_footer.cjs"); generateXMLMarker = module.generateXMLMarker; generateWorkflowIdMarker = module.generateWorkflowIdMarker; + generateWorkflowCallIdMarker = module.generateWorkflowCallIdMarker; getWorkflowIdMarkerContent = module.getWorkflowIdMarkerContent; }); @@ -200,6 +202,44 @@ describe("generate_footer.cjs", () => { }); }); + describe("generateWorkflowCallIdMarker", () => { + it("should generate workflow-call-id XML comment marker", () => { + const result = generateWorkflowCallIdMarker("owner/repo/CallerWorkflow"); + + expect(result).toBe(""); + }); + + it("should handle caller IDs with slashes (repo/workflow format)", () => { + const result = generateWorkflowCallIdMarker("elastic/ai-github-actions/Explore: Live Elasticsearch"); + + expect(result).toBe(""); + }); + + it("should handle empty caller ID", () => { + const result = generateWorkflowCallIdMarker(""); + + expect(result).toBe(""); + }); + + it("should produce a different marker than generateWorkflowIdMarker", () => { + const id = "test-workflow"; + const callIdMarker = generateWorkflowCallIdMarker(id); + const workflowIdMarker = generateWorkflowIdMarker(id); + + expect(callIdMarker).not.toBe(workflowIdMarker); + expect(callIdMarker).toContain("gh-aw-workflow-call-id:"); + expect(workflowIdMarker).toContain("gh-aw-workflow-id:"); + }); + + it("should follow XML comment format", () => { + const callerId = "owner/repo/MyWorkflow"; + const result = generateWorkflowCallIdMarker(callerId); + + expect(result).toMatch(/^$/); + expect(result).toContain(callerId); + }); + }); + describe("getWorkflowIdMarkerContent", () => { it("should return marker content without XML wrapper", () => { const result = getWorkflowIdMarkerContent("test-workflow"); From d7340c102d7d31cb8dea7a8be59d4e875c44c56f Mon Sep 17 00:00:00 2001 From: gh-aw bot Date: Mon, 2 Mar 2026 14:40:40 +0000 Subject: [PATCH 5/6] Add changeset [skip-ci] --- .changeset/patch-prevent-cross-call-closes.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/patch-prevent-cross-call-closes.md diff --git a/.changeset/patch-prevent-cross-call-closes.md b/.changeset/patch-prevent-cross-call-closes.md new file mode 100644 index 0000000000..2afc0a029d --- /dev/null +++ b/.changeset/patch-prevent-cross-call-closes.md @@ -0,0 +1,5 @@ +--- +"gh-aw": patch +--- + +Close-older-issues/discussions now record the calling workflow identity in `gh-aw-workflow-call-id` markers and filter by it so helper workflows no longer close issues/discussions started by other callers. From 01275d0d7f11a80fc44814c25bbf83c79012ccc5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 2 Mar 2026 14:42:30 +0000 Subject: [PATCH 6/6] ci: trigger CI checks