From 5f092e4c2279519bdd7b5b7cbdb23fcee6e9b1c6 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Apr 2026 00:31:39 +0000
Subject: [PATCH 1/6] Initial plan


From c6878bdcb185f6fed934533f656b8c00d2080909 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Apr 2026 00:56:33 +0000
Subject: [PATCH 2/6] Add report-skip-reason step to pre_activation job to
 surface denial reasons in job summary (#bot-gated-pr-review-issue)

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/067ab295-8ff2-4434-9c93-bad0eb8fe31b

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
 .github/workflows/ace-editor.lock.yml         |  15 +
 .../agent-performance-analyzer.lock.yml       |  14 +
 .../workflows/agent-persona-explorer.lock.yml |  14 +
 .github/workflows/ai-moderator.lock.yml       |  16 ++
 .github/workflows/archie.lock.yml             |  15 +
 .github/workflows/auto-triage-issues.lock.yml |  15 +
 .github/workflows/brave.lock.yml              |  15 +
 .../breaking-change-checker.lock.yml          |  15 +
 .github/workflows/changeset.lock.yml          |  14 +
 .github/workflows/ci-doctor.lock.yml          |  14 +
 .github/workflows/cloclo.lock.yml             |  15 +
 .../workflows/code-scanning-fixer.lock.yml    |  15 +
 .github/workflows/code-simplifier.lock.yml    |  15 +
 .github/workflows/craft.lock.yml              |  15 +
 .../workflows/daily-cli-performance.lock.yml  |  14 +
 .github/workflows/daily-file-diet.lock.yml    |  15 +
 .../workflows/daily-issues-report.lock.yml    |  14 +
 .../daily-observability-report.lock.yml       |  14 +
 .../daily-rendering-scripts-verifier.lock.yml |  15 +
 .../daily-safe-output-optimizer.lock.yml      |  15 +
 .github/workflows/daily-team-status.lock.yml  |  12 +
 .../daily-testify-uber-super-expert.lock.yml  |  15 +
 .github/workflows/dead-code-remover.lock.yml  |  15 +
 .github/workflows/dependabot-burner.lock.yml  |  14 +
 .github/workflows/dev-hawk.lock.yml           |  14 +
 .github/workflows/dev.lock.yml                |  14 +
 .github/workflows/firewall-escape.lock.yml    |  14 +
 .github/workflows/grumpy-reviewer.lock.yml    |  15 +
 .github/workflows/issue-monster.lock.yml      |  17 ++
 .github/workflows/mergefest.lock.yml          |  15 +
 .github/workflows/metrics-collector.lock.yml  |  14 +
 .github/workflows/pdf-summary.lock.yml        |  15 +
 .github/workflows/plan.lock.yml               |  15 +
 .github/workflows/poem-bot.lock.yml           |  15 +
 .../workflows/pr-nitpick-reviewer.lock.yml    |  15 +
 .github/workflows/q.lock.yml                  |  15 +
 .github/workflows/refiner.lock.yml            |  14 +
 .github/workflows/release.lock.yml            |  14 +
 .github/workflows/scout.lock.yml              |  15 +
 .github/workflows/security-review.lock.yml    |  15 +
 .../workflows/slide-deck-maintainer.lock.yml  |  15 +
 .../workflows/smoke-agent-all-merged.lock.yml |  14 +
 .../workflows/smoke-agent-all-none.lock.yml   |  14 +
 .../smoke-agent-public-approved.lock.yml      |  14 +
 .../smoke-agent-public-none.lock.yml          |  14 +
 .../smoke-agent-scoped-approved.lock.yml      |  14 +
 .../workflows/smoke-call-workflow.lock.yml    |  14 +
 .github/workflows/smoke-claude.lock.yml       |  14 +
 .github/workflows/smoke-codex.lock.yml        |  14 +
 .github/workflows/smoke-copilot-arm.lock.yml  |  14 +
 .github/workflows/smoke-copilot.lock.yml      |  14 +
 .../smoke-create-cross-repo-pr.lock.yml       |  14 +
 .github/workflows/smoke-gemini.lock.yml       |  14 +
 .github/workflows/smoke-multi-pr.lock.yml     |  14 +
 .github/workflows/smoke-project.lock.yml      |  14 +
 .../workflows/smoke-service-ports.lock.yml    |  14 +
 .github/workflows/smoke-temporary-id.lock.yml |  14 +
 .github/workflows/smoke-test-tools.lock.yml   |  14 +
 .../smoke-update-cross-repo-pr.lock.yml       |  14 +
 .../smoke-workflow-call-with-inputs.lock.yml  |  14 +
 .../workflows/smoke-workflow-call.lock.yml    |  14 +
 .github/workflows/tidy.lock.yml               |  15 +
 .../workflows/ubuntu-image-analyzer.lock.yml  |  15 +
 .github/workflows/unbloat-docs.lock.yml       |  15 +
 .github/workflows/update-astro.lock.yml       |  15 +
 .github/workflows/workflow-generator.lock.yml |  15 +
 .../workflow-health-manager.lock.yml          |  14 +
 .../setup/js/report_pre_activation_skip.cjs   | 207 ++++++++++++++
 .../js/report_pre_activation_skip.test.cjs    | 261 ++++++++++++++++++
 pkg/constants/job_constants.go                |   4 +
 pkg/workflow/compiler_pre_activation_job.go   |  83 ++++++
 pkg/workflow/report_skip_reason_test.go       | 193 +++++++++++++
 .../basic-copilot.golden                      |  14 +
 .../with-imports.golden                       |  14 +
 74 files changed, 1746 insertions(+)
 create mode 100644 actions/setup/js/report_pre_activation_skip.cjs
 create mode 100644 actions/setup/js/report_pre_activation_skip.test.cjs
 create mode 100644 pkg/workflow/report_skip_reason_test.go

diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml
index 0b7c12bf770..630f9160c75 100644
--- a/.github/workflows/ace-editor.lock.yml
+++ b/.github/workflows/ace-editor.lock.yml
@@ -665,4 +665,19 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml
index 80bdddd9b15..d1fb38a8f3a 100644
--- a/.github/workflows/agent-performance-analyzer.lock.yml
+++ b/.github/workflows/agent-performance-analyzer.lock.yml
@@ -1246,6 +1246,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml
index bc83b1d663b..5368804febb 100644
--- a/.github/workflows/agent-persona-explorer.lock.yml
+++ b/.github/workflows/agent-persona-explorer.lock.yml
@@ -1195,6 +1195,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml
index dabcbc9fe78..e91a826dddf 100644
--- a/.github/workflows/ai-moderator.lock.yml
+++ b/.github/workflows/ai-moderator.lock.yml
@@ -1030,6 +1030,22 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_bots.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }}
+          GH_AW_SKIP_ROLES_OK: ${{ steps.check_skip_roles.outputs.skip_roles_ok }}
+          GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.check_skip_roles.outputs.error_message }}
+          GH_AW_SKIP_BOTS_OK: ${{ steps.check_skip_bots.outputs.skip_bots_ok }}
+          GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.check_skip_bots.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml
index bb98e437372..c21ab76f97c 100644
--- a/.github/workflows/archie.lock.yml
+++ b/.github/workflows/archie.lock.yml
@@ -1224,6 +1224,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml
index c6570b914e2..f5acd578f72 100644
--- a/.github/workflows/auto-triage-issues.lock.yml
+++ b/.github/workflows/auto-triage-issues.lock.yml
@@ -1143,6 +1143,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml
index 362dcda6e9b..93e55db7ff0 100644
--- a/.github/workflows/brave.lock.yml
+++ b/.github/workflows/brave.lock.yml
@@ -1171,6 +1171,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml
index e9695536987..82a0f98418d 100644
--- a/.github/workflows/breaking-change-checker.lock.yml
+++ b/.github/workflows/breaking-change-checker.lock.yml
@@ -1123,6 +1123,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml
index 62395e3ca7d..3d9a5e8ddf3 100644
--- a/.github/workflows/changeset.lock.yml
+++ b/.github/workflows/changeset.lock.yml
@@ -1022,6 +1022,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml
index ecf2549847a..b0aee2f768c 100644
--- a/.github/workflows/ci-doctor.lock.yml
+++ b/.github/workflows/ci-doctor.lock.yml
@@ -1333,6 +1333,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml
index 680bd2e1b78..bfa818081bd 100644
--- a/.github/workflows/cloclo.lock.yml
+++ b/.github/workflows/cloclo.lock.yml
@@ -1575,6 +1575,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml
index 7e3fff7253c..83df666f586 100644
--- a/.github/workflows/code-scanning-fixer.lock.yml
+++ b/.github/workflows/code-scanning-fixer.lock.yml
@@ -1182,6 +1182,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml
index 392624d9f86..1f38a4a50fe 100644
--- a/.github/workflows/code-simplifier.lock.yml
+++ b/.github/workflows/code-simplifier.lock.yml
@@ -1114,6 +1114,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml
index 942245a48ee..1976aa20622 100644
--- a/.github/workflows/craft.lock.yml
+++ b/.github/workflows/craft.lock.yml
@@ -1177,6 +1177,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml
index e929b0954e3..69eae7f8012 100644
--- a/.github/workflows/daily-cli-performance.lock.yml
+++ b/.github/workflows/daily-cli-performance.lock.yml
@@ -1364,6 +1364,20 @@ jobs:
             }
             core.info(`has_changes=${hasChanges}`);
             core.setOutput('has_changes', hasChanges ? 'true' : 'false');
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml
index 6ea605d0fe7..feec34e8975 100644
--- a/.github/workflows/daily-file-diet.lock.yml
+++ b/.github/workflows/daily-file-diet.lock.yml
@@ -1209,6 +1209,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml
index 9e57bbaf849..fbe71a530ef 100644
--- a/.github/workflows/daily-issues-report.lock.yml
+++ b/.github/workflows/daily-issues-report.lock.yml
@@ -1237,6 +1237,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml
index 82d6b4787a7..d1dec8cbb75 100644
--- a/.github/workflows/daily-observability-report.lock.yml
+++ b/.github/workflows/daily-observability-report.lock.yml
@@ -1207,6 +1207,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml
index ee64722a9c6..24db89ddb27 100644
--- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml
+++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml
@@ -1351,6 +1351,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml
index fc2cc3d77e2..c32043f22b6 100644
--- a/.github/workflows/daily-safe-output-optimizer.lock.yml
+++ b/.github/workflows/daily-safe-output-optimizer.lock.yml
@@ -1333,6 +1333,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml
index 0db5f079d5a..3918919c58c 100644
--- a/.github/workflows/daily-team-status.lock.yml
+++ b/.github/workflows/daily-team-status.lock.yml
@@ -1117,6 +1117,18 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_stop_time.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_STOP_TIME_OK: ${{ steps.check_stop_time.outputs.stop_time_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml
index 3f651b55549..c5b07aa945b 100644
--- a/.github/workflows/daily-testify-uber-super-expert.lock.yml
+++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml
@@ -1251,6 +1251,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml
index 9759d38c63e..7d56e3c70a6 100644
--- a/.github/workflows/dead-code-remover.lock.yml
+++ b/.github/workflows/dead-code-remover.lock.yml
@@ -1155,6 +1155,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml
index eaf1d28fb2c..87f09d5d05d 100644
--- a/.github/workflows/dependabot-burner.lock.yml
+++ b/.github/workflows/dependabot-burner.lock.yml
@@ -1082,6 +1082,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml
index f89534ba151..f7158f532ce 100644
--- a/.github/workflows/dev-hawk.lock.yml
+++ b/.github/workflows/dev-hawk.lock.yml
@@ -1183,6 +1183,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml
index d4e5ca891fd..dcea0d56ee9 100644
--- a/.github/workflows/dev.lock.yml
+++ b/.github/workflows/dev.lock.yml
@@ -1306,6 +1306,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml
index 63879bfbe21..9d963081b67 100644
--- a/.github/workflows/firewall-escape.lock.yml
+++ b/.github/workflows/firewall-escape.lock.yml
@@ -1209,6 +1209,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml
index 6222c6831ca..d9927e89dbc 100644
--- a/.github/workflows/grumpy-reviewer.lock.yml
+++ b/.github/workflows/grumpy-reviewer.lock.yml
@@ -1248,6 +1248,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml
index 15cf5785e5f..261bc809479 100644
--- a/.github/workflows/issue-monster.lock.yml
+++ b/.github/workflows/issue-monster.lock.yml
@@ -1868,6 +1868,23 @@ jobs:
               core.setOutput('issue_list', '');
               core.setOutput('has_issues', 'false');
             }
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+          GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }}
+          GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.check_skip_if_check_failing.outputs.skip_if_check_failing_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml
index ba8fa5e49ad..5385906cf43 100644
--- a/.github/workflows/mergefest.lock.yml
+++ b/.github/workflows/mergefest.lock.yml
@@ -1190,6 +1190,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml
index 6f9c52d9f45..9e75bc66383 100644
--- a/.github/workflows/metrics-collector.lock.yml
+++ b/.github/workflows/metrics-collector.lock.yml
@@ -708,6 +708,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml
index 9fed2c74da7..b59a89ac4de 100644
--- a/.github/workflows/pdf-summary.lock.yml
+++ b/.github/workflows/pdf-summary.lock.yml
@@ -1265,6 +1265,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml
index f7fe52a6ef2..9ccb2dfff12 100644
--- a/.github/workflows/plan.lock.yml
+++ b/.github/workflows/plan.lock.yml
@@ -1192,6 +1192,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml
index 2ab55c9bed9..787c59a5600 100644
--- a/.github/workflows/poem-bot.lock.yml
+++ b/.github/workflows/poem-bot.lock.yml
@@ -1554,6 +1554,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml
index 9007284c234..76605d950f5 100644
--- a/.github/workflows/pr-nitpick-reviewer.lock.yml
+++ b/.github/workflows/pr-nitpick-reviewer.lock.yml
@@ -1262,6 +1262,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml
index 8dedfe725d8..093263dbbd0 100644
--- a/.github/workflows/q.lock.yml
+++ b/.github/workflows/q.lock.yml
@@ -1426,6 +1426,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml
index a2e1c5a6588..e36e5447450 100644
--- a/.github/workflows/refiner.lock.yml
+++ b/.github/workflows/refiner.lock.yml
@@ -1145,6 +1145,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml
index a216e5b4a86..f4bc0f66b07 100644
--- a/.github/workflows/release.lock.yml
+++ b/.github/workflows/release.lock.yml
@@ -1244,6 +1244,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_tag:
     needs:
diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml
index 4fbfd2e9d0e..cbc5becba5c 100644
--- a/.github/workflows/scout.lock.yml
+++ b/.github/workflows/scout.lock.yml
@@ -1460,6 +1460,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml
index 569476395db..d59bffb3b3d 100644
--- a/.github/workflows/security-review.lock.yml
+++ b/.github/workflows/security-review.lock.yml
@@ -1309,6 +1309,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml
index 2077d9832cf..a9cd29acb08 100644
--- a/.github/workflows/slide-deck-maintainer.lock.yml
+++ b/.github/workflows/slide-deck-maintainer.lock.yml
@@ -1229,6 +1229,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml
index 7e3f36fbfac..927e9083ff9 100644
--- a/.github/workflows/smoke-agent-all-merged.lock.yml
+++ b/.github/workflows/smoke-agent-all-merged.lock.yml
@@ -1157,6 +1157,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml
index 151a5e62986..8e9f1753cc0 100644
--- a/.github/workflows/smoke-agent-all-none.lock.yml
+++ b/.github/workflows/smoke-agent-all-none.lock.yml
@@ -1157,6 +1157,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml
index 31080c20a78..0d7051e3a22 100644
--- a/.github/workflows/smoke-agent-public-approved.lock.yml
+++ b/.github/workflows/smoke-agent-public-approved.lock.yml
@@ -1190,6 +1190,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml
index bcd34d3f38a..2f77a301ee7 100644
--- a/.github/workflows/smoke-agent-public-none.lock.yml
+++ b/.github/workflows/smoke-agent-public-none.lock.yml
@@ -1157,6 +1157,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml
index a79cdbd2473..921485e5bc0 100644
--- a/.github/workflows/smoke-agent-scoped-approved.lock.yml
+++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml
@@ -1164,6 +1164,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml
index 8782b886e37..9d99160f58b 100644
--- a/.github/workflows/smoke-call-workflow.lock.yml
+++ b/.github/workflows/smoke-call-workflow.lock.yml
@@ -1130,6 +1130,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml
index b6eb329bc79..731e0138f27 100644
--- a/.github/workflows/smoke-claude.lock.yml
+++ b/.github/workflows/smoke-claude.lock.yml
@@ -2787,6 +2787,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml
index c71c051c9e2..a7cba19cc02 100644
--- a/.github/workflows/smoke-codex.lock.yml
+++ b/.github/workflows/smoke-codex.lock.yml
@@ -1798,6 +1798,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml
index 187fc9c6e2b..e5f545e03cb 100644
--- a/.github/workflows/smoke-copilot-arm.lock.yml
+++ b/.github/workflows/smoke-copilot-arm.lock.yml
@@ -2100,6 +2100,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml
index e51a00e1d99..c426980d750 100644
--- a/.github/workflows/smoke-copilot.lock.yml
+++ b/.github/workflows/smoke-copilot.lock.yml
@@ -2150,6 +2150,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml
index 5a01ce2c721..dedcf22cccd 100644
--- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml
+++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml
@@ -1243,6 +1243,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml
index 3984af1491f..6c6081c5788 100644
--- a/.github/workflows/smoke-gemini.lock.yml
+++ b/.github/workflows/smoke-gemini.lock.yml
@@ -1394,6 +1394,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml
index 4df115196d9..214ae14f38c 100644
--- a/.github/workflows/smoke-multi-pr.lock.yml
+++ b/.github/workflows/smoke-multi-pr.lock.yml
@@ -1224,6 +1224,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml
index f15e2db61a2..d29845f3778 100644
--- a/.github/workflows/smoke-project.lock.yml
+++ b/.github/workflows/smoke-project.lock.yml
@@ -1360,6 +1360,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml
index 65a60bf3772..232fb204930 100644
--- a/.github/workflows/smoke-service-ports.lock.yml
+++ b/.github/workflows/smoke-service-ports.lock.yml
@@ -1128,6 +1128,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml
index 9244a29f04a..0a36b08697f 100644
--- a/.github/workflows/smoke-temporary-id.lock.yml
+++ b/.github/workflows/smoke-temporary-id.lock.yml
@@ -1207,6 +1207,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml
index 2e7fa86810d..41032eb12e7 100644
--- a/.github/workflows/smoke-test-tools.lock.yml
+++ b/.github/workflows/smoke-test-tools.lock.yml
@@ -1173,6 +1173,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml
index 0554980f743..c7a7108272d 100644
--- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml
+++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml
@@ -1269,6 +1269,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml
index d917e7a3e51..bb7ecb82654 100644
--- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml
+++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml
@@ -1143,6 +1143,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml
index 7577b542e74..782e7a3a6bf 100644
--- a/.github/workflows/smoke-workflow-call.lock.yml
+++ b/.github/workflows/smoke-workflow-call.lock.yml
@@ -1134,6 +1134,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml
index 7ce28142b40..bf2a4f5d8c9 100644
--- a/.github/workflows/tidy.lock.yml
+++ b/.github/workflows/tidy.lock.yml
@@ -1245,6 +1245,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml
index b27e51ce437..303ce4387e5 100644
--- a/.github/workflows/ubuntu-image-analyzer.lock.yml
+++ b/.github/workflows/ubuntu-image-analyzer.lock.yml
@@ -1138,6 +1138,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml
index 744e29f31c8..bc35c0b79ba 100644
--- a/.github/workflows/unbloat-docs.lock.yml
+++ b/.github/workflows/unbloat-docs.lock.yml
@@ -1589,6 +1589,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml
index bf3bf3e85d9..a817ce81a00 100644
--- a/.github/workflows/update-astro.lock.yml
+++ b/.github/workflows/update-astro.lock.yml
@@ -1164,6 +1164,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_no_match.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml
index b672bc117d6..6469486f90d 100644
--- a/.github/workflows/workflow-generator.lock.yml
+++ b/.github/workflows/workflow-generator.lock.yml
@@ -1183,6 +1183,21 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+          GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml
index 957d78cc70b..12d0debcb90 100644
--- a/.github/workflows/workflow-health-manager.lock.yml
+++ b/.github/workflows/workflow-health-manager.lock.yml
@@ -1198,6 +1198,20 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
   push_repo_memory:
     needs:
diff --git a/actions/setup/js/report_pre_activation_skip.cjs b/actions/setup/js/report_pre_activation_skip.cjs
new file mode 100644
index 00000000000..9ea48179a43
--- /dev/null
+++ b/actions/setup/js/report_pre_activation_skip.cjs
@@ -0,0 +1,207 @@
+// @ts-check
+/// <reference types="@actions/github-script" />
+
+/**
+ * Reports why the workflow was not activated (skipped by pre-activation gate).
+ * Called from the pre_activation job with `if: always()` condition.
+ * Only writes to job summary when activation was denied by one or more checks.
+ *
+ * Environment variables (all optional — empty means "check was not configured"):
+ *   GH_AW_IS_TEAM_MEMBER            - "true"/"false" from check_membership step
+ *   GH_AW_MEMBERSHIP_RESULT         - result code from check_membership step
+ *   GH_AW_MEMBERSHIP_ERROR_MESSAGE  - human-readable error from check_membership step
+ *   GH_AW_STOP_TIME_OK              - "true"/"false" from check_stop_time step
+ *   GH_AW_RATE_LIMIT_OK             - "true"/"false" from check_rate_limit step
+ *   GH_AW_SKIP_CHECK_OK             - "true"/"false" from check_skip_if_match step
+ *   GH_AW_SKIP_NO_MATCH_OK          - "true"/"false" from check_skip_if_no_match step
+ *   GH_AW_SKIP_IF_CHECK_FAILING_OK  - "true"/"false" from check_skip_if_check_failing step
+ *   GH_AW_SKIP_ROLES_OK             - "true"/"false" from check_skip_roles step
+ *   GH_AW_SKIP_ROLES_ERROR_MESSAGE  - human-readable error from check_skip_roles step
+ *   GH_AW_SKIP_BOTS_OK              - "true"/"false" from check_skip_bots step
+ *   GH_AW_SKIP_BOTS_ERROR_MESSAGE   - human-readable error from check_skip_bots step
+ *   GH_AW_COMMAND_POSITION_OK       - "true"/"false" from check_command_position step
+ */
+
+/**
+ * @typedef {{ check: string, message: string, result: string, remediation: string }} SkipReason
+ */
+
+async function main() {
+  const reasons = collectSkipReasons();
+
+  if (reasons.length === 0) {
+    // All checks passed (or no checks were configured) — nothing to report.
+    core.info("✅ All pre-activation checks passed, no skip reason to report.");
+    return;
+  }
+
+  core.info(`⏭️ Workflow activation denied by ${reasons.length} check(s). Writing skip reason to job summary...`);
+  await writeSkipSummary(reasons);
+}
+
+/**
+ * Collects skip reasons from the environment variables set by each check step.
+ * A check is considered failing when its ok-output is exactly "false".
+ * An empty / undefined value means the check was not configured — skip it.
+ *
+ * @returns {SkipReason[]}
+ */
+function collectSkipReasons() {
+  /** @type {SkipReason[]} */
+  const reasons = [];
+
+  // Role / bot check (check_membership step)
+  const isTeamMember = process.env.GH_AW_IS_TEAM_MEMBER;
+  if (isTeamMember === "false") {
+    const result = process.env.GH_AW_MEMBERSHIP_RESULT || "insufficient_permissions";
+    const errorMsg = process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE || "Actor does not have the required repository permissions.";
+    reasons.push({
+      check: "Role / bot check",
+      message: errorMsg,
+      result,
+      remediation: buildMembershipRemediation(result),
+    });
+  }
+
+  // Stop-time check (check_stop_time step)
+  const stopTimeOk = process.env.GH_AW_STOP_TIME_OK;
+  if (stopTimeOk === "false") {
+    reasons.push({
+      check: "Stop-time limit",
+      message: "The workflow is past its configured stop-time limit.",
+      result: "stop_time_exceeded",
+      remediation: "Update or remove `on.stop-time:` in the workflow frontmatter to extend the active window.",
+    });
+  }
+
+  // Rate-limit check (check_rate_limit step)
+  const rateLimitOk = process.env.GH_AW_RATE_LIMIT_OK;
+  if (rateLimitOk === "false") {
+    reasons.push({
+      check: "Rate-limit check",
+      message: "The actor has exceeded the configured rate limit for this workflow.",
+      result: "rate_limit_exceeded",
+      remediation: "Adjust `on.rate-limit:` in the workflow frontmatter, or wait for the time window to expire.",
+    });
+  }
+
+  // Skip-if-match check (check_skip_if_match step)
+  const skipCheckOk = process.env.GH_AW_SKIP_CHECK_OK;
+  if (skipCheckOk === "false") {
+    reasons.push({
+      check: "Skip-if-match check",
+      message: "The skip-if-match query matched, so the workflow was intentionally skipped.",
+      result: "skip_if_match",
+      remediation: "Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.",
+    });
+  }
+
+  // Skip-if-no-match check (check_skip_if_no_match step)
+  const skipNoMatchOk = process.env.GH_AW_SKIP_NO_MATCH_OK;
+  if (skipNoMatchOk === "false") {
+    reasons.push({
+      check: "Skip-if-no-match check",
+      message: "The skip-if-no-match query returned no results, so the workflow was intentionally skipped.",
+      result: "skip_if_no_match",
+      remediation: "Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.",
+    });
+  }
+
+  // Skip-if-check-failing check (check_skip_if_check_failing step)
+  const skipIfCheckFailingOk = process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK;
+  if (skipIfCheckFailingOk === "false") {
+    reasons.push({
+      check: "Skip-if-check-failing",
+      message: "A required check is currently failing, so the workflow was intentionally skipped.",
+      result: "skip_if_check_failing",
+      remediation: "Fix the failing check referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.",
+    });
+  }
+
+  // Skip-roles check (check_skip_roles step)
+  const skipRolesOk = process.env.GH_AW_SKIP_ROLES_OK;
+  if (skipRolesOk === "false") {
+    const errorMsg = process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE || "Actor has a role that is configured to skip this workflow.";
+    reasons.push({
+      check: "Skip-roles check",
+      message: errorMsg,
+      result: "skip_roles",
+      remediation: "Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.",
+    });
+  }
+
+  // Skip-bots check (check_skip_bots step)
+  const skipBotsOk = process.env.GH_AW_SKIP_BOTS_OK;
+  if (skipBotsOk === "false") {
+    const errorMsg = process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE || "Actor is in the skip-bots list for this workflow.";
+    reasons.push({
+      check: "Skip-bots check",
+      message: errorMsg,
+      result: "skip_bots",
+      remediation: "Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.",
+    });
+  }
+
+  // Command-position check (check_command_position step)
+  const commandPositionOk = process.env.GH_AW_COMMAND_POSITION_OK;
+  if (commandPositionOk === "false") {
+    reasons.push({
+      check: "Command check",
+      message: "The required trigger command was not found in the expected position.",
+      result: "command_not_found",
+      remediation: "Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.",
+    });
+  }
+
+  return reasons;
+}
+
+/**
+ * Returns a remediation hint tailored to the membership check result code.
+ *
+ * @param {string} result - The result code from check_membership.cjs
+ * @returns {string}
+ */
+function buildMembershipRemediation(result) {
+  switch (result) {
+    case "insufficient_permissions":
+      return (
+        "The actor does not have the required repository permission. " +
+        "To allow a bot or GitHub App, add it to `on.bots:` in the workflow frontmatter. " +
+        "To change the required human-actor roles, update `on.roles:` in the workflow frontmatter."
+      );
+    case "bot_not_active":
+      return "The bot is in the allowed list but is not installed or active on this repository. Install the GitHub App and try again.";
+    case "api_error":
+      return "The permission check failed with a GitHub API error. Check the pre_activation job log for details.";
+    case "config_error":
+      return "The workflow has a permission configuration error. Contact the repository administrator.";
+    default:
+      return "To allow a bot or GitHub App actor, add it to `on.bots:` in the workflow frontmatter. " + "To change the required roles for human actors, update `on.roles:` in the workflow frontmatter.";
+  }
+}
+
+/**
+ * Writes the skip reasons to the GitHub Actions job summary.
+ *
+ * @param {SkipReason[]} reasons
+ */
+async function writeSkipSummary(reasons) {
+  const lines = [];
+  lines.push("## ⏭️ Workflow Activation Skipped\n");
+  lines.push("This workflow run was not activated because one or more pre-activation checks denied execution.\n");
+
+  for (const reason of reasons) {
+    lines.push(`### ${reason.check}`);
+    lines.push(`> ${reason.message}\n`);
+    lines.push(`**Remediation:** ${reason.remediation}\n`);
+  }
+
+  lines.push("---");
+  lines.push("_This summary is generated by [gh-aw](https://github.com/github/gh-aw). See the `pre_activation` job log for full details._");
+
+  await core.summary.addRaw(lines.join("\n")).write();
+  core.info("📝 Skip reason written to job summary.");
+}
+
+module.exports = { main, collectSkipReasons, buildMembershipRemediation };
diff --git a/actions/setup/js/report_pre_activation_skip.test.cjs b/actions/setup/js/report_pre_activation_skip.test.cjs
new file mode 100644
index 00000000000..fa1911b06c4
--- /dev/null
+++ b/actions/setup/js/report_pre_activation_skip.test.cjs
@@ -0,0 +1,261 @@
+import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
+
+describe("report_pre_activation_skip.cjs", () => {
+  let mockCore;
+
+  beforeEach(() => {
+    mockCore = {
+      info: vi.fn(),
+      warning: vi.fn(),
+      error: vi.fn(),
+      setFailed: vi.fn(),
+      setOutput: vi.fn(),
+      summary: {
+        addRaw: vi.fn().mockReturnThis(),
+        write: vi.fn().mockResolvedValue(undefined),
+      },
+    };
+
+    global.core = mockCore;
+
+    // Clear all relevant env vars
+    const vars = [
+      "GH_AW_IS_TEAM_MEMBER",
+      "GH_AW_MEMBERSHIP_RESULT",
+      "GH_AW_MEMBERSHIP_ERROR_MESSAGE",
+      "GH_AW_STOP_TIME_OK",
+      "GH_AW_RATE_LIMIT_OK",
+      "GH_AW_SKIP_CHECK_OK",
+      "GH_AW_SKIP_NO_MATCH_OK",
+      "GH_AW_SKIP_IF_CHECK_FAILING_OK",
+      "GH_AW_SKIP_ROLES_OK",
+      "GH_AW_SKIP_ROLES_ERROR_MESSAGE",
+      "GH_AW_SKIP_BOTS_OK",
+      "GH_AW_SKIP_BOTS_ERROR_MESSAGE",
+      "GH_AW_COMMAND_POSITION_OK",
+    ];
+    for (const v of vars) {
+      delete process.env[v];
+    }
+
+    vi.resetModules();
+  });
+
+  afterEach(() => {
+    vi.clearAllMocks();
+    delete global.core;
+  });
+
+  // ---- main() ----
+
+  it("should not write summary when all checks pass", async () => {
+    process.env.GH_AW_IS_TEAM_MEMBER = "true";
+    process.env.GH_AW_STOP_TIME_OK = "true";
+    process.env.GH_AW_RATE_LIMIT_OK = "true";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    expect(mockCore.summary.addRaw).not.toHaveBeenCalled();
+    expect(mockCore.summary.write).not.toHaveBeenCalled();
+    expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("All pre-activation checks passed"));
+  });
+
+  it("should not write summary when no check env vars are set (checks not configured)", async () => {
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    expect(mockCore.summary.addRaw).not.toHaveBeenCalled();
+  });
+
+  it("should write summary when membership check fails", async () => {
+    process.env.GH_AW_IS_TEAM_MEMBER = "false";
+    process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions";
+    process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Access denied: User 'prd-to-prod-pipeline[bot]' is not authorized.";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1);
+    expect(mockCore.summary.write).toHaveBeenCalledTimes(1);
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("⏭️ Workflow Activation Skipped");
+    expect(summaryText).toContain("Role / bot check");
+    expect(summaryText).toContain("prd-to-prod-pipeline[bot]");
+    expect(summaryText).toContain("on.bots:");
+    expect(summaryText).toContain("on.roles:");
+  });
+
+  it("should write summary when stop-time check fails", async () => {
+    process.env.GH_AW_STOP_TIME_OK = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1);
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Stop-time limit");
+    expect(summaryText).toContain("on.stop-time:");
+  });
+
+  it("should write summary when rate-limit check fails", async () => {
+    process.env.GH_AW_RATE_LIMIT_OK = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Rate-limit check");
+    expect(summaryText).toContain("on.rate-limit:");
+  });
+
+  it("should write summary when skip-if-match check fails", async () => {
+    process.env.GH_AW_SKIP_CHECK_OK = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Skip-if-match check");
+    expect(summaryText).toContain("on.skip-if-match:");
+  });
+
+  it("should write summary when skip-if-no-match check fails", async () => {
+    process.env.GH_AW_SKIP_NO_MATCH_OK = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Skip-if-no-match check");
+    expect(summaryText).toContain("on.skip-if-no-match:");
+  });
+
+  it("should write summary when skip-if-check-failing check fails", async () => {
+    process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Skip-if-check-failing");
+    expect(summaryText).toContain("on.skip-if-check-failing:");
+  });
+
+  it("should write summary when skip-roles check fails with error message", async () => {
+    process.env.GH_AW_SKIP_ROLES_OK = "false";
+    process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE = "Workflow skipped: User 'admin-user' has role 'admin'";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Skip-roles check");
+    expect(summaryText).toContain("admin-user");
+    expect(summaryText).toContain("on.skip-roles:");
+  });
+
+  it("should write summary when skip-bots check fails with error message", async () => {
+    process.env.GH_AW_SKIP_BOTS_OK = "false";
+    process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE = "Workflow skipped: User 'renovate[bot]' is in skip-bots";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Skip-bots check");
+    expect(summaryText).toContain("renovate[bot]");
+    expect(summaryText).toContain("on.skip-bots:");
+  });
+
+  it("should write summary when command-position check fails", async () => {
+    process.env.GH_AW_COMMAND_POSITION_OK = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Command check");
+    expect(summaryText).toContain("on.command:");
+  });
+
+  it("should write summary with multiple failures", async () => {
+    process.env.GH_AW_IS_TEAM_MEMBER = "false";
+    process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions";
+    process.env.GH_AW_STOP_TIME_OK = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("Role / bot check");
+    expect(summaryText).toContain("Stop-time limit");
+  });
+
+  it("should include a link to gh-aw in the summary footer", async () => {
+    process.env.GH_AW_IS_TEAM_MEMBER = "false";
+
+    const { main } = await import("./report_pre_activation_skip.cjs");
+    await main();
+
+    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
+    expect(summaryText).toContain("gh-aw");
+    expect(summaryText).toContain("pre_activation");
+  });
+
+  // ---- collectSkipReasons() ----
+
+  it("should return empty array when no checks failed", async () => {
+    const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs");
+    const reasons = collectSkipReasons();
+    expect(reasons).toHaveLength(0);
+  });
+
+  it("should return one reason when membership check fails", async () => {
+    process.env.GH_AW_IS_TEAM_MEMBER = "false";
+    process.env.GH_AW_MEMBERSHIP_RESULT = "bot_not_active";
+    process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Bot is not active";
+
+    const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs");
+    const reasons = collectSkipReasons();
+
+    expect(reasons).toHaveLength(1);
+    expect(reasons[0].check).toBe("Role / bot check");
+    expect(reasons[0].result).toBe("bot_not_active");
+    expect(reasons[0].message).toBe("Bot is not active");
+  });
+
+  // ---- buildMembershipRemediation() ----
+
+  it("should return insufficient_permissions remediation mentioning on.bots and on.roles", async () => {
+    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
+    const hint = buildMembershipRemediation("insufficient_permissions");
+    expect(hint).toContain("on.bots:");
+    expect(hint).toContain("on.roles:");
+  });
+
+  it("should return bot_not_active remediation about GitHub App installation", async () => {
+    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
+    const hint = buildMembershipRemediation("bot_not_active");
+    expect(hint).toContain("Install the GitHub App");
+  });
+
+  it("should return api_error remediation mentioning the job log", async () => {
+    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
+    const hint = buildMembershipRemediation("api_error");
+    expect(hint).toContain("pre_activation");
+  });
+
+  it("should return config_error remediation mentioning the administrator", async () => {
+    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
+    const hint = buildMembershipRemediation("config_error");
+    expect(hint).toContain("administrator");
+  });
+
+  it("should return default remediation for unknown result codes", async () => {
+    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
+    const hint = buildMembershipRemediation("unknown_result");
+    expect(hint).toContain("on.bots:");
+  });
+});
diff --git a/pkg/constants/job_constants.go b/pkg/constants/job_constants.go
index 352aaa2da72..7d46e88be7e 100644
--- a/pkg/constants/job_constants.go
+++ b/pkg/constants/job_constants.go
@@ -159,6 +159,10 @@ const CheckSkipIfCheckFailingStepID StepID = "check_skip_if_check_failing"
 // emitted in the pre-activation job when on.github-app is configured alongside skip-if checks.
 const PreActivationAppTokenStepID StepID = "pre-activation-app-token"
 
+// ReportSkipReasonStepID is the step ID for the report-skip-reason step in the pre-activation job.
+// This step runs with if: always() and writes skip reasons to the job summary when activation is denied.
+const ReportSkipReasonStepID StepID = "report-skip-reason"
+
 // ParseMCPGatewayStepID is the step ID for the MCP gateway log parsing step in the agent job.
 // Its effective_tokens output is exposed as an agent job output so that the safe_outputs job
 // can pass the value as GH_AW_EFFECTIVE_TOKENS to the footer template renderer.
diff --git a/pkg/workflow/compiler_pre_activation_job.go b/pkg/workflow/compiler_pre_activation_job.go
index 80d1cf8fce9..b17527d6291 100644
--- a/pkg/workflow/compiler_pre_activation_job.go
+++ b/pkg/workflow/compiler_pre_activation_job.go
@@ -421,6 +421,13 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec
 		jobIfCondition = data.If
 	}
 
+	// Add report-skip-reason step to surface denial reasons in the job summary when activation
+	// is denied. Only added when there are actual blocking conditions (not for on.steps-only
+	// pre-activation where activated is unconditionally true).
+	if len(conditions) > 0 {
+		steps = append(steps, c.generateReportSkipStep(needsPermissionCheck, data))
+	}
+
 	// In script mode, explicitly add a cleanup step (mirrors post.js in dev/release/action mode).
 	if c.actionMode.IsScript() {
 		steps = append(steps, c.generateScriptModeCleanupStep())
@@ -439,6 +446,82 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec
 	return job, nil
 }
 
+// generateReportSkipStep generates the "Report skip reason" step for the pre-activation job.
+// The step runs with if: always() and writes skip reasons to the GitHub Actions job summary
+// when one or more pre-activation checks deny activation, so operators can see the denial
+// reason directly from the PR / workflow run surface without opening raw job logs.
+//
+// Only env vars for checks that are actually configured are emitted, keeping the YAML minimal
+// and avoiding actionlint warnings about references to unconfigured step outputs.
+func (c *Compiler) generateReportSkipStep(needsPermissionCheck bool, data *WorkflowData) string {
+	var step strings.Builder
+
+	step.WriteString("      - name: Report skip reason\n")
+	step.WriteString(fmt.Sprintf("        id: %s\n", constants.ReportSkipReasonStepID))
+	step.WriteString("        if: always()\n")
+	step.WriteString(fmt.Sprintf("        uses: %s\n", GetActionPin("actions/github-script")))
+	step.WriteString("        env:\n")
+
+	if needsPermissionCheck {
+		step.WriteString(fmt.Sprintf("          GH_AW_IS_TEAM_MEMBER: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckMembershipStepID, constants.IsTeamMemberOutput))
+		step.WriteString(fmt.Sprintf("          GH_AW_MEMBERSHIP_RESULT: ${{ steps.%s.outputs.result }}\n",
+			constants.CheckMembershipStepID))
+		step.WriteString(fmt.Sprintf("          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n",
+			constants.CheckMembershipStepID))
+	}
+
+	if data.StopTime != "" {
+		step.WriteString(fmt.Sprintf("          GH_AW_STOP_TIME_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckStopTimeStepID, constants.StopTimeOkOutput))
+	}
+
+	if data.RateLimit != nil {
+		step.WriteString(fmt.Sprintf("          GH_AW_RATE_LIMIT_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckRateLimitStepID, constants.RateLimitOkOutput))
+	}
+
+	if data.SkipIfMatch != nil {
+		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_CHECK_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckSkipIfMatchStepID, constants.SkipCheckOkOutput))
+	}
+
+	if data.SkipIfNoMatch != nil {
+		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_NO_MATCH_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckSkipIfNoMatchStepID, constants.SkipNoMatchCheckOkOutput))
+	}
+
+	if data.SkipIfCheckFailing != nil {
+		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckSkipIfCheckFailingStepID, constants.SkipIfCheckFailingOkOutput))
+	}
+
+	if len(data.SkipRoles) > 0 {
+		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_ROLES_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckSkipRolesStepID, constants.SkipRolesOkOutput))
+		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n",
+			constants.CheckSkipRolesStepID))
+	}
+
+	if len(data.SkipBots) > 0 {
+		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_BOTS_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckSkipBotsStepID, constants.SkipBotsOkOutput))
+		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n",
+			constants.CheckSkipBotsStepID))
+	}
+
+	if len(data.Command) > 0 {
+		step.WriteString(fmt.Sprintf("          GH_AW_COMMAND_POSITION_OK: ${{ steps.%s.outputs.%s }}\n",
+			constants.CheckCommandPositionStepID, constants.CommandPositionOkOutput))
+	}
+
+	step.WriteString("        with:\n")
+	step.WriteString("          script: |\n")
+	step.WriteString(generateGitHubScriptWithRequire("report_pre_activation_skip.cjs"))
+
+	return step.String()
+}
+
 // extractPreActivationCustomFields extracts custom steps and outputs from jobs.pre-activation field in frontmatter.
 // It validates that only steps and outputs fields are present, and errors on any other fields.
 // If both jobs.pre-activation and jobs.pre_activation are defined, imports from both.
diff --git a/pkg/workflow/report_skip_reason_test.go b/pkg/workflow/report_skip_reason_test.go
new file mode 100644
index 00000000000..543377eb390
--- /dev/null
+++ b/pkg/workflow/report_skip_reason_test.go
@@ -0,0 +1,193 @@
+//go:build !integration
+
+package workflow
+
+import (
+	"os"
+	"path/filepath"
+	"testing"
+
+	"github.com/github/gh-aw/pkg/stringutil"
+	"github.com/github/gh-aw/pkg/testutil"
+	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
+)
+
+// TestReportSkipReasonStep tests that the report-skip-reason step is generated correctly
+// in the pre-activation job whenever blocking conditions are present, so that operators
+// can see the denial reason from the PR / workflow-run surface without opening raw logs.
+func TestReportSkipReasonStep(t *testing.T) {
+	tmpDir := testutil.TempDir(t, "report-skip-reason-test")
+	compiler := NewCompiler()
+
+	t.Run("report_skip_reason_present_with_membership_check", func(t *testing.T) {
+		workflowContent := `---
+on:
+  pull_request:
+    types: [opened]
+  roles: [admin, maintainer, write]
+engine: copilot
+---
+
+# PR Review Workflow
+
+Review pull requests.
+`
+		workflowFile := filepath.Join(tmpDir, "membership-workflow.md")
+		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
+		require.NoError(t, err, "Failed to write workflow file")
+
+		err = compiler.CompileWorkflow(workflowFile)
+		require.NoError(t, err, "Compilation failed")
+
+		lockFile := stringutil.MarkdownToLockFile(workflowFile)
+		lockContent, err := os.ReadFile(lockFile)
+		require.NoError(t, err, "Failed to read lock file")
+
+		lockContentStr := string(lockContent)
+
+		// Verify the report-skip-reason step is present
+		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
+		assert.Contains(t, lockContentStr, "Report skip reason", "Expected Report skip reason step name")
+
+		// Verify the step has always() condition
+		assert.Contains(t, lockContentStr, "if: always()", "Expected always() condition on report-skip-reason step")
+
+		// Verify membership check env vars are passed
+		assert.Contains(t, lockContentStr, "GH_AW_IS_TEAM_MEMBER:", "Expected GH_AW_IS_TEAM_MEMBER env var")
+		assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_RESULT:", "Expected GH_AW_MEMBERSHIP_RESULT env var")
+		assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_ERROR_MESSAGE:", "Expected GH_AW_MEMBERSHIP_ERROR_MESSAGE env var")
+
+		// Verify the script calls report_pre_activation_skip.cjs
+		assert.Contains(t, lockContentStr, "report_pre_activation_skip.cjs", "Expected report_pre_activation_skip.cjs in script")
+	})
+
+	t.Run("report_skip_reason_present_with_stop_time", func(t *testing.T) {
+		workflowContent := `---
+on:
+  workflow_dispatch: null
+  stop-after: "+48h"
+  roles: [admin, maintainer]
+engine: copilot
+---
+
+# Stop-Time Workflow
+
+This workflow has a stop-after configuration.
+`
+		workflowFile := filepath.Join(tmpDir, "stop-time-workflow.md")
+		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
+		require.NoError(t, err, "Failed to write workflow file")
+
+		err = compiler.CompileWorkflow(workflowFile)
+		require.NoError(t, err, "Compilation failed")
+
+		lockFile := stringutil.MarkdownToLockFile(workflowFile)
+		lockContent, err := os.ReadFile(lockFile)
+		require.NoError(t, err, "Failed to read lock file")
+
+		lockContentStr := string(lockContent)
+
+		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
+		assert.Contains(t, lockContentStr, "GH_AW_STOP_TIME_OK:", "Expected GH_AW_STOP_TIME_OK env var")
+	})
+
+	t.Run("report_skip_reason_present_with_skip_bots", func(t *testing.T) {
+		workflowContent := `---
+on:
+  issues:
+    types: [opened]
+  skip-bots: [renovate, dependabot]
+engine: copilot
+---
+
+# Skip-Bots Workflow
+
+This workflow skips bot actors.
+`
+		workflowFile := filepath.Join(tmpDir, "skip-bots-workflow.md")
+		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
+		require.NoError(t, err, "Failed to write workflow file")
+
+		err = compiler.CompileWorkflow(workflowFile)
+		require.NoError(t, err, "Compilation failed")
+
+		lockFile := stringutil.MarkdownToLockFile(workflowFile)
+		lockContent, err := os.ReadFile(lockFile)
+		require.NoError(t, err, "Failed to read lock file")
+
+		lockContentStr := string(lockContent)
+
+		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
+		assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_OK:", "Expected GH_AW_SKIP_BOTS_OK env var")
+		assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_ERROR_MESSAGE:", "Expected GH_AW_SKIP_BOTS_ERROR_MESSAGE env var")
+	})
+
+	t.Run("report_skip_reason_present_with_skip_roles", func(t *testing.T) {
+		workflowContent := `---
+on:
+  pull_request:
+    types: [opened]
+  skip-roles: [admin]
+engine: copilot
+---
+
+# Skip-Roles Workflow
+
+This workflow skips admin actors.
+`
+		workflowFile := filepath.Join(tmpDir, "skip-roles-workflow.md")
+		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
+		require.NoError(t, err, "Failed to write workflow file")
+
+		err = compiler.CompileWorkflow(workflowFile)
+		require.NoError(t, err, "Compilation failed")
+
+		lockFile := stringutil.MarkdownToLockFile(workflowFile)
+		lockContent, err := os.ReadFile(lockFile)
+		require.NoError(t, err, "Failed to read lock file")
+
+		lockContentStr := string(lockContent)
+
+		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
+		assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_OK:", "Expected GH_AW_SKIP_ROLES_OK env var")
+		assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_ERROR_MESSAGE:", "Expected GH_AW_SKIP_ROLES_ERROR_MESSAGE env var")
+	})
+
+	t.Run("report_skip_reason_not_present_without_conditions", func(t *testing.T) {
+		// When activation is unconditionally true (roles: all + only on.steps), there are no
+		// blocking conditions so the report-skip-reason step should NOT be generated.
+		workflowContent := `---
+on:
+  pull_request:
+    types: [opened]
+  roles: all
+  steps:
+    - name: Custom gate
+      id: custom_gate
+      run: echo "gate_result=ok" >> $GITHUB_OUTPUT
+engine: copilot
+if: needs.pre_activation.outputs.custom_gate_result == 'ok'
+---
+
+# On-Steps-Only Workflow
+
+Uses on.steps to gate activation with no blocking conditions.
+`
+		workflowFile := filepath.Join(tmpDir, "on-steps-only-workflow.md")
+		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
+		require.NoError(t, err, "Failed to write workflow file")
+
+		err = compiler.CompileWorkflow(workflowFile)
+		require.NoError(t, err, "Compilation failed")
+
+		lockFile := stringutil.MarkdownToLockFile(workflowFile)
+		lockContent, err := os.ReadFile(lockFile)
+		require.NoError(t, err, "Failed to read lock file")
+
+		lockContentStr := string(lockContent)
+
+		// No blocking conditions → no report-skip-reason step
+		assert.NotContains(t, lockContentStr, "report-skip-reason", "report-skip-reason step should not appear for on.steps-only workflows")
+	})
+}
diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden
index 532e57b74dc..2595a853cbb 100644
--- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden
+++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden
@@ -553,4 +553,18 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 
diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden
index 5ef0558e180..c4f6dd21af7 100644
--- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden
+++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden
@@ -554,4 +554,18 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
+      - name: Report skip reason
+        id: report-skip-reason
+        if: always()
+        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
+        env:
+          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
+          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
+          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
+        with:
+          script: |
+            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+            setupGlobals(core, github, context, exec, io);
+            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
+            await main();
 

From 1c92d23755164d6052c65ea13702cd126d103930 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Apr 2026 01:32:25 +0000
Subject: [PATCH 3/6] Integrate skip reason summary into existing check scripts
 instead of a separate step

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/483d2eeb-3b22-4f64-883c-a0c08a888fc0

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
 .github/workflows/ace-editor.lock.yml         |  15 -
 .../agent-performance-analyzer.lock.yml       |  14 -
 .../workflows/agent-persona-explorer.lock.yml |  14 -
 .github/workflows/ai-moderator.lock.yml       |  16 --
 .github/workflows/archie.lock.yml             |  15 -
 .github/workflows/auto-triage-issues.lock.yml |  15 -
 .github/workflows/brave.lock.yml              |  15 -
 .../breaking-change-checker.lock.yml          |  15 -
 .github/workflows/changeset.lock.yml          |  14 -
 .github/workflows/ci-doctor.lock.yml          |  14 -
 .github/workflows/cloclo.lock.yml             |  15 -
 .../workflows/code-scanning-fixer.lock.yml    |  15 -
 .github/workflows/code-simplifier.lock.yml    |  15 -
 .github/workflows/craft.lock.yml              |  15 -
 .../workflows/daily-cli-performance.lock.yml  |  14 -
 .github/workflows/daily-file-diet.lock.yml    |  15 -
 .../workflows/daily-issues-report.lock.yml    |  14 -
 .../daily-observability-report.lock.yml       |  14 -
 .../daily-rendering-scripts-verifier.lock.yml |  15 -
 .../daily-safe-output-optimizer.lock.yml      |  15 -
 .github/workflows/daily-team-status.lock.yml  |  12 -
 .../daily-testify-uber-super-expert.lock.yml  |  15 -
 .github/workflows/dead-code-remover.lock.yml  |  15 -
 .github/workflows/dependabot-burner.lock.yml  |  14 -
 .github/workflows/dev-hawk.lock.yml           |  14 -
 .github/workflows/dev.lock.yml                |  14 -
 .github/workflows/firewall-escape.lock.yml    |  14 -
 .github/workflows/grumpy-reviewer.lock.yml    |  15 -
 .github/workflows/issue-monster.lock.yml      |  17 --
 .github/workflows/mergefest.lock.yml          |  15 -
 .github/workflows/metrics-collector.lock.yml  |  14 -
 .github/workflows/pdf-summary.lock.yml        |  15 -
 .github/workflows/plan.lock.yml               |  15 -
 .github/workflows/poem-bot.lock.yml           |  15 -
 .../workflows/pr-nitpick-reviewer.lock.yml    |  15 -
 .github/workflows/q.lock.yml                  |  15 -
 .github/workflows/refiner.lock.yml            |  14 -
 .github/workflows/release.lock.yml            |  14 -
 .github/workflows/scout.lock.yml              |  15 -
 .github/workflows/security-review.lock.yml    |  15 -
 .../workflows/slide-deck-maintainer.lock.yml  |  15 -
 .../workflows/smoke-agent-all-merged.lock.yml |  14 -
 .../workflows/smoke-agent-all-none.lock.yml   |  14 -
 .../smoke-agent-public-approved.lock.yml      |  14 -
 .../smoke-agent-public-none.lock.yml          |  14 -
 .../smoke-agent-scoped-approved.lock.yml      |  14 -
 .../workflows/smoke-call-workflow.lock.yml    |  14 -
 .github/workflows/smoke-claude.lock.yml       |  14 -
 .github/workflows/smoke-codex.lock.yml        |  14 -
 .github/workflows/smoke-copilot-arm.lock.yml  |  14 -
 .github/workflows/smoke-copilot.lock.yml      |  14 -
 .../smoke-create-cross-repo-pr.lock.yml       |  14 -
 .github/workflows/smoke-gemini.lock.yml       |  14 -
 .github/workflows/smoke-multi-pr.lock.yml     |  14 -
 .github/workflows/smoke-project.lock.yml      |  14 -
 .../workflows/smoke-service-ports.lock.yml    |  14 -
 .github/workflows/smoke-temporary-id.lock.yml |  14 -
 .github/workflows/smoke-test-tools.lock.yml   |  14 -
 .../smoke-update-cross-repo-pr.lock.yml       |  14 -
 .../smoke-workflow-call-with-inputs.lock.yml  |  14 -
 .../workflows/smoke-workflow-call.lock.yml    |  14 -
 .github/workflows/tidy.lock.yml               |  15 -
 .../workflows/ubuntu-image-analyzer.lock.yml  |  15 -
 .github/workflows/unbloat-docs.lock.yml       |  15 -
 .github/workflows/update-astro.lock.yml       |  15 -
 .github/workflows/workflow-generator.lock.yml |  15 -
 .../workflow-health-manager.lock.yml          |  14 -
 actions/setup/js/check_command_position.cjs   |  11 +
 actions/setup/js/check_membership.cjs         |  30 +-
 actions/setup/js/check_skip_bots.cjs          |  14 +-
 actions/setup/js/check_skip_bots.test.cjs     |   4 +
 .../setup/js/check_skip_if_check_failing.cjs  |  11 +
 .../js/check_skip_if_check_failing.test.cjs   |   4 +
 actions/setup/js/check_skip_if_match.cjs      |  11 +
 actions/setup/js/check_skip_if_no_match.cjs   |  11 +
 .../setup/js/check_skip_if_no_match.test.cjs  |   4 +
 actions/setup/js/check_skip_roles.cjs         |  14 +-
 actions/setup/js/check_stop_time.cjs          |  11 +
 .../setup/js/report_pre_activation_skip.cjs   | 207 --------------
 .../js/report_pre_activation_skip.test.cjs    | 261 ------------------
 pkg/constants/job_constants.go                |   4 -
 pkg/workflow/compiler_pre_activation_job.go   |  81 ------
 pkg/workflow/report_skip_reason_test.go       | 193 -------------
 .../basic-copilot.golden                      |  14 -
 .../with-imports.golden                       |  14 -
 85 files changed, 116 insertions(+), 1753 deletions(-)
 delete mode 100644 actions/setup/js/report_pre_activation_skip.cjs
 delete mode 100644 actions/setup/js/report_pre_activation_skip.test.cjs
 delete mode 100644 pkg/workflow/report_skip_reason_test.go

diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml
index 630f9160c75..0b7c12bf770 100644
--- a/.github/workflows/ace-editor.lock.yml
+++ b/.github/workflows/ace-editor.lock.yml
@@ -665,19 +665,4 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml
index d1fb38a8f3a..80bdddd9b15 100644
--- a/.github/workflows/agent-performance-analyzer.lock.yml
+++ b/.github/workflows/agent-performance-analyzer.lock.yml
@@ -1246,20 +1246,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml
index 5368804febb..bc83b1d663b 100644
--- a/.github/workflows/agent-persona-explorer.lock.yml
+++ b/.github/workflows/agent-persona-explorer.lock.yml
@@ -1195,20 +1195,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml
index e91a826dddf..dabcbc9fe78 100644
--- a/.github/workflows/ai-moderator.lock.yml
+++ b/.github/workflows/ai-moderator.lock.yml
@@ -1030,22 +1030,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_bots.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }}
-          GH_AW_SKIP_ROLES_OK: ${{ steps.check_skip_roles.outputs.skip_roles_ok }}
-          GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.check_skip_roles.outputs.error_message }}
-          GH_AW_SKIP_BOTS_OK: ${{ steps.check_skip_bots.outputs.skip_bots_ok }}
-          GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.check_skip_bots.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml
index c21ab76f97c..bb98e437372 100644
--- a/.github/workflows/archie.lock.yml
+++ b/.github/workflows/archie.lock.yml
@@ -1224,21 +1224,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml
index f5acd578f72..c6570b914e2 100644
--- a/.github/workflows/auto-triage-issues.lock.yml
+++ b/.github/workflows/auto-triage-issues.lock.yml
@@ -1143,21 +1143,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml
index 93e55db7ff0..362dcda6e9b 100644
--- a/.github/workflows/brave.lock.yml
+++ b/.github/workflows/brave.lock.yml
@@ -1171,21 +1171,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml
index 82a0f98418d..e9695536987 100644
--- a/.github/workflows/breaking-change-checker.lock.yml
+++ b/.github/workflows/breaking-change-checker.lock.yml
@@ -1123,21 +1123,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml
index 3d9a5e8ddf3..62395e3ca7d 100644
--- a/.github/workflows/changeset.lock.yml
+++ b/.github/workflows/changeset.lock.yml
@@ -1022,20 +1022,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml
index b0aee2f768c..ecf2549847a 100644
--- a/.github/workflows/ci-doctor.lock.yml
+++ b/.github/workflows/ci-doctor.lock.yml
@@ -1333,20 +1333,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml
index bfa818081bd..680bd2e1b78 100644
--- a/.github/workflows/cloclo.lock.yml
+++ b/.github/workflows/cloclo.lock.yml
@@ -1575,21 +1575,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml
index 83df666f586..7e3fff7253c 100644
--- a/.github/workflows/code-scanning-fixer.lock.yml
+++ b/.github/workflows/code-scanning-fixer.lock.yml
@@ -1182,21 +1182,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml
index 1f38a4a50fe..392624d9f86 100644
--- a/.github/workflows/code-simplifier.lock.yml
+++ b/.github/workflows/code-simplifier.lock.yml
@@ -1114,21 +1114,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml
index 1976aa20622..942245a48ee 100644
--- a/.github/workflows/craft.lock.yml
+++ b/.github/workflows/craft.lock.yml
@@ -1177,21 +1177,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml
index 69eae7f8012..e929b0954e3 100644
--- a/.github/workflows/daily-cli-performance.lock.yml
+++ b/.github/workflows/daily-cli-performance.lock.yml
@@ -1364,20 +1364,6 @@ jobs:
             }
             core.info(`has_changes=${hasChanges}`);
             core.setOutput('has_changes', hasChanges ? 'true' : 'false');
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml
index feec34e8975..6ea605d0fe7 100644
--- a/.github/workflows/daily-file-diet.lock.yml
+++ b/.github/workflows/daily-file-diet.lock.yml
@@ -1209,21 +1209,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml
index fbe71a530ef..9e57bbaf849 100644
--- a/.github/workflows/daily-issues-report.lock.yml
+++ b/.github/workflows/daily-issues-report.lock.yml
@@ -1237,20 +1237,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml
index d1dec8cbb75..82d6b4787a7 100644
--- a/.github/workflows/daily-observability-report.lock.yml
+++ b/.github/workflows/daily-observability-report.lock.yml
@@ -1207,20 +1207,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml
index 24db89ddb27..ee64722a9c6 100644
--- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml
+++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml
@@ -1351,21 +1351,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml
index c32043f22b6..fc2cc3d77e2 100644
--- a/.github/workflows/daily-safe-output-optimizer.lock.yml
+++ b/.github/workflows/daily-safe-output-optimizer.lock.yml
@@ -1333,21 +1333,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml
index 3918919c58c..0db5f079d5a 100644
--- a/.github/workflows/daily-team-status.lock.yml
+++ b/.github/workflows/daily-team-status.lock.yml
@@ -1117,18 +1117,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_stop_time.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_STOP_TIME_OK: ${{ steps.check_stop_time.outputs.stop_time_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml
index c5b07aa945b..3f651b55549 100644
--- a/.github/workflows/daily-testify-uber-super-expert.lock.yml
+++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml
@@ -1251,21 +1251,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml
index 7d56e3c70a6..9759d38c63e 100644
--- a/.github/workflows/dead-code-remover.lock.yml
+++ b/.github/workflows/dead-code-remover.lock.yml
@@ -1155,21 +1155,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml
index 87f09d5d05d..eaf1d28fb2c 100644
--- a/.github/workflows/dependabot-burner.lock.yml
+++ b/.github/workflows/dependabot-burner.lock.yml
@@ -1082,20 +1082,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml
index f7158f532ce..f89534ba151 100644
--- a/.github/workflows/dev-hawk.lock.yml
+++ b/.github/workflows/dev-hawk.lock.yml
@@ -1183,20 +1183,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml
index dcea0d56ee9..d4e5ca891fd 100644
--- a/.github/workflows/dev.lock.yml
+++ b/.github/workflows/dev.lock.yml
@@ -1306,20 +1306,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml
index 9d963081b67..63879bfbe21 100644
--- a/.github/workflows/firewall-escape.lock.yml
+++ b/.github/workflows/firewall-escape.lock.yml
@@ -1209,20 +1209,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml
index d9927e89dbc..6222c6831ca 100644
--- a/.github/workflows/grumpy-reviewer.lock.yml
+++ b/.github/workflows/grumpy-reviewer.lock.yml
@@ -1248,21 +1248,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml
index 261bc809479..15cf5785e5f 100644
--- a/.github/workflows/issue-monster.lock.yml
+++ b/.github/workflows/issue-monster.lock.yml
@@ -1868,23 +1868,6 @@ jobs:
               core.setOutput('issue_list', '');
               core.setOutput('has_issues', 'false');
             }
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-          GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }}
-          GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.check_skip_if_check_failing.outputs.skip_if_check_failing_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml
index 5385906cf43..ba8fa5e49ad 100644
--- a/.github/workflows/mergefest.lock.yml
+++ b/.github/workflows/mergefest.lock.yml
@@ -1190,21 +1190,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml
index 9e75bc66383..6f9c52d9f45 100644
--- a/.github/workflows/metrics-collector.lock.yml
+++ b/.github/workflows/metrics-collector.lock.yml
@@ -708,20 +708,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_repo_memory:
     needs:
diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml
index b59a89ac4de..9fed2c74da7 100644
--- a/.github/workflows/pdf-summary.lock.yml
+++ b/.github/workflows/pdf-summary.lock.yml
@@ -1265,21 +1265,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml
index 9ccb2dfff12..f7fe52a6ef2 100644
--- a/.github/workflows/plan.lock.yml
+++ b/.github/workflows/plan.lock.yml
@@ -1192,21 +1192,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml
index 787c59a5600..2ab55c9bed9 100644
--- a/.github/workflows/poem-bot.lock.yml
+++ b/.github/workflows/poem-bot.lock.yml
@@ -1554,21 +1554,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml
index 76605d950f5..9007284c234 100644
--- a/.github/workflows/pr-nitpick-reviewer.lock.yml
+++ b/.github/workflows/pr-nitpick-reviewer.lock.yml
@@ -1262,21 +1262,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml
index 093263dbbd0..8dedfe725d8 100644
--- a/.github/workflows/q.lock.yml
+++ b/.github/workflows/q.lock.yml
@@ -1426,21 +1426,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml
index e36e5447450..a2e1c5a6588 100644
--- a/.github/workflows/refiner.lock.yml
+++ b/.github/workflows/refiner.lock.yml
@@ -1145,20 +1145,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml
index f4bc0f66b07..a216e5b4a86 100644
--- a/.github/workflows/release.lock.yml
+++ b/.github/workflows/release.lock.yml
@@ -1244,20 +1244,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_tag:
     needs:
diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml
index cbc5becba5c..4fbfd2e9d0e 100644
--- a/.github/workflows/scout.lock.yml
+++ b/.github/workflows/scout.lock.yml
@@ -1460,21 +1460,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml
index d59bffb3b3d..569476395db 100644
--- a/.github/workflows/security-review.lock.yml
+++ b/.github/workflows/security-review.lock.yml
@@ -1309,21 +1309,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml
index a9cd29acb08..2077d9832cf 100644
--- a/.github/workflows/slide-deck-maintainer.lock.yml
+++ b/.github/workflows/slide-deck-maintainer.lock.yml
@@ -1229,21 +1229,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml
index 927e9083ff9..7e3f36fbfac 100644
--- a/.github/workflows/smoke-agent-all-merged.lock.yml
+++ b/.github/workflows/smoke-agent-all-merged.lock.yml
@@ -1157,20 +1157,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml
index 8e9f1753cc0..151a5e62986 100644
--- a/.github/workflows/smoke-agent-all-none.lock.yml
+++ b/.github/workflows/smoke-agent-all-none.lock.yml
@@ -1157,20 +1157,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml
index 0d7051e3a22..31080c20a78 100644
--- a/.github/workflows/smoke-agent-public-approved.lock.yml
+++ b/.github/workflows/smoke-agent-public-approved.lock.yml
@@ -1190,20 +1190,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml
index 2f77a301ee7..bcd34d3f38a 100644
--- a/.github/workflows/smoke-agent-public-none.lock.yml
+++ b/.github/workflows/smoke-agent-public-none.lock.yml
@@ -1157,20 +1157,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml
index 921485e5bc0..a79cdbd2473 100644
--- a/.github/workflows/smoke-agent-scoped-approved.lock.yml
+++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml
@@ -1164,20 +1164,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml
index 9d99160f58b..8782b886e37 100644
--- a/.github/workflows/smoke-call-workflow.lock.yml
+++ b/.github/workflows/smoke-call-workflow.lock.yml
@@ -1130,20 +1130,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml
index 731e0138f27..b6eb329bc79 100644
--- a/.github/workflows/smoke-claude.lock.yml
+++ b/.github/workflows/smoke-claude.lock.yml
@@ -2787,20 +2787,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml
index a7cba19cc02..c71c051c9e2 100644
--- a/.github/workflows/smoke-codex.lock.yml
+++ b/.github/workflows/smoke-codex.lock.yml
@@ -1798,20 +1798,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml
index e5f545e03cb..187fc9c6e2b 100644
--- a/.github/workflows/smoke-copilot-arm.lock.yml
+++ b/.github/workflows/smoke-copilot-arm.lock.yml
@@ -2100,20 +2100,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml
index c426980d750..e51a00e1d99 100644
--- a/.github/workflows/smoke-copilot.lock.yml
+++ b/.github/workflows/smoke-copilot.lock.yml
@@ -2150,20 +2150,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml
index dedcf22cccd..5a01ce2c721 100644
--- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml
+++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml
@@ -1243,20 +1243,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml
index 6c6081c5788..3984af1491f 100644
--- a/.github/workflows/smoke-gemini.lock.yml
+++ b/.github/workflows/smoke-gemini.lock.yml
@@ -1394,20 +1394,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml
index 214ae14f38c..4df115196d9 100644
--- a/.github/workflows/smoke-multi-pr.lock.yml
+++ b/.github/workflows/smoke-multi-pr.lock.yml
@@ -1224,20 +1224,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml
index d29845f3778..f15e2db61a2 100644
--- a/.github/workflows/smoke-project.lock.yml
+++ b/.github/workflows/smoke-project.lock.yml
@@ -1360,20 +1360,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml
index 232fb204930..65a60bf3772 100644
--- a/.github/workflows/smoke-service-ports.lock.yml
+++ b/.github/workflows/smoke-service-ports.lock.yml
@@ -1128,20 +1128,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml
index 0a36b08697f..9244a29f04a 100644
--- a/.github/workflows/smoke-temporary-id.lock.yml
+++ b/.github/workflows/smoke-temporary-id.lock.yml
@@ -1207,20 +1207,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml
index 41032eb12e7..2e7fa86810d 100644
--- a/.github/workflows/smoke-test-tools.lock.yml
+++ b/.github/workflows/smoke-test-tools.lock.yml
@@ -1173,20 +1173,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml
index c7a7108272d..0554980f743 100644
--- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml
+++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml
@@ -1269,20 +1269,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml
index bb7ecb82654..d917e7a3e51 100644
--- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml
+++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml
@@ -1143,20 +1143,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml
index 782e7a3a6bf..7577b542e74 100644
--- a/.github/workflows/smoke-workflow-call.lock.yml
+++ b/.github/workflows/smoke-workflow-call.lock.yml
@@ -1134,20 +1134,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml
index bf2a4f5d8c9..7ce28142b40 100644
--- a/.github/workflows/tidy.lock.yml
+++ b/.github/workflows/tidy.lock.yml
@@ -1245,21 +1245,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml
index 303ce4387e5..b27e51ce437 100644
--- a/.github/workflows/ubuntu-image-analyzer.lock.yml
+++ b/.github/workflows/ubuntu-image-analyzer.lock.yml
@@ -1138,21 +1138,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml
index bc35c0b79ba..744e29f31c8 100644
--- a/.github/workflows/unbloat-docs.lock.yml
+++ b/.github/workflows/unbloat-docs.lock.yml
@@ -1589,21 +1589,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml
index a817ce81a00..bf3bf3e85d9 100644
--- a/.github/workflows/update-astro.lock.yml
+++ b/.github/workflows/update-astro.lock.yml
@@ -1164,21 +1164,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_no_match.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml
index 6469486f90d..b672bc117d6 100644
--- a/.github/workflows/workflow-generator.lock.yml
+++ b/.github/workflows/workflow-generator.lock.yml
@@ -1183,21 +1183,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-          GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   safe_outputs:
     needs:
diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml
index 12d0debcb90..957d78cc70b 100644
--- a/.github/workflows/workflow-health-manager.lock.yml
+++ b/.github/workflows/workflow-health-manager.lock.yml
@@ -1198,20 +1198,6 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
   push_repo_memory:
     needs:
diff --git a/actions/setup/js/check_command_position.cjs b/actions/setup/js/check_command_position.cjs
index 5c8b6ef04a1..9808564194d 100644
--- a/actions/setup/js/check_command_position.cjs
+++ b/actions/setup/js/check_command_position.cjs
@@ -100,6 +100,17 @@ async function main() {
       core.warning(`⚠️ None of the commands [${expectedCommands}] matched the first word (found: '${firstWord}'). Workflow will be skipped.`);
       core.setOutput("command_position_ok", "false");
       core.setOutput("matched_command", "");
+      await core.summary
+        .addRaw(
+          [
+            "## ⏭️ Workflow Activation Skipped\n",
+            `> The trigger comment did not start with a required command. Expected one of: ${expectedCommands}. Found: \`${firstWord}\`.\n`,
+            "**Remediation:** Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.\n",
+            "---",
+            "_See the `pre_activation` job log for full details._",
+          ].join("\n")
+        )
+        .write();
     }
   } catch (error) {
     core.setFailed(`${ERR_API}: ${getErrorMessage(error)}`);
diff --git a/actions/setup/js/check_membership.cjs b/actions/setup/js/check_membership.cjs
index 85427cf7082..e922f2c58fb 100644
--- a/actions/setup/js/check_membership.cjs
+++ b/actions/setup/js/check_membership.cjs
@@ -3,6 +3,17 @@
 
 const { parseRequiredPermissions, parseAllowedBots, checkRepositoryPermission, checkBotStatus, isAllowedBot } = require("./check_permissions_utils.cjs");
 
+/**
+ * Writes a denial reason to the GitHub Actions job summary.
+ *
+ * @param {string} message - The denial message from the check
+ * @param {string} remediation - Remediation hint for the operator
+ */
+async function writeDenialSummary(message, remediation) {
+  const lines = ["## ⏭️ Workflow Activation Skipped\n", "> " + message + "\n", "**Remediation:** " + remediation + "\n", "---", "_See the `pre_activation` job log for full details._"];
+  await core.summary.addRaw(lines.join("\n")).write();
+}
+
 async function main() {
   const { eventName } = context;
   const actor = context.actor;
@@ -46,6 +57,7 @@ async function main() {
     core.setOutput("is_team_member", "false");
     core.setOutput("result", "config_error");
     core.setOutput("error_message", "Configuration error: Required permissions not specified");
+    await writeDenialSummary("Configuration error: Required permissions not specified.", "Contact the repository administrator to fix the workflow frontmatter configuration.");
     return;
   }
 
@@ -76,11 +88,13 @@ async function main() {
           core.setOutput("user_permission", "bot");
           return;
         } else if (botStatus.isBot && !botStatus.isActive) {
+          const errorMessage = `Access denied: Bot '${actor}' is not active/installed on this repository`;
           core.warning(`Bot '${actor}' is in the allowed list but not active/installed on ${owner}/${repo}`);
           core.setOutput("is_team_member", "false");
           core.setOutput("result", "bot_not_active");
           core.setOutput("user_permission", result.permission ?? "bot");
-          core.setOutput("error_message", `Access denied: Bot '${actor}' is not active/installed on this repository`);
+          core.setOutput("error_message", errorMessage);
+          await writeDenialSummary(errorMessage, "The bot is in the allowed list but is not installed or active on this repository. Install the GitHub App and try again.");
           return;
         } else {
           core.info(`Actor '${actor}' is in allowed bots list but bot status check failed`);
@@ -90,18 +104,20 @@ async function main() {
 
     // Not authorized by role or bot
     if (result.error) {
+      const errorMessage = `Repository permission check failed: ${result.error}`;
       core.setOutput("is_team_member", "false");
       core.setOutput("result", "api_error");
-      core.setOutput("error_message", `Repository permission check failed: ${result.error}`);
+      core.setOutput("error_message", errorMessage);
+      await writeDenialSummary(errorMessage, "The permission check failed with a GitHub API error. Check the `pre_activation` job log for details.");
     } else {
+      const errorMessage =
+        `Access denied: User '${actor}' is not authorized. Required permissions: ${requiredPermissions.join(", ")}. ` +
+        `To allow this user to run the workflow, add their role to the frontmatter. Example: roles: [${requiredPermissions.join(", ")}, ${result.permission}]`;
       core.setOutput("is_team_member", "false");
       core.setOutput("result", "insufficient_permissions");
       core.setOutput("user_permission", result.permission);
-      core.setOutput(
-        "error_message",
-        `Access denied: User '${actor}' is not authorized. Required permissions: ${requiredPermissions.join(", ")}. ` +
-          `To allow this user to run the workflow, add their role to the frontmatter. Example: roles: [${requiredPermissions.join(", ")}, ${result.permission}]`
-      );
+      core.setOutput("error_message", errorMessage);
+      await writeDenialSummary(errorMessage, `To allow a bot or GitHub App actor, add it to \`on.bots:\` in the workflow frontmatter. ` + `To change the required roles for human actors, update \`on.roles:\` in the workflow frontmatter.`);
     }
   }
 }
diff --git a/actions/setup/js/check_skip_bots.cjs b/actions/setup/js/check_skip_bots.cjs
index 3dc528beb5c..875267d879e 100644
--- a/actions/setup/js/check_skip_bots.cjs
+++ b/actions/setup/js/check_skip_bots.cjs
@@ -48,10 +48,22 @@ async function main() {
 
   if (isSkipped) {
     // User is in skip-bots, skip the workflow
+    const errorMessage = `Workflow skipped: User '${actor}' is in skip-bots: [${skipBots.join(", ")}]`;
     core.info(`❌ User '${actor}' is in skip-bots [${skipBots.join(", ")}]. Workflow will be skipped.`);
     core.setOutput("skip_bots_ok", "false");
     core.setOutput("result", "skipped");
-    core.setOutput("error_message", `Workflow skipped: User '${actor}' is in skip-bots: [${skipBots.join(", ")}]`);
+    core.setOutput("error_message", errorMessage);
+    await core.summary
+      .addRaw(
+        [
+          "## ⏭️ Workflow Activation Skipped\n",
+          "> " + errorMessage + "\n",
+          "**Remediation:** Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.\n",
+          "---",
+          "_See the `pre_activation` job log for full details._",
+        ].join("\n")
+      )
+      .write();
   } else {
     // User is NOT in skip-bots, allow workflow to proceed
     core.info(`✅ User '${actor}' is NOT in skip-bots [${skipBots.join(", ")}]. Workflow will proceed.`);
diff --git a/actions/setup/js/check_skip_bots.test.cjs b/actions/setup/js/check_skip_bots.test.cjs
index 765e07279f1..151392f5bd3 100644
--- a/actions/setup/js/check_skip_bots.test.cjs
+++ b/actions/setup/js/check_skip_bots.test.cjs
@@ -12,6 +12,10 @@ describe("check_skip_bots.cjs", () => {
       error: vi.fn(),
       setFailed: vi.fn(),
       setOutput: vi.fn(),
+      summary: {
+        addRaw: vi.fn().mockReturnThis(),
+        write: vi.fn().mockResolvedValue(undefined),
+      },
     };
 
     mockContext = {
diff --git a/actions/setup/js/check_skip_if_check_failing.cjs b/actions/setup/js/check_skip_if_check_failing.cjs
index fff1ebd93b7..12d0174b4e2 100644
--- a/actions/setup/js/check_skip_if_check_failing.cjs
+++ b/actions/setup/js/check_skip_if_check_failing.cjs
@@ -206,6 +206,17 @@ async function main() {
       const names = failingChecks.map(r => (r.status === "completed" ? `${r.name} (${r.conclusion})` : `${r.name} (${r.status})`)).join(", ");
       core.warning(`⚠️ Failing CI checks detected on "${ref}": ${names}. Workflow execution will be prevented by activation job.`);
       core.setOutput("skip_if_check_failing_ok", "false");
+      await core.summary
+        .addRaw(
+          [
+            "## ⏭️ Workflow Activation Skipped\n",
+            `> Failing CI checks detected on \`${ref}\`: ${names}.\n`,
+            "**Remediation:** Fix the failing check(s) referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.\n",
+            "---",
+            "_See the `pre_activation` job log for full details._",
+          ].join("\n")
+        )
+        .write();
       return;
     }
 
diff --git a/actions/setup/js/check_skip_if_check_failing.test.cjs b/actions/setup/js/check_skip_if_check_failing.test.cjs
index a1e8e303115..e60ca5fe0e7 100644
--- a/actions/setup/js/check_skip_if_check_failing.test.cjs
+++ b/actions/setup/js/check_skip_if_check_failing.test.cjs
@@ -12,6 +12,10 @@ describe("check_skip_if_check_failing.cjs", () => {
       error: vi.fn(),
       setFailed: vi.fn(),
       setOutput: vi.fn(),
+      summary: {
+        addRaw: vi.fn().mockReturnThis(),
+        write: vi.fn().mockResolvedValue(undefined),
+      },
     };
 
     mockGithub = {
diff --git a/actions/setup/js/check_skip_if_match.cjs b/actions/setup/js/check_skip_if_match.cjs
index 074605cfca7..fc633e6d8cb 100644
--- a/actions/setup/js/check_skip_if_match.cjs
+++ b/actions/setup/js/check_skip_if_match.cjs
@@ -42,6 +42,17 @@ async function main() {
     if (totalCount >= maxMatches) {
       core.warning(`🔍 Skip condition matched (${totalCount} items found, threshold: ${maxMatches}). Workflow execution will be prevented by activation job.`);
       core.setOutput("skip_check_ok", "false");
+      await core.summary
+        .addRaw(
+          [
+            "## ⏭️ Workflow Activation Skipped\n",
+            `> Skip-if-match query matched: ${totalCount} item(s) found (threshold: ${maxMatches}).\n`,
+            "**Remediation:** Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.\n",
+            "---",
+            "_See the `pre_activation` job log for full details._",
+          ].join("\n")
+        )
+        .write();
       return;
     }
 
diff --git a/actions/setup/js/check_skip_if_no_match.cjs b/actions/setup/js/check_skip_if_no_match.cjs
index 8d089068322..0fef0aee65b 100644
--- a/actions/setup/js/check_skip_if_no_match.cjs
+++ b/actions/setup/js/check_skip_if_no_match.cjs
@@ -42,6 +42,17 @@ async function main() {
     if (totalCount < minMatches) {
       core.warning(`🔍 Skip condition matched (${totalCount} items found, minimum required: ${minMatches}). Workflow execution will be prevented by activation job.`);
       core.setOutput("skip_no_match_check_ok", "false");
+      await core.summary
+        .addRaw(
+          [
+            "## ⏭️ Workflow Activation Skipped\n",
+            `> Skip-if-no-match query returned too few results: ${totalCount} item(s) found (minimum required: ${minMatches}).\n`,
+            "**Remediation:** Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.\n",
+            "---",
+            "_See the `pre_activation` job log for full details._",
+          ].join("\n")
+        )
+        .write();
       return;
     }
 
diff --git a/actions/setup/js/check_skip_if_no_match.test.cjs b/actions/setup/js/check_skip_if_no_match.test.cjs
index 8d89d7bfbe6..5642a48f17a 100644
--- a/actions/setup/js/check_skip_if_no_match.test.cjs
+++ b/actions/setup/js/check_skip_if_no_match.test.cjs
@@ -19,6 +19,10 @@ describe("check_skip_if_no_match", () => {
       warnings: [],
       errors: [],
       outputs: {},
+      summary: {
+        addRaw: () => mockCore.summary,
+        write: async () => {},
+      },
     };
 
     mockCore.info = msg => {
diff --git a/actions/setup/js/check_skip_roles.cjs b/actions/setup/js/check_skip_roles.cjs
index d62c8b2377a..42e0feaebb3 100644
--- a/actions/setup/js/check_skip_roles.cjs
+++ b/actions/setup/js/check_skip_roles.cjs
@@ -44,11 +44,23 @@ async function main() {
 
   if (result.authorized) {
     // User has one of the skip-roles, skip the workflow
+    const errorMessage = `Workflow skipped: User '${actor}' has role '${result.permission}' which is in skip-roles: [${skipRoles.join(", ")}]`;
     core.info(`❌ User '${actor}' has role '${result.permission}' which is in skip-roles [${skipRoles.join(", ")}]. Workflow will be skipped.`);
     core.setOutput("skip_roles_ok", "false");
     core.setOutput("result", "skipped");
     core.setOutput("user_permission", result.permission);
-    core.setOutput("error_message", `Workflow skipped: User '${actor}' has role '${result.permission}' which is in skip-roles: [${skipRoles.join(", ")}]`);
+    core.setOutput("error_message", errorMessage);
+    await core.summary
+      .addRaw(
+        [
+          "## ⏭️ Workflow Activation Skipped\n",
+          "> " + errorMessage + "\n",
+          "**Remediation:** Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.\n",
+          "---",
+          "_See the `pre_activation` job log for full details._",
+        ].join("\n")
+      )
+      .write();
   } else {
     // User does NOT have any of the skip-roles, allow workflow to proceed
     core.info(`✅ User '${actor}' has role '${result.permission}' which is NOT in skip-roles [${skipRoles.join(", ")}]. Workflow will proceed.`);
diff --git a/actions/setup/js/check_stop_time.cjs b/actions/setup/js/check_stop_time.cjs
index 6addb4c2162..726c24f2b6e 100644
--- a/actions/setup/js/check_stop_time.cjs
+++ b/actions/setup/js/check_stop_time.cjs
@@ -33,6 +33,17 @@ async function main() {
   if (currentTime >= stopTimeDate) {
     core.warning(`⏰ Stop time reached. Workflow execution will be prevented by activation job.`);
     core.setOutput("stop_time_ok", "false");
+    await core.summary
+      .addRaw(
+        [
+          "## ⏭️ Workflow Activation Skipped\n",
+          `> Workflow '${workflowName}' has passed its configured stop-time (${stopTimeDate.toISOString()}).\n`,
+          "**Remediation:** Update or remove `on.stop-after:` in the workflow frontmatter to extend the active window.\n",
+          "---",
+          "_See the `pre_activation` job log for full details._",
+        ].join("\n")
+      )
+      .write();
     return;
   }
 
diff --git a/actions/setup/js/report_pre_activation_skip.cjs b/actions/setup/js/report_pre_activation_skip.cjs
deleted file mode 100644
index 9ea48179a43..00000000000
--- a/actions/setup/js/report_pre_activation_skip.cjs
+++ /dev/null
@@ -1,207 +0,0 @@
-// @ts-check
-/// <reference types="@actions/github-script" />
-
-/**
- * Reports why the workflow was not activated (skipped by pre-activation gate).
- * Called from the pre_activation job with `if: always()` condition.
- * Only writes to job summary when activation was denied by one or more checks.
- *
- * Environment variables (all optional — empty means "check was not configured"):
- *   GH_AW_IS_TEAM_MEMBER            - "true"/"false" from check_membership step
- *   GH_AW_MEMBERSHIP_RESULT         - result code from check_membership step
- *   GH_AW_MEMBERSHIP_ERROR_MESSAGE  - human-readable error from check_membership step
- *   GH_AW_STOP_TIME_OK              - "true"/"false" from check_stop_time step
- *   GH_AW_RATE_LIMIT_OK             - "true"/"false" from check_rate_limit step
- *   GH_AW_SKIP_CHECK_OK             - "true"/"false" from check_skip_if_match step
- *   GH_AW_SKIP_NO_MATCH_OK          - "true"/"false" from check_skip_if_no_match step
- *   GH_AW_SKIP_IF_CHECK_FAILING_OK  - "true"/"false" from check_skip_if_check_failing step
- *   GH_AW_SKIP_ROLES_OK             - "true"/"false" from check_skip_roles step
- *   GH_AW_SKIP_ROLES_ERROR_MESSAGE  - human-readable error from check_skip_roles step
- *   GH_AW_SKIP_BOTS_OK              - "true"/"false" from check_skip_bots step
- *   GH_AW_SKIP_BOTS_ERROR_MESSAGE   - human-readable error from check_skip_bots step
- *   GH_AW_COMMAND_POSITION_OK       - "true"/"false" from check_command_position step
- */
-
-/**
- * @typedef {{ check: string, message: string, result: string, remediation: string }} SkipReason
- */
-
-async function main() {
-  const reasons = collectSkipReasons();
-
-  if (reasons.length === 0) {
-    // All checks passed (or no checks were configured) — nothing to report.
-    core.info("✅ All pre-activation checks passed, no skip reason to report.");
-    return;
-  }
-
-  core.info(`⏭️ Workflow activation denied by ${reasons.length} check(s). Writing skip reason to job summary...`);
-  await writeSkipSummary(reasons);
-}
-
-/**
- * Collects skip reasons from the environment variables set by each check step.
- * A check is considered failing when its ok-output is exactly "false".
- * An empty / undefined value means the check was not configured — skip it.
- *
- * @returns {SkipReason[]}
- */
-function collectSkipReasons() {
-  /** @type {SkipReason[]} */
-  const reasons = [];
-
-  // Role / bot check (check_membership step)
-  const isTeamMember = process.env.GH_AW_IS_TEAM_MEMBER;
-  if (isTeamMember === "false") {
-    const result = process.env.GH_AW_MEMBERSHIP_RESULT || "insufficient_permissions";
-    const errorMsg = process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE || "Actor does not have the required repository permissions.";
-    reasons.push({
-      check: "Role / bot check",
-      message: errorMsg,
-      result,
-      remediation: buildMembershipRemediation(result),
-    });
-  }
-
-  // Stop-time check (check_stop_time step)
-  const stopTimeOk = process.env.GH_AW_STOP_TIME_OK;
-  if (stopTimeOk === "false") {
-    reasons.push({
-      check: "Stop-time limit",
-      message: "The workflow is past its configured stop-time limit.",
-      result: "stop_time_exceeded",
-      remediation: "Update or remove `on.stop-time:` in the workflow frontmatter to extend the active window.",
-    });
-  }
-
-  // Rate-limit check (check_rate_limit step)
-  const rateLimitOk = process.env.GH_AW_RATE_LIMIT_OK;
-  if (rateLimitOk === "false") {
-    reasons.push({
-      check: "Rate-limit check",
-      message: "The actor has exceeded the configured rate limit for this workflow.",
-      result: "rate_limit_exceeded",
-      remediation: "Adjust `on.rate-limit:` in the workflow frontmatter, or wait for the time window to expire.",
-    });
-  }
-
-  // Skip-if-match check (check_skip_if_match step)
-  const skipCheckOk = process.env.GH_AW_SKIP_CHECK_OK;
-  if (skipCheckOk === "false") {
-    reasons.push({
-      check: "Skip-if-match check",
-      message: "The skip-if-match query matched, so the workflow was intentionally skipped.",
-      result: "skip_if_match",
-      remediation: "Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.",
-    });
-  }
-
-  // Skip-if-no-match check (check_skip_if_no_match step)
-  const skipNoMatchOk = process.env.GH_AW_SKIP_NO_MATCH_OK;
-  if (skipNoMatchOk === "false") {
-    reasons.push({
-      check: "Skip-if-no-match check",
-      message: "The skip-if-no-match query returned no results, so the workflow was intentionally skipped.",
-      result: "skip_if_no_match",
-      remediation: "Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.",
-    });
-  }
-
-  // Skip-if-check-failing check (check_skip_if_check_failing step)
-  const skipIfCheckFailingOk = process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK;
-  if (skipIfCheckFailingOk === "false") {
-    reasons.push({
-      check: "Skip-if-check-failing",
-      message: "A required check is currently failing, so the workflow was intentionally skipped.",
-      result: "skip_if_check_failing",
-      remediation: "Fix the failing check referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.",
-    });
-  }
-
-  // Skip-roles check (check_skip_roles step)
-  const skipRolesOk = process.env.GH_AW_SKIP_ROLES_OK;
-  if (skipRolesOk === "false") {
-    const errorMsg = process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE || "Actor has a role that is configured to skip this workflow.";
-    reasons.push({
-      check: "Skip-roles check",
-      message: errorMsg,
-      result: "skip_roles",
-      remediation: "Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.",
-    });
-  }
-
-  // Skip-bots check (check_skip_bots step)
-  const skipBotsOk = process.env.GH_AW_SKIP_BOTS_OK;
-  if (skipBotsOk === "false") {
-    const errorMsg = process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE || "Actor is in the skip-bots list for this workflow.";
-    reasons.push({
-      check: "Skip-bots check",
-      message: errorMsg,
-      result: "skip_bots",
-      remediation: "Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.",
-    });
-  }
-
-  // Command-position check (check_command_position step)
-  const commandPositionOk = process.env.GH_AW_COMMAND_POSITION_OK;
-  if (commandPositionOk === "false") {
-    reasons.push({
-      check: "Command check",
-      message: "The required trigger command was not found in the expected position.",
-      result: "command_not_found",
-      remediation: "Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.",
-    });
-  }
-
-  return reasons;
-}
-
-/**
- * Returns a remediation hint tailored to the membership check result code.
- *
- * @param {string} result - The result code from check_membership.cjs
- * @returns {string}
- */
-function buildMembershipRemediation(result) {
-  switch (result) {
-    case "insufficient_permissions":
-      return (
-        "The actor does not have the required repository permission. " +
-        "To allow a bot or GitHub App, add it to `on.bots:` in the workflow frontmatter. " +
-        "To change the required human-actor roles, update `on.roles:` in the workflow frontmatter."
-      );
-    case "bot_not_active":
-      return "The bot is in the allowed list but is not installed or active on this repository. Install the GitHub App and try again.";
-    case "api_error":
-      return "The permission check failed with a GitHub API error. Check the pre_activation job log for details.";
-    case "config_error":
-      return "The workflow has a permission configuration error. Contact the repository administrator.";
-    default:
-      return "To allow a bot or GitHub App actor, add it to `on.bots:` in the workflow frontmatter. " + "To change the required roles for human actors, update `on.roles:` in the workflow frontmatter.";
-  }
-}
-
-/**
- * Writes the skip reasons to the GitHub Actions job summary.
- *
- * @param {SkipReason[]} reasons
- */
-async function writeSkipSummary(reasons) {
-  const lines = [];
-  lines.push("## ⏭️ Workflow Activation Skipped\n");
-  lines.push("This workflow run was not activated because one or more pre-activation checks denied execution.\n");
-
-  for (const reason of reasons) {
-    lines.push(`### ${reason.check}`);
-    lines.push(`> ${reason.message}\n`);
-    lines.push(`**Remediation:** ${reason.remediation}\n`);
-  }
-
-  lines.push("---");
-  lines.push("_This summary is generated by [gh-aw](https://github.com/github/gh-aw). See the `pre_activation` job log for full details._");
-
-  await core.summary.addRaw(lines.join("\n")).write();
-  core.info("📝 Skip reason written to job summary.");
-}
-
-module.exports = { main, collectSkipReasons, buildMembershipRemediation };
diff --git a/actions/setup/js/report_pre_activation_skip.test.cjs b/actions/setup/js/report_pre_activation_skip.test.cjs
deleted file mode 100644
index fa1911b06c4..00000000000
--- a/actions/setup/js/report_pre_activation_skip.test.cjs
+++ /dev/null
@@ -1,261 +0,0 @@
-import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
-
-describe("report_pre_activation_skip.cjs", () => {
-  let mockCore;
-
-  beforeEach(() => {
-    mockCore = {
-      info: vi.fn(),
-      warning: vi.fn(),
-      error: vi.fn(),
-      setFailed: vi.fn(),
-      setOutput: vi.fn(),
-      summary: {
-        addRaw: vi.fn().mockReturnThis(),
-        write: vi.fn().mockResolvedValue(undefined),
-      },
-    };
-
-    global.core = mockCore;
-
-    // Clear all relevant env vars
-    const vars = [
-      "GH_AW_IS_TEAM_MEMBER",
-      "GH_AW_MEMBERSHIP_RESULT",
-      "GH_AW_MEMBERSHIP_ERROR_MESSAGE",
-      "GH_AW_STOP_TIME_OK",
-      "GH_AW_RATE_LIMIT_OK",
-      "GH_AW_SKIP_CHECK_OK",
-      "GH_AW_SKIP_NO_MATCH_OK",
-      "GH_AW_SKIP_IF_CHECK_FAILING_OK",
-      "GH_AW_SKIP_ROLES_OK",
-      "GH_AW_SKIP_ROLES_ERROR_MESSAGE",
-      "GH_AW_SKIP_BOTS_OK",
-      "GH_AW_SKIP_BOTS_ERROR_MESSAGE",
-      "GH_AW_COMMAND_POSITION_OK",
-    ];
-    for (const v of vars) {
-      delete process.env[v];
-    }
-
-    vi.resetModules();
-  });
-
-  afterEach(() => {
-    vi.clearAllMocks();
-    delete global.core;
-  });
-
-  // ---- main() ----
-
-  it("should not write summary when all checks pass", async () => {
-    process.env.GH_AW_IS_TEAM_MEMBER = "true";
-    process.env.GH_AW_STOP_TIME_OK = "true";
-    process.env.GH_AW_RATE_LIMIT_OK = "true";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    expect(mockCore.summary.addRaw).not.toHaveBeenCalled();
-    expect(mockCore.summary.write).not.toHaveBeenCalled();
-    expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("All pre-activation checks passed"));
-  });
-
-  it("should not write summary when no check env vars are set (checks not configured)", async () => {
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    expect(mockCore.summary.addRaw).not.toHaveBeenCalled();
-  });
-
-  it("should write summary when membership check fails", async () => {
-    process.env.GH_AW_IS_TEAM_MEMBER = "false";
-    process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions";
-    process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Access denied: User 'prd-to-prod-pipeline[bot]' is not authorized.";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1);
-    expect(mockCore.summary.write).toHaveBeenCalledTimes(1);
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("⏭️ Workflow Activation Skipped");
-    expect(summaryText).toContain("Role / bot check");
-    expect(summaryText).toContain("prd-to-prod-pipeline[bot]");
-    expect(summaryText).toContain("on.bots:");
-    expect(summaryText).toContain("on.roles:");
-  });
-
-  it("should write summary when stop-time check fails", async () => {
-    process.env.GH_AW_STOP_TIME_OK = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1);
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Stop-time limit");
-    expect(summaryText).toContain("on.stop-time:");
-  });
-
-  it("should write summary when rate-limit check fails", async () => {
-    process.env.GH_AW_RATE_LIMIT_OK = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Rate-limit check");
-    expect(summaryText).toContain("on.rate-limit:");
-  });
-
-  it("should write summary when skip-if-match check fails", async () => {
-    process.env.GH_AW_SKIP_CHECK_OK = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Skip-if-match check");
-    expect(summaryText).toContain("on.skip-if-match:");
-  });
-
-  it("should write summary when skip-if-no-match check fails", async () => {
-    process.env.GH_AW_SKIP_NO_MATCH_OK = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Skip-if-no-match check");
-    expect(summaryText).toContain("on.skip-if-no-match:");
-  });
-
-  it("should write summary when skip-if-check-failing check fails", async () => {
-    process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Skip-if-check-failing");
-    expect(summaryText).toContain("on.skip-if-check-failing:");
-  });
-
-  it("should write summary when skip-roles check fails with error message", async () => {
-    process.env.GH_AW_SKIP_ROLES_OK = "false";
-    process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE = "Workflow skipped: User 'admin-user' has role 'admin'";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Skip-roles check");
-    expect(summaryText).toContain("admin-user");
-    expect(summaryText).toContain("on.skip-roles:");
-  });
-
-  it("should write summary when skip-bots check fails with error message", async () => {
-    process.env.GH_AW_SKIP_BOTS_OK = "false";
-    process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE = "Workflow skipped: User 'renovate[bot]' is in skip-bots";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Skip-bots check");
-    expect(summaryText).toContain("renovate[bot]");
-    expect(summaryText).toContain("on.skip-bots:");
-  });
-
-  it("should write summary when command-position check fails", async () => {
-    process.env.GH_AW_COMMAND_POSITION_OK = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Command check");
-    expect(summaryText).toContain("on.command:");
-  });
-
-  it("should write summary with multiple failures", async () => {
-    process.env.GH_AW_IS_TEAM_MEMBER = "false";
-    process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions";
-    process.env.GH_AW_STOP_TIME_OK = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("Role / bot check");
-    expect(summaryText).toContain("Stop-time limit");
-  });
-
-  it("should include a link to gh-aw in the summary footer", async () => {
-    process.env.GH_AW_IS_TEAM_MEMBER = "false";
-
-    const { main } = await import("./report_pre_activation_skip.cjs");
-    await main();
-
-    const summaryText = mockCore.summary.addRaw.mock.calls[0][0];
-    expect(summaryText).toContain("gh-aw");
-    expect(summaryText).toContain("pre_activation");
-  });
-
-  // ---- collectSkipReasons() ----
-
-  it("should return empty array when no checks failed", async () => {
-    const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs");
-    const reasons = collectSkipReasons();
-    expect(reasons).toHaveLength(0);
-  });
-
-  it("should return one reason when membership check fails", async () => {
-    process.env.GH_AW_IS_TEAM_MEMBER = "false";
-    process.env.GH_AW_MEMBERSHIP_RESULT = "bot_not_active";
-    process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Bot is not active";
-
-    const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs");
-    const reasons = collectSkipReasons();
-
-    expect(reasons).toHaveLength(1);
-    expect(reasons[0].check).toBe("Role / bot check");
-    expect(reasons[0].result).toBe("bot_not_active");
-    expect(reasons[0].message).toBe("Bot is not active");
-  });
-
-  // ---- buildMembershipRemediation() ----
-
-  it("should return insufficient_permissions remediation mentioning on.bots and on.roles", async () => {
-    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
-    const hint = buildMembershipRemediation("insufficient_permissions");
-    expect(hint).toContain("on.bots:");
-    expect(hint).toContain("on.roles:");
-  });
-
-  it("should return bot_not_active remediation about GitHub App installation", async () => {
-    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
-    const hint = buildMembershipRemediation("bot_not_active");
-    expect(hint).toContain("Install the GitHub App");
-  });
-
-  it("should return api_error remediation mentioning the job log", async () => {
-    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
-    const hint = buildMembershipRemediation("api_error");
-    expect(hint).toContain("pre_activation");
-  });
-
-  it("should return config_error remediation mentioning the administrator", async () => {
-    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
-    const hint = buildMembershipRemediation("config_error");
-    expect(hint).toContain("administrator");
-  });
-
-  it("should return default remediation for unknown result codes", async () => {
-    const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs");
-    const hint = buildMembershipRemediation("unknown_result");
-    expect(hint).toContain("on.bots:");
-  });
-});
diff --git a/pkg/constants/job_constants.go b/pkg/constants/job_constants.go
index 7d46e88be7e..352aaa2da72 100644
--- a/pkg/constants/job_constants.go
+++ b/pkg/constants/job_constants.go
@@ -159,10 +159,6 @@ const CheckSkipIfCheckFailingStepID StepID = "check_skip_if_check_failing"
 // emitted in the pre-activation job when on.github-app is configured alongside skip-if checks.
 const PreActivationAppTokenStepID StepID = "pre-activation-app-token"
 
-// ReportSkipReasonStepID is the step ID for the report-skip-reason step in the pre-activation job.
-// This step runs with if: always() and writes skip reasons to the job summary when activation is denied.
-const ReportSkipReasonStepID StepID = "report-skip-reason"
-
 // ParseMCPGatewayStepID is the step ID for the MCP gateway log parsing step in the agent job.
 // Its effective_tokens output is exposed as an agent job output so that the safe_outputs job
 // can pass the value as GH_AW_EFFECTIVE_TOKENS to the footer template renderer.
diff --git a/pkg/workflow/compiler_pre_activation_job.go b/pkg/workflow/compiler_pre_activation_job.go
index b17527d6291..51069ef63bb 100644
--- a/pkg/workflow/compiler_pre_activation_job.go
+++ b/pkg/workflow/compiler_pre_activation_job.go
@@ -421,13 +421,6 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec
 		jobIfCondition = data.If
 	}
 
-	// Add report-skip-reason step to surface denial reasons in the job summary when activation
-	// is denied. Only added when there are actual blocking conditions (not for on.steps-only
-	// pre-activation where activated is unconditionally true).
-	if len(conditions) > 0 {
-		steps = append(steps, c.generateReportSkipStep(needsPermissionCheck, data))
-	}
-
 	// In script mode, explicitly add a cleanup step (mirrors post.js in dev/release/action mode).
 	if c.actionMode.IsScript() {
 		steps = append(steps, c.generateScriptModeCleanupStep())
@@ -448,80 +441,6 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec
 
 // generateReportSkipStep generates the "Report skip reason" step for the pre-activation job.
 // The step runs with if: always() and writes skip reasons to the GitHub Actions job summary
-// when one or more pre-activation checks deny activation, so operators can see the denial
-// reason directly from the PR / workflow run surface without opening raw job logs.
-//
-// Only env vars for checks that are actually configured are emitted, keeping the YAML minimal
-// and avoiding actionlint warnings about references to unconfigured step outputs.
-func (c *Compiler) generateReportSkipStep(needsPermissionCheck bool, data *WorkflowData) string {
-	var step strings.Builder
-
-	step.WriteString("      - name: Report skip reason\n")
-	step.WriteString(fmt.Sprintf("        id: %s\n", constants.ReportSkipReasonStepID))
-	step.WriteString("        if: always()\n")
-	step.WriteString(fmt.Sprintf("        uses: %s\n", GetActionPin("actions/github-script")))
-	step.WriteString("        env:\n")
-
-	if needsPermissionCheck {
-		step.WriteString(fmt.Sprintf("          GH_AW_IS_TEAM_MEMBER: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckMembershipStepID, constants.IsTeamMemberOutput))
-		step.WriteString(fmt.Sprintf("          GH_AW_MEMBERSHIP_RESULT: ${{ steps.%s.outputs.result }}\n",
-			constants.CheckMembershipStepID))
-		step.WriteString(fmt.Sprintf("          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n",
-			constants.CheckMembershipStepID))
-	}
-
-	if data.StopTime != "" {
-		step.WriteString(fmt.Sprintf("          GH_AW_STOP_TIME_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckStopTimeStepID, constants.StopTimeOkOutput))
-	}
-
-	if data.RateLimit != nil {
-		step.WriteString(fmt.Sprintf("          GH_AW_RATE_LIMIT_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckRateLimitStepID, constants.RateLimitOkOutput))
-	}
-
-	if data.SkipIfMatch != nil {
-		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_CHECK_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckSkipIfMatchStepID, constants.SkipCheckOkOutput))
-	}
-
-	if data.SkipIfNoMatch != nil {
-		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_NO_MATCH_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckSkipIfNoMatchStepID, constants.SkipNoMatchCheckOkOutput))
-	}
-
-	if data.SkipIfCheckFailing != nil {
-		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckSkipIfCheckFailingStepID, constants.SkipIfCheckFailingOkOutput))
-	}
-
-	if len(data.SkipRoles) > 0 {
-		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_ROLES_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckSkipRolesStepID, constants.SkipRolesOkOutput))
-		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n",
-			constants.CheckSkipRolesStepID))
-	}
-
-	if len(data.SkipBots) > 0 {
-		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_BOTS_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckSkipBotsStepID, constants.SkipBotsOkOutput))
-		step.WriteString(fmt.Sprintf("          GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n",
-			constants.CheckSkipBotsStepID))
-	}
-
-	if len(data.Command) > 0 {
-		step.WriteString(fmt.Sprintf("          GH_AW_COMMAND_POSITION_OK: ${{ steps.%s.outputs.%s }}\n",
-			constants.CheckCommandPositionStepID, constants.CommandPositionOkOutput))
-	}
-
-	step.WriteString("        with:\n")
-	step.WriteString("          script: |\n")
-	step.WriteString(generateGitHubScriptWithRequire("report_pre_activation_skip.cjs"))
-
-	return step.String()
-}
-
 // extractPreActivationCustomFields extracts custom steps and outputs from jobs.pre-activation field in frontmatter.
 // It validates that only steps and outputs fields are present, and errors on any other fields.
 // If both jobs.pre-activation and jobs.pre_activation are defined, imports from both.
diff --git a/pkg/workflow/report_skip_reason_test.go b/pkg/workflow/report_skip_reason_test.go
deleted file mode 100644
index 543377eb390..00000000000
--- a/pkg/workflow/report_skip_reason_test.go
+++ /dev/null
@@ -1,193 +0,0 @@
-//go:build !integration
-
-package workflow
-
-import (
-	"os"
-	"path/filepath"
-	"testing"
-
-	"github.com/github/gh-aw/pkg/stringutil"
-	"github.com/github/gh-aw/pkg/testutil"
-	"github.com/stretchr/testify/assert"
-	"github.com/stretchr/testify/require"
-)
-
-// TestReportSkipReasonStep tests that the report-skip-reason step is generated correctly
-// in the pre-activation job whenever blocking conditions are present, so that operators
-// can see the denial reason from the PR / workflow-run surface without opening raw logs.
-func TestReportSkipReasonStep(t *testing.T) {
-	tmpDir := testutil.TempDir(t, "report-skip-reason-test")
-	compiler := NewCompiler()
-
-	t.Run("report_skip_reason_present_with_membership_check", func(t *testing.T) {
-		workflowContent := `---
-on:
-  pull_request:
-    types: [opened]
-  roles: [admin, maintainer, write]
-engine: copilot
----
-
-# PR Review Workflow
-
-Review pull requests.
-`
-		workflowFile := filepath.Join(tmpDir, "membership-workflow.md")
-		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
-		require.NoError(t, err, "Failed to write workflow file")
-
-		err = compiler.CompileWorkflow(workflowFile)
-		require.NoError(t, err, "Compilation failed")
-
-		lockFile := stringutil.MarkdownToLockFile(workflowFile)
-		lockContent, err := os.ReadFile(lockFile)
-		require.NoError(t, err, "Failed to read lock file")
-
-		lockContentStr := string(lockContent)
-
-		// Verify the report-skip-reason step is present
-		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
-		assert.Contains(t, lockContentStr, "Report skip reason", "Expected Report skip reason step name")
-
-		// Verify the step has always() condition
-		assert.Contains(t, lockContentStr, "if: always()", "Expected always() condition on report-skip-reason step")
-
-		// Verify membership check env vars are passed
-		assert.Contains(t, lockContentStr, "GH_AW_IS_TEAM_MEMBER:", "Expected GH_AW_IS_TEAM_MEMBER env var")
-		assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_RESULT:", "Expected GH_AW_MEMBERSHIP_RESULT env var")
-		assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_ERROR_MESSAGE:", "Expected GH_AW_MEMBERSHIP_ERROR_MESSAGE env var")
-
-		// Verify the script calls report_pre_activation_skip.cjs
-		assert.Contains(t, lockContentStr, "report_pre_activation_skip.cjs", "Expected report_pre_activation_skip.cjs in script")
-	})
-
-	t.Run("report_skip_reason_present_with_stop_time", func(t *testing.T) {
-		workflowContent := `---
-on:
-  workflow_dispatch: null
-  stop-after: "+48h"
-  roles: [admin, maintainer]
-engine: copilot
----
-
-# Stop-Time Workflow
-
-This workflow has a stop-after configuration.
-`
-		workflowFile := filepath.Join(tmpDir, "stop-time-workflow.md")
-		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
-		require.NoError(t, err, "Failed to write workflow file")
-
-		err = compiler.CompileWorkflow(workflowFile)
-		require.NoError(t, err, "Compilation failed")
-
-		lockFile := stringutil.MarkdownToLockFile(workflowFile)
-		lockContent, err := os.ReadFile(lockFile)
-		require.NoError(t, err, "Failed to read lock file")
-
-		lockContentStr := string(lockContent)
-
-		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
-		assert.Contains(t, lockContentStr, "GH_AW_STOP_TIME_OK:", "Expected GH_AW_STOP_TIME_OK env var")
-	})
-
-	t.Run("report_skip_reason_present_with_skip_bots", func(t *testing.T) {
-		workflowContent := `---
-on:
-  issues:
-    types: [opened]
-  skip-bots: [renovate, dependabot]
-engine: copilot
----
-
-# Skip-Bots Workflow
-
-This workflow skips bot actors.
-`
-		workflowFile := filepath.Join(tmpDir, "skip-bots-workflow.md")
-		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
-		require.NoError(t, err, "Failed to write workflow file")
-
-		err = compiler.CompileWorkflow(workflowFile)
-		require.NoError(t, err, "Compilation failed")
-
-		lockFile := stringutil.MarkdownToLockFile(workflowFile)
-		lockContent, err := os.ReadFile(lockFile)
-		require.NoError(t, err, "Failed to read lock file")
-
-		lockContentStr := string(lockContent)
-
-		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
-		assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_OK:", "Expected GH_AW_SKIP_BOTS_OK env var")
-		assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_ERROR_MESSAGE:", "Expected GH_AW_SKIP_BOTS_ERROR_MESSAGE env var")
-	})
-
-	t.Run("report_skip_reason_present_with_skip_roles", func(t *testing.T) {
-		workflowContent := `---
-on:
-  pull_request:
-    types: [opened]
-  skip-roles: [admin]
-engine: copilot
----
-
-# Skip-Roles Workflow
-
-This workflow skips admin actors.
-`
-		workflowFile := filepath.Join(tmpDir, "skip-roles-workflow.md")
-		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
-		require.NoError(t, err, "Failed to write workflow file")
-
-		err = compiler.CompileWorkflow(workflowFile)
-		require.NoError(t, err, "Compilation failed")
-
-		lockFile := stringutil.MarkdownToLockFile(workflowFile)
-		lockContent, err := os.ReadFile(lockFile)
-		require.NoError(t, err, "Failed to read lock file")
-
-		lockContentStr := string(lockContent)
-
-		assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID")
-		assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_OK:", "Expected GH_AW_SKIP_ROLES_OK env var")
-		assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_ERROR_MESSAGE:", "Expected GH_AW_SKIP_ROLES_ERROR_MESSAGE env var")
-	})
-
-	t.Run("report_skip_reason_not_present_without_conditions", func(t *testing.T) {
-		// When activation is unconditionally true (roles: all + only on.steps), there are no
-		// blocking conditions so the report-skip-reason step should NOT be generated.
-		workflowContent := `---
-on:
-  pull_request:
-    types: [opened]
-  roles: all
-  steps:
-    - name: Custom gate
-      id: custom_gate
-      run: echo "gate_result=ok" >> $GITHUB_OUTPUT
-engine: copilot
-if: needs.pre_activation.outputs.custom_gate_result == 'ok'
----
-
-# On-Steps-Only Workflow
-
-Uses on.steps to gate activation with no blocking conditions.
-`
-		workflowFile := filepath.Join(tmpDir, "on-steps-only-workflow.md")
-		err := os.WriteFile(workflowFile, []byte(workflowContent), 0644)
-		require.NoError(t, err, "Failed to write workflow file")
-
-		err = compiler.CompileWorkflow(workflowFile)
-		require.NoError(t, err, "Compilation failed")
-
-		lockFile := stringutil.MarkdownToLockFile(workflowFile)
-		lockContent, err := os.ReadFile(lockFile)
-		require.NoError(t, err, "Failed to read lock file")
-
-		lockContentStr := string(lockContent)
-
-		// No blocking conditions → no report-skip-reason step
-		assert.NotContains(t, lockContentStr, "report-skip-reason", "report-skip-reason step should not appear for on.steps-only workflows")
-	})
-}
diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden
index 2595a853cbb..532e57b74dc 100644
--- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden
+++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden
@@ -553,18 +553,4 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 
diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden
index c4f6dd21af7..5ef0558e180 100644
--- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden
+++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden
@@ -554,18 +554,4 @@ jobs:
             setupGlobals(core, github, context, exec, io);
             const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
             await main();
-      - name: Report skip reason
-        id: report-skip-reason
-        if: always()
-        uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
-        env:
-          GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }}
-          GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }}
-          GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }}
-        with:
-          script: |
-            const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
-            setupGlobals(core, github, context, exec, io);
-            const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs');
-            await main();
 

From 516fff6f95859b85cbd6931bc80670b03221dfce Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Apr 2026 01:36:35 +0000
Subject: [PATCH 4/6] Use template literals in denial summary helpers (style
 fix)

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/483d2eeb-3b22-4f64-883c-a0c08a888fc0

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
 actions/setup/js/check_membership.cjs | 2 +-
 actions/setup/js/check_skip_bots.cjs  | 2 +-
 actions/setup/js/check_skip_roles.cjs | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/actions/setup/js/check_membership.cjs b/actions/setup/js/check_membership.cjs
index e922f2c58fb..cfeeb4f37fb 100644
--- a/actions/setup/js/check_membership.cjs
+++ b/actions/setup/js/check_membership.cjs
@@ -10,7 +10,7 @@ const { parseRequiredPermissions, parseAllowedBots, checkRepositoryPermission, c
  * @param {string} remediation - Remediation hint for the operator
  */
 async function writeDenialSummary(message, remediation) {
-  const lines = ["## ⏭️ Workflow Activation Skipped\n", "> " + message + "\n", "**Remediation:** " + remediation + "\n", "---", "_See the `pre_activation` job log for full details._"];
+  const lines = ["## ⏭️ Workflow Activation Skipped\n", `> ${message}\n`, `**Remediation:** ${remediation}\n`, "---", "_See the `pre_activation` job log for full details._"];
   await core.summary.addRaw(lines.join("\n")).write();
 }
 
diff --git a/actions/setup/js/check_skip_bots.cjs b/actions/setup/js/check_skip_bots.cjs
index 875267d879e..0b575ae7df9 100644
--- a/actions/setup/js/check_skip_bots.cjs
+++ b/actions/setup/js/check_skip_bots.cjs
@@ -57,7 +57,7 @@ async function main() {
       .addRaw(
         [
           "## ⏭️ Workflow Activation Skipped\n",
-          "> " + errorMessage + "\n",
+          `> ${errorMessage}\n`,
           "**Remediation:** Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.\n",
           "---",
           "_See the `pre_activation` job log for full details._",
diff --git a/actions/setup/js/check_skip_roles.cjs b/actions/setup/js/check_skip_roles.cjs
index 42e0feaebb3..82700fac9a0 100644
--- a/actions/setup/js/check_skip_roles.cjs
+++ b/actions/setup/js/check_skip_roles.cjs
@@ -54,7 +54,7 @@ async function main() {
       .addRaw(
         [
           "## ⏭️ Workflow Activation Skipped\n",
-          "> " + errorMessage + "\n",
+          `> ${errorMessage}\n`,
           "**Remediation:** Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.\n",
           "---",
           "_See the `pre_activation` job log for full details._",

From 83b808e95780efcf066bfbc498584ed1873cb71d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Apr 2026 01:51:40 +0000
Subject: [PATCH 5/6] Use markdown template and renderTemplateFromFile for
 denial summaries

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c1738814-b8e8-4593-88d9-cf889cb728c3

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
 actions/setup/js/check_command_position.cjs   | 16 ++--
 actions/setup/js/check_membership.cjs         | 12 +--
 actions/setup/js/check_membership.test.cjs    |  7 ++
 actions/setup/js/check_skip_bots.cjs          | 14 +--
 .../setup/js/check_skip_if_check_failing.cjs  | 13 +--
 actions/setup/js/check_skip_if_match.cjs      | 13 +--
 actions/setup/js/check_skip_if_no_match.cjs   | 13 +--
 actions/setup/js/check_skip_roles.cjs         | 13 +--
 actions/setup/js/check_skip_roles.test.cjs    |  7 ++
 actions/setup/js/check_stop_time.cjs          | 13 +--
 actions/setup/js/pre_activation_summary.cjs   | 35 ++++++++
 .../setup/js/pre_activation_summary.test.cjs  | 85 +++++++++++++++++++
 actions/setup/md/pre_activation_skip.md       |  9 ++
 13 files changed, 162 insertions(+), 88 deletions(-)
 create mode 100644 actions/setup/js/pre_activation_summary.cjs
 create mode 100644 actions/setup/js/pre_activation_summary.test.cjs
 create mode 100644 actions/setup/md/pre_activation_skip.md

diff --git a/actions/setup/js/check_command_position.cjs b/actions/setup/js/check_command_position.cjs
index 9808564194d..349ccf1f114 100644
--- a/actions/setup/js/check_command_position.cjs
+++ b/actions/setup/js/check_command_position.cjs
@@ -2,6 +2,7 @@
 /// <reference types="@actions/github-script" />
 
 const { ERR_API, ERR_CONFIG, ERR_VALIDATION } = require("./error_codes.cjs");
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
 
 /**
  * Check if command is the first word in the triggering text
@@ -100,17 +101,10 @@ async function main() {
       core.warning(`⚠️ None of the commands [${expectedCommands}] matched the first word (found: '${firstWord}'). Workflow will be skipped.`);
       core.setOutput("command_position_ok", "false");
       core.setOutput("matched_command", "");
-      await core.summary
-        .addRaw(
-          [
-            "## ⏭️ Workflow Activation Skipped\n",
-            `> The trigger comment did not start with a required command. Expected one of: ${expectedCommands}. Found: \`${firstWord}\`.\n`,
-            "**Remediation:** Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.\n",
-            "---",
-            "_See the `pre_activation` job log for full details._",
-          ].join("\n")
-        )
-        .write();
+      await writeDenialSummary(
+        `The trigger comment did not start with a required command. Expected one of: ${expectedCommands}. Found: \`${firstWord}\`.`,
+        "Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter."
+      );
     }
   } catch (error) {
     core.setFailed(`${ERR_API}: ${getErrorMessage(error)}`);
diff --git a/actions/setup/js/check_membership.cjs b/actions/setup/js/check_membership.cjs
index cfeeb4f37fb..712f3606c04 100644
--- a/actions/setup/js/check_membership.cjs
+++ b/actions/setup/js/check_membership.cjs
@@ -2,17 +2,7 @@
 /// <reference types="@actions/github-script" />
 
 const { parseRequiredPermissions, parseAllowedBots, checkRepositoryPermission, checkBotStatus, isAllowedBot } = require("./check_permissions_utils.cjs");
-
-/**
- * Writes a denial reason to the GitHub Actions job summary.
- *
- * @param {string} message - The denial message from the check
- * @param {string} remediation - Remediation hint for the operator
- */
-async function writeDenialSummary(message, remediation) {
-  const lines = ["## ⏭️ Workflow Activation Skipped\n", `> ${message}\n`, `**Remediation:** ${remediation}\n`, "---", "_See the `pre_activation` job log for full details._"];
-  await core.summary.addRaw(lines.join("\n")).write();
-}
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
 
 async function main() {
   const { eventName } = context;
diff --git a/actions/setup/js/check_membership.test.cjs b/actions/setup/js/check_membership.test.cjs
index adb04b06098..3432f24162a 100644
--- a/actions/setup/js/check_membership.test.cjs
+++ b/actions/setup/js/check_membership.test.cjs
@@ -86,6 +86,13 @@ describe("check_membership.cjs", () => {
         utilsFunction(mockCore, mockGithub, mockContext, process, mockModule, moduleExports, mockRequire);
         return mockModule.exports;
       }
+      if (modulePath === "./pre_activation_summary.cjs") {
+        return {
+          writeDenialSummary: async (reason, remediation) => {
+            await mockCore.summary.addRaw(`${reason}\n${remediation}`).write();
+          },
+        };
+      }
       throw new Error(`Module not found: ${modulePath}`);
     };
 
diff --git a/actions/setup/js/check_skip_bots.cjs b/actions/setup/js/check_skip_bots.cjs
index 0b575ae7df9..78c53294c59 100644
--- a/actions/setup/js/check_skip_bots.cjs
+++ b/actions/setup/js/check_skip_bots.cjs
@@ -1,6 +1,8 @@
 // @ts-check
 /// <reference types="@actions/github-script" />
 
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
+
 /**
  * Check if the workflow should be skipped based on bot/user identity
  * Reads skip-bots from GH_AW_SKIP_BOTS environment variable
@@ -53,17 +55,7 @@ async function main() {
     core.setOutput("skip_bots_ok", "false");
     core.setOutput("result", "skipped");
     core.setOutput("error_message", errorMessage);
-    await core.summary
-      .addRaw(
-        [
-          "## ⏭️ Workflow Activation Skipped\n",
-          `> ${errorMessage}\n`,
-          "**Remediation:** Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.\n",
-          "---",
-          "_See the `pre_activation` job log for full details._",
-        ].join("\n")
-      )
-      .write();
+    await writeDenialSummary(errorMessage, "Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.");
   } else {
     // User is NOT in skip-bots, allow workflow to proceed
     core.info(`✅ User '${actor}' is NOT in skip-bots [${skipBots.join(", ")}]. Workflow will proceed.`);
diff --git a/actions/setup/js/check_skip_if_check_failing.cjs b/actions/setup/js/check_skip_if_check_failing.cjs
index 12d0174b4e2..97d0ff5475c 100644
--- a/actions/setup/js/check_skip_if_check_failing.cjs
+++ b/actions/setup/js/check_skip_if_check_failing.cjs
@@ -4,6 +4,7 @@
 const { getErrorMessage, isRateLimitError } = require("./error_helpers.cjs");
 const { ERR_API } = require("./error_codes.cjs");
 const { getBaseBranch } = require("./get_base_branch.cjs");
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
 
 /**
  * Determines the ref to check for CI status.
@@ -206,17 +207,7 @@ async function main() {
       const names = failingChecks.map(r => (r.status === "completed" ? `${r.name} (${r.conclusion})` : `${r.name} (${r.status})`)).join(", ");
       core.warning(`⚠️ Failing CI checks detected on "${ref}": ${names}. Workflow execution will be prevented by activation job.`);
       core.setOutput("skip_if_check_failing_ok", "false");
-      await core.summary
-        .addRaw(
-          [
-            "## ⏭️ Workflow Activation Skipped\n",
-            `> Failing CI checks detected on \`${ref}\`: ${names}.\n`,
-            "**Remediation:** Fix the failing check(s) referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.\n",
-            "---",
-            "_See the `pre_activation` job log for full details._",
-          ].join("\n")
-        )
-        .write();
+      await writeDenialSummary(`Failing CI checks detected on \`${ref}\`: ${names}.`, "Fix the failing check(s) referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.");
       return;
     }
 
diff --git a/actions/setup/js/check_skip_if_match.cjs b/actions/setup/js/check_skip_if_match.cjs
index fc633e6d8cb..fc379c91e7a 100644
--- a/actions/setup/js/check_skip_if_match.cjs
+++ b/actions/setup/js/check_skip_if_match.cjs
@@ -4,6 +4,7 @@
 const { getErrorMessage } = require("./error_helpers.cjs");
 const { ERR_API, ERR_CONFIG } = require("./error_codes.cjs");
 const { buildSearchQuery } = require("./check_skip_if_helpers.cjs");
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
 
 async function main() {
   const { GH_AW_SKIP_QUERY: skipQuery, GH_AW_WORKFLOW_NAME: workflowName, GH_AW_SKIP_MAX_MATCHES: maxMatchesStr = "1", GH_AW_SKIP_SCOPE: skipScope } = process.env;
@@ -42,17 +43,7 @@ async function main() {
     if (totalCount >= maxMatches) {
       core.warning(`🔍 Skip condition matched (${totalCount} items found, threshold: ${maxMatches}). Workflow execution will be prevented by activation job.`);
       core.setOutput("skip_check_ok", "false");
-      await core.summary
-        .addRaw(
-          [
-            "## ⏭️ Workflow Activation Skipped\n",
-            `> Skip-if-match query matched: ${totalCount} item(s) found (threshold: ${maxMatches}).\n`,
-            "**Remediation:** Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.\n",
-            "---",
-            "_See the `pre_activation` job log for full details._",
-          ].join("\n")
-        )
-        .write();
+      await writeDenialSummary(`Skip-if-match query matched: ${totalCount} item(s) found (threshold: ${maxMatches}).`, "Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.");
       return;
     }
 
diff --git a/actions/setup/js/check_skip_if_no_match.cjs b/actions/setup/js/check_skip_if_no_match.cjs
index 0fef0aee65b..b3edfef7803 100644
--- a/actions/setup/js/check_skip_if_no_match.cjs
+++ b/actions/setup/js/check_skip_if_no_match.cjs
@@ -4,6 +4,7 @@
 const { getErrorMessage } = require("./error_helpers.cjs");
 const { ERR_API, ERR_CONFIG } = require("./error_codes.cjs");
 const { buildSearchQuery } = require("./check_skip_if_helpers.cjs");
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
 
 async function main() {
   const { GH_AW_SKIP_QUERY: skipQuery, GH_AW_WORKFLOW_NAME: workflowName, GH_AW_SKIP_MIN_MATCHES: minMatchesStr = "1", GH_AW_SKIP_SCOPE: skipScope } = process.env;
@@ -42,17 +43,7 @@ async function main() {
     if (totalCount < minMatches) {
       core.warning(`🔍 Skip condition matched (${totalCount} items found, minimum required: ${minMatches}). Workflow execution will be prevented by activation job.`);
       core.setOutput("skip_no_match_check_ok", "false");
-      await core.summary
-        .addRaw(
-          [
-            "## ⏭️ Workflow Activation Skipped\n",
-            `> Skip-if-no-match query returned too few results: ${totalCount} item(s) found (minimum required: ${minMatches}).\n`,
-            "**Remediation:** Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.\n",
-            "---",
-            "_See the `pre_activation` job log for full details._",
-          ].join("\n")
-        )
-        .write();
+      await writeDenialSummary(`Skip-if-no-match query returned too few results: ${totalCount} item(s) found (minimum required: ${minMatches}).`, "Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.");
       return;
     }
 
diff --git a/actions/setup/js/check_skip_roles.cjs b/actions/setup/js/check_skip_roles.cjs
index 82700fac9a0..78256087b27 100644
--- a/actions/setup/js/check_skip_roles.cjs
+++ b/actions/setup/js/check_skip_roles.cjs
@@ -2,6 +2,7 @@
 /// <reference types="@actions/github-script" />
 
 const { checkRepositoryPermission } = require("./check_permissions_utils.cjs");
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
 
 /**
  * Check if the workflow should be skipped based on user's role
@@ -50,17 +51,7 @@ async function main() {
     core.setOutput("result", "skipped");
     core.setOutput("user_permission", result.permission);
     core.setOutput("error_message", errorMessage);
-    await core.summary
-      .addRaw(
-        [
-          "## ⏭️ Workflow Activation Skipped\n",
-          `> ${errorMessage}\n`,
-          "**Remediation:** Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.\n",
-          "---",
-          "_See the `pre_activation` job log for full details._",
-        ].join("\n")
-      )
-      .write();
+    await writeDenialSummary(errorMessage, "Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.");
   } else {
     // User does NOT have any of the skip-roles, allow workflow to proceed
     core.info(`✅ User '${actor}' has role '${result.permission}' which is NOT in skip-roles [${skipRoles.join(", ")}]. Workflow will proceed.`);
diff --git a/actions/setup/js/check_skip_roles.test.cjs b/actions/setup/js/check_skip_roles.test.cjs
index d7911e67239..4453890f499 100644
--- a/actions/setup/js/check_skip_roles.test.cjs
+++ b/actions/setup/js/check_skip_roles.test.cjs
@@ -84,6 +84,13 @@ describe("check_skip_roles.cjs", () => {
         utilsFunction(mockCore, mockGithub, mockContext, process, mockModule, moduleExports, mockRequire);
         return mockModule.exports;
       }
+      if (modulePath === "./pre_activation_summary.cjs") {
+        return {
+          writeDenialSummary: async (reason, remediation) => {
+            await mockCore.summary.addRaw(`${reason}\n${remediation}`).write();
+          },
+        };
+      }
       throw new Error(`Module not found: ${modulePath}`);
     };
 
diff --git a/actions/setup/js/check_stop_time.cjs b/actions/setup/js/check_stop_time.cjs
index 726c24f2b6e..fc3ca7304ba 100644
--- a/actions/setup/js/check_stop_time.cjs
+++ b/actions/setup/js/check_stop_time.cjs
@@ -2,6 +2,7 @@
 /// <reference types="@actions/github-script" />
 
 const { ERR_CONFIG, ERR_VALIDATION } = require("./error_codes.cjs");
+const { writeDenialSummary } = require("./pre_activation_summary.cjs");
 async function main() {
   const stopTime = process.env.GH_AW_STOP_TIME;
   const workflowName = process.env.GH_AW_WORKFLOW_NAME;
@@ -33,17 +34,7 @@ async function main() {
   if (currentTime >= stopTimeDate) {
     core.warning(`⏰ Stop time reached. Workflow execution will be prevented by activation job.`);
     core.setOutput("stop_time_ok", "false");
-    await core.summary
-      .addRaw(
-        [
-          "## ⏭️ Workflow Activation Skipped\n",
-          `> Workflow '${workflowName}' has passed its configured stop-time (${stopTimeDate.toISOString()}).\n`,
-          "**Remediation:** Update or remove `on.stop-after:` in the workflow frontmatter to extend the active window.\n",
-          "---",
-          "_See the `pre_activation` job log for full details._",
-        ].join("\n")
-      )
-      .write();
+    await writeDenialSummary(`Workflow '${workflowName}' has passed its configured stop-time (${stopTimeDate.toISOString()}).`, "Update or remove `on.stop-after:` in the workflow frontmatter to extend the active window.");
     return;
   }
 
diff --git a/actions/setup/js/pre_activation_summary.cjs b/actions/setup/js/pre_activation_summary.cjs
new file mode 100644
index 00000000000..6f8834cfeb4
--- /dev/null
+++ b/actions/setup/js/pre_activation_summary.cjs
@@ -0,0 +1,35 @@
+// @ts-check
+/// <reference types="@actions/github-script" />
+
+const path = require("path");
+const { renderTemplateFromFile } = require("./messages_core.cjs");
+
+/**
+ * Writes a pre-activation skip denial summary to the GitHub Actions job summary.
+ * Uses the pre_activation_skip.md template from the prompts directory when available,
+ * falling back to a hardcoded format when the template cannot be loaded (e.g. in tests).
+ *
+ * @param {string} reason - The denial reason message
+ * @param {string} remediation - Remediation hint for the operator
+ */
+async function writeDenialSummary(reason, remediation) {
+  let content;
+
+  const runnerTemp = process.env.RUNNER_TEMP;
+  if (runnerTemp) {
+    const templatePath = path.join(runnerTemp, "gh-aw", "prompts", "pre_activation_skip.md");
+    try {
+      content = renderTemplateFromFile(templatePath, { reason, remediation });
+    } catch {
+      // Template file not available; fall back to hardcoded format below
+    }
+  }
+
+  if (!content) {
+    content = `## ⏭️ Workflow Activation Skipped\n\n> ${reason}\n\n**Remediation:** ${remediation}\n\n---\n_See the \`pre_activation\` job log for full details._`;
+  }
+
+  await core.summary.addRaw(content).write();
+}
+
+module.exports = { writeDenialSummary };
diff --git a/actions/setup/js/pre_activation_summary.test.cjs b/actions/setup/js/pre_activation_summary.test.cjs
new file mode 100644
index 00000000000..2d558b26fbc
--- /dev/null
+++ b/actions/setup/js/pre_activation_summary.test.cjs
@@ -0,0 +1,85 @@
+// @ts-check
+import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
+import fs from "fs";
+import os from "os";
+import path from "path";
+
+describe("pre_activation_summary.cjs", () => {
+  let mockCore;
+  let originalRunnerTemp;
+
+  beforeEach(() => {
+    mockCore = {
+      info: vi.fn(),
+      warning: vi.fn(),
+      summary: {
+        addRaw: vi.fn().mockReturnThis(),
+        write: vi.fn().mockResolvedValue(undefined),
+      },
+    };
+    global.core = mockCore;
+    originalRunnerTemp = process.env.RUNNER_TEMP;
+    vi.resetModules();
+  });
+
+  afterEach(() => {
+    if (originalRunnerTemp !== undefined) {
+      process.env.RUNNER_TEMP = originalRunnerTemp;
+    } else {
+      delete process.env.RUNNER_TEMP;
+    }
+    delete global.core;
+    vi.clearAllMocks();
+  });
+
+  describe("writeDenialSummary", () => {
+    it("uses the markdown template when template file exists", async () => {
+      const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-test-"));
+      const promptsDir = path.join(tmpDir, "gh-aw", "prompts");
+      fs.mkdirSync(promptsDir, { recursive: true });
+      fs.writeFileSync(path.join(promptsDir, "pre_activation_skip.md"), "## Skipped\n\n> {reason}\n\n**Fix:** {remediation}\n", "utf8");
+
+      process.env.RUNNER_TEMP = tmpDir;
+
+      try {
+        const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now());
+        await writeDenialSummary("Denied: insufficient perms", "Update frontmatter roles");
+
+        expect(mockCore.summary.addRaw).toHaveBeenCalledWith("## Skipped\n\n> Denied: insufficient perms\n\n**Fix:** Update frontmatter roles\n");
+        expect(mockCore.summary.write).toHaveBeenCalled();
+      } finally {
+        fs.rmSync(tmpDir, { recursive: true, force: true });
+      }
+    });
+
+    it("falls back to hardcoded format when RUNNER_TEMP is not set", async () => {
+      delete process.env.RUNNER_TEMP;
+
+      const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now());
+      await writeDenialSummary("Bot not authorized", "Add bot to on.bots:");
+
+      const rawCall = mockCore.summary.addRaw.mock.calls[0][0];
+      expect(rawCall).toContain("Bot not authorized");
+      expect(rawCall).toContain("Add bot to on.bots:");
+      expect(mockCore.summary.write).toHaveBeenCalled();
+    });
+
+    it("falls back to hardcoded format when template file does not exist", async () => {
+      const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-test-"));
+      process.env.RUNNER_TEMP = tmpDir;
+      // No template file created
+
+      try {
+        const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now());
+        await writeDenialSummary("Stop time exceeded", "Update on.stop-after:");
+
+        const rawCall = mockCore.summary.addRaw.mock.calls[0][0];
+        expect(rawCall).toContain("Stop time exceeded");
+        expect(rawCall).toContain("Update on.stop-after:");
+        expect(mockCore.summary.write).toHaveBeenCalled();
+      } finally {
+        fs.rmSync(tmpDir, { recursive: true, force: true });
+      }
+    });
+  });
+});
diff --git a/actions/setup/md/pre_activation_skip.md b/actions/setup/md/pre_activation_skip.md
new file mode 100644
index 00000000000..7a7e4a1c863
--- /dev/null
+++ b/actions/setup/md/pre_activation_skip.md
@@ -0,0 +1,9 @@
+## ⏭️ Workflow Activation Skipped
+
+> {reason}
+
+**Remediation:** {remediation}
+
+---
+
+_See the `pre_activation` job log for full details._

From aebc5d63400fe92c7f671fb3f7dfa8e56082194a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 6 Apr 2026 01:53:25 +0000
Subject: [PATCH 6/6] Log unexpected template errors and remove Date.now()
 cache-busting in test

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c1738814-b8e8-4593-88d9-cf889cb728c3

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
 actions/setup/js/pre_activation_summary.cjs      | 7 +++++--
 actions/setup/js/pre_activation_summary.test.cjs | 6 +++---
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/actions/setup/js/pre_activation_summary.cjs b/actions/setup/js/pre_activation_summary.cjs
index 6f8834cfeb4..951940b2b56 100644
--- a/actions/setup/js/pre_activation_summary.cjs
+++ b/actions/setup/js/pre_activation_summary.cjs
@@ -20,8 +20,11 @@ async function writeDenialSummary(reason, remediation) {
     const templatePath = path.join(runnerTemp, "gh-aw", "prompts", "pre_activation_skip.md");
     try {
       content = renderTemplateFromFile(templatePath, { reason, remediation });
-    } catch {
-      // Template file not available; fall back to hardcoded format below
+    } catch (err) {
+      // Log unexpected errors but still fall through to the hardcoded fallback
+      if (err && typeof err === "object" && "code" in err && err.code !== "ENOENT") {
+        core.warning(`pre_activation_summary: could not read template ${templatePath}: ${err instanceof Error ? err.message : String(err)}`);
+      }
     }
   }
 
diff --git a/actions/setup/js/pre_activation_summary.test.cjs b/actions/setup/js/pre_activation_summary.test.cjs
index 2d558b26fbc..f751fc329a9 100644
--- a/actions/setup/js/pre_activation_summary.test.cjs
+++ b/actions/setup/js/pre_activation_summary.test.cjs
@@ -42,7 +42,7 @@ describe("pre_activation_summary.cjs", () => {
       process.env.RUNNER_TEMP = tmpDir;
 
       try {
-        const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now());
+        const { writeDenialSummary } = await import("./pre_activation_summary.cjs");
         await writeDenialSummary("Denied: insufficient perms", "Update frontmatter roles");
 
         expect(mockCore.summary.addRaw).toHaveBeenCalledWith("## Skipped\n\n> Denied: insufficient perms\n\n**Fix:** Update frontmatter roles\n");
@@ -55,7 +55,7 @@ describe("pre_activation_summary.cjs", () => {
     it("falls back to hardcoded format when RUNNER_TEMP is not set", async () => {
       delete process.env.RUNNER_TEMP;
 
-      const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now());
+      const { writeDenialSummary } = await import("./pre_activation_summary.cjs");
       await writeDenialSummary("Bot not authorized", "Add bot to on.bots:");
 
       const rawCall = mockCore.summary.addRaw.mock.calls[0][0];
@@ -70,7 +70,7 @@ describe("pre_activation_summary.cjs", () => {
       // No template file created
 
       try {
-        const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now());
+        const { writeDenialSummary } = await import("./pre_activation_summary.cjs");
         await writeDenialSummary("Stop time exceeded", "Update on.stop-after:");
 
         const rawCall = mockCore.summary.addRaw.mock.calls[0][0];
