From d91a26d172a8a9cb63d62bb3f588ff21ea139048 Mon Sep 17 00:00:00 2001 From: pelikhan Date: Tue, 27 Oct 2026 18:44:21 -0700 Subject: [PATCH 01/13] Harden detection-gated cache access boundaries Restrict agent cache tokens to reads when detection is enabled, publish cache memory through a write-only job requiring explicit detection acceptance, and diagnose low-trust cache-write overrides. Preserve dry-run, GHES, and no-detection behavior; regenerate workflow locks and document remaining trust boundaries. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/workflows/ab-testing-advisor.lock.yml | 6 +- .../actions-aw-linter-factory.lock.yml | 6 +- .github/workflows/agent-job-health.lock.yml | 6 +- .../agent-performance-analyzer.lock.yml | 1 + .../workflows/agent-persona-explorer.lock.yml | 6 +- .../workflows/agentic-token-audit.lock.yml | 1 + .../agentic-token-trend-audit.lock.yml | 1 + .../workflows/api-consumption-report.lock.yml | 6 +- .github/workflows/approach-validator.lock.yml | 1 + .github/workflows/archie.lock.yml | 1 + .../workflows/architecture-guardian.lock.yml | 1 + ...rchivx-agentic-workflows-analyzer.lock.yml | 1 + .github/workflows/artifacts-summary.lock.yml | 1 + .github/workflows/audit-workflows.lock.yml | 6 +- .github/workflows/auto-triage-issues.lock.yml | 1 + .github/workflows/avenger.lock.yml | 1 + .../aw-failure-investigator.lock.yml | 7 +- .../workflows/aw-issue-clustering.lock.yml | 1 + .github/workflows/blog-auditor.lock.yml | 1 + .../breaking-change-checker.lock.yml | 1 + .github/workflows/changeset.lock.yml | 1 + .../workflows/chaos-pr-bundle-fuzzer.lock.yml | 6 +- .github/workflows/ci-coach.lock.yml | 6 +- .../claude-code-user-docs-review.lock.yml | 6 +- .../cli-consistency-checker.lock.yml | 1 + .../workflows/cli-version-checker.lock.yml | 6 +- .github/workflows/cloclo.lock.yml | 6 +- .../workflows/code-scanning-fixer.lock.yml | 6 +- .github/workflows/code-simplifier.lock.yml | 1 + .../commit-changes-analyzer.lock.yml | 1 + .../constraint-solving-potd.lock.yml | 6 +- .github/workflows/contribution-check.lock.yml | 1 + .../workflows/copilot-agent-analysis.lock.yml | 6 +- .../copilot-centralization-drilldown.lock.yml | 1 + .../copilot-centralization-optimizer.lock.yml | 1 + .../copilot-cli-deep-research.lock.yml | 1 + .github/workflows/copilot-opt.lock.yml | 6 +- .../copilot-pr-merged-report.lock.yml | 6 +- .../copilot-pr-nlp-analysis.lock.yml | 6 +- .../copilot-pr-prompt-analysis.lock.yml | 6 +- .../copilot-session-insights.lock.yml | 6 +- .github/workflows/craft.lock.yml | 1 + ...daily-action-setup-security-audit.lock.yml | 6 +- ...aily-agent-of-the-day-blog-writer.lock.yml | 1 + .../daily-agentrx-trace-optimizer.lock.yml | 6 +- .../daily-ambient-context-optimizer.lock.yml | 1 + .../daily-architecture-diagram.lock.yml | 6 +- .../workflows/daily-arxiv-researcher.lock.yml | 6 +- .../daily-assign-issue-to-user.lock.yml | 1 + ...strostylelite-markdown-spellcheck.lock.yml | 1 + ...daily-aw-cross-repo-compile-check.lock.yml | 6 +- ...daily-awf-spec-compiler-surfacing.lock.yml | 1 + .../workflows/daily-byok-ollama-test.lock.yml | 1 + .../daily-cache-strategy-analyzer.lock.yml | 6 +- .../daily-caveman-optimizer.lock.yml | 6 +- .github/workflows/daily-choice-test.lock.yml | 1 + .../workflows/daily-cli-performance.lock.yml | 1 + .../workflows/daily-cli-tools-tester.lock.yml | 1 + .../workflows/daily-code-debt-aider.lock.yml | 1 + .github/workflows/daily-code-metrics.lock.yml | 6 +- .../daily-community-attribution.lock.yml | 1 + .../workflows/daily-compiler-quality.lock.yml | 6 +- ...ly-compiler-threat-spec-optimizer.lock.yml | 1 + .../daily-credit-limit-test.lock.yml | 1 + .github/workflows/daily-doc-healer.lock.yml | 6 +- .github/workflows/daily-doc-updater.lock.yml | 6 +- .../daily-documentation-diagram.lock.yml | 6 +- .../daily-ecosystem-explorer.lock.yml | 1 + .../daily-elixir-credo-snippet-audit.lock.yml | 1 + .github/workflows/daily-evals-report.lock.yml | 1 + .../daily-experiment-report.lock.yml | 6 +- .github/workflows/daily-fact.lock.yml | 1 + .github/workflows/daily-file-diet.lock.yml | 1 + .../workflows/daily-firewall-report.lock.yml | 6 +- .../daily-formal-spec-verifier.lock.yml | 6 +- .../workflows/daily-function-namer.lock.yml | 6 +- .../workflows/daily-geo-optimizer.lock.yml | 1 + .../daily-github-docs-seo-optimizer.lock.yml | 1 + .../daily-go-test-parallelizer.lock.yml | 6 +- .../daily-go-test-stubs-aider.lock.yml | 1 + .github/workflows/daily-grader-audit.lock.yml | 1 + .../daily-graft-intelligence.lock.yml | 1 + .github/workflows/daily-hippo-learn.lock.yml | 6 +- .../workflows/daily-issues-report.lock.yml | 6 +- .../daily-max-ai-credits-test.lock.yml | 1 + .../daily-mcp-concurrency-analysis.lock.yml | 6 +- .../workflows/daily-model-inventory.lock.yml | 1 + .../workflows/daily-model-resolution.lock.yml | 1 + .../daily-multi-device-docs-tester.lock.yml | 1 + .github/workflows/daily-news.lock.yml | 6 +- .../daily-observability-report.lock.yml | 1 + .../daily-performance-summary.lock.yml | 6 +- .../workflows/daily-pr-review-cursor.lock.yml | 1 + .../daily-regression-audit-kiro.lock.yml | 1 + .github/workflows/daily-regulatory.lock.yml | 1 + .../daily-reliability-review.lock.yml | 1 + .../daily-rendering-scripts-verifier.lock.yml | 6 +- .../workflows/daily-repo-chronicle.lock.yml | 6 +- .../daily-report-dispatcher.lock.yml | 1 + .../daily-safe-output-integrator.lock.yml | 1 + .../daily-safe-output-optimizer.lock.yml | 6 +- .../daily-safe-outputs-conformance.lock.yml | 1 + .../daily-safeoutputs-git-simulator.lock.yml | 1 + .../daily-schema-audit-cursor.lock.yml | 1 + .../workflows/daily-secrets-analysis.lock.yml | 6 +- .../daily-security-observability.lock.yml | 6 +- .../daily-security-red-team.lock.yml | 6 +- .github/workflows/daily-semgrep-scan.lock.yml | 1 + .../daily-spdd-spec-planner.lock.yml | 6 +- .../daily-spec-coverage-kiro.lock.yml | 1 + .../daily-spending-forecast.lock.yml | 6 +- .../workflows/daily-squid-image-scan.lock.yml | 1 + .github/workflows/daily-storify.lock.yml | 6 +- .../daily-syntax-error-quality.lock.yml | 1 + .../daily-team-evolution-insights.lock.yml | 1 + .github/workflows/daily-team-status.lock.yml | 1 + .../daily-testify-uber-super-expert.lock.yml | 1 + .../daily-token-consumption-report.lock.yml | 1 + ...ily-trajectory-grader-implementer.lock.yml | 1 + .../workflows/daily-vulnhunter-scan.lock.yml | 1 + .../daily-windows-defender-scan.lock.yml | 1 + ...dows-terminal-integration-builder.lock.yml | 1 + ...ly-work-queue-formal-verification.lock.yml | 1 + .../daily-work-queues-report.lock.yml | 1 + .../daily-workflow-security-model.lock.yml | 6 +- .../workflows/daily-workflow-updater.lock.yml | 1 + .../workflows/daily-yamllint-fixer.lock.yml | 1 + .../dataflow-pr-discussion-dataset.lock.yml | 6 +- .github/workflows/dead-code-remover.lock.yml | 6 +- .github/workflows/deep-report.lock.yml | 6 +- .../workflows/deepsec-security-scan.lock.yml | 1 + .github/workflows/delight.lock.yml | 1 + .github/workflows/dependabot-burner.lock.yml | 7 +- .../workflows/dependabot-go-checker.lock.yml | 1 + .../deployment-incident-monitor.lock.yml | 1 + .../workflows/design-decision-gate.lock.yml | 1 + .../workflows/designer-drift-audit.lock.yml | 1 + .../detection-analysis-report.lock.yml | 6 +- .github/workflows/dev-hawk.lock.yml | 1 + .../developer-docs-consolidator.lock.yml | 6 +- .github/workflows/dictation-prompt.lock.yml | 1 + .github/workflows/docs-noob-tester.lock.yml | 1 + .github/workflows/draft-pr-cleanup.lock.yml | 1 + .../duplicate-code-detector.lock.yml | 1 + .../engine-conformance-dispatcher.lock.yml | 1 + .../eslint-factory-dispatcher.lock.yml | 1 + .github/workflows/eslint-miner.lock.yml | 6 +- .github/workflows/eslint-monster.lock.yml | 1 + .github/workflows/eslint-refiner.lock.yml | 1 + .github/workflows/evoskill-evolver.lock.yml | 6 +- .../example-failure-category-filter.lock.yml | 1 + .../example-workflow-analyzer.lock.yml | 1 + .github/workflows/feature-grower.lock.yml | 6 +- .github/workflows/firewall-escape.lock.yml | 6 +- .../workflows/front-page-copy-guard.lock.yml | 1 + .../workflows/functional-pragmatist.lock.yml | 1 + .../github-mcp-structural-analysis.lock.yml | 6 +- .../github-mcp-tools-report.lock.yml | 6 +- .../github-remote-mcp-auth-test.lock.yml | 1 + .../workflows/glossary-maintainer.lock.yml | 6 +- .github/workflows/go-fan.lock.yml | 6 +- .github/workflows/go-logger.lock.yml | 6 +- .../workflows/go-pattern-detector.lock.yml | 1 + .github/workflows/gpclean.lock.yml | 6 +- .github/workflows/grumpy-reviewer.lock.yml | 1 + .github/workflows/hourly-ci-cleaner.lock.yml | 1 + .../impeccable-skills-reviewer.lock.yml | 7 +- .../workflows/instructions-janitor.lock.yml | 6 +- .github/workflows/issue-arborist.lock.yml | 1 + .github/workflows/issue-monster.lock.yml | 1 + .github/workflows/issue-triage-agent.lock.yml | 1 + .github/workflows/jsweep.lock.yml | 6 +- .../workflows/layout-spec-maintainer.lock.yml | 7 +- .github/workflows/lint-monster.lock.yml | 1 + .github/workflows/linter-miner.lock.yml | 6 +- .github/workflows/lockfile-stats.lock.yml | 6 +- .../mattpocock-skills-reviewer.lock.yml | 7 +- .github/workflows/mcp-inspector.lock.yml | 6 +- .github/workflows/mergefest.lock.yml | 1 + .github/workflows/metrics-collector.lock.yml | 1 + .github/workflows/necromancer.lock.yml | 1 + .../objective-impact-report.lock.yml | 7 +- .github/workflows/org-health-report.lock.yml | 6 +- .github/workflows/pdf-summary.lock.yml | 6 +- .github/workflows/plan.lock.yml | 1 + .github/workflows/poem-bot.lock.yml | 6 +- .github/workflows/ponytail-reviewer.lock.yml | 7 +- .github/workflows/portfolio-analyst.lock.yml | 6 +- .../pr-code-quality-reviewer.lock.yml | 7 +- .../workflows/pr-description-caveman.lock.yml | 1 + .../workflows/pr-nitpick-reviewer.lock.yml | 1 + .github/workflows/pr-sous-chef.lock.yml | 1 + .github/workflows/pr-triage-agent.lock.yml | 1 + .../prompt-clustering-analysis.lock.yml | 11 +- .github/workflows/purelock.lock.yml | 6 +- .github/workflows/python-data-charts.lock.yml | 6 +- .github/workflows/q.lock.yml | 1 + .../workflows/refactoring-cadence.lock.yml | 6 +- .github/workflows/refiner.lock.yml | 1 + .../workflows/repo-audit-analyzer.lock.yml | 6 +- .github/workflows/repo-tree-map.lock.yml | 1 + .../repository-quality-improver.lock.yml | 6 +- .github/workflows/research.lock.yml | 1 + .github/workflows/safe-output-health.lock.yml | 6 +- .../schema-consistency-checker.lock.yml | 6 +- .../schema-feature-coverage.lock.yml | 1 + .github/workflows/scout.lock.yml | 6 +- .../workflows/security-compliance.lock.yml | 1 + .github/workflows/security-review.lock.yml | 1 + .../semantic-function-refactor.lock.yml | 1 + .github/workflows/sergo.lock.yml | 1 + .../sighthound-security-scan.lock.yml | 1 + .github/workflows/skillet.lock.yml | 1 + .../workflows/slide-deck-maintainer.lock.yml | 6 +- .../workflows/smoke-agent-all-merged.lock.yml | 1 + .../workflows/smoke-agent-all-none.lock.yml | 1 + .../smoke-agent-public-approved.lock.yml | 1 + .../smoke-agent-public-none.lock.yml | 1 + .../smoke-agent-scoped-approved.lock.yml | 1 + .github/workflows/smoke-aider.lock.yml | 1 + .../workflows/smoke-builtin-ledgers.lock.yml | 1 + .../workflows/smoke-call-workflow.lock.yml | 1 + .../smoke-checkout-pr-dispatch.lock.yml | 1 + .../workflows/smoke-claude-dynamic.lock.yml | 1 + .../smoke-claude-on-copilot.lock.yml | 1 + .../workflows/smoke-claude-routed.lock.yml | 1 + .github/workflows/smoke-claude.lock.yml | 6 +- .github/workflows/smoke-codex-routed.lock.yml | 1 + .github/workflows/smoke-codex.lock.yml | 6 +- .../smoke-copilot-aoai-apikey.lock.yml | 6 +- .../smoke-copilot-aoai-entra.lock.yml | 6 +- .github/workflows/smoke-copilot-arm.lock.yml | 6 +- .github/workflows/smoke-copilot-auto.lock.yml | 1 + .../smoke-copilot-dynamic-workflow.lock.yml | 1 + .github/workflows/smoke-copilot-mai.lock.yml | 1 + .../smoke-copilot-routed-claude.lock.yml | 1 + .../smoke-copilot-routed-steering.lock.yml | 1 + .../workflows/smoke-copilot-routed.lock.yml | 1 + .../smoke-copilot-sdk-routed-claude.lock.yml | 1 + .../smoke-copilot-sdk-routed.lock.yml | 1 + .github/workflows/smoke-copilot-sdk.lock.yml | 1 + .../workflows/smoke-copilot-small.lock.yml | 1 + .../smoke-copilot-sub-agents.lock.yml | 1 + .github/workflows/smoke-copilot.lock.yml | 6 +- .../smoke-create-cross-repo-pr.lock.yml | 1 + .github/workflows/smoke-crush.lock.yml | 1 + .github/workflows/smoke-cursor.lock.yml | 1 + .../workflows/smoke-deepseek-harness.lock.yml | 6 +- .github/workflows/smoke-drive.lock.yml | 1 + .github/workflows/smoke-gemini.lock.yml | 6 +- .../workflows/smoke-github-claude.lock.yml | 1 + .github/workflows/smoke-goose.lock.yml | 6 +- .github/workflows/smoke-issues.lock.yml | 1 + .github/workflows/smoke-kiro.lock.yml | 1 + .github/workflows/smoke-multi-pr.lock.yml | 1 + .github/workflows/smoke-opencode.lock.yml | 6 +- .../workflows/smoke-otel-backends.lock.yml | 1 + .../workflows/smoke-pi-routed-claude.lock.yml | 1 + .github/workflows/smoke-pi-routed.lock.yml | 1 + .../workflows/smoke-pi-sub-agents.lock.yml | 1 + .github/workflows/smoke-pi.lock.yml | 6 +- .github/workflows/smoke-project.lock.yml | 1 + .github/workflows/smoke-pydantic.lock.yml | 1 + .../smoke-repo-memory-ledger.lock.yml | 1 + .../workflows/smoke-security-alerts.lock.yml | 1 + .../workflows/smoke-service-ports.lock.yml | 1 + .github/workflows/smoke-temporary-id.lock.yml | 1 + .github/workflows/smoke-test-tools.lock.yml | 1 + .../smoke-update-cross-repo-pr.lock.yml | 6 +- .github/workflows/smoke-work-queue.lock.yml | 1 + .../smoke-workflow-call-with-inputs.lock.yml | 1 + .../workflows/smoke-workflow-call.lock.yml | 1 + .github/workflows/spec-enforcer.lock.yml | 6 +- .github/workflows/spec-extractor.lock.yml | 6 +- .github/workflows/spec-librarian.lock.yml | 1 + .github/workflows/squad-game-planner.lock.yml | 1 + .../workflows/squad-implement-worker.lock.yml | 1 + .github/workflows/squad-plan.lock.yml | 1 + .github/workflows/squad.lock.yml | 1 + .github/workflows/stale-pr-cleanup.lock.yml | 1 + .../workflows/stale-repo-identifier.lock.yml | 6 +- .../workflows/static-analysis-report.lock.yml | 6 +- .../workflows/step-name-alignment.lock.yml | 6 +- .github/workflows/sub-issue-closer.lock.yml | 1 + .github/workflows/super-linter.lock.yml | 6 +- .../workflows/technical-doc-writer.lock.yml | 6 +- .github/workflows/terminal-stylist.lock.yml | 1 + .../workflows/test-quality-sentinel.lock.yml | 7 +- .github/workflows/tidy.lock.yml | 1 + .github/workflows/typist.lock.yml | 1 + .../workflows/ubuntu-image-analyzer.lock.yml | 1 + .../uk-ai-operational-resilience.lock.yml | 1 + .github/workflows/unbloat-docs.lock.yml | 6 +- .github/workflows/update-astro.lock.yml | 1 + .github/workflows/video-analyzer.lock.yml | 1 + .../visual-regression-checker.lock.yml | 1 + .../weekly-blog-post-writer.lock.yml | 1 + .../weekly-editors-health-check.lock.yml | 1 + .../workflows/weekly-issue-summary.lock.yml | 6 +- .../weekly-network-domains-audit.lock.yml | 6 +- .../weekly-safe-outputs-spec-review.lock.yml | 1 + .github/workflows/windows-grower.lock.yml | 6 +- .github/workflows/windows.lock.yml | 1 + .github/workflows/workflow-generator.lock.yml | 1 + .../workflow-health-manager.lock.yml | 1 + .../workflows/workflow-normalizer.lock.yml | 6 +- .../workflow-skill-extractor.lock.yml | 1 + .../content/docs/reference/cache-memory.md | 16 +- .../docs/reference/workflow-linters.md | 2 +- pkg/cli/lint_cache_mode_test.go | 55 ++++++ pkg/workflow/actions/lower.go | 1 + pkg/workflow/actions/parse.go | 2 + pkg/workflow/actions/parse_test.go | 32 ++++ pkg/workflow/actions/workflow.go | 1 + pkg/workflow/actions_ast.go | 3 +- pkg/workflow/cache_access_test.go | 169 ++++++++++++++++++ pkg/workflow/cache_memory.go | 17 +- pkg/workflow/cache_steps.go | 2 +- pkg/workflow/compiler_main_job.go | 7 + pkg/workflow/jobs.go | 4 + pkg/workflow/lint/cache_poisoning.go | 19 +- pkg/workflow/lint/cache_write_overrides.go | 90 ++++++++++ .../lint/cache_write_overrides_test.go | 150 ++++++++++++++++ 323 files changed, 1328 insertions(+), 153 deletions(-) create mode 100644 pkg/cli/lint_cache_mode_test.go create mode 100644 pkg/workflow/cache_access_test.go create mode 100644 pkg/workflow/lint/cache_write_overrides.go create mode 100644 pkg/workflow/lint/cache_write_overrides_test.go diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index 1ba760d9323..5eb3e544e8e 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -515,6 +515,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2888,12 +2889,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: abtestingadvisor diff --git a/.github/workflows/actions-aw-linter-factory.lock.yml b/.github/workflows/actions-aw-linter-factory.lock.yml index 4b46c3f7138..728ac3b11c0 100644 --- a/.github/workflows/actions-aw-linter-factory.lock.yml +++ b/.github/workflows/actions-aw-linter-factory.lock.yml @@ -494,6 +494,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2419,12 +2420,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: actionsawlinterfactory diff --git a/.github/workflows/agent-job-health.lock.yml b/.github/workflows/agent-job-health.lock.yml index 7fd187bf505..5e8fedb77c4 100644 --- a/.github/workflows/agent-job-health.lock.yml +++ b/.github/workflows/agent-job-health.lock.yml @@ -509,6 +509,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2870,12 +2871,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: agentjobhealth diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index d5fa8570273..2637c7f050e 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -547,6 +547,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index af60cdc9cd7..88e038001eb 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -545,6 +545,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2894,12 +2895,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: agentpersonaexplorer diff --git a/.github/workflows/agentic-token-audit.lock.yml b/.github/workflows/agentic-token-audit.lock.yml index db88829355d..af9d3f19052 100644 --- a/.github/workflows/agentic-token-audit.lock.yml +++ b/.github/workflows/agentic-token-audit.lock.yml @@ -493,6 +493,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/agentic-token-trend-audit.lock.yml b/.github/workflows/agentic-token-trend-audit.lock.yml index 463f4bde958..e2619b0501c 100644 --- a/.github/workflows/agentic-token-trend-audit.lock.yml +++ b/.github/workflows/agentic-token-trend-audit.lock.yml @@ -495,6 +495,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/api-consumption-report.lock.yml b/.github/workflows/api-consumption-report.lock.yml index 3a39a0f01d4..7a2fef91bb3 100644 --- a/.github/workflows/api-consumption-report.lock.yml +++ b/.github/workflows/api-consumption-report.lock.yml @@ -513,6 +513,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2864,12 +2865,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: apiconsumptionreport diff --git a/.github/workflows/approach-validator.lock.yml b/.github/workflows/approach-validator.lock.yml index 57e466fc51b..348be92b548 100644 --- a/.github/workflows/approach-validator.lock.yml +++ b/.github/workflows/approach-validator.lock.yml @@ -604,6 +604,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index f82cc4edfdc..01c88294e1b 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -561,6 +561,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/architecture-guardian.lock.yml b/.github/workflows/architecture-guardian.lock.yml index 912b1b5983c..8efcd7bb651 100644 --- a/.github/workflows/architecture-guardian.lock.yml +++ b/.github/workflows/architecture-guardian.lock.yml @@ -498,6 +498,7 @@ jobs: actions: read contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml index 883182810ae..26f5c84d795 100644 --- a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml +++ b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml @@ -564,6 +564,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 457a671757d..784a735b154 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -518,6 +518,7 @@ jobs: actions: read contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index eddb3e0af37..0119e507732 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -560,6 +560,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -3207,12 +3208,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: auditworkflows diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index 63e72bfbcb6..74738c6f3f1 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -523,6 +523,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/avenger.lock.yml b/.github/workflows/avenger.lock.yml index 6e2078e6655..12535a047fa 100644 --- a/.github/workflows/avenger.lock.yml +++ b/.github/workflows/avenger.lock.yml @@ -543,6 +543,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/aw-failure-investigator.lock.yml b/.github/workflows/aw-failure-investigator.lock.yml index c5a78f06fce..4db68fedfa7 100644 --- a/.github/workflows/aw-failure-investigator.lock.yml +++ b/.github/workflows/aw-failure-investigator.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"76edc703944df67939eb44746ea10b56f61275ded8060f1969b3ae16813ae173","body_hash":"65bdc947090f964fa6d5cd0ba73da2a8a92e497203a1be38f373c4c5e9ea9507","strict":true,"agent_id":"claude","engine_versions":{"claude":"2.1.310"}} -# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["actions_get","actions_list","get_commit","get_file_contents","get_job_logs","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["close_issue","create_issue","link_sub_issue","noop","report_incomplete","report_missing_data","report_missing_tool","update_issue"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["actions_get","actions_list","get_commit","get_file_contents","get_job_logs","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["close_issue","create_issue","link_sub_issue","noop","report_incomplete","report_missing_data","report_missing_tool","update_issue"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -48,7 +48,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -557,6 +557,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -704,7 +705,7 @@ jobs: # Cache configuration from frontmatter processed below - name: Failure investigator prefetch - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: aw-failure-investigator-prefetch-${{ github.run_id }} path: /tmp/gh-aw/agent/failure-investigator diff --git a/.github/workflows/aw-issue-clustering.lock.yml b/.github/workflows/aw-issue-clustering.lock.yml index a0917a99a59..9bf3372eb5e 100644 --- a/.github/workflows/aw-issue-clustering.lock.yml +++ b/.github/workflows/aw-issue-clustering.lock.yml @@ -473,6 +473,7 @@ jobs: copilot-requests: write discussions: read issues: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 54f8311e2b8..719f58caaff 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -550,6 +550,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index 119eb3fd96c..3bd9e795604 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -543,6 +543,7 @@ jobs: actions: read contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 90955898cb7..a60641648b8 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -562,6 +562,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index 3d2b20b2850..2158b96a7c2 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -500,6 +500,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2344,12 +2345,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: chaosprbundlefuzzer diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index b991fd65897..9aeb0bf772e 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -574,6 +574,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -3025,12 +3026,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: cicoach diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index 6aaa8779c1f..4d07b25ac35 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -503,6 +503,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2728,12 +2729,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: claudecodeuserdocsreview diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index 73bf435b7e2..7680fab5caf 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -489,6 +489,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 73c3cc8bf11..caa33361a8a 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -501,6 +501,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2733,12 +2734,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: cliversionchecker diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 2995247c43d..4389d19fbf8 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -658,6 +658,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3246,12 +3247,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: cloclo diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index b8f190d9aa5..1102970d03f 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -535,6 +535,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -3009,12 +3010,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: codescanningfixer diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 7c52669df6d..5162f26db23 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -532,6 +532,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index 062a27e45d7..e92b6993acc 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -548,6 +548,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/constraint-solving-potd.lock.yml b/.github/workflows/constraint-solving-potd.lock.yml index ce3e305ca29..008d0da0359 100644 --- a/.github/workflows/constraint-solving-potd.lock.yml +++ b/.github/workflows/constraint-solving-potd.lock.yml @@ -486,6 +486,7 @@ jobs: permissions: contents: read models: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2679,12 +2680,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: constraintsolvingpotd diff --git a/.github/workflows/contribution-check.lock.yml b/.github/workflows/contribution-check.lock.yml index 6d10b5f5f73..e6d2d0c3c63 100644 --- a/.github/workflows/contribution-check.lock.yml +++ b/.github/workflows/contribution-check.lock.yml @@ -493,6 +493,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index 5d23e6a53d2..2d17f421fa6 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -555,6 +555,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -3059,12 +3060,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: copilotagentanalysis diff --git a/.github/workflows/copilot-centralization-drilldown.lock.yml b/.github/workflows/copilot-centralization-drilldown.lock.yml index 8717c984f07..2f2aedcc3b2 100644 --- a/.github/workflows/copilot-centralization-drilldown.lock.yml +++ b/.github/workflows/copilot-centralization-drilldown.lock.yml @@ -488,6 +488,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/copilot-centralization-optimizer.lock.yml b/.github/workflows/copilot-centralization-optimizer.lock.yml index 4f8362daf1c..5d31dae7d95 100644 --- a/.github/workflows/copilot-centralization-optimizer.lock.yml +++ b/.github/workflows/copilot-centralization-optimizer.lock.yml @@ -486,6 +486,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/copilot-cli-deep-research.lock.yml b/.github/workflows/copilot-cli-deep-research.lock.yml index e845e6be9b4..ebff0dc46f9 100644 --- a/.github/workflows/copilot-cli-deep-research.lock.yml +++ b/.github/workflows/copilot-cli-deep-research.lock.yml @@ -491,6 +491,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/copilot-opt.lock.yml b/.github/workflows/copilot-opt.lock.yml index 773db966df5..267000e95e3 100644 --- a/.github/workflows/copilot-opt.lock.yml +++ b/.github/workflows/copilot-opt.lock.yml @@ -497,6 +497,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2760,12 +2761,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: copilotopt diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 07e09942017..e342b15766e 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -478,6 +478,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2650,12 +2651,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: copilotprmergedreport diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 9eca095e326..fe242e84ef9 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -556,6 +556,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -3132,12 +3133,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: copilotprnlpanalysis diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index 9385890f1ce..195f69b2a21 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -504,6 +504,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2913,12 +2914,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: copilotprpromptanalysis diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 8275a87316c..557ea11c254 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -527,6 +527,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2957,12 +2958,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: copilotsessioninsights diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index d84657b0d01..50ad8fd76b2 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -547,6 +547,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/daily-action-setup-security-audit.lock.yml b/.github/workflows/daily-action-setup-security-audit.lock.yml index 4791d8ad543..db6664f885d 100644 --- a/.github/workflows/daily-action-setup-security-audit.lock.yml +++ b/.github/workflows/daily-action-setup-security-audit.lock.yml @@ -487,6 +487,7 @@ jobs: permissions: contents: read issues: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2729,12 +2730,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyactionsetupsecurityaudit diff --git a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml index b1387e7caa8..c1e308e71fa 100644 --- a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml +++ b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml @@ -539,6 +539,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml index 4be71a8841a..dcb39563675 100644 --- a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml +++ b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml @@ -545,6 +545,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -3005,12 +3006,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyagentrxtraceoptimizer diff --git a/.github/workflows/daily-ambient-context-optimizer.lock.yml b/.github/workflows/daily-ambient-context-optimizer.lock.yml index d41f9e793f8..2734a596674 100644 --- a/.github/workflows/daily-ambient-context-optimizer.lock.yml +++ b/.github/workflows/daily-ambient-context-optimizer.lock.yml @@ -479,6 +479,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 3231aab7157..b6604a76b07 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -564,6 +564,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -3068,12 +3069,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyarchitecturediagram diff --git a/.github/workflows/daily-arxiv-researcher.lock.yml b/.github/workflows/daily-arxiv-researcher.lock.yml index d60cf4a06e1..5bd1f61fd29 100644 --- a/.github/workflows/daily-arxiv-researcher.lock.yml +++ b/.github/workflows/daily-arxiv-researcher.lock.yml @@ -488,6 +488,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2495,12 +2496,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyarxivresearcher diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index 6789c6717b7..68adb936f4c 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -472,6 +472,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml index edbfb7fea2f..7e28b0875ef 100644 --- a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml +++ b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml @@ -566,6 +566,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml index acd82b92bd7..58c253c4d89 100644 --- a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml +++ b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml @@ -491,6 +491,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2730,12 +2731,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyawcrossrepocompilecheck diff --git a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml index 8abd915111e..b9cbad7dee4 100644 --- a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml +++ b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml @@ -481,6 +481,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-byok-ollama-test.lock.yml b/.github/workflows/daily-byok-ollama-test.lock.yml index 0d6369f22b4..f8a4c8de16b 100644 --- a/.github/workflows/daily-byok-ollama-test.lock.yml +++ b/.github/workflows/daily-byok-ollama-test.lock.yml @@ -474,6 +474,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index dece240a339..16fc30970b1 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -548,6 +548,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -3003,12 +3004,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailycachestrategyanalyzer diff --git a/.github/workflows/daily-caveman-optimizer.lock.yml b/.github/workflows/daily-caveman-optimizer.lock.yml index ac5e96ec047..3fc9547c07d 100644 --- a/.github/workflows/daily-caveman-optimizer.lock.yml +++ b/.github/workflows/daily-caveman-optimizer.lock.yml @@ -561,6 +561,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -3317,12 +3318,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailycavemanoptimizer diff --git a/.github/workflows/daily-choice-test.lock.yml b/.github/workflows/daily-choice-test.lock.yml index 0b7d188479b..2d4323a0b7d 100644 --- a/.github/workflows/daily-choice-test.lock.yml +++ b/.github/workflows/daily-choice-test.lock.yml @@ -478,6 +478,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index a309d26881a..5b76f730a73 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -527,6 +527,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-cli-tools-tester.lock.yml b/.github/workflows/daily-cli-tools-tester.lock.yml index be34f363b73..445e7d3a731 100644 --- a/.github/workflows/daily-cli-tools-tester.lock.yml +++ b/.github/workflows/daily-cli-tools-tester.lock.yml @@ -491,6 +491,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-code-debt-aider.lock.yml b/.github/workflows/daily-code-debt-aider.lock.yml index 6be14f82a9c..4c77fd0fc1a 100644 --- a/.github/workflows/daily-code-debt-aider.lock.yml +++ b/.github/workflows/daily-code-debt-aider.lock.yml @@ -505,6 +505,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-aider-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index fc1c56b04ac..17322f4ef53 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -538,6 +538,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -3200,12 +3201,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailycodemetrics diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index cee42fac44d..2267834f292 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -556,6 +556,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index 4cd941f3d6b..43e8f64139e 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -567,6 +567,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3018,12 +3019,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailycompilerquality diff --git a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml index f175c2fd995..0f03bf862e6 100644 --- a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml +++ b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml @@ -510,6 +510,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-credit-limit-test.lock.yml b/.github/workflows/daily-credit-limit-test.lock.yml index da27b8458dd..ac6d78ab28d 100644 --- a/.github/workflows/daily-credit-limit-test.lock.yml +++ b/.github/workflows/daily-credit-limit-test.lock.yml @@ -467,6 +467,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 34c7c41ae8d..931c57e9aed 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -565,6 +565,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -3101,12 +3102,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailydochealer diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index aa4b4cae524..035eb4e6515 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -564,6 +564,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -3009,12 +3010,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailydocupdater diff --git a/.github/workflows/daily-documentation-diagram.lock.yml b/.github/workflows/daily-documentation-diagram.lock.yml index 4fa8b716019..a50391fd528 100644 --- a/.github/workflows/daily-documentation-diagram.lock.yml +++ b/.github/workflows/daily-documentation-diagram.lock.yml @@ -540,6 +540,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2879,12 +2880,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailydocumentationdiagram diff --git a/.github/workflows/daily-ecosystem-explorer.lock.yml b/.github/workflows/daily-ecosystem-explorer.lock.yml index 10045b15456..b7d9b11f303 100644 --- a/.github/workflows/daily-ecosystem-explorer.lock.yml +++ b/.github/workflows/daily-ecosystem-explorer.lock.yml @@ -502,6 +502,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml index 3dd04be86d8..62c1a6d5e93 100644 --- a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml +++ b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml @@ -509,6 +509,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-evals-report.lock.yml b/.github/workflows/daily-evals-report.lock.yml index 8968b8052ca..c678ec0dd19 100644 --- a/.github/workflows/daily-evals-report.lock.yml +++ b/.github/workflows/daily-evals-report.lock.yml @@ -516,6 +516,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/daily-experiment-report.lock.yml b/.github/workflows/daily-experiment-report.lock.yml index 65342da33e7..e1514f1486e 100644 --- a/.github/workflows/daily-experiment-report.lock.yml +++ b/.github/workflows/daily-experiment-report.lock.yml @@ -495,6 +495,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2819,12 +2820,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyexperimentreport diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index ff375eedd29..82ef5b693a0 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -537,6 +537,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index dbd93273743..370c505b744 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -499,6 +499,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 86c5bcccbff..6d2fd6d13a4 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -525,6 +525,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2861,12 +2862,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyfirewallreport diff --git a/.github/workflows/daily-formal-spec-verifier.lock.yml b/.github/workflows/daily-formal-spec-verifier.lock.yml index 38edfdd419d..c481d851e2e 100644 --- a/.github/workflows/daily-formal-spec-verifier.lock.yml +++ b/.github/workflows/daily-formal-spec-verifier.lock.yml @@ -506,6 +506,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2562,12 +2563,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyformalspecverifier diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index 6fd0bfa83e4..90d3e65d6e1 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -494,6 +494,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2735,12 +2736,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyfunctionnamer diff --git a/.github/workflows/daily-geo-optimizer.lock.yml b/.github/workflows/daily-geo-optimizer.lock.yml index 1bf78b0cbf8..04d570e88f9 100644 --- a/.github/workflows/daily-geo-optimizer.lock.yml +++ b/.github/workflows/daily-geo-optimizer.lock.yml @@ -489,6 +489,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml index c466967396f..a274ad9d0ee 100644 --- a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml +++ b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml @@ -448,6 +448,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-go-test-parallelizer.lock.yml b/.github/workflows/daily-go-test-parallelizer.lock.yml index 9d9baf16c7e..fb802d597fd 100644 --- a/.github/workflows/daily-go-test-parallelizer.lock.yml +++ b/.github/workflows/daily-go-test-parallelizer.lock.yml @@ -515,6 +515,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2888,12 +2889,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailygotestparallelizer diff --git a/.github/workflows/daily-go-test-stubs-aider.lock.yml b/.github/workflows/daily-go-test-stubs-aider.lock.yml index 38df32ff325..f01f92c352c 100644 --- a/.github/workflows/daily-go-test-stubs-aider.lock.yml +++ b/.github/workflows/daily-go-test-stubs-aider.lock.yml @@ -505,6 +505,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-aider-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-grader-audit.lock.yml b/.github/workflows/daily-grader-audit.lock.yml index 022509bca40..2190f660b14 100644 --- a/.github/workflows/daily-grader-audit.lock.yml +++ b/.github/workflows/daily-grader-audit.lock.yml @@ -480,6 +480,7 @@ jobs: permissions: actions: read contents: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-graft-intelligence.lock.yml b/.github/workflows/daily-graft-intelligence.lock.yml index b3b45e6909e..e253bc271e9 100644 --- a/.github/workflows/daily-graft-intelligence.lock.yml +++ b/.github/workflows/daily-graft-intelligence.lock.yml @@ -480,6 +480,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index 7a4657474c6..9fc5220dc1d 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -487,6 +487,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2818,12 +2819,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyhippolearn diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index c86bb0ad819..fb6cf0caa21 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -583,6 +583,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3160,12 +3161,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyissuesreport diff --git a/.github/workflows/daily-max-ai-credits-test.lock.yml b/.github/workflows/daily-max-ai-credits-test.lock.yml index 47dedd3399b..a5a9f38871f 100644 --- a/.github/workflows/daily-max-ai-credits-test.lock.yml +++ b/.github/workflows/daily-max-ai-credits-test.lock.yml @@ -425,6 +425,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index 80656dc7143..e8b1ca26488 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -494,6 +494,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -3176,12 +3177,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailymcpconcurrencyanalysis diff --git a/.github/workflows/daily-model-inventory.lock.yml b/.github/workflows/daily-model-inventory.lock.yml index 7b7e3b1a08f..6ffec5ce74b 100644 --- a/.github/workflows/daily-model-inventory.lock.yml +++ b/.github/workflows/daily-model-inventory.lock.yml @@ -489,6 +489,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-model-resolution.lock.yml b/.github/workflows/daily-model-resolution.lock.yml index 56db2d972b0..2585571e88a 100644 --- a/.github/workflows/daily-model-resolution.lock.yml +++ b/.github/workflows/daily-model-resolution.lock.yml @@ -490,6 +490,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 81c8b9f1fe3..5a195425fc0 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -487,6 +487,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index aa6281c30c0..5a6aac0cbf3 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -557,6 +557,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -3170,12 +3171,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailynews diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index 5a8168ebf48..33391f54842 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -521,6 +521,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index b2d7ea6a8b3..f6539520c2b 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -497,6 +497,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -3375,12 +3376,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyperformancesummary diff --git a/.github/workflows/daily-pr-review-cursor.lock.yml b/.github/workflows/daily-pr-review-cursor.lock.yml index 2493d8beb2a..2ecfb6fdabc 100644 --- a/.github/workflows/daily-pr-review-cursor.lock.yml +++ b/.github/workflows/daily-pr-review-cursor.lock.yml @@ -482,6 +482,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-regression-audit-kiro.lock.yml b/.github/workflows/daily-regression-audit-kiro.lock.yml index b91ad73ffc9..a914333f9d5 100644 --- a/.github/workflows/daily-regression-audit-kiro.lock.yml +++ b/.github/workflows/daily-regression-audit-kiro.lock.yml @@ -483,6 +483,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-regulatory.lock.yml b/.github/workflows/daily-regulatory.lock.yml index 9196601ca5a..473472c7482 100644 --- a/.github/workflows/daily-regulatory.lock.yml +++ b/.github/workflows/daily-regulatory.lock.yml @@ -514,6 +514,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/daily-reliability-review.lock.yml b/.github/workflows/daily-reliability-review.lock.yml index 40c16966f85..4c166da8bdc 100644 --- a/.github/workflows/daily-reliability-review.lock.yml +++ b/.github/workflows/daily-reliability-review.lock.yml @@ -488,6 +488,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index c959b143ef8..9ea4d68960f 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -586,6 +586,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -3200,12 +3201,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyrenderingscriptsverifier diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index 148039dc4b4..997a47b1149 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -521,6 +521,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2755,12 +2756,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyrepochronicle diff --git a/.github/workflows/daily-report-dispatcher.lock.yml b/.github/workflows/daily-report-dispatcher.lock.yml index 1d9e7e179f4..03182919fcd 100644 --- a/.github/workflows/daily-report-dispatcher.lock.yml +++ b/.github/workflows/daily-report-dispatcher.lock.yml @@ -494,6 +494,7 @@ jobs: actions: read contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index aa5b874054b..f03a15cc238 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -505,6 +505,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index 3a0f1e5ab07..3699cacdc60 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -561,6 +561,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -3120,12 +3121,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailysafeoutputoptimizer diff --git a/.github/workflows/daily-safe-outputs-conformance.lock.yml b/.github/workflows/daily-safe-outputs-conformance.lock.yml index 6a11d6e355b..428f5b43d80 100644 --- a/.github/workflows/daily-safe-outputs-conformance.lock.yml +++ b/.github/workflows/daily-safe-outputs-conformance.lock.yml @@ -487,6 +487,7 @@ jobs: permissions: contents: read issues: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml index 53410b1d4b4..e8981d520db 100644 --- a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml +++ b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml @@ -513,6 +513,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-schema-audit-cursor.lock.yml b/.github/workflows/daily-schema-audit-cursor.lock.yml index 28845ed82f8..40c90cc230b 100644 --- a/.github/workflows/daily-schema-audit-cursor.lock.yml +++ b/.github/workflows/daily-schema-audit-cursor.lock.yml @@ -481,6 +481,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index 7c7c245ba87..7c7835620bd 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -514,6 +514,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2751,12 +2752,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailysecretsanalysis diff --git a/.github/workflows/daily-security-observability.lock.yml b/.github/workflows/daily-security-observability.lock.yml index b2d44a7bb6f..21f01239230 100644 --- a/.github/workflows/daily-security-observability.lock.yml +++ b/.github/workflows/daily-security-observability.lock.yml @@ -514,6 +514,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2878,12 +2879,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailysecurityobservability diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index 479ae14af1a..be88e297b19 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -539,6 +539,7 @@ jobs: copilot-requests: write issues: read security-events: read + cache-mode: read concurrency: group: "gh-aw-opencode-${{ github.workflow }}" queue: max @@ -3264,12 +3265,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailysecurityredteam diff --git a/.github/workflows/daily-semgrep-scan.lock.yml b/.github/workflows/daily-semgrep-scan.lock.yml index e5d99a4c06a..a1bd3a04a12 100644 --- a/.github/workflows/daily-semgrep-scan.lock.yml +++ b/.github/workflows/daily-semgrep-scan.lock.yml @@ -529,6 +529,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/daily-spdd-spec-planner.lock.yml b/.github/workflows/daily-spdd-spec-planner.lock.yml index c78a09046d4..f9e30028c5e 100644 --- a/.github/workflows/daily-spdd-spec-planner.lock.yml +++ b/.github/workflows/daily-spdd-spec-planner.lock.yml @@ -487,6 +487,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2740,12 +2741,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyspddspecplanner diff --git a/.github/workflows/daily-spec-coverage-kiro.lock.yml b/.github/workflows/daily-spec-coverage-kiro.lock.yml index e1337a80f7e..92d222d77aa 100644 --- a/.github/workflows/daily-spec-coverage-kiro.lock.yml +++ b/.github/workflows/daily-spec-coverage-kiro.lock.yml @@ -482,6 +482,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-spending-forecast.lock.yml b/.github/workflows/daily-spending-forecast.lock.yml index 38d4eb1a497..1ad2279f9d1 100644 --- a/.github/workflows/daily-spending-forecast.lock.yml +++ b/.github/workflows/daily-spending-forecast.lock.yml @@ -486,6 +486,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2862,12 +2863,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyspendingforecast diff --git a/.github/workflows/daily-squid-image-scan.lock.yml b/.github/workflows/daily-squid-image-scan.lock.yml index 3e4af23b1d3..d65c32fbf47 100644 --- a/.github/workflows/daily-squid-image-scan.lock.yml +++ b/.github/workflows/daily-squid-image-scan.lock.yml @@ -464,6 +464,7 @@ jobs: copilot-requests: write issues: read packages: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-storify.lock.yml b/.github/workflows/daily-storify.lock.yml index ed403fd8167..6f9df14fe14 100644 --- a/.github/workflows/daily-storify.lock.yml +++ b/.github/workflows/daily-storify.lock.yml @@ -514,6 +514,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2968,12 +2969,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailystorify diff --git a/.github/workflows/daily-syntax-error-quality.lock.yml b/.github/workflows/daily-syntax-error-quality.lock.yml index a21e71a797f..e1c66b102b8 100644 --- a/.github/workflows/daily-syntax-error-quality.lock.yml +++ b/.github/workflows/daily-syntax-error-quality.lock.yml @@ -480,6 +480,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-team-evolution-insights.lock.yml b/.github/workflows/daily-team-evolution-insights.lock.yml index 77c5290183a..e8ab3d11df2 100644 --- a/.github/workflows/daily-team-evolution-insights.lock.yml +++ b/.github/workflows/daily-team-evolution-insights.lock.yml @@ -511,6 +511,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 90 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index afa25b21d7a..0bd74c597e3 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -478,6 +478,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index 210c48d6828..8e8be0f0c83 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -512,6 +512,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-token-consumption-report.lock.yml b/.github/workflows/daily-token-consumption-report.lock.yml index d0c6df25baf..0c85d0f5ca1 100644 --- a/.github/workflows/daily-token-consumption-report.lock.yml +++ b/.github/workflows/daily-token-consumption-report.lock.yml @@ -516,6 +516,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/daily-trajectory-grader-implementer.lock.yml b/.github/workflows/daily-trajectory-grader-implementer.lock.yml index 7ffab3f895f..4f6a335cd48 100644 --- a/.github/workflows/daily-trajectory-grader-implementer.lock.yml +++ b/.github/workflows/daily-trajectory-grader-implementer.lock.yml @@ -515,6 +515,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-vulnhunter-scan.lock.yml b/.github/workflows/daily-vulnhunter-scan.lock.yml index 9632bdfe429..29801b09f90 100644 --- a/.github/workflows/daily-vulnhunter-scan.lock.yml +++ b/.github/workflows/daily-vulnhunter-scan.lock.yml @@ -485,6 +485,7 @@ jobs: actions: read contents: read issues: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-windows-defender-scan.lock.yml b/.github/workflows/daily-windows-defender-scan.lock.yml index d02ac56453d..e6b1af0ef46 100644 --- a/.github/workflows/daily-windows-defender-scan.lock.yml +++ b/.github/workflows/daily-windows-defender-scan.lock.yml @@ -490,6 +490,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml index e8248d125d4..86d7d54814d 100644 --- a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml +++ b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml @@ -480,6 +480,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-work-queue-formal-verification.lock.yml b/.github/workflows/daily-work-queue-formal-verification.lock.yml index 8c3961cd46a..c2febe0e949 100644 --- a/.github/workflows/daily-work-queue-formal-verification.lock.yml +++ b/.github/workflows/daily-work-queue-formal-verification.lock.yml @@ -465,6 +465,7 @@ jobs: actions: read contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-work-queues-report.lock.yml b/.github/workflows/daily-work-queues-report.lock.yml index 0b7b927c7ff..ec271e8e83e 100644 --- a/.github/workflows/daily-work-queues-report.lock.yml +++ b/.github/workflows/daily-work-queues-report.lock.yml @@ -492,6 +492,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-workflow-security-model.lock.yml b/.github/workflows/daily-workflow-security-model.lock.yml index f450824f27e..152fd699399 100644 --- a/.github/workflows/daily-workflow-security-model.lock.yml +++ b/.github/workflows/daily-workflow-security-model.lock.yml @@ -483,6 +483,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2428,12 +2429,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dailyworkflowsecuritymodel diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index f751f0ed703..a1481d77675 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -499,6 +499,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/daily-yamllint-fixer.lock.yml b/.github/workflows/daily-yamllint-fixer.lock.yml index bc613f4074c..b45455907d8 100644 --- a/.github/workflows/daily-yamllint-fixer.lock.yml +++ b/.github/workflows/daily-yamllint-fixer.lock.yml @@ -521,6 +521,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml index e6b23e51a6c..16728a656db 100644 --- a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml +++ b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml @@ -548,6 +548,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -3227,12 +3228,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: dataflowprdiscussiondataset diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 916932c9bdd..7b9a64acc4a 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -528,6 +528,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2508,12 +2509,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: deadcoderemover diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 571e11b9251..14f737996ac 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -585,6 +585,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3647,12 +3648,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: deepreport diff --git a/.github/workflows/deepsec-security-scan.lock.yml b/.github/workflows/deepsec-security-scan.lock.yml index 277f57940ac..8274e80cea4 100644 --- a/.github/workflows/deepsec-security-scan.lock.yml +++ b/.github/workflows/deepsec-security-scan.lock.yml @@ -516,6 +516,7 @@ jobs: actions: read contents: read issues: read + cache-mode: read timeout-minutes: 90 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/delight.lock.yml b/.github/workflows/delight.lock.yml index 9d063b29ee3..56ce743cecc 100644 --- a/.github/workflows/delight.lock.yml +++ b/.github/workflows/delight.lock.yml @@ -492,6 +492,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index dfa9fa071cf..923aea8a479 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"326f2d69cd952cf8459df2119feadc03ce70a2d3932abb48dab2afeb2bc7e851","body_hash":"092c94df11dbb0dc76937d17d1cd382a6116005b3ecadf5959041d7b543ea272","strict":true,"agent_id":"copilot","agent_model":"gpt-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["add_comment","create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["add_comment","create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -45,7 +45,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -588,6 +588,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -703,7 +704,7 @@ jobs: # Cache configuration from frontmatter processed below - name: Dependabot burner selection context - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: dependabot-burner-selection-${{ github.run_id }} path: /tmp/gh-aw/agent/dependabot-burner diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index bf53b1202cd..b01c6e6c886 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -529,6 +529,7 @@ jobs: pull-requests: read security-events: read vulnerability-alerts: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/deployment-incident-monitor.lock.yml b/.github/workflows/deployment-incident-monitor.lock.yml index fac0f66ec90..455ec75a14e 100644 --- a/.github/workflows/deployment-incident-monitor.lock.yml +++ b/.github/workflows/deployment-incident-monitor.lock.yml @@ -500,6 +500,7 @@ jobs: actions: read contents: read deployments: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/design-decision-gate.lock.yml b/.github/workflows/design-decision-gate.lock.yml index 1f3ac531829..72a105cae7b 100644 --- a/.github/workflows/design-decision-gate.lock.yml +++ b/.github/workflows/design-decision-gate.lock.yml @@ -582,6 +582,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/designer-drift-audit.lock.yml b/.github/workflows/designer-drift-audit.lock.yml index 2d0079298ed..c90694e95cc 100644 --- a/.github/workflows/designer-drift-audit.lock.yml +++ b/.github/workflows/designer-drift-audit.lock.yml @@ -475,6 +475,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/detection-analysis-report.lock.yml b/.github/workflows/detection-analysis-report.lock.yml index 98dfcb58b4a..db28ebe1ed3 100644 --- a/.github/workflows/detection-analysis-report.lock.yml +++ b/.github/workflows/detection-analysis-report.lock.yml @@ -505,6 +505,7 @@ jobs: contents: read discussions: read issues: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2855,12 +2856,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: detectionanalysisreport diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index e474b3e5cb8..74117fab127 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -525,6 +525,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 2747f362852..26d6c186cd1 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -539,6 +539,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -3093,12 +3094,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: developerdocsconsolidator diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 84292a91a53..dea7bd273a4 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -499,6 +499,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index 4111f090efb..4376890c7d8 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -482,6 +482,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/draft-pr-cleanup.lock.yml b/.github/workflows/draft-pr-cleanup.lock.yml index 4d735b89905..a9d5f7658e0 100644 --- a/.github/workflows/draft-pr-cleanup.lock.yml +++ b/.github/workflows/draft-pr-cleanup.lock.yml @@ -471,6 +471,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 40f216a9050..568721ef717 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -491,6 +491,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/engine-conformance-dispatcher.lock.yml b/.github/workflows/engine-conformance-dispatcher.lock.yml index 9c795f14b45..99d014fa659 100644 --- a/.github/workflows/engine-conformance-dispatcher.lock.yml +++ b/.github/workflows/engine-conformance-dispatcher.lock.yml @@ -496,6 +496,7 @@ jobs: actions: read contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/eslint-factory-dispatcher.lock.yml b/.github/workflows/eslint-factory-dispatcher.lock.yml index 0af9e4f112a..147fa7552f0 100644 --- a/.github/workflows/eslint-factory-dispatcher.lock.yml +++ b/.github/workflows/eslint-factory-dispatcher.lock.yml @@ -492,6 +492,7 @@ jobs: actions: read contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/eslint-miner.lock.yml b/.github/workflows/eslint-miner.lock.yml index 65981f7d0e6..da9dc34ebe8 100644 --- a/.github/workflows/eslint-miner.lock.yml +++ b/.github/workflows/eslint-miner.lock.yml @@ -529,6 +529,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 120 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2837,12 +2838,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: eslintminer diff --git a/.github/workflows/eslint-monster.lock.yml b/.github/workflows/eslint-monster.lock.yml index 45f8956ca2f..9c5e5f9ac18 100644 --- a/.github/workflows/eslint-monster.lock.yml +++ b/.github/workflows/eslint-monster.lock.yml @@ -507,6 +507,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/eslint-refiner.lock.yml b/.github/workflows/eslint-refiner.lock.yml index 990bc8a767b..03afc861e11 100644 --- a/.github/workflows/eslint-refiner.lock.yml +++ b/.github/workflows/eslint-refiner.lock.yml @@ -508,6 +508,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/evoskill-evolver.lock.yml b/.github/workflows/evoskill-evolver.lock.yml index 41ecd967be0..d7f11b29fc7 100644 --- a/.github/workflows/evoskill-evolver.lock.yml +++ b/.github/workflows/evoskill-evolver.lock.yml @@ -507,6 +507,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2831,12 +2832,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: evoskillevolver diff --git a/.github/workflows/example-failure-category-filter.lock.yml b/.github/workflows/example-failure-category-filter.lock.yml index a661eec8965..7a635dc70a4 100644 --- a/.github/workflows/example-failure-category-filter.lock.yml +++ b/.github/workflows/example-failure-category-filter.lock.yml @@ -472,6 +472,7 @@ jobs: # Permissions for the agent job (workflow permissions default to none). permissions: contents: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 428ba77a230..df16059baf7 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -488,6 +488,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/feature-grower.lock.yml b/.github/workflows/feature-grower.lock.yml index 0b8cd0e639f..b73ac6418c4 100644 --- a/.github/workflows/feature-grower.lock.yml +++ b/.github/workflows/feature-grower.lock.yml @@ -490,6 +490,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2348,12 +2349,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: featuregrower diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index f49369a93bb..81dae05927f 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -536,6 +536,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2575,12 +2576,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: firewallescape diff --git a/.github/workflows/front-page-copy-guard.lock.yml b/.github/workflows/front-page-copy-guard.lock.yml index de93adb83f0..5de2cfacc5b 100644 --- a/.github/workflows/front-page-copy-guard.lock.yml +++ b/.github/workflows/front-page-copy-guard.lock.yml @@ -504,6 +504,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index a98edf30d8b..62d6f311661 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -511,6 +511,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index e055940ea87..9720951e665 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -506,6 +506,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2656,12 +2657,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: githubmcpstructuralanalysis diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 948f6c56c32..4952feff2ab 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -520,6 +520,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2459,12 +2460,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: githubmcptoolsreport diff --git a/.github/workflows/github-remote-mcp-auth-test.lock.yml b/.github/workflows/github-remote-mcp-auth-test.lock.yml index a43f604ad68..f6c73a13bce 100644 --- a/.github/workflows/github-remote-mcp-auth-test.lock.yml +++ b/.github/workflows/github-remote-mcp-auth-test.lock.yml @@ -480,6 +480,7 @@ jobs: copilot-requests: write discussions: read issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index fc0da83b61c..d79d6e47d3e 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -541,6 +541,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -3066,12 +3067,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: glossarymaintainer diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 7fbcb1c3ea1..7cf173d10df 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -548,6 +548,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2969,12 +2970,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: gofan diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index b9207a2be8a..404c17b6a47 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -520,6 +520,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2857,12 +2858,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: gologger diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index ded3801c2c2..3a9f596ef78 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -493,6 +493,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index d8f08ce6110..a943b50d484 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -541,6 +541,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2892,12 +2893,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: gpclean diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 0443134edff..cfaae1eb602 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -554,6 +554,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index 255a6cf2b63..0c78955218b 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -534,6 +534,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index 3ac10000713..5adc1c13030 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"be8120ee8cd43e71a65ea89833eb22ba5b3a876f45b0cae6f47519c7c768b698","body_hash":"cd9b235f2eea7a4842c2e9792a9c8a415ebc4b388991cb81c2a67d571e5b3ca4","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["pbakaus/impeccable/.agents/skills/impeccable@19786e7a225c3688e558f8694a7c8c6a8a25d840"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["pbakaus/impeccable/.agents/skills/impeccable@19786e7a225c3688e558f8694a7c8c6a8a25d840"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -44,7 +44,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -569,6 +569,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -674,7 +675,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }}) - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }} path: /tmp/gh-aw/agent diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index cb8f7137ed4..c8f41ce3c05 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -515,6 +515,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2448,12 +2449,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: instructionsjanitor diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index 5d36f5829b5..fe423069635 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -528,6 +528,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 58bba9e2393..b3a3cc33174 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -1005,6 +1005,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index 6e8170b8db0..c76b2c50b79 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -473,6 +473,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index 3716ba77595..c22b2477933 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -491,6 +491,7 @@ jobs: permissions: actions: read contents: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2385,12 +2386,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: jsweep diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 00c783755ea..2c8af623c5a 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"54c18bcb686a1f6ba04fcedf7b0e4f9297e5414fecf1f13ea82a0e0fe7acdd62","body_hash":"e524959b8b93d3c190a98475abe3899cd69537794db2bdf4a6b74b9a6932c494","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -42,7 +42,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -510,6 +510,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -618,7 +619,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Save layout spec data to cache - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: layout-spec-cache-${{ github.run_id }} path: /tmp/gh-aw/agent/layout-cache diff --git a/.github/workflows/lint-monster.lock.yml b/.github/workflows/lint-monster.lock.yml index b3d2b0b6852..e1754095f7c 100644 --- a/.github/workflows/lint-monster.lock.yml +++ b/.github/workflows/lint-monster.lock.yml @@ -487,6 +487,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/linter-miner.lock.yml b/.github/workflows/linter-miner.lock.yml index 500d6f56377..5a5e0d46169 100644 --- a/.github/workflows/linter-miner.lock.yml +++ b/.github/workflows/linter-miner.lock.yml @@ -524,6 +524,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2476,12 +2477,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: linterminer diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 8a6f5c042fb..04fe22080df 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -490,6 +490,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2306,12 +2307,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: lockfilestats diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index a9112b90b46..31b156965b2 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"4b87954de14b41b8efff2f00b0fe7ad7551ebd43af42451d254f6e98ab8e0bc2","body_hash":"5ef9335cf9dc1c41708d3b3768cc3792b3dc8c60af6f1fc56c3d7157cd7036b9","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["mattpocock/skills/codebase-design@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/diagnosing-bugs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/grill-with-docs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/improve-codebase-architecture@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/tdd@49dd158d1076134a641b33efb035946536778336"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["mattpocock/skills/codebase-design@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/diagnosing-bugs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/grill-with-docs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/improve-codebase-architecture@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/tdd@49dd158d1076134a641b33efb035946536778336"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -43,7 +43,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -673,6 +673,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -778,7 +779,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} path: /tmp/gh-aw/agent diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index 60f696e6516..45a79bcd91e 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -529,6 +529,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2833,12 +2834,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: mcpinspector diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 1342da533fb..9521d2c71c0 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -548,6 +548,7 @@ jobs: actions: read contents: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml index a19304c327f..ef9a04a6e56 100644 --- a/.github/workflows/metrics-collector.lock.yml +++ b/.github/workflows/metrics-collector.lock.yml @@ -499,6 +499,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/necromancer.lock.yml b/.github/workflows/necromancer.lock.yml index 4b50ae91efc..b1765303e55 100644 --- a/.github/workflows/necromancer.lock.yml +++ b/.github/workflows/necromancer.lock.yml @@ -567,6 +567,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/objective-impact-report.lock.yml b/.github/workflows/objective-impact-report.lock.yml index fe1b991ab54..3a4623adb4e 100644 --- a/.github/workflows/objective-impact-report.lock.yml +++ b/.github/workflows/objective-impact-report.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8d45320ce38f441a165a41ac573fa73881dc43a8840a353356de18ff0ca06341","body_hash":"a66c7952cb6e7fc02028bae75e758df0112f7a54cefff838e2c5dcb28c7e481a","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["close_issue","create_issue","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["close_issue","create_issue","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -38,7 +38,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -478,6 +478,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -585,7 +586,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Save objective impact report dataset cache - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: objective-impact-report-cache-${{ github.run_id }} path: /tmp/gh-aw/agent/objective-impact-report diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index 82bb21421d0..c2ce585301d 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -502,6 +502,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2388,12 +2389,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: orghealthreport diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 239ad9d0a98..ea5729edc74 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -583,6 +583,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2501,12 +2502,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: pdfsummary diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index eaed74f31e7..bd190ba01e8 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -600,6 +600,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 9ceb0c30c70..a87b8a3bc6f 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -569,6 +569,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3261,12 +3262,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: poembot diff --git a/.github/workflows/ponytail-reviewer.lock.yml b/.github/workflows/ponytail-reviewer.lock.yml index 3fdf8f79201..1a367d0ee9d 100644 --- a/.github/workflows/ponytail-reviewer.lock.yml +++ b/.github/workflows/ponytail-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"27c79195ab7529356c5858163c42c5174c53a855b09849621cdccb4b89105c69","body_hash":"5bbf29c8bdec373cf68befed46bd04a57a9c8d86c26106c4cd55e5c23c42c7ff","strict":true,"agent_id":"codex","agent_model":"openai/gpt-5.6-terra","engine_versions":{"codex":"0.164.0"}} -# gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["DietrichGebert/ponytail/skills/ponytail-review@09c434ab73ca43761c5d8b0c5d341926c2fba710"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["DietrichGebert/ponytail/skills/ponytail-review@09c434ab73ca43761c5d8b0c5d341926c2fba710"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -45,7 +45,7 @@ # - OPENAI_API_KEY # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -605,6 +605,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -710,7 +711,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} path: /tmp/gh-aw/agent diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index b0e89bc1191..4a8841a94e8 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -502,6 +502,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2481,12 +2482,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: portfolioanalyst diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index 82b456939dd..9a8082b8664 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8009c5eec04c98445dcba7823a4fc49e14dbb2267e7122e00a78162fd2e7d673","body_hash":"4ca40ffb96ba078c06fd9b549349765c4cb72a760b472ba13a7af66980efe78a","strict":true,"agent_id":"copilot","agent_model":"copilot/gpt-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -43,7 +43,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -567,6 +567,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -689,7 +690,7 @@ jobs: await main(); # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} path: /tmp/gh-aw/agent diff --git a/.github/workflows/pr-description-caveman.lock.yml b/.github/workflows/pr-description-caveman.lock.yml index 4037bc490d1..1e6b9feccec 100644 --- a/.github/workflows/pr-description-caveman.lock.yml +++ b/.github/workflows/pr-description-caveman.lock.yml @@ -515,6 +515,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index b90cf511050..884a8752058 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -558,6 +558,7 @@ jobs: actions: read contents: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/pr-sous-chef.lock.yml b/.github/workflows/pr-sous-chef.lock.yml index e88e4e1ef6f..681f2b20bde 100644 --- a/.github/workflows/pr-sous-chef.lock.yml +++ b/.github/workflows/pr-sous-chef.lock.yml @@ -495,6 +495,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/pr-triage-agent.lock.yml b/.github/workflows/pr-triage-agent.lock.yml index a7cfb06c8ae..32b45633441 100644 --- a/.github/workflows/pr-triage-agent.lock.yml +++ b/.github/workflows/pr-triage-agent.lock.yml @@ -500,6 +500,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index d30a29d7e5f..7b5565ac633 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"0cb9aac0e9f5f5dfe99acd1bb8414dc4a002b0a2cd49fb33a12404e3c24253c9","body_hash":"f6837c0e4406a81aeaa7aaa79a31beeffebd4063938e58f9a1a2e9005c54c125","strict":true,"agent_id":"claude","engine_versions":{"claude":"2.1.310"}} -# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"6d4fd22b20465ccc0f7354476588e8df7c9ca0e0","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"astral-sh/setup-uv","sha":"07a047e608db84b3d8c06cd9a7c7dcc9c355c18e","version":"v10.3.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","list_branches","list_commits","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["create_discussion","noop","report_incomplete","report_missing_data","report_missing_tool","upload_asset"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"6d4fd22b20465ccc0f7354476588e8df7c9ca0e0","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"astral-sh/setup-uv","sha":"07a047e608db84b3d8c06cd9a7c7dcc9c355c18e","version":"v10.3.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","list_branches","list_commits","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["create_discussion","noop","report_incomplete","report_missing_data","report_missing_tool","upload_asset"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -52,7 +52,6 @@ # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -512,6 +511,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -714,7 +714,7 @@ jobs: # Cache configuration from frontmatter processed below - name: Save prompt clustering data to cache - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: prompt-clustering-cache-${{ github.run_id }} path: /tmp/gh-aw/agent/prompt-cache @@ -2470,12 +2470,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: promptclusteringanalysis diff --git a/.github/workflows/purelock.lock.yml b/.github/workflows/purelock.lock.yml index 2d424c87b75..5748cede9ea 100644 --- a/.github/workflows/purelock.lock.yml +++ b/.github/workflows/purelock.lock.yml @@ -535,6 +535,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -3162,12 +3163,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: purelock diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 261bd57e5db..a44b10ab5d0 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -504,6 +504,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2432,12 +2433,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: pythondatacharts diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 08a321d72ba..ee70e9dcb6a 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -611,6 +611,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/refactoring-cadence.lock.yml b/.github/workflows/refactoring-cadence.lock.yml index 7ba716ab02d..f77c82d882e 100644 --- a/.github/workflows/refactoring-cadence.lock.yml +++ b/.github/workflows/refactoring-cadence.lock.yml @@ -498,6 +498,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2326,12 +2327,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: refactoringcadence diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 7213186f91e..fda3d4eeeed 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -563,6 +563,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index d12c7f5cb57..5a1fe030205 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -500,6 +500,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2731,12 +2732,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: repoauditanalyzer diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 00f0bd39096..e64f58889ce 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -498,6 +498,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 03361e9850b..f3673e811eb 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -500,6 +500,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2289,12 +2290,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: repositoryqualityimprover diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 81065b13bcc..54d2746e730 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -483,6 +483,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index a5647e99962..8e9edf13488 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -499,6 +499,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2411,12 +2412,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: safeoutputhealth diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index 96d642f234c..c77b75d5a59 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -494,6 +494,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2279,12 +2280,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: schemaconsistencychecker diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index d0be63a8765..3947061395c 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -483,6 +483,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 8af90d5479c..6d63c702d17 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -594,6 +594,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2598,12 +2599,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: scout diff --git a/.github/workflows/security-compliance.lock.yml b/.github/workflows/security-compliance.lock.yml index 5ff062b9d69..5b0ab9e560b 100644 --- a/.github/workflows/security-compliance.lock.yml +++ b/.github/workflows/security-compliance.lock.yml @@ -513,6 +513,7 @@ jobs: permissions: contents: read security-events: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index ee9990b574a..13e95cb2bac 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -565,6 +565,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index b020654f5f6..9e900d06781 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -483,6 +483,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/sergo.lock.yml b/.github/workflows/sergo.lock.yml index 6077199b184..6f24939f03c 100644 --- a/.github/workflows/sergo.lock.yml +++ b/.github/workflows/sergo.lock.yml @@ -507,6 +507,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/sighthound-security-scan.lock.yml b/.github/workflows/sighthound-security-scan.lock.yml index 813ab33481e..368d38a9e76 100644 --- a/.github/workflows/sighthound-security-scan.lock.yml +++ b/.github/workflows/sighthound-security-scan.lock.yml @@ -471,6 +471,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/skillet.lock.yml b/.github/workflows/skillet.lock.yml index 64415fadc1c..0cb92512156 100644 --- a/.github/workflows/skillet.lock.yml +++ b/.github/workflows/skillet.lock.yml @@ -579,6 +579,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 5503258fce9..4b31c8482e7 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -544,6 +544,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}-${{ inputs.focus || github.run_id }}" queue: max @@ -2603,12 +2604,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: slidedeckmaintainer diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml index 875d077cbfa..e3e822def07 100644 --- a/.github/workflows/smoke-agent-all-merged.lock.yml +++ b/.github/workflows/smoke-agent-all-merged.lock.yml @@ -560,6 +560,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml index 798fa58acdf..ece68cbfa91 100644 --- a/.github/workflows/smoke-agent-all-none.lock.yml +++ b/.github/workflows/smoke-agent-all-none.lock.yml @@ -558,6 +558,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml index b9ced109df2..f31b8cfc86d 100644 --- a/.github/workflows/smoke-agent-public-approved.lock.yml +++ b/.github/workflows/smoke-agent-public-approved.lock.yml @@ -563,6 +563,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml index cfe0d2ee46e..43d29524bb0 100644 --- a/.github/workflows/smoke-agent-public-none.lock.yml +++ b/.github/workflows/smoke-agent-public-none.lock.yml @@ -558,6 +558,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml index fb2d96b7307..3fc57f633b8 100644 --- a/.github/workflows/smoke-agent-scoped-approved.lock.yml +++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml @@ -564,6 +564,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-aider.lock.yml b/.github/workflows/smoke-aider.lock.yml index d46f4ac1b83..541c9036355 100644 --- a/.github/workflows/smoke-aider.lock.yml +++ b/.github/workflows/smoke-aider.lock.yml @@ -558,6 +558,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-builtin-ledgers.lock.yml b/.github/workflows/smoke-builtin-ledgers.lock.yml index 04f49d7c027..eb97cc0c03c 100644 --- a/.github/workflows/smoke-builtin-ledgers.lock.yml +++ b/.github/workflows/smoke-builtin-ledgers.lock.yml @@ -471,6 +471,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml index a1c66b21c2c..621604901b3 100644 --- a/.github/workflows/smoke-call-workflow.lock.yml +++ b/.github/workflows/smoke-call-workflow.lock.yml @@ -559,6 +559,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml index ceef19c99b0..67b5aa81993 100644 --- a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml +++ b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml @@ -566,6 +566,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-claude-dynamic.lock.yml b/.github/workflows/smoke-claude-dynamic.lock.yml index fd4b13325b5..32be450e4d2 100644 --- a/.github/workflows/smoke-claude-dynamic.lock.yml +++ b/.github/workflows/smoke-claude-dynamic.lock.yml @@ -465,6 +465,7 @@ jobs: # Permissions for the agent job (workflow permissions default to none). permissions: contents: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-claude-on-copilot.lock.yml b/.github/workflows/smoke-claude-on-copilot.lock.yml index 7cc7e87e386..78fca6e7253 100644 --- a/.github/workflows/smoke-claude-on-copilot.lock.yml +++ b/.github/workflows/smoke-claude-on-copilot.lock.yml @@ -539,6 +539,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-claude-routed.lock.yml b/.github/workflows/smoke-claude-routed.lock.yml index 82c956151b8..1a283a8d387 100644 --- a/.github/workflows/smoke-claude-routed.lock.yml +++ b/.github/workflows/smoke-claude-routed.lock.yml @@ -531,6 +531,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 46141cdcc89..24aee0895d5 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -600,6 +600,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3376,12 +3377,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokeclaude diff --git a/.github/workflows/smoke-codex-routed.lock.yml b/.github/workflows/smoke-codex-routed.lock.yml index c9ccb785df6..f76507efd6d 100644 --- a/.github/workflows/smoke-codex-routed.lock.yml +++ b/.github/workflows/smoke-codex-routed.lock.yml @@ -511,6 +511,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 42028de3a02..225c62efff7 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -599,6 +599,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3200,12 +3201,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokecodex diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index 200c2bf101e..76f06f426cd 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -660,6 +660,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -4493,12 +4494,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokecopilotaoaiapikey diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index aa3d47e0340..b217c3f5f0e 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -666,6 +666,7 @@ jobs: id-token: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -4522,12 +4523,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokecopilotaoaientra diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index 16dd20612ea..a52cf92ab36 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -597,6 +597,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3732,12 +3733,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokecopilotarm diff --git a/.github/workflows/smoke-copilot-auto.lock.yml b/.github/workflows/smoke-copilot-auto.lock.yml index 9afdfc0a977..5095945037c 100644 --- a/.github/workflows/smoke-copilot-auto.lock.yml +++ b/.github/workflows/smoke-copilot-auto.lock.yml @@ -541,6 +541,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml b/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml index 725dcb0ce1c..6d8bbe396dc 100644 --- a/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml +++ b/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml @@ -537,6 +537,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-copilot-mai.lock.yml b/.github/workflows/smoke-copilot-mai.lock.yml index 471ac123096..53f31d46b33 100644 --- a/.github/workflows/smoke-copilot-mai.lock.yml +++ b/.github/workflows/smoke-copilot-mai.lock.yml @@ -575,6 +575,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-copilot-routed-claude.lock.yml b/.github/workflows/smoke-copilot-routed-claude.lock.yml index 5600b8973a9..1922b997eff 100644 --- a/.github/workflows/smoke-copilot-routed-claude.lock.yml +++ b/.github/workflows/smoke-copilot-routed-claude.lock.yml @@ -549,6 +549,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-copilot-routed-steering.lock.yml b/.github/workflows/smoke-copilot-routed-steering.lock.yml index c265824977c..b87a0b45388 100644 --- a/.github/workflows/smoke-copilot-routed-steering.lock.yml +++ b/.github/workflows/smoke-copilot-routed-steering.lock.yml @@ -549,6 +549,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-copilot-routed.lock.yml b/.github/workflows/smoke-copilot-routed.lock.yml index f544ba46e4c..373a6277a55 100644 --- a/.github/workflows/smoke-copilot-routed.lock.yml +++ b/.github/workflows/smoke-copilot-routed.lock.yml @@ -532,6 +532,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml b/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml index 63ce0c42fc8..157ded8e150 100644 --- a/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml +++ b/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml @@ -548,6 +548,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-copilot-sdk-routed.lock.yml b/.github/workflows/smoke-copilot-sdk-routed.lock.yml index 1ba53632be7..ce5dedf6135 100644 --- a/.github/workflows/smoke-copilot-sdk-routed.lock.yml +++ b/.github/workflows/smoke-copilot-sdk-routed.lock.yml @@ -531,6 +531,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-copilot-sdk.lock.yml b/.github/workflows/smoke-copilot-sdk.lock.yml index 3528b588e05..9578de1196c 100644 --- a/.github/workflows/smoke-copilot-sdk.lock.yml +++ b/.github/workflows/smoke-copilot-sdk.lock.yml @@ -571,6 +571,7 @@ jobs: # Permissions for the agent job (workflow permissions default to none). permissions: contents: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-copilot-small.lock.yml b/.github/workflows/smoke-copilot-small.lock.yml index c4e04a3ce5b..d0267397f45 100644 --- a/.github/workflows/smoke-copilot-small.lock.yml +++ b/.github/workflows/smoke-copilot-small.lock.yml @@ -573,6 +573,7 @@ jobs: # Permissions for the agent job (workflow permissions default to none). permissions: contents: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-copilot-sub-agents.lock.yml b/.github/workflows/smoke-copilot-sub-agents.lock.yml index d2930a94d2a..3e92244cfda 100644 --- a/.github/workflows/smoke-copilot-sub-agents.lock.yml +++ b/.github/workflows/smoke-copilot-sub-agents.lock.yml @@ -520,6 +520,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index d2949e6618c..31019195bdf 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -670,6 +670,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -4508,12 +4509,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokecopilot diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 955c7de53fe..4ab7c49ab34 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -562,6 +562,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-crush.lock.yml b/.github/workflows/smoke-crush.lock.yml index 9d9f4d7d2be..a6a8ca9ba45 100644 --- a/.github/workflows/smoke-crush.lock.yml +++ b/.github/workflows/smoke-crush.lock.yml @@ -567,6 +567,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-cursor.lock.yml b/.github/workflows/smoke-cursor.lock.yml index 7964408f4b3..fa344d99ed7 100644 --- a/.github/workflows/smoke-cursor.lock.yml +++ b/.github/workflows/smoke-cursor.lock.yml @@ -573,6 +573,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-deepseek-harness.lock.yml b/.github/workflows/smoke-deepseek-harness.lock.yml index 091bf2b04f2..76772349c65 100644 --- a/.github/workflows/smoke-deepseek-harness.lock.yml +++ b/.github/workflows/smoke-deepseek-harness.lock.yml @@ -577,6 +577,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2638,12 +2639,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokedeepseekharness diff --git a/.github/workflows/smoke-drive.lock.yml b/.github/workflows/smoke-drive.lock.yml index 03ef2038080..8c8959675c6 100644 --- a/.github/workflows/smoke-drive.lock.yml +++ b/.github/workflows/smoke-drive.lock.yml @@ -570,6 +570,7 @@ jobs: id-token: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index fa2e850c16e..66ecf8e6989 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -627,6 +627,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3134,12 +3135,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokegemini diff --git a/.github/workflows/smoke-github-claude.lock.yml b/.github/workflows/smoke-github-claude.lock.yml index a3c5289ead3..07ed794113c 100644 --- a/.github/workflows/smoke-github-claude.lock.yml +++ b/.github/workflows/smoke-github-claude.lock.yml @@ -545,6 +545,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-goose.lock.yml b/.github/workflows/smoke-goose.lock.yml index 2043afa413e..08a6126dfef 100644 --- a/.github/workflows/smoke-goose.lock.yml +++ b/.github/workflows/smoke-goose.lock.yml @@ -576,6 +576,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2886,12 +2887,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokegoose diff --git a/.github/workflows/smoke-issues.lock.yml b/.github/workflows/smoke-issues.lock.yml index f4daf05663c..2c707be3f4b 100644 --- a/.github/workflows/smoke-issues.lock.yml +++ b/.github/workflows/smoke-issues.lock.yml @@ -499,6 +499,7 @@ jobs: permissions: actions: read contents: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-kiro.lock.yml b/.github/workflows/smoke-kiro.lock.yml index 2445aafeacb..77a0951b2f5 100644 --- a/.github/workflows/smoke-kiro.lock.yml +++ b/.github/workflows/smoke-kiro.lock.yml @@ -574,6 +574,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index a5893862eeb..9bfa7f7fe40 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -560,6 +560,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index 9c71b20fd74..131954118b6 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -585,6 +585,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2820,12 +2821,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokeopencode diff --git a/.github/workflows/smoke-otel-backends.lock.yml b/.github/workflows/smoke-otel-backends.lock.yml index b1cb31ddf00..651632ac0ab 100644 --- a/.github/workflows/smoke-otel-backends.lock.yml +++ b/.github/workflows/smoke-otel-backends.lock.yml @@ -595,6 +595,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-pi-routed-claude.lock.yml b/.github/workflows/smoke-pi-routed-claude.lock.yml index ead4492f677..980a6d44aea 100644 --- a/.github/workflows/smoke-pi-routed-claude.lock.yml +++ b/.github/workflows/smoke-pi-routed-claude.lock.yml @@ -544,6 +544,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-pi-routed.lock.yml b/.github/workflows/smoke-pi-routed.lock.yml index 9d8d1659993..beb387d7a7f 100644 --- a/.github/workflows/smoke-pi-routed.lock.yml +++ b/.github/workflows/smoke-pi-routed.lock.yml @@ -547,6 +547,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}-${{ github.run_id }}" queue: max diff --git a/.github/workflows/smoke-pi-sub-agents.lock.yml b/.github/workflows/smoke-pi-sub-agents.lock.yml index d0cf0e23de8..9f815b49c0c 100644 --- a/.github/workflows/smoke-pi-sub-agents.lock.yml +++ b/.github/workflows/smoke-pi-sub-agents.lock.yml @@ -464,6 +464,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index 5524ad420a4..39893492ed6 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -574,6 +574,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2534,12 +2535,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokepi diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index 06dee096067..352bee690f8 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -634,6 +634,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-pydantic.lock.yml b/.github/workflows/smoke-pydantic.lock.yml index 7df992e8174..273482749c5 100644 --- a/.github/workflows/smoke-pydantic.lock.yml +++ b/.github/workflows/smoke-pydantic.lock.yml @@ -559,6 +559,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-repo-memory-ledger.lock.yml b/.github/workflows/smoke-repo-memory-ledger.lock.yml index aea95dc1cb7..bb2a6015395 100644 --- a/.github/workflows/smoke-repo-memory-ledger.lock.yml +++ b/.github/workflows/smoke-repo-memory-ledger.lock.yml @@ -475,6 +475,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-security-alerts.lock.yml b/.github/workflows/smoke-security-alerts.lock.yml index 229ad1cf28e..675d60a4a4a 100644 --- a/.github/workflows/smoke-security-alerts.lock.yml +++ b/.github/workflows/smoke-security-alerts.lock.yml @@ -500,6 +500,7 @@ jobs: copilot-requests: write security-events: read vulnerability-alerts: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml index d8d76bbeabb..97772a09d67 100644 --- a/.github/workflows/smoke-service-ports.lock.yml +++ b/.github/workflows/smoke-service-ports.lock.yml @@ -548,6 +548,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 76d09da962e..8e1d334f56b 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -598,6 +598,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index 5bfe62cdd02..6c8d6170cd3 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -560,6 +560,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index 42b743860c3..014eac7f8b3 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -571,6 +571,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -2726,12 +2727,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokeupdatecrossrepopr diff --git a/.github/workflows/smoke-work-queue.lock.yml b/.github/workflows/smoke-work-queue.lock.yml index 5c43222765f..247bdfb1cc0 100644 --- a/.github/workflows/smoke-work-queue.lock.yml +++ b/.github/workflows/smoke-work-queue.lock.yml @@ -485,6 +485,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml index fc119541a86..e9f9a98f1b8 100644 --- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml +++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml @@ -581,6 +581,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-smoke-workflow-call-with-inputs" queue: max diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml index d11b242952d..4f254315607 100644 --- a/.github/workflows/smoke-workflow-call.lock.yml +++ b/.github/workflows/smoke-workflow-call.lock.yml @@ -573,6 +573,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-smoke-workflow-call" queue: max diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index bc825009b65..1e1b73af74c 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -535,6 +535,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2901,12 +2902,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: specenforcer diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index b5130f60ec5..86eae43d448 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -520,6 +520,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -2483,12 +2484,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: specextractor diff --git a/.github/workflows/spec-librarian.lock.yml b/.github/workflows/spec-librarian.lock.yml index 86f84518f2a..c2c98df35fa 100644 --- a/.github/workflows/spec-librarian.lock.yml +++ b/.github/workflows/spec-librarian.lock.yml @@ -499,6 +499,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/squad-game-planner.lock.yml b/.github/workflows/squad-game-planner.lock.yml index 19dbfcb0091..241b439c1b2 100644 --- a/.github/workflows/squad-game-planner.lock.yml +++ b/.github/workflows/squad-game-planner.lock.yml @@ -515,6 +515,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/squad-implement-worker.lock.yml b/.github/workflows/squad-implement-worker.lock.yml index 031485fe7d3..780c2705a6d 100644 --- a/.github/workflows/squad-implement-worker.lock.yml +++ b/.github/workflows/squad-implement-worker.lock.yml @@ -565,6 +565,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/squad-plan.lock.yml b/.github/workflows/squad-plan.lock.yml index a77bca11911..b4f2d65261c 100644 --- a/.github/workflows/squad-plan.lock.yml +++ b/.github/workflows/squad-plan.lock.yml @@ -582,6 +582,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/squad.lock.yml b/.github/workflows/squad.lock.yml index 9e9de0714bd..e1fa83c0dc2 100644 --- a/.github/workflows/squad.lock.yml +++ b/.github/workflows/squad.lock.yml @@ -609,6 +609,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/stale-pr-cleanup.lock.yml b/.github/workflows/stale-pr-cleanup.lock.yml index 1dec614b2cc..d871a620de4 100644 --- a/.github/workflows/stale-pr-cleanup.lock.yml +++ b/.github/workflows/stale-pr-cleanup.lock.yml @@ -474,6 +474,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index 6eac288a213..a7681384a90 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -513,6 +513,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}-${{ inputs.organization || github.run_id }}" queue: max @@ -2910,12 +2911,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: stalerepoidentifier diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index f0d090aa941..b39a1c273ff 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -504,6 +504,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2550,12 +2551,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: staticanalysisreport diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index d82e94e808c..f3468c2dd9d 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -491,6 +491,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -2317,12 +2318,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: stepnamealignment diff --git a/.github/workflows/sub-issue-closer.lock.yml b/.github/workflows/sub-issue-closer.lock.yml index 676e67c8275..6a47e3bb703 100644 --- a/.github/workflows/sub-issue-closer.lock.yml +++ b/.github/workflows/sub-issue-closer.lock.yml @@ -472,6 +472,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 825ab0b6faf..cf1f9f08e2c 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -493,6 +493,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2358,12 +2359,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: superlinter diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 90ddbb9be43..da98aad777a 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -541,6 +541,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3078,12 +3079,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: technicaldocwriter diff --git a/.github/workflows/terminal-stylist.lock.yml b/.github/workflows/terminal-stylist.lock.yml index 472cd79478a..432a66efe83 100644 --- a/.github/workflows/terminal-stylist.lock.yml +++ b/.github/workflows/terminal-stylist.lock.yml @@ -481,6 +481,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index 0ce42809613..485b3f62c79 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"74eeb48d2038a4e7ce9550248b27283d32f276fcf116bf4cfaf3d43e89419838","body_hash":"31ab401e5b7ee4f5eb709116a6c78289f7e52bcd112a17e03ebaff87d069883a","strict":true,"agent_id":"copilot","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"copilot":"1.0.103"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -40,7 +40,7 @@ # - GITHUB_TOKEN # # Custom actions used: -# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -604,6 +604,7 @@ jobs: contents: read copilot-requests: write pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -717,7 +718,7 @@ jobs: # Cache configuration from frontmatter processed below - name: Cache (pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }}) - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }} path: /tmp/gh-aw/agent diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 02795dc907c..e596378d12d 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -570,6 +570,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index 3e90003fae2..a1f21bda092 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -536,6 +536,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index cc5ccf0a172..85ac4a0969e 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -523,6 +523,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/uk-ai-operational-resilience.lock.yml b/.github/workflows/uk-ai-operational-resilience.lock.yml index e82c56c2daa..53e0b860274 100644 --- a/.github/workflows/uk-ai-operational-resilience.lock.yml +++ b/.github/workflows/uk-ai-operational-resilience.lock.yml @@ -495,6 +495,7 @@ jobs: issues: read pull-requests: read security-events: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 0844ab2067f..cf30080e6fd 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -582,6 +582,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2969,12 +2970,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: unbloatdocs diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index f198e696190..8e8c1423cdf 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -535,6 +535,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index d3a3dd3bed6..8085ada4adb 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -480,6 +480,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/visual-regression-checker.lock.yml b/.github/workflows/visual-regression-checker.lock.yml index 2088b140bd8..1494d863653 100644 --- a/.github/workflows/visual-regression-checker.lock.yml +++ b/.github/workflows/visual-regression-checker.lock.yml @@ -511,6 +511,7 @@ jobs: permissions: contents: read pull-requests: read + cache-mode: read timeout-minutes: 15 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index 2371894dfb8..1e03a0d316b 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -576,6 +576,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index 8f3d19503d8..dfd49e92cec 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -509,6 +509,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 31a0966097f..dae82d80528 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -493,6 +493,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2285,12 +2286,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: weeklyissuesummary diff --git a/.github/workflows/weekly-network-domains-audit.lock.yml b/.github/workflows/weekly-network-domains-audit.lock.yml index 17b2ebd1b79..a04f2d748d8 100644 --- a/.github/workflows/weekly-network-domains-audit.lock.yml +++ b/.github/workflows/weekly-network-domains-audit.lock.yml @@ -473,6 +473,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max @@ -2230,12 +2231,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: weeklynetworkdomainsaudit diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index 3a16cedcd62..6ac92f7345c 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -500,6 +500,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-pi-${{ github.workflow }}" queue: max diff --git a/.github/workflows/windows-grower.lock.yml b/.github/workflows/windows-grower.lock.yml index 52d0d344929..2d2ca3c035b 100644 --- a/.github/workflows/windows-grower.lock.yml +++ b/.github/workflows/windows-grower.lock.yml @@ -499,6 +499,7 @@ jobs: contents: read copilot-requests: write issues: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2351,12 +2352,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: windowsgrower diff --git a/.github/workflows/windows.lock.yml b/.github/workflows/windows.lock.yml index e3091b86005..f9d78d8d256 100644 --- a/.github/workflows/windows.lock.yml +++ b/.github/workflows/windows.lock.yml @@ -596,6 +596,7 @@ jobs: permissions: contents: read copilot-requests: write + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml index 22652310acd..287570ad290 100644 --- a/.github/workflows/workflow-generator.lock.yml +++ b/.github/workflows/workflow-generator.lock.yml @@ -534,6 +534,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index 6c8d381ae52..94d87103581 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -495,6 +495,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index 1b7b660eebd..03c2ab5f6e1 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -497,6 +497,7 @@ jobs: copilot-requests: write issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-codex-${{ github.workflow }}" queue: max @@ -2359,12 +2360,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: workflownormalizer diff --git a/.github/workflows/workflow-skill-extractor.lock.yml b/.github/workflows/workflow-skill-extractor.lock.yml index 848ccf8219b..147b3592b54 100644 --- a/.github/workflows/workflow-skill-extractor.lock.yml +++ b/.github/workflows/workflow-skill-extractor.lock.yml @@ -480,6 +480,7 @@ jobs: contents: read issues: read pull-requests: read + cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max diff --git a/docs/src/content/docs/reference/cache-memory.md b/docs/src/content/docs/reference/cache-memory.md index b5fbb77c621..240898173cd 100644 --- a/docs/src/content/docs/reference/cache-memory.md +++ b/docs/src/content/docs/reference/cache-memory.md @@ -158,7 +158,7 @@ The compiler generates git-backed branching steps around the agent. Before the a | `unapproved` | `unapproved` + `approved` + `merged` | `none` | | `none` | all levels | — | -This prevents a lower-integrity agent from poisoning data that a higher-integrity run would later read. +These compiler-generated namespaces separate lower- and higher-integrity cache-memory lineages. They do not authenticate cache contents or protect against another cache writer deliberately using the same namespace. > [!NOTE] > Existing caches will get a cache miss on first run after upgrading to a version that includes this feature — intentional, as legacy data has no integrity provenance. @@ -167,6 +167,20 @@ This prevents a lower-integrity agent from poisoning data that a higher-integrit Do not store sensitive data in cache memory. It follows repository permissions, and with [threat detection](/gh-aw/reference/threat-detection/) enabled, caches save only after validation succeeds (`restore → modify → upload artifact → validate → save`). +### Cache access boundaries + +On GitHub.com, detection-enabled workflows give the agent job `cache-mode: read`. This restricts its scoped cache token, including dependency caches and custom cache actions in that job; selecting a restore-only action alone would not restrict other writers. Frontmatter `cache:` entries also use `actions/cache/restore` in this mode. This applies to every trigger, including mixed-trigger workflows and `repository_dispatch`. + +Writable cache-memory entries are published by the separate `update_cache_memory` job with `cache-mode: write-only`. The job requires successful agent and detection jobs and `needs.detection.outputs.detection_success == 'true'`, then applies configured memory validation before saving. Detection warnings, rejected verdicts, missing acceptance outputs, failed jobs, and a detection job skipped by its runtime condition block persistence even when `continue-on-error` permits other safe outputs. The detector's internal no-output short-circuit still reports acceptance; it is not evidence that every cached file was scanned. + +The publisher's explicit write capability deliberately overrides GitHub's read-only cache default for triggers such as `pull_request_target`, `issue_comment`, and `workflow_run`. It authorizes this bounded publication path, not arbitrary agent cache writes, and does not authenticate the uploaded artifact or cached content. Treat memory as data, not executable code. A successful detector verdict is not a provenance guarantee. + +Dry-run compilation keeps cache access read-only and omits the cache-memory publisher. `restore-only: true` entries are never published. GHES compatibility mode omits `cache-mode` because support depends on the deployed server; restore-only agent actions and the publisher's validation gates remain, but the compiler does not establish a scoped-token cache boundary there. + +Without detection, existing same-job cache-memory behavior is unchanged: cache saves depend on the platform's trigger-based defaults. GitHub.com defaults low-trust default-branch triggers to read-only, while `push`, `workflow_dispatch`, and `repository_dispatch` can write by default. Custom jobs have their own cache-access boundary. The [`cache-poisoning` linter](/gh-aw/reference/workflow-linters/) warns about effective explicit write overrides on `pull_request_target`, `issue_comment`, and `workflow_run`; it does not prove a dedicated publisher safe or validate arbitrary shell cache operations. + +Cache contents are unsigned and unverified. Cache-memory key isolation does not cover ordinary dependency-cache keys, third-party cache writers, or persistent caches on reused runners. See GitHub's [cache access reference](https://docs.github.com/en/actions/reference/workflows-and-actions/dependency-caching#controlling-cache-access-with-cache-mode). + ## Examples See [Grumpy Code Reviewer](https://github.com/github/gh-aw/blob/main/.github/workflows/grumpy-reviewer.md) for tracking PR review history. diff --git a/docs/src/content/docs/reference/workflow-linters.md b/docs/src/content/docs/reference/workflow-linters.md index 373a05d7f0e..b094437b23e 100644 --- a/docs/src/content/docs/reference/workflow-linters.md +++ b/docs/src/content/docs/reference/workflow-linters.md @@ -42,7 +42,7 @@ The compiler threat IDs reference the [Compiler Threat Detection Specification]( | `grader-file-io` | — | AW | Custom `graders..script` JavaScript ASTs do not access filesystem/host capabilities or load modules. Requires the optional native JavaScript parser; missing parser configuration produces a visible coverage warning. | | `grader-shell-file-write` | — | AW | Repository-owned `graders.operational-value.run` Bash ASTs avoid detected file writes and unchecked shell execution. Loads confined evaluator source without executing it; no optional JavaScript parser required. | | `artipacked` | — | AW, Actions | `actions/checkout` explicitly disables credential persistence. Omitted, enabled, or dynamic persistence produces a review warning; later authenticated Git operations may require it. During compilation only, exact compiler-generated blocks can exempt PR checkouts in `safe_outputs` whose trusted handlers require retained credentials, or agent checkouts immediately followed by compiler-owned credential cleanup and verification when their paths are statically within discovery coverage (at most 13 directory components beneath the workspace). Deeper or unknown paths retain warnings. Authored steps and standalone `gh aw lint` checks remain unchanged. | -| `cache-poisoning` | — | AW, Actions | Release-event and tag-push workflows avoid cache restoration through `actions/cache`, `actions/cache/restore`, `actions/setup-go`, and `actions/setup-node`. Save-only and lookup-only actions are exempt. | +| `cache-poisoning` | — | AW, Actions | Release-event and tag-push workflows avoid cache restoration through `actions/cache`, `actions/cache/restore`, `actions/setup-go`, and `actions/setup-node`; save-only and lookup-only actions are exempt from the restore check. Explicit effective `cache-mode: write` or `write-only` on `pull_request_target`, `issue_comment`, or `workflow_run` warns about overriding the read-only default, including reusable-workflow callers. A job-level `read` or `none` overrides an inherited workflow write mode. Job names do not establish publisher trust. | | `excessive-permissions` | `CTR-001` | Actions | Workflow-wide write grants are moved to the jobs that require them. Job-level writes and AW root grants are not workflow-wide permissions. | | `obfuscation` | — | AW, Actions | Runner-interpolated fields avoid literal-only string expressions such as `${{ '' }}`. Ordinary expressions, fallback strings, and boolean conditions are unaffected. | | `bash-case-pattern` | — | AW, Actions | Bash `case` patterns inside `$(...)` use balanced `(pattern)` syntax for Bash 3.2 compatibility. Intentional variable glob matching remains unquoted. Reports warnings without executing scripts or requiring ShellCheck. | diff --git a/pkg/cli/lint_cache_mode_test.go b/pkg/cli/lint_cache_mode_test.go new file mode 100644 index 00000000000..ab74e3411c6 --- /dev/null +++ b/pkg/cli/lint_cache_mode_test.go @@ -0,0 +1,55 @@ +//go:build !integration + +package cli + +import ( + "bytes" + "encoding/json" + "os" + "path/filepath" + "testing" + + workflowlint "github.com/github/gh-aw/pkg/workflow/lint" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestCacheWriteOverrideCLI(t *testing.T) { + for _, test := range []struct { + name, trigger, root, job, want string + }{ + {"low trust job", "issue_comment", "", "write-only", "jobs.check.cache-mode"}, + {"inherited workflow", "workflow_run", "write", "", "cache-mode"}, + {"capped job", "pull_request_target", "write", "read", ""}, + {"dispatch default", "repository_dispatch", "", "write", ""}, + } { + t.Run(test.name, func(t *testing.T) { + source := "on: " + test.trigger + "\n" + if test.root != "" { + source += "cache-mode: " + test.root + "\n" + } + source += "jobs:\n check:\n runs-on: ubuntu-latest\n steps: [{run: echo data}]\n" + if test.job != "" { + source += " cache-mode: " + test.job + "\n" + } + file := filepath.Join(t.TempDir(), "cache.yml") + require.NoError(t, os.WriteFile(file, []byte(source), 0600)) + cmd := NewLintCommand() + var output bytes.Buffer + cmd.SetOut(&output) + cmd.SetErr(&output) + cmd.SetArgs([]string{"--rules=cache-poisoning", "--json", file}) + require.NoError(t, cmd.Execute()) + var diagnostics []workflowLintDiagnostic + require.NoError(t, json.NewDecoder(&output).Decode(&diagnostics)) + if test.want == "" { + assert.Empty(t, diagnostics) + } else { + require.Len(t, diagnostics, 1) + assert.Equal(t, "cache-poisoning", diagnostics[0].RuleID) + assert.Equal(t, workflowlint.Warning, diagnostics[0].Severity) + assert.Equal(t, test.want, diagnostics[0].Path) + } + }) + } +} diff --git a/pkg/workflow/actions/lower.go b/pkg/workflow/actions/lower.go index ba359665e3e..063aebd97dd 100644 --- a/pkg/workflow/actions/lower.go +++ b/pkg/workflow/actions/lower.go @@ -124,6 +124,7 @@ func nativeJobFields(job *Job) (map[string]any, error) { fields := make(map[string]any) for key, value := range map[string]any{ "permissions": job.Permissions, "defaults": optionalMap(job.Defaults), + "cache-mode": optionalString(job.CacheMode), "concurrency": job.Concurrency, "environment": job.Environment, "strategy": optionalMap(job.Strategy), "container": job.Container, "services": optionalMap(job.Services), "uses": optionalString(job.Uses), diff --git a/pkg/workflow/actions/parse.go b/pkg/workflow/actions/parse.go index b87e126b57d..66bc3819630 100644 --- a/pkg/workflow/actions/parse.go +++ b/pkg/workflow/actions/parse.go @@ -33,6 +33,7 @@ type jobYAML struct { Steps []map[string]any `yaml:"steps"` Outputs map[string]any `yaml:"outputs"` Permissions any `yaml:"permissions"` + CacheMode string `yaml:"cache-mode"` Defaults map[string]any `yaml:"defaults"` Concurrency any `yaml:"concurrency"` Environment any `yaml:"environment"` @@ -104,6 +105,7 @@ func parseJob(id JobID, source *jobYAML) (*Job, error) { job := &Job{ ID: id, Name: source.Name, RunsOn: source.RunsOn, Permissions: source.Permissions, Defaults: source.Defaults, + CacheMode: source.CacheMode, Concurrency: source.Concurrency, Environment: source.Environment, Strategy: source.Strategy, Container: source.Container, Services: source.Services, Uses: source.Uses, diff --git a/pkg/workflow/actions/parse_test.go b/pkg/workflow/actions/parse_test.go index da652591861..5bbb9bf5ff5 100644 --- a/pkg/workflow/actions/parse_test.go +++ b/pkg/workflow/actions/parse_test.go @@ -3,6 +3,7 @@ package actions import ( "testing" + "github.com/goccy/go-yaml" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -93,6 +94,37 @@ func TestParseRejectsInvalidNativeYAML(t *testing.T) { } } +func TestParseJobCacheModes(t *testing.T) { + for _, mode := range []string{"read", "write", "write-only", "none"} { + t.Run(mode, func(t *testing.T) { + source := "cache-mode: read\non: issue_comment\njobs:\n runner:\n runs-on: ubuntu-latest\n cache-mode: " + + mode + "\n steps: [{run: echo data}]\n call:\n uses: ./.github/workflows/worker.yml\n cache-mode: " + mode + "\n" + input, err := Parse([]byte(source)) + require.NoError(t, err) + for _, job := range input.Jobs { + assert.Equal(t, mode, job.CacheMode) + } + fields, err := Lower(input) + require.NoError(t, err) + content, err := yaml.Marshal(fields) + require.NoError(t, err) + var lowered map[string]any + require.NoError(t, yaml.Unmarshal(content, &lowered)) + jobs := lowered["jobs"].(map[string]any) + for _, id := range []string{"runner", "call"} { + assert.Equal(t, mode, jobs[id].(map[string]any)["cache-mode"]) + } + input.Jobs[0].CacheMode = "none" + emitted, err := Emit(input) + require.NoError(t, err) + reparsed, err := Parse([]byte(emitted)) + require.NoError(t, err) + assert.Equal(t, input.Jobs, reparsed.Jobs) + assert.Equal(t, input.CacheMode, reparsed.CacheMode) + }) + } +} + func TestParseMultilineAuthoredConditions(t *testing.T) { condition := "contains(github.event.comment.body, '/q\n') &&\n github.event_name == 'issue_comment'" source := "jobs:\n call:\n uses: ./.github/workflows/worker.yml\n if: " + diff --git a/pkg/workflow/actions/workflow.go b/pkg/workflow/actions/workflow.go index 2a9ffc96229..a2b4a68c3df 100644 --- a/pkg/workflow/actions/workflow.go +++ b/pkg/workflow/actions/workflow.go @@ -28,6 +28,7 @@ type Job struct { Outputs map[OutputName]Expression Permissions any + CacheMode string Defaults map[string]any Concurrency any Environment any diff --git a/pkg/workflow/actions_ast.go b/pkg/workflow/actions_ast.go index 386dc44e919..f26fb726dfd 100644 --- a/pkg/workflow/actions_ast.go +++ b/pkg/workflow/actions_ast.go @@ -75,7 +75,7 @@ func jobToActions(original *Job) (*actions.Job, error) { name := original.Name job := &actions.Job{ ID: actions.JobID(name), Outputs: make(map[actions.OutputName]actions.Expression), - Uses: original.Uses, + Uses: original.Uses, CacheMode: original.CacheMode, } if original.RunsOn != "" { job.RunsOn = original.RunsOn @@ -161,6 +161,7 @@ func copyEnclosingJobSettings(job *actions.Job, original *Job, typed *actions.Jo func hasActionsExecutionSettings(job *actions.Job) bool { return job.Name != "" || job.RunsOn != nil || job.Permissions != nil || job.Defaults != nil || + job.CacheMode != "" || job.Concurrency != nil || job.Environment != nil || job.Strategy != nil || job.Container != nil || job.Services != nil || job.TimeoutMinutes != 0 || job.TimeoutMinutesExpression != nil || job.ContinueOnError != nil || job.Uses != "" || len(job.With) > 0 || len(job.Secrets) > 0 || job.SecretsInherit || len(job.CallOutputs) > 0 diff --git a/pkg/workflow/cache_access_test.go b/pkg/workflow/cache_access_test.go new file mode 100644 index 00000000000..6a99aef6dbf --- /dev/null +++ b/pkg/workflow/cache_access_test.go @@ -0,0 +1,169 @@ +//go:build !integration + +package workflow + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/github/gh-aw/pkg/workflow/actions" + "github.com/goccy/go-yaml" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestCompiledCacheAccessBoundaries(t *testing.T) { + for _, trigger := range []string{ + "pull_request_target", + "issue_comment", + "{workflow_run: {workflows: [CI], branches: [main]}}", + "{push: {}, issue_comment: {}}", + "{repository_dispatch: {types: [refresh]}}", + "push", + "workflow_dispatch", + } { + for _, detection := range []string{"true", "false", `"${{ vars.DETECT == 'true' }}"`} { + t.Run(trigger+"/"+detection, func(t *testing.T) { + compiled, content := compileCacheAccessFixture(t, trigger, detection, false, false, false) + assert.NotContains(t, compiled, "cache-mode", "do not impose a workflow-wide cap on the publisher") + jobs := compiled["jobs"].(map[string]any) + agent := jobs["agent"].(map[string]any) + agentSteps := fmt.Sprint(agent["steps"]) + assert.NotContains(t, jobs["custom"].(map[string]any), "cache-mode", "authored jobs retain their own trust boundary") + if detection == "false" { + assert.NotContains(t, agent, "cache-mode", "preserve same-job cache-memory writes without detection") + assert.Contains(t, agentSteps, "actions/cache@") + assert.NotContains(t, jobs, "update_cache_memory") + return + } + assert.Equal(t, "read", agent["cache-mode"]) + assert.NotContains(t, agentSteps, "actions/cache@") + assert.NotContains(t, agentSteps, "actions/cache/save@") + assert.Contains(t, agentSteps, "actions/cache/restore@") + publisher := jobs["update_cache_memory"].(map[string]any) + assert.Equal(t, "write-only", publisher["cache-mode"]) + assert.Equal(t, map[string]any{"actions": "write", "contents": "read"}, publisher["permissions"]) + condition := strings.Join(strings.Fields(publisher["if"].(string)), " ") + assert.Equal(t, "always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && needs.agent.result == 'success'", condition) + assert.ElementsMatch(t, []any{"activation", "agent", "detection"}, publisher["needs"]) + publisherSteps := fmt.Sprint(publisher["steps"]) + assert.Contains(t, publisherSteps, "actions/cache/save@") + assert.NotContains(t, publisherSteps, "actions/cache/restore@") + native, err := actions.Parse([]byte(content)) + require.NoError(t, err, "generated job cache modes must remain readable by native lint") + for _, job := range native.Jobs { + if string(job.ID) == "agent" { + assert.Equal(t, "read", job.CacheMode) + } + } + }) + } + } +} + +func TestCompiledCacheAccessDryRunAndGHES(t *testing.T) { + for _, ghes := range []bool{false, true} { + for _, dryRun := range []bool{false, true} { + for _, restoreOnly := range []bool{false, true} { + t.Run(fmt.Sprintf("ghes=%t/dry-run=%t/restore-only=%t", ghes, dryRun, restoreOnly), func(t *testing.T) { + compiled, content := compileCacheAccessFixture(t, "issue_comment", "true", ghes, dryRun, restoreOnly) + jobs := compiled["jobs"].(map[string]any) + agent := jobs["agent"].(map[string]any) + if ghes { + assert.NotContains(t, content, "cache-mode:") + } else { + assert.Equal(t, "read", agent["cache-mode"]) + } + if dryRun || restoreOnly { + assert.NotContains(t, jobs, "update_cache_memory") + assert.NotContains(t, content, "actions/cache/save@") + } else { + publisher := jobs["update_cache_memory"].(map[string]any) + if ghes { + assert.NotContains(t, publisher, "cache-mode") + } else { + assert.Equal(t, "write-only", publisher["cache-mode"]) + } + } + if dryRun && !ghes { + assert.Equal(t, "read", compiled["cache-mode"]) + } else { + assert.NotContains(t, compiled, "cache-mode") + } + }) + } + } + } +} + +func TestCachePublisherRequiresDetectionAcceptance(t *testing.T) { + data := &WorkflowData{ + CacheMemoryConfig: &CacheMemoryConfig{Caches: []CacheMemoryEntry{{ID: "default"}}}, + } + compiler := NewCompiler() + job, err := compiler.buildUpdateCacheMemoryJob(data, true) + require.NoError(t, err) + require.NotNil(t, job) + node, err := ParseExpression(stripExpressionWrapper(job.If)) + require.NoError(t, err) + for _, agent := range []string{"success", "failure", "cancelled", "skipped", ""} { + for _, detection := range []string{"success", "failure", "cancelled", "skipped", ""} { + for _, accepted := range []string{"true", "false", ""} { + values := map[string]string{ + "needs.agent.result": agent, + "needs.detection.result": detection, + "needs.detection.outputs.detection_success": accepted, + } + assert.Equal(t, agent == "success" && detection == "success" && accepted == "true", + evaluateDetectionRedactionGate(t, node, values), + "agent=%s detection=%s detection_success=%s", agent, detection, accepted) + } + } + } +} + +func compileCacheAccessFixture(t *testing.T, trigger, detection string, ghes, dryRun, restoreOnly bool) (map[string]any, string) { + t.Helper() + source := fmt.Sprintf(`--- +on: %s +strict: false +engine: copilot +permissions: + contents: read +tools: + github: false + cache-memory: + restore-only: %t +cache: + key: dependencies + path: node_modules +safe-outputs: + create-issue: + threat-detection: %s +jobs: + custom: + runs-on: ubuntu-latest + steps: + - run: echo custom +--- +Test cache access separation. +`, trigger, restoreOnly, detection) + dir := t.TempDir() + path := filepath.Join(dir, "cache.md") + require.NoError(t, os.WriteFile(path, []byte(source), 0600)) + compiler := NewCompiler() + compiler.gitRoot = dir + compiler.SetSkipValidation(true) + compiler.SetGHESCompat(ghes) + compiler.SetDryRun(dryRun) + require.NoError(t, compiler.CompileWorkflow(path)) + content, err := os.ReadFile(filepath.Join(dir, "cache.lock.yml")) + require.NoError(t, err) + var compiled map[string]any + require.NoError(t, yaml.Unmarshal(content, &compiled)) + require.NoError(t, compiler.validateGitHubActionsSchemaFromParsed(compiled)) + return compiled, string(content) +} diff --git a/pkg/workflow/cache_memory.go b/pkg/workflow/cache_memory.go index a158826ec4d..5d7adcc13ef 100644 --- a/pkg/workflow/cache_memory.go +++ b/pkg/workflow/cache_memory.go @@ -553,16 +553,17 @@ func (c *Compiler) buildUpdateCacheMemoryJob(data *WorkflowData, threatDetection // Prepend setup steps to all cache steps steps = append(setupSteps, steps...) - // Job condition: run only if detection job succeeded (no threats found), - // AND the agent job succeeded (do not persist cache when agent failed or was skipped). - // Using always() so this condition is evaluated even if an upstream job is skipped/failed. - // Detection always runs when the agent ran (even for noop), so detection.result == 'success' - // is sufficient — detection short-circuits with success=true when there is nothing to analyze. + // Warning mode can leave the detection job successful with a rejected verdict. + // Require its explicit acceptance as well as successful agent/job completion. agentSucceeded := BuildEquals( BuildPropertyAccess(fmt.Sprintf("needs.%s.result", constants.AgentJobName)), BuildStringLiteral("success"), ) - jobCondition := RenderCondition(BuildAnd(BuildAnd(BuildFunctionCall("always"), buildDetectionSuccessCondition()), agentSucceeded)) + detectionAccepted := BuildAnd(buildDetectionSuccessCondition(), BuildEquals( + BuildPropertyAccess(fmt.Sprintf("needs.%s.outputs.detection_success", constants.DetectionJobName)), + BuildStringLiteral("true"), + )) + jobCondition := RenderCondition(BuildAnd(BuildAnd(BuildFunctionCall("always"), detectionAccepted), agentSucceeded)) // Set up permissions for the cache update job. // actions: write is required only when this job actually emits cache-save steps. @@ -595,6 +596,10 @@ func (c *Compiler) buildUpdateCacheMemoryJob(data *WorkflowData, threatDetection Env: jobEnv, Steps: steps, } + if !data.GHES && !data.DryRun { + // Only this detection-gated publisher may save; it never restores caches. + job.CacheMode = "write-only" + } return job, nil } diff --git a/pkg/workflow/cache_steps.go b/pkg/workflow/cache_steps.go index 6e417fa66d7..f520619122f 100644 --- a/pkg/workflow/cache_steps.go +++ b/pkg/workflow/cache_steps.go @@ -25,7 +25,7 @@ func generateCacheSteps(builder *strings.Builder, data *WorkflowData, verbose bo return } for i, cache := range caches { - if data.DryRun { + if data.DryRun || (!data.GHES && IsDetectionJobEnabled(data.SafeOutputs)) { writeCacheStepWithAction(builder, cache, i, len(caches), "actions/cache/restore") } else { writeCacheStep(builder, cache, i, len(caches)) diff --git a/pkg/workflow/compiler_main_job.go b/pkg/workflow/compiler_main_job.go index 2146396fe40..b4e4671deb5 100644 --- a/pkg/workflow/compiler_main_job.go +++ b/pkg/workflow/compiler_main_job.go @@ -63,6 +63,12 @@ func (c *Compiler) buildMainJob(data *WorkflowData, activationJobCreated bool) ( steps = append(steps, c.generateScriptModeCleanupStep()) } + cacheMode := "" + if !data.GHES && (data.DryRun || IsDetectionJobEnabled(data.SafeOutputs)) { + // Restore-only actions alone do not restrict the job's scoped cache token. + cacheMode = "read" + } + compilerMainJobLog.Printf("Built main job: steps=%d, needs=%v, outputs=%d", len(steps), depends, len(outputs)) return &Job{ Name: string(constants.AgentJobName), @@ -72,6 +78,7 @@ func (c *Compiler) buildMainJob(data *WorkflowData, activationJobCreated bool) ( Container: c.indentYAMLLines(data.Container, " "), Services: c.indentYAMLLines(data.Services, " "), Permissions: c.indentYAMLLines(permissions, " "), + CacheMode: cacheMode, Concurrency: c.indentYAMLLines(agentConcurrency, " "), Env: env, Steps: steps, diff --git a/pkg/workflow/jobs.go b/pkg/workflow/jobs.go index cf804a44186..f143f7e52ab 100644 --- a/pkg/workflow/jobs.go +++ b/pkg/workflow/jobs.go @@ -55,6 +55,7 @@ type Job struct { HasWorkflowRunSafetyChecks bool // If true, the job's if condition includes workflow_run safety checks PermissionsComment string Permissions string + CacheMode string TimeoutMinutes int TimeoutMinutesExpression string Concurrency string // Job-level concurrency configuration @@ -329,6 +330,9 @@ func (jm *JobManager) renderJobTo(b *strings.Builder, job *Job) { if job.Permissions != "" { fmt.Fprintf(b, " %s\n", job.Permissions) } + if job.CacheMode != "" { + b.WriteString(" cache-mode: " + job.CacheMode + "\n") + } // Add concurrency section if job.Concurrency != "" { diff --git a/pkg/workflow/lint/cache_poisoning.go b/pkg/workflow/lint/cache_poisoning.go index 10ab5ecce8f..75f91243e95 100644 --- a/pkg/workflow/lint/cache_poisoning.go +++ b/pkg/workflow/lint/cache_poisoning.go @@ -8,11 +8,11 @@ import ( "strings" ) -// CachePoisoningRule checks release/tag workflow cache restoration. It does not -// infer publication from job names or prove the provenance of cached files. +// CachePoisoningRule checks release/tag restores and explicit low-trust writes. +// It does not infer trust from job names or prove cached-file provenance. func CachePoisoningRule() Rule { return Rule{ - ID: "cache-poisoning", Description: "Keep release builds from restoring shared dependency caches", + ID: "cache-poisoning", Description: "Review shared cache restores and low-trust cache-write overrides", Severity: Warning, Targets: ActionsAST | AWAST, Check: checkCachePoisoning, } } @@ -28,12 +28,23 @@ func checkCachePoisoning(ctx context.Context, input Input) ([]Diagnostic, error) on = input.Document.Frontmatter["on"] } release, err := cacheReleaseTrigger(ctx, on) - if err != nil || !release { + if err != nil { + return nil, err + } + lowTrust, err := cacheLowTrustTrigger(ctx, on) + if err != nil || (!release && !lowTrust) { return nil, err } blocks, err := executionPolicyBlocks(ctx, input) failures := []error{err} var diagnostics []Diagnostic + if lowTrust { + diagnostics, err = cacheWriteOverrides(ctx, input, blocks) + failures = append(failures, err) + } + if !release { + return diagnostics, errors.Join(failures...) + } for _, block := range blocks { for _, step := range block.Steps { if err := ctx.Err(); err != nil { diff --git a/pkg/workflow/lint/cache_write_overrides.go b/pkg/workflow/lint/cache_write_overrides.go new file mode 100644 index 00000000000..74b79068e4a --- /dev/null +++ b/pkg/workflow/lint/cache_write_overrides.go @@ -0,0 +1,90 @@ +package lint + +import ( + "context" + "errors" + "fmt" + "strings" + + "github.com/github/gh-aw/pkg/workflow/aw" +) + +func cacheWriteOverrides(ctx context.Context, input Input, blocks []aw.ExecutionBlock) ([]Diagnostic, error) { + var root any + if input.Workflow != nil { + root = input.Workflow.CacheMode + } else { + root = input.Document.Frontmatter["cache-mode"] + } + rootMode, err := cachePolicyMode(root, "cache-mode") + if err != nil { + return nil, err + } + var diagnostics []Diagnostic + var failures []error + reported := make(map[string]struct{}) + check := func(value any, path string) { + field := "cache-mode" + if path != "" { + field = path + ".cache-mode" + } + mode, err := cachePolicyMode(value, field) + if err != nil { + failures = append(failures, err) + return + } + if mode == "" { + mode, field = rootMode, "cache-mode" + } + _, exists := reported[field] + if (mode == "write" || mode == "write-only") && !exists { + reported[field] = struct{}{} + diagnostics = append(diagnostics, Diagnostic{ + Path: field, + Message: "Explicit cache-write access overrides the read-only default for pull_request_target, issue_comment, or workflow_run; " + + "use cache-mode: read for untrusted execution and review any dedicated cache publisher's input validation and cache consumers", + }) + } + } + if input.Workflow != nil { + for _, job := range input.Workflow.Jobs { + if err := ctx.Err(); err != nil { + return diagnostics, errors.Join(append(failures, err)...) + } + check(job.CacheMode, "jobs."+string(job.ID)) + } + } else { + for _, block := range blocks { + if err := ctx.Err(); err != nil { + return diagnostics, errors.Join(append(failures, err)...) + } + if block.Path == "" || strings.HasPrefix(block.Path, "jobs.") || + strings.HasPrefix(block.Path, "safe-jobs.") || strings.HasPrefix(block.Path, "safe-outputs.jobs.") { + check(block.Fields["cache-mode"], block.Path) + } + } + } + return diagnostics, errors.Join(failures...) +} + +func cacheLowTrustTrigger(ctx context.Context, on any) (bool, error) { + for _, event := range []string{"pull_request_target", "issue_comment", "workflow_run"} { + if _, found, err := authoredTrigger(ctx, on, event); err != nil || found { + return found, err + } + } + return false, nil +} + +func cachePolicyMode(value any, path string) (string, error) { + if value == nil { + return "", nil + } + if mode, ok := value.(string); ok { + switch mode { + case "", "read", "write", "write-only", "none": + return mode, nil + } + } + return "", fmt.Errorf("cache-poisoning requires read, write, write-only, or none at %s; correct the cache access mode before linting", path) +} diff --git a/pkg/workflow/lint/cache_write_overrides_test.go b/pkg/workflow/lint/cache_write_overrides_test.go new file mode 100644 index 00000000000..f8433fff517 --- /dev/null +++ b/pkg/workflow/lint/cache_write_overrides_test.go @@ -0,0 +1,150 @@ +package lint + +import ( + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestCacheLowTrustWriteOverrides(t *testing.T) { + const message = "Explicit cache-write access overrides the read-only default for pull_request_target, issue_comment, or workflow_run; use cache-mode: read for untrusted execution and review any dedicated cache publisher's input validation and cache consumers" + for _, test := range []struct { + name, on, mode string + want bool + }{ + {"target write", "pull_request_target", "write", true}, + {"comment write only", "issue_comment", "write-only", true}, + {"workflow run write", "{workflow_run: {workflows: [CI], branches: [main]}}", "write", true}, + {"mixed events", "[push, issue_comment]", "write", true}, + {"mixed mapping", "{push: {}, pull_request_target: {}}", "write-only", true}, + {"low trust read", "pull_request_target", "read", false}, + {"low trust none", "workflow_run", "none", false}, + {"low trust default", "issue_comment", "", false}, + {"push writer", "push", "write", false}, + {"dispatch already defaults writable", "repository_dispatch", "write", false}, + {"manual writer", "workflow_dispatch", "write-only", false}, + {"merge ref isolated", "pull_request", "write", false}, + } { + for _, target := range []ASTTargets{ActionsAST, AWAST} { + t.Run(test.name+"/"+target.String(), func(t *testing.T) { + source := "on: " + test.on + "\n" + contractJob + contractSafeSteps + if test.mode != "" { + source += " cache-mode: " + test.mode + "\n" + } + input := ruleContractInput(t, source, target, false) + before, err := json.Marshal(input) + require.NoError(t, err) + runner, err := Default().Select("cache-poisoning") + require.NoError(t, err) + diagnostics, err := runner.Run(context.Background(), input) + require.NoError(t, err) + if test.want { + require.Len(t, diagnostics, 1) + assert.Equal(t, "cache-poisoning", diagnostics[0].RuleID) + assert.Equal(t, Warning, diagnostics[0].Severity) + assert.Equal(t, "jobs.check.cache-mode", diagnostics[0].Path) + assert.Equal(t, message, diagnostics[0].Message) + } else { + assert.Empty(t, diagnostics) + } + again, err := runner.Run(context.Background(), input) + require.NoError(t, err) + assert.Equal(t, diagnostics, again) + after, err := json.Marshal(input) + require.NoError(t, err) + assert.Equal(t, before, after) + }) + } + } +} + +func TestCacheWriteModeInheritance(t *testing.T) { + for _, test := range []struct { + name, root, job, want string + }{ + {"inherited write", "write", "", "cache-mode"}, + {"inherited write only", "write-only", "", "cache-mode"}, + {"read overrides workflow write", "write", "read", ""}, + {"none overrides workflow write", "write-only", "none", ""}, + {"job overrides workflow read", "read", "write", "jobs.check.cache-mode"}, + {"job overrides workflow none", "none", "write-only", "jobs.check.cache-mode"}, + {"both write", "write", "write-only", "jobs.check.cache-mode"}, + } { + t.Run(test.name, func(t *testing.T) { + source := "on: issue_comment\ncache-mode: " + test.root + "\n" + contractJob + contractSafeSteps + if test.job != "" { + source += " cache-mode: " + test.job + "\n" + } + input := ruleContractInput(t, source, ActionsAST, false) + runner, err := Default().Select("cache-poisoning") + require.NoError(t, err) + diagnostics, err := runner.Run(context.Background(), input) + require.NoError(t, err) + if test.want == "" { + assert.Empty(t, diagnostics) + } else { + require.Len(t, diagnostics, 1) + assert.Equal(t, test.want, diagnostics[0].Path) + } + }) + } +} + +func TestCacheWriterJobNamesDoNotEstablishTrust(t *testing.T) { + for _, target := range []ASTTargets{ActionsAST, AWAST} { + input := ruleContractInput(t, `on: issue_comment +jobs: + update_cache_memory: + runs-on: ubuntu-latest + cache-mode: write-only + steps: [{run: echo untrusted}] + call: + uses: ./.github/workflows/worker.yml + cache-mode: write +`, target, false) + runner, err := Default().Select("cache-poisoning") + require.NoError(t, err) + diagnostics, err := runner.Run(context.Background(), input) + require.NoError(t, err) + var paths []string + for _, diagnostic := range diagnostics { + paths = append(paths, diagnostic.Path) + } + assert.ElementsMatch(t, []string{"jobs.call.cache-mode", "jobs.update_cache_memory.cache-mode"}, paths) + } +} + +func TestCacheWriteModePartialFailures(t *testing.T) { + input := ruleContractInput(t, `on: workflow_run +jobs: + invalid: + cache-mode: [PRIVATE_VALUE] + steps: [{run: echo data}] + publisher: + cache-mode: write-only + steps: [{run: echo data}] +`, AWAST, false) + runner, err := Default().Select("cache-poisoning") + require.NoError(t, err) + diagnostics, err := runner.Run(context.Background(), input) + require.ErrorContains(t, err, "jobs.invalid.cache-mode") + assert.NotContains(t, err.Error(), "PRIVATE_VALUE") + require.Len(t, diagnostics, 1) + assert.Equal(t, "jobs.publisher.cache-mode", diagnostics[0].Path) + ctx, cancel := context.WithCancel(context.Background()) + cancel() + _, err = runner.Run(ctx, input) + assert.ErrorIs(t, err, context.Canceled) +} + +func TestCachePolicyUnrelatedTriggerIgnoresExecution(t *testing.T) { + input := ruleContractInput(t, "on: push\nsteps: not-a-step-list\n", AWAST, false) + runner, err := Default().Select("cache-poisoning") + require.NoError(t, err) + diagnostics, err := runner.Run(context.Background(), input) + require.NoError(t, err) + assert.Empty(t, diagnostics) +} From 54e722e5bfd24ae55f7f4fee9028344e8d046f7c Mon Sep 17 00:00:00 2001 From: pelikhan Date: Tue, 27 Oct 2026 21:50:49 -0700 Subject: [PATCH 02/13] Specify cache access compatibility and publication boundaries Document the existing GHES CLI/config opt-out for compiler cache-mode fields and its weaker token boundary. Update CTR-019 and its evidence mapping for detection-separated publication, dry-run precedence, explicit-write diagnostics, and unchanged no-detection behavior. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../content/docs/reference/cache-memory.md | 4 +++- .../reference/enterprise-configuration.md | 5 ++++ specs/compiler-threat-detection-changelog.md | 1 + specs/compiler-threat-detection-spec.md | 23 +++++++++++++++---- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/src/content/docs/reference/cache-memory.md b/docs/src/content/docs/reference/cache-memory.md index 240898173cd..55627ccb87a 100644 --- a/docs/src/content/docs/reference/cache-memory.md +++ b/docs/src/content/docs/reference/cache-memory.md @@ -175,7 +175,9 @@ Writable cache-memory entries are published by the separate `update_cache_memory The publisher's explicit write capability deliberately overrides GitHub's read-only cache default for triggers such as `pull_request_target`, `issue_comment`, and `workflow_run`. It authorizes this bounded publication path, not arbitrary agent cache writes, and does not authenticate the uploaded artifact or cached content. Treat memory as data, not executable code. A successful detector verdict is not a provenance guarantee. -Dry-run compilation keeps cache access read-only and omits the cache-memory publisher. `restore-only: true` entries are never published. GHES compatibility mode omits `cache-mode` because support depends on the deployed server; restore-only agent actions and the publisher's validation gates remain, but the compiler does not establish a scoped-token cache boundary there. +Dry-run compilation uses restore-only compiler-managed cache actions and omits the cache-memory publisher. Outside GHES compatibility mode, it also sets workflow-level and agent-job `cache-mode: read`. `restore-only: true` entries are never published. + +For servers that do not support `cache-mode`, enable [GHES compatibility mode](/gh-aw/reference/enterprise-configuration/#ghes-compatibility-mode) with `gh aw compile --ghes my-workflow.md` or `"ghes": true` in `.github/workflows/aw.json`, then recompile. This omits compiler-generated `cache-mode` fields even during dry-run and also changes artifact-action pins. GitHub's announcement confirms GitHub.com availability, not a GHES release. Cache-memory restore-only agent actions and publisher validation gates remain, but ordinary frontmatter dependency caches retain combined restore/save actions outside dry-run. Without scoped-token enforcement, arbitrary cache writers are not constrained by this compiler boundary. Without detection, existing same-job cache-memory behavior is unchanged: cache saves depend on the platform's trigger-based defaults. GitHub.com defaults low-trust default-branch triggers to read-only, while `push`, `workflow_dispatch`, and `repository_dispatch` can write by default. Custom jobs have their own cache-access boundary. The [`cache-poisoning` linter](/gh-aw/reference/workflow-linters/) warns about effective explicit write overrides on `pull_request_target`, `issue_comment`, and `workflow_run`; it does not prove a dedicated publisher safe or validate arbitrary shell cache operations. diff --git a/docs/src/content/docs/reference/enterprise-configuration.md b/docs/src/content/docs/reference/enterprise-configuration.md index 547bfb80e5c..39dcd92c3e0 100644 --- a/docs/src/content/docs/reference/enterprise-configuration.md +++ b/docs/src/content/docs/reference/enterprise-configuration.md @@ -20,6 +20,11 @@ GHES instances running versions that predate `@actions/artifact` v2.0.0 support gh-aw includes a GHES compatibility mode toggle (`aw.json` `ghes` or `gh aw compile --ghes`) for GHES releases that require the v3 artifact backend. Compatibility mode emits `upload-artifact@v3.2.2` and `download-artifact@v3.1.0`; default GitHub.com compilation continues to use the latest artifact actions. +Compatibility mode also omits compiler-generated workflow and job `cache-mode` fields, including dry-run fields. The [GitHub announcement](https://github.blog/changelog/2026-09-10-control-github-actions-cache-access-with-cache-mode/) establishes availability on GitHub.com, not a supported GHES release. Enable compatibility mode when the target server does not support this syntax, then recompile the workflows. This is the existing combined GHES switch, not an independent cache-only option or automatic server-version negotiation. + +> [!WARNING] +> Omitting `cache-mode` removes the scoped-token cache restriction. Detection-enabled cache-memory restores and publisher validation gates remain, but ordinary frontmatter dependency caches retain combined restore/save actions outside dry-run. Dry-run still uses restore-only compiler-managed cache actions and omits the cache-memory publisher; it cannot constrain arbitrary cache writers through the scoped token on unsupported servers. See [cache access boundaries](/gh-aw/reference/cache-memory/#cache-access-boundaries). + This compatibility path supports GHES 3.21.x and earlier when the workflow runs on Actions Runner 2.327.1 or later, which is required by the Node.js 24 runtime used by these pinned artifact actions. For later GHES releases, keep compatibility mode enabled until your instance supports the v4 artifact backend. #### Enable via `aw.json` (recommended) diff --git a/specs/compiler-threat-detection-changelog.md b/specs/compiler-threat-detection-changelog.md index c2a5ea9c6a9..35c37ae7096 100644 --- a/specs/compiler-threat-detection-changelog.md +++ b/specs/compiler-threat-detection-changelog.md @@ -16,6 +16,7 @@ This changelog records the version history and the dated mapping audits for `spe | Version | Change | |---|---| +| 1.0.74 | Strengthens CTR-019 with read-only agent cache tokens, restore-only frontmatter dependency caches, a separate write-only cache-memory publisher, and explicit detector acceptance in addition to successful jobs. Specifies warning/failed/skipped/missing detection handling, dry-run precedence, the existing CLI/config GHES opt-out, and unchanged no-detection behavior. Maps effective low-trust explicit-write diagnostics and generated-YAML/acceptance regression coverage. Separates capability grants from artifact authenticity and records GHES, custom-job, unsigned-content, and persistent-runner limitations. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | 1.0.72 | Audit-only clarification that same-repository bot PR `labeled` events remain subject to the RS-05a collaborator permission floor. No new threat identifier, permission grant, or lock-file schema change. | | 1.0.71 | Added a separate compiler-only `artipacked` exception for agent checkouts immediately followed by compiler-owned credential cleanup and verification. Requires current-compilation provenance, unique full-block parsed-field matching, exact adjacency, and statically proven discovery coverage; altered, authored, ambiguous, interrupted, deep-path, and unknown-path blocks remain warned. Preserves runtime YAML, per-checkout authentication, other diagnostics, and standalone lint. Maps adversarial, discovery-depth boundary, multi-repository, sparse-checkout, compilation, and provenance-reset regressions. | | 1.0.70 | Specifies generated admission-output gating for agent, threat-detection, evals, and conclusion usage/session steps. Disabled admission emits no activation admission-output references; dry-run component execution omits admission environment bindings. Preserves component-specific budget selection and independent grader, daily-credit, and job-duration bindings. Also specifies the compiler-only `artipacked` warning exception for retained-credential checkouts in the exact generated `safe_outputs` PR checkout/authentication block, requiring current-compilation provenance, a unique full-block parsed-field match, and provenance reset between workflows; modified or ambiguous blocks remain ineligible. Preserves authored-step and other-job diagnostics, other rules, errors, analysis failures, standalone lint, and runtime authentication. Maps admission-only lint compilation, component/usage, exclusion, multi-repository, compiler integration, and reuse regressions. Regeneration removes stale references; no new threat identifier, permission grant, or lock-file schema change. | diff --git a/specs/compiler-threat-detection-spec.md b/specs/compiler-threat-detection-spec.md index 77219124709..c74abd5a472 100644 --- a/specs/compiler-threat-detection-spec.md +++ b/specs/compiler-threat-detection-spec.md @@ -7,7 +7,7 @@ sidebar: # GitHub Actions Compiler Threat Detection Specification -**Version**: 1.0.73 +**Version**: 1.0.74 **Status**: Candidate Recommendation **Latest Version**: https://github.com/github/gh-aw/blob/main/specs/compiler-threat-detection-spec.md **Editors**: GitHub Next (GitHub, Inc.) @@ -32,6 +32,7 @@ Each version maps to the minimum compatible binary. A version change MUST update | Versions | Minimum gh-aw | Compatibility | |---|---:|---| +| `1.0.74` | Unreleased | Strengthens CTR-019 with detection-separated agent/publisher cache access and explicit detector acceptance. Specifies the existing GHES compatibility opt-out, dry-run precedence, low-trust explicit-write warnings, and unchanged no-detection behavior. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.73` | Unreleased | Audit-only clarification that same-repository bot PR `edited` checkout is a runtime trust control restricted to allow-listed actors and body-only changes under Security Architecture Specification RS-05a. No new threat identifier, permission grant, or lock-file schema change. | | `1.0.72` | Unreleased | Audit-only clarification that same-repository bot PR `labeled` events remain subject to the collaborator permission floor under Security Architecture Specification RS-05a. No new threat identifier, permission grant, or lock-file schema change. | | `1.0.71` | Unreleased | Adds a separate compiler-only `artipacked` exception for agent checkouts immediately followed by exact compiler-owned cleanup and credential verification. Requires current-compilation provenance, unique full-block matching, and statically proven cleanup discovery coverage; runtime authentication and standalone lint remain unchanged. | @@ -149,7 +150,7 @@ Each rule has a stable `CTR-*` ID, threat class, trigger, compiler action, diagn - **CTR-016 Compile-Time Manifest Drift**: Reject new restricted secrets or action references absent from an existing manifest. - **CTR-017 Secret Leakage via Environment Variables and Telemetry**: Warn, or reject in strict mode, for uncontrolled secret-expression placement. The Actions/AW linter MUST report secret-tainted values configured as OTLP span or resource attributes, including modeled Actions environment flows, without reproducing the values in diagnostics. This lint check is advisory and does not prove the absence of hard-coded credentials or arbitrary runtime disclosures. When OTLP is enabled and the effective AWF version supports `--exclude-env`, generated agent, threat-detection, and evals AWF invocations using `--env-all` MUST exclude `OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_HEADERS`, and `GH_AW_OTLP_ENDPOINTS`. These values MUST remain available to host-side exporters. Both inline and external threat-detection paths and evals execution MUST preserve the exclusions. Workflows without OTLP MUST NOT gain these OTLP-specific exclusions unless independently required by another exclusion policy. - **CTR-018 Version Integrity Bypass**: Warn, or reject in strict mode, for `check-for-updates: false`. -- **CTR-019 Cache-Memory Integrity Enforcement**: Require cache updates only after successful agent and threat-detection jobs. +- **CTR-019 Cache-Memory Integrity Enforcement**: When detection is enabled, separate agent cache access from cache-memory publication and require successful agent and detection jobs plus explicit detector acceptance before publication, subject to the compatibility boundaries in Section 5.1.3. - **CTR-020 Conditional Import Security**: Reject `imports` entries containing `if`. - **CTR-021 Workflow Run Trigger Branch Scope**: Warn, or reject in strict mode, for unscoped `workflow_run`; always reject missing `workflows`. - **CTR-022 Git Subprocess Argument Injection**: Reject unsafe remote ref/path arguments before invoking Git. @@ -194,6 +195,20 @@ The compiler MUST reject creation of an authored custom job under a reserved bui The Actions/AW `custom-job-detection` linter MUST check transitive ordering, require a direct detection dependency for downstream custom jobs, and prove detection job success on every runnable branch when status functions override implicit success. The linter checks the supplied graph and conditions; the compiler independently enforces the stronger clean-output gate. AW-only analysis MUST NOT claim resolved-import coverage. Actions analysis MUST require both `agent` and `detection` jobs, so ordinary CI detection jobs do not activate this policy. Without companion source, standalone Actions analysis uses the shared compiler-owned name policy, including generated state-push and memory-maintenance jobs; this classification is not proof of job provenance. Source-backed analysis MUST distinguish authored jobs from compiler-generated maintenance jobs. +### 5.1.3 Cache Access and Publication (CTR-019) + +When detection is enabled and GHES compatibility mode is disabled, the compiler MUST emit `cache-mode: read` on the agent job and restore-only actions for frontmatter dependency caches. This MUST apply to every configured trigger, including trusted triggers, `repository_dispatch`, mixed-trigger workflows, and expression-controlled detection. A runtime-skipped detection job MUST NOT restore agent cache-write capability. Selecting a restore-only action alone does not restrict the job's scoped cache token. + +Writable cache-memory entries MUST use a separate publisher requiring `needs.agent.result == 'success'`, `needs.detection.result == 'success'`, and `needs.detection.outputs.detection_success == 'true'` before configured memory validation and saving. Failed, cancelled, skipped, or missing detection results, missing acceptance outputs, and warning-mode rejection MUST block publication even if the detection job reports success. The detector's internal no-output short-circuit still reports acceptance; this MUST NOT be described as proof that every cached file was scanned. + +Outside GHES compatibility mode, the publisher MUST use `cache-mode: write-only`. The compiler MUST NOT impose a workflow-wide read cap that prevents this intended publication path during ordinary execution. Explicit publisher writes deliberately override low-trust event defaults; this capability change MUST NOT be described as artifact authenticity, provenance, or attestation. Dry-run MUST omit the publisher and MUST NOT acquire write capability through a job-level override. Dry-run MUST use restore-only compiler-managed cache actions and, outside GHES compatibility mode, workflow-level and agent-job `cache-mode: read`. Entries marked `restore-only: true` MUST NOT be published. + +The existing `gh aw compile --ghes` flag and `.github/workflows/aw.json` setting `"ghes": true` MUST omit compiler-generated workflow and job `cache-mode` fields, including dry-run fields. GitHub.com availability does not establish support in a deployed GHES release; compatibility mode MUST NOT claim scoped-token enforcement there. It retains cache-memory restore-only agent actions and publisher validation gates, but detection-enabled frontmatter dependency caches retain their existing combined cache actions outside dry-run. This compatibility switch also selects GHES artifact-action pins; it is not an independent cache-service capability negotiation. + +Without detection, existing same-job cache-memory behavior MUST remain unchanged, except for independent dry-run restrictions. Custom jobs retain their own cache-access boundary. The Actions/AW `cache-poisoning` linter MUST warn about effective explicit `write` or `write-only` overrides on `pull_request_target`, `issue_comment`, and `workflow_run`, including workflow-level inheritance and reusable callers; a job-level `read` or `none` overrides inherited write access. Job names MUST NOT establish publisher trust. `repository_dispatch` MUST NOT be classified as having the platform's low-trust read-only default. + +These controls do not authenticate unsigned cache contents or uploaded artifacts, prove arbitrary shell/third-party cache writers safe, or cover persistent runner caches. Conformance evidence MUST cover generated YAML for low-trust, trusted, mixed, dispatch, dry-run, GHES, no-detection, and legitimate publisher cases, plus detector-result and acceptance-output combinations. + ### 5.2 Compiler Response Requirements The compiler MUST produce deterministic, actionable diagnostics and either reject insecure generation or apply a safe rewrite for every active rule in Section 5.1. @@ -276,7 +291,7 @@ Every active rule MUST map to implementation and test coverage. References are p | CTR-016 Compile-Time Manifest Drift | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | | CTR-017 Secret Leakage via Environment Variables and Telemetry | safe-update, strict env/update, cache, and expression builder; `pkg/workflow/awf_command_builder.go`, `threat_detection_external.go`, `evals_steps.go`; AST subsets: `pkg/workflow/lint/secrets.go`, `otlp_secret_leak.go`, `pkg/workflow/taint/` | corresponding enforcement, secrets, update, cache, and OTLP leak tests; `TestOTLPEnvExcludedFromAWFSandboxes` in `awf_env_test.go`, `TestEvalsOTLPEnvExcludedFromSandbox` in `evals_steps_test.go`, `TestCompiledOTLPEnvExcludedFromAgentDetectionAndEvals` in `threat_detection_isolation_test.go`; `pkg/workflow/taint/taint_test.go`, `pkg/workflow/lint/otlp_secret_leak_test.go` | | CTR-018 Version Integrity Bypass | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | -| CTR-019 Cache-Memory Integrity Enforcement | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | +| CTR-019 Cache-Memory Integrity Enforcement | `pkg/workflow/compiler_main_job.go`, `cache_memory.go`, `cache_steps.go`, `compiler_yaml.go`; GHES configuration in `compiler.go`; AST subset: `pkg/workflow/lint/cache_write_overrides.go` | `pkg/workflow/cache_access_test.go`, `cache_memory_threat_detection_test.go`, `compiler_development_test.go`; `pkg/workflow/lint/cache_write_overrides_test.go`, `pkg/cli/lint_cache_mode_test.go` | | CTR-020 Conditional Import Security | `pkg/parser/import_bfs.go` | `pkg/parser/import_bfs_test.go` | | CTR-021 Workflow Run Trigger Branch Scope | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go`; AST subset: `pkg/workflow/lint/workflow_run_scope.go` | workflow-run, bash-allowlist, gitutil, and download tests; `pkg/workflow/lint/workflow_run_scope_test.go` | | CTR-022 Git Subprocess Argument Injection | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go` | workflow-run, bash-allowlist, gitutil, and download tests | @@ -411,7 +426,7 @@ Each active rule MUST have at least one deterministic test that covers its prima | **T-CTR-016** | CTR-016 Compile-Time Manifest Drift | Reject new restricted secrets or action references absent from an existing manifest | Reject new restricted secrets or action references absent from an existing manifest. | `CTR-016` | | **T-CTR-017** | CTR-017 Secret Leakage via Environment Variables and Telemetry | Uncontrolled secret-expression placement, secret-tainted values in OTLP attributes, or OTLP-enabled agent/threat-detection/evals AWF generation with `--exclude-env` support | Warn, or reject in strict mode, for uncontrolled secret-expression placement; report secret-tainted OTLP span/resource attributes with value-free diagnostics; exclude all three host-side OTLP variables from agent, inline/external detection, and evals sandboxes while retaining them for host exporters; preserve behavior without OTLP. | `CTR-017` | | **T-CTR-018** | CTR-018 Version Integrity Bypass | Warn, or reject in strict mode, for `check-for-updates: false` | Warn, or reject in strict mode, for `check-for-updates: false`. | `CTR-018` | -| **T-CTR-019** | CTR-019 Cache-Memory Integrity Enforcement | Require cache updates only after successful agent and threat-detection jobs | Require cache updates only after successful agent and threat-detection jobs. | `CTR-019` | +| **T-CTR-019** | CTR-019 Cache-Memory Integrity Enforcement | Detection-separated cache access, explicit publication acceptance, and compatibility boundaries | Verify generated cache modes, GHES omission, dry-run precedence, trigger combinations, low-trust write warnings, and failed/missing/rejected detector gates under Section 5.1.3. | `CTR-019` | | **T-CTR-020** | CTR-020 Conditional Import Security | Reject `imports` entries containing `if` | Reject `imports` entries containing `if`. | `CTR-020` | | **T-CTR-021** | CTR-021 Workflow Run Trigger Branch Scope | Warn, or reject in strict mode, for unscoped `workflow_run`; always reject missing `workflows` | Warn, or reject in strict mode, for unscoped `workflow_run`; always reject missing `workflows`. | `CTR-021` | | **T-CTR-022** | CTR-022 Git Subprocess Argument Injection | Reject unsafe remote ref/path arguments before invoking Git | Reject unsafe remote ref/path arguments before invoking Git. | `CTR-022` | From 3dd02f042f116cf1a90e76358211a082108e1fd9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 04:59:10 +0000 Subject: [PATCH 03/13] docs(adr): add draft ADR-72543 for detection-gated cache access --- ...d-cache-access-via-job-level-cache-mode.md | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md diff --git a/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md new file mode 100644 index 00000000000..acc6fedc08f --- /dev/null +++ b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md @@ -0,0 +1,50 @@ +# ADR-72543: Detection-Gated Cache Access via Job-Level `cache-mode` + +**Date**: 2026-05-14 +**Status**: Draft +**Deciders**: pelikhan (PR author); [TODO: verify reviewers] + +--- + +### Context + +When threat detection is enabled, compiled workflows run the agent job before detection has judged its output, and a separate cache-memory publisher job later persists agent memory. Previously the agent job used restore-only cache *actions*, but selecting a restore-only action does not restrict the job's scoped cache token, so agent-executed code could still write to the Actions cache before detection ran. In addition, detection running in warning mode can leave the detection job successful while its verdict rejects persistence, so "detection job succeeded" was not a sufficient gate for the publisher. GitHub.com now supports a `cache-mode` field at workflow and job level that limits the cache token's capability; GHES deployments may not support it. + +### Decision + +We will use the platform `cache-mode` field as the cache-access boundary for detection-gated workflows. On GitHub.com, the compiler emits `cache-mode: read` on the agent job whenever detection is enabled (for every trigger type, including trusted, mixed, dispatch, and expression-controlled detection), and compiles frontmatter dependency caches as restore-only. The separate cache-memory publisher gets `cache-mode: write-only` and only runs when the agent and detection jobs succeed **and** `needs.detection.outputs.detection_success == 'true'`. GHES compatibility mode omits all compiler-generated `cache-mode` fields. The Actions AST preserves job-level `cache-mode`, and the `cache-poisoning` linter warns about explicit `write`/`write-only` overrides on `pull_request_target`, `issue_comment`, and `workflow_run`, including inherited workflow-level and reusable-caller modes. + +### Alternatives Considered + +#### Alternative 1: Rely on restore-only cache actions alone + +Keep the existing approach of using restore-only cache actions in the agent job. This needs no new platform feature and works on GHES. It was rejected because the action choice doesn't constrain the job's cache token: code running in the agent job can still write cache entries directly, which leaves the cache-poisoning path open. + +#### Alternative 2: Workflow-level read-only cap + +Set `cache-mode: read` once at workflow level for detection-enabled workflows. This is simpler and covers every job. It was rejected because it would also block the intended cache-memory publisher, which must write after detection accepts the output. The spec explicitly says the compiler MUST NOT impose a workflow-wide read cap that prevents this publication path. + +#### Alternative 3: Gate the publisher only on detection job success + +Run the publisher whenever the detection job finishes successfully, without checking the `detection_success` output. This is simpler, but in warning mode the detection job can succeed even when its verdict rejects persistence, so rejected output could still be persisted. + +### Consequences + +#### Positive +- The agent job's cache token is limited to reads on GitHub.com, so agent-executed code can't poison caches before detection runs. +- Persistence requires an explicit detection acceptance (`detection_success == 'true'`), so warning-mode rejections, missing acceptance, and runtime-skipped detection all block publication. +- The linter flags explicit write overrides on low-trust triggers, including inherited modes, so authors notice when they widen cache access. + +#### Negative +- The publisher's explicit `write-only` mode deliberately overrides the platform's low-trust read-only default. Its security depends on detection plus input validation, and detection acceptance is not artifact authenticity or attestation. +- GHES deployments get no scoped-token enforcement because `cache-mode` is omitted there, so behavior differs by platform. +- Regenerates around 307 lock files and adds compiler, AST, and linter surface that must stay in sync with platform `cache-mode` semantics. + +#### Neutral +- Workflows without detection keep their existing same-job cache-memory behavior. Dry-run omits the publisher and stays read-only. +- Authored custom jobs, third-party cache writers, dependency-cache namespaces, and persistent runner caches stay outside this boundary and need their own review. +- The detector's internal no-output short-circuit still counts as acceptance. + +--- + +*ADR created by [adr-writer agent]. Review and finalize before changing status from Draft to Accepted.* From f5a78c9de435afd2f325131b7cfe44c1fb1c60fd Mon Sep 17 00:00:00 2001 From: pelikhan Date: Tue, 27 Oct 2026 22:01:08 -0700 Subject: [PATCH 04/13] test: refresh WASM golden for detection-gated cache access Update smoke-copilot's expected cache modes and detection acceptance condition to match the intentional compiler hardening. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../TestWasmGolden_CompileFixtures/smoke-copilot.golden | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden index d93e3fa25be..f5e75ae3c6f 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden @@ -447,6 +447,7 @@ jobs: discussions: read issues: read pull-requests: read + cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -3244,12 +3245,15 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: actions: write contents: read + cache-mode: write-only env: GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }} GH_AW_WORKFLOW_ID_SANITIZED: smokecopilot From 36d5bac29c414d6edb9205655fb8d09b02b556a4 Mon Sep 17 00:00:00 2001 From: pelikhan Date: Tue, 27 Oct 2026 22:39:49 -0700 Subject: [PATCH 05/13] Address cache trust, persistence, and lint review feedback Block low-trust cache-memory publication, preserve trigger-scoped trusted dependency-cache saves, and share explicit detection acceptance across cache, drive, and custom-job guards. Add narrowly scoped job cache-mode actionlint compatibility, finalize the proposed ADR, synchronize CTR-019 and cache documentation, and regenerate workflow locks and WASM expectations. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/workflows/ab-testing-advisor.lock.yml | 3 +- .../actions-aw-linter-factory.lock.yml | 3 +- .github/workflows/agent-job-health.lock.yml | 3 +- .../workflows/agent-persona-explorer.lock.yml | 3 +- .../workflows/api-consumption-report.lock.yml | 3 +- .github/workflows/audit-workflows.lock.yml | 3 +- .../aw-failure-investigator.lock.yml | 11 ++- .../workflows/chaos-pr-bundle-fuzzer.lock.yml | 3 +- .github/workflows/ci-coach.lock.yml | 3 +- .../claude-code-user-docs-review.lock.yml | 3 +- .../workflows/cli-version-checker.lock.yml | 3 +- .github/workflows/cloclo.lock.yml | 3 +- .../workflows/code-scanning-fixer.lock.yml | 3 +- .../constraint-solving-potd.lock.yml | 3 +- .../workflows/copilot-agent-analysis.lock.yml | 3 +- .github/workflows/copilot-opt.lock.yml | 3 +- .../copilot-pr-merged-report.lock.yml | 3 +- .../copilot-pr-nlp-analysis.lock.yml | 3 +- .../copilot-pr-prompt-analysis.lock.yml | 3 +- .../copilot-session-insights.lock.yml | 3 +- ...daily-action-setup-security-audit.lock.yml | 3 +- .../daily-agentrx-trace-optimizer.lock.yml | 3 +- .../daily-architecture-diagram.lock.yml | 3 +- .../workflows/daily-arxiv-researcher.lock.yml | 3 +- ...daily-aw-cross-repo-compile-check.lock.yml | 3 +- .../daily-cache-strategy-analyzer.lock.yml | 3 +- .../daily-caveman-optimizer.lock.yml | 3 +- .github/workflows/daily-code-metrics.lock.yml | 3 +- .../workflows/daily-compiler-quality.lock.yml | 3 +- .github/workflows/daily-doc-healer.lock.yml | 3 +- .github/workflows/daily-doc-updater.lock.yml | 3 +- .../daily-documentation-diagram.lock.yml | 3 +- .../daily-experiment-report.lock.yml | 3 +- .../workflows/daily-firewall-report.lock.yml | 3 +- .../daily-formal-spec-verifier.lock.yml | 3 +- .../workflows/daily-function-namer.lock.yml | 3 +- .../daily-go-test-parallelizer.lock.yml | 3 +- .github/workflows/daily-hippo-learn.lock.yml | 3 +- .../workflows/daily-issues-report.lock.yml | 3 +- .../daily-mcp-concurrency-analysis.lock.yml | 3 +- .github/workflows/daily-news.lock.yml | 3 +- .../daily-performance-summary.lock.yml | 3 +- .../daily-rendering-scripts-verifier.lock.yml | 3 +- .../workflows/daily-repo-chronicle.lock.yml | 3 +- .../daily-safe-output-optimizer.lock.yml | 3 +- .../workflows/daily-secrets-analysis.lock.yml | 3 +- .../daily-security-observability.lock.yml | 3 +- .../daily-security-red-team.lock.yml | 3 +- .../daily-spdd-spec-planner.lock.yml | 3 +- .../daily-spending-forecast.lock.yml | 3 +- .github/workflows/daily-storify.lock.yml | 3 +- .../daily-workflow-security-model.lock.yml | 3 +- .../dataflow-pr-discussion-dataset.lock.yml | 3 +- .github/workflows/dead-code-remover.lock.yml | 3 +- .github/workflows/deep-report.lock.yml | 3 +- .github/workflows/dependabot-burner.lock.yml | 11 ++- .../detection-analysis-report.lock.yml | 3 +- .../developer-docs-consolidator.lock.yml | 3 +- .github/workflows/eslint-miner.lock.yml | 3 +- .github/workflows/evoskill-evolver.lock.yml | 3 +- .github/workflows/feature-grower.lock.yml | 3 +- .github/workflows/firewall-escape.lock.yml | 3 +- .../github-mcp-structural-analysis.lock.yml | 3 +- .../github-mcp-tools-report.lock.yml | 3 +- .../workflows/glossary-maintainer.lock.yml | 3 +- .github/workflows/go-fan.lock.yml | 3 +- .github/workflows/go-logger.lock.yml | 3 +- .github/workflows/gpclean.lock.yml | 3 +- .../impeccable-skills-reviewer.lock.yml | 13 ++- .../workflows/instructions-janitor.lock.yml | 3 +- .github/workflows/jsweep.lock.yml | 3 +- .../workflows/layout-spec-maintainer.lock.yml | 12 ++- .github/workflows/linter-miner.lock.yml | 3 +- .github/workflows/lockfile-stats.lock.yml | 3 +- .../mattpocock-skills-reviewer.lock.yml | 13 ++- .github/workflows/mcp-inspector.lock.yml | 3 +- .../objective-impact-report.lock.yml | 12 ++- .github/workflows/org-health-report.lock.yml | 3 +- .github/workflows/pdf-summary.lock.yml | 3 +- .github/workflows/poem-bot.lock.yml | 3 +- .github/workflows/ponytail-reviewer.lock.yml | 13 ++- .github/workflows/portfolio-analyst.lock.yml | 3 +- .../pr-code-quality-reviewer.lock.yml | 13 ++- .../prompt-clustering-analysis.lock.yml | 15 ++- .github/workflows/purelock.lock.yml | 3 +- .github/workflows/python-data-charts.lock.yml | 3 +- .../workflows/refactoring-cadence.lock.yml | 3 +- .../workflows/repo-audit-analyzer.lock.yml | 3 +- .../repository-quality-improver.lock.yml | 3 +- .github/workflows/safe-output-health.lock.yml | 3 +- .../schema-consistency-checker.lock.yml | 3 +- .github/workflows/scout.lock.yml | 3 +- .../workflows/slide-deck-maintainer.lock.yml | 3 +- .github/workflows/smoke-claude.lock.yml | 3 +- .github/workflows/smoke-codex.lock.yml | 3 +- .../smoke-copilot-aoai-apikey.lock.yml | 3 +- .../smoke-copilot-aoai-entra.lock.yml | 3 +- .github/workflows/smoke-copilot-arm.lock.yml | 3 +- .github/workflows/smoke-copilot.lock.yml | 3 +- .../workflows/smoke-deepseek-harness.lock.yml | 3 +- .github/workflows/smoke-drive.lock.yml | 4 +- .github/workflows/smoke-gemini.lock.yml | 3 +- .github/workflows/smoke-goose.lock.yml | 3 +- .github/workflows/smoke-opencode.lock.yml | 3 +- .github/workflows/smoke-pi.lock.yml | 3 +- .../smoke-update-cross-repo-pr.lock.yml | 3 +- .github/workflows/spec-enforcer.lock.yml | 3 +- .github/workflows/spec-extractor.lock.yml | 3 +- .../workflows/stale-repo-identifier.lock.yml | 3 +- .../workflows/static-analysis-report.lock.yml | 3 +- .../workflows/step-name-alignment.lock.yml | 3 +- .github/workflows/super-linter.lock.yml | 3 +- .../workflows/technical-doc-writer.lock.yml | 3 +- .../workflows/test-quality-sentinel.lock.yml | 13 ++- .github/workflows/unbloat-docs.lock.yml | 3 +- .../workflows/weekly-issue-summary.lock.yml | 3 +- .../weekly-network-domains-audit.lock.yml | 3 +- .github/workflows/windows-grower.lock.yml | 3 +- .../workflows/workflow-normalizer.lock.yml | 3 +- ...d-cache-access-via-job-level-cache-mode.md | 54 +++++------ .../content/docs/reference/cache-memory.md | 10 +- .../docs/reference/compilation-process.md | 4 +- .../reference/enterprise-configuration.md | 2 +- pkg/cli/lint_command.go | 3 +- pkg/cli/lint_command_test.go | 22 +++++ pkg/workflow/cache_access_test.go | 91 ++++++++++++++++--- pkg/workflow/cache_memory.go | 7 +- pkg/workflow/cache_steps.go | 30 +++++- pkg/workflow/compiler_custom_job_detection.go | 3 +- pkg/workflow/compiler_main_job.go | 4 +- pkg/workflow/drive_memory.go | 2 +- pkg/workflow/drive_memory_test.go | 24 +++++ pkg/workflow/expression_builder.go | 18 +++- .../expression_builder_detection_test.go | 27 ++++++ .../smoke-copilot.golden | 3 +- specs/compiler-threat-detection-changelog.md | 1 + specs/compiler-threat-detection-spec.md | 13 +-- 137 files changed, 568 insertions(+), 204 deletions(-) create mode 100644 pkg/workflow/expression_builder_detection_test.go diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index 5eb3e544e8e..34efa3e6f9c 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -2891,7 +2891,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/actions-aw-linter-factory.lock.yml b/.github/workflows/actions-aw-linter-factory.lock.yml index 728ac3b11c0..b2d0dd09a73 100644 --- a/.github/workflows/actions-aw-linter-factory.lock.yml +++ b/.github/workflows/actions-aw-linter-factory.lock.yml @@ -2422,7 +2422,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/agent-job-health.lock.yml b/.github/workflows/agent-job-health.lock.yml index 5e8fedb77c4..27613ba8dcd 100644 --- a/.github/workflows/agent-job-health.lock.yml +++ b/.github/workflows/agent-job-health.lock.yml @@ -2873,7 +2873,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index 88e038001eb..c2b860a735d 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -2897,7 +2897,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/api-consumption-report.lock.yml b/.github/workflows/api-consumption-report.lock.yml index 7a2fef91bb3..98fc4e0d2f0 100644 --- a/.github/workflows/api-consumption-report.lock.yml +++ b/.github/workflows/api-consumption-report.lock.yml @@ -2867,7 +2867,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 0119e507732..826487947c0 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -3210,7 +3210,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/aw-failure-investigator.lock.yml b/.github/workflows/aw-failure-investigator.lock.yml index 4db68fedfa7..c775862db1f 100644 --- a/.github/workflows/aw-failure-investigator.lock.yml +++ b/.github/workflows/aw-failure-investigator.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"76edc703944df67939eb44746ea10b56f61275ded8060f1969b3ae16813ae173","body_hash":"65bdc947090f964fa6d5cd0ba73da2a8a92e497203a1be38f373c4c5e9ea9507","strict":true,"agent_id":"claude","engine_versions":{"claude":"2.1.310"}} -# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["actions_get","actions_list","get_commit","get_file_contents","get_job_logs","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["close_issue","create_issue","link_sub_issue","noop","report_incomplete","report_missing_data","report_missing_tool","update_issue"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["actions_get","actions_list","get_commit","get_file_contents","get_job_logs","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["close_issue","create_issue","link_sub_issue","noop","report_incomplete","report_missing_data","report_missing_tool","update_issue"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -49,6 +49,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -557,7 +558,6 @@ jobs: contents: read issues: read pull-requests: read - cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -705,6 +705,13 @@ jobs: # Cache configuration from frontmatter processed below - name: Failure investigator prefetch + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: aw-failure-investigator-prefetch-${{ github.run_id }} + path: /tmp/gh-aw/agent/failure-investigator + - name: Failure investigator prefetch + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: aw-failure-investigator-prefetch-${{ github.run_id }} diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index 2158b96a7c2..495b5dfc9bc 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -2347,7 +2347,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 9aeb0bf772e..d6ab5d7abe7 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -3028,7 +3028,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index 4d07b25ac35..85d4690ca80 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -2731,7 +2731,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index caa33361a8a..89f46184e70 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -2736,7 +2736,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 4389d19fbf8..426a1f2b72f 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -3249,7 +3249,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 1102970d03f..9192a3538ec 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -3012,7 +3012,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/constraint-solving-potd.lock.yml b/.github/workflows/constraint-solving-potd.lock.yml index 008d0da0359..df282d34652 100644 --- a/.github/workflows/constraint-solving-potd.lock.yml +++ b/.github/workflows/constraint-solving-potd.lock.yml @@ -2682,7 +2682,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index 2d17f421fa6..1a5ee5ef222 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -3062,7 +3062,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-opt.lock.yml b/.github/workflows/copilot-opt.lock.yml index 267000e95e3..89b25585152 100644 --- a/.github/workflows/copilot-opt.lock.yml +++ b/.github/workflows/copilot-opt.lock.yml @@ -2763,7 +2763,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index e342b15766e..244517deb04 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -2653,7 +2653,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index fe242e84ef9..42e8f60ed2b 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -3135,7 +3135,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index 195f69b2a21..497fc91f695 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -2916,7 +2916,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 557ea11c254..2ec76154a8d 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -2960,7 +2960,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-action-setup-security-audit.lock.yml b/.github/workflows/daily-action-setup-security-audit.lock.yml index db6664f885d..8ecd618889e 100644 --- a/.github/workflows/daily-action-setup-security-audit.lock.yml +++ b/.github/workflows/daily-action-setup-security-audit.lock.yml @@ -2732,7 +2732,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml index dcb39563675..b97072a7a62 100644 --- a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml +++ b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml @@ -3008,7 +3008,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index b6604a76b07..35dd1662862 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -3071,7 +3071,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-arxiv-researcher.lock.yml b/.github/workflows/daily-arxiv-researcher.lock.yml index 5bd1f61fd29..179c324617f 100644 --- a/.github/workflows/daily-arxiv-researcher.lock.yml +++ b/.github/workflows/daily-arxiv-researcher.lock.yml @@ -2498,7 +2498,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml index 58c253c4d89..0c2ddb07b5e 100644 --- a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml +++ b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml @@ -2733,7 +2733,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index 16fc30970b1..1f10a901f5d 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -3006,7 +3006,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-caveman-optimizer.lock.yml b/.github/workflows/daily-caveman-optimizer.lock.yml index 3fc9547c07d..1e245532b5b 100644 --- a/.github/workflows/daily-caveman-optimizer.lock.yml +++ b/.github/workflows/daily-caveman-optimizer.lock.yml @@ -3320,7 +3320,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index 17322f4ef53..852f7b525d0 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -3203,7 +3203,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index 43e8f64139e..0c7bad9fea0 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -3021,7 +3021,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 931c57e9aed..af7d5ee3bfd 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -3104,7 +3104,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 035eb4e6515..0339e41dd6b 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -3012,7 +3012,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-documentation-diagram.lock.yml b/.github/workflows/daily-documentation-diagram.lock.yml index a50391fd528..9545fcff8d2 100644 --- a/.github/workflows/daily-documentation-diagram.lock.yml +++ b/.github/workflows/daily-documentation-diagram.lock.yml @@ -2882,7 +2882,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-experiment-report.lock.yml b/.github/workflows/daily-experiment-report.lock.yml index e1514f1486e..ea87b76f3c0 100644 --- a/.github/workflows/daily-experiment-report.lock.yml +++ b/.github/workflows/daily-experiment-report.lock.yml @@ -2822,7 +2822,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 6d2fd6d13a4..e4051189e26 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -2864,7 +2864,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-formal-spec-verifier.lock.yml b/.github/workflows/daily-formal-spec-verifier.lock.yml index c481d851e2e..f2bdd215977 100644 --- a/.github/workflows/daily-formal-spec-verifier.lock.yml +++ b/.github/workflows/daily-formal-spec-verifier.lock.yml @@ -2565,7 +2565,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index 90d3e65d6e1..f3729f8464f 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -2738,7 +2738,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-go-test-parallelizer.lock.yml b/.github/workflows/daily-go-test-parallelizer.lock.yml index fb802d597fd..21ce89ccf14 100644 --- a/.github/workflows/daily-go-test-parallelizer.lock.yml +++ b/.github/workflows/daily-go-test-parallelizer.lock.yml @@ -2891,7 +2891,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index 9fc5220dc1d..363309dfe38 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -2821,7 +2821,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index fb6cf0caa21..754da3bea11 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -3163,7 +3163,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index e8b1ca26488..94f4c4f55bc 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -3179,7 +3179,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 5a6aac0cbf3..2986bfe22cd 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -3173,7 +3173,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index f6539520c2b..72d191115b5 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -3378,7 +3378,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 9ea4d68960f..0e361126859 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -3203,7 +3203,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index 997a47b1149..f41d8cffd1a 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -2758,7 +2758,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index 3699cacdc60..adb25c83e30 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -3123,7 +3123,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index 7c7835620bd..18aa335acbf 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -2754,7 +2754,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-security-observability.lock.yml b/.github/workflows/daily-security-observability.lock.yml index 21f01239230..c45adacd801 100644 --- a/.github/workflows/daily-security-observability.lock.yml +++ b/.github/workflows/daily-security-observability.lock.yml @@ -2881,7 +2881,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index be88e297b19..30447f51b52 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -3267,7 +3267,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-spdd-spec-planner.lock.yml b/.github/workflows/daily-spdd-spec-planner.lock.yml index f9e30028c5e..e103f0b5d54 100644 --- a/.github/workflows/daily-spdd-spec-planner.lock.yml +++ b/.github/workflows/daily-spdd-spec-planner.lock.yml @@ -2743,7 +2743,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-spending-forecast.lock.yml b/.github/workflows/daily-spending-forecast.lock.yml index 1ad2279f9d1..1b4d7e71195 100644 --- a/.github/workflows/daily-spending-forecast.lock.yml +++ b/.github/workflows/daily-spending-forecast.lock.yml @@ -2865,7 +2865,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-storify.lock.yml b/.github/workflows/daily-storify.lock.yml index 6f9df14fe14..d1648ed4c45 100644 --- a/.github/workflows/daily-storify.lock.yml +++ b/.github/workflows/daily-storify.lock.yml @@ -2971,7 +2971,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-workflow-security-model.lock.yml b/.github/workflows/daily-workflow-security-model.lock.yml index 152fd699399..eb34fcb61d6 100644 --- a/.github/workflows/daily-workflow-security-model.lock.yml +++ b/.github/workflows/daily-workflow-security-model.lock.yml @@ -2431,7 +2431,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml index 16728a656db..a6d62af94ee 100644 --- a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml +++ b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml @@ -3230,7 +3230,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 7b9a64acc4a..2e49ed41197 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -2511,7 +2511,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 14f737996ac..f6b5ac64907 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -3650,7 +3650,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index 923aea8a479..b390bd29752 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"326f2d69cd952cf8459df2119feadc03ce70a2d3932abb48dab2afeb2bc7e851","body_hash":"092c94df11dbb0dc76937d17d1cd382a6116005b3ecadf5959041d7b543ea272","strict":true,"agent_id":"copilot","agent_model":"gpt-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["add_comment","create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_me","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","issue_read","list_branches","list_commits","list_issue_types","list_issues","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_issues","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["add_comment","create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -46,6 +46,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -588,7 +589,6 @@ jobs: contents: read issues: read pull-requests: read - cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -704,6 +704,13 @@ jobs: # Cache configuration from frontmatter processed below - name: Dependabot burner selection context + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: dependabot-burner-selection-${{ github.run_id }} + path: /tmp/gh-aw/agent/dependabot-burner + - name: Dependabot burner selection context + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: dependabot-burner-selection-${{ github.run_id }} diff --git a/.github/workflows/detection-analysis-report.lock.yml b/.github/workflows/detection-analysis-report.lock.yml index db28ebe1ed3..00ab82e3816 100644 --- a/.github/workflows/detection-analysis-report.lock.yml +++ b/.github/workflows/detection-analysis-report.lock.yml @@ -2858,7 +2858,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 26d6c186cd1..6f26ace2c52 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -3096,7 +3096,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/eslint-miner.lock.yml b/.github/workflows/eslint-miner.lock.yml index da9dc34ebe8..8e4cbb27ca8 100644 --- a/.github/workflows/eslint-miner.lock.yml +++ b/.github/workflows/eslint-miner.lock.yml @@ -2840,7 +2840,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/evoskill-evolver.lock.yml b/.github/workflows/evoskill-evolver.lock.yml index d7f11b29fc7..acdb45069b8 100644 --- a/.github/workflows/evoskill-evolver.lock.yml +++ b/.github/workflows/evoskill-evolver.lock.yml @@ -2834,7 +2834,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/feature-grower.lock.yml b/.github/workflows/feature-grower.lock.yml index b73ac6418c4..4926bb58b0e 100644 --- a/.github/workflows/feature-grower.lock.yml +++ b/.github/workflows/feature-grower.lock.yml @@ -2351,7 +2351,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index 81dae05927f..a7022fbac23 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -2578,7 +2578,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index 9720951e665..56b8b8c090f 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -2659,7 +2659,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 4952feff2ab..e3234d3e71c 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -2462,7 +2462,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index d79d6e47d3e..3e351c1c68c 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -3069,7 +3069,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 7cf173d10df..1e0d62c55dc 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -2972,7 +2972,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 404c17b6a47..e2d6056a723 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -2860,7 +2860,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index a943b50d484..df9d218d04e 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -2895,7 +2895,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index 5adc1c13030..6a614708e5a 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"be8120ee8cd43e71a65ea89833eb22ba5b3a876f45b0cae6f47519c7c768b698","body_hash":"cd9b235f2eea7a4842c2e9792a9c8a415ebc4b388991cb81c2a67d571e5b3ca4","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["pbakaus/impeccable/.agents/skills/impeccable@19786e7a225c3688e558f8694a7c8c6a8a25d840"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["pbakaus/impeccable/.agents/skills/impeccable@19786e7a225c3688e558f8694a7c8c6a8a25d840"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -45,6 +45,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -569,7 +570,6 @@ jobs: contents: read copilot-requests: write pull-requests: read - cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -675,6 +675,15 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }} + path: /tmp/gh-aw/agent + restore-keys: | + pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}- + - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index c8f41ce3c05..6a72e93055b 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -2451,7 +2451,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index c22b2477933..69495c89def 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -2388,7 +2388,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 2c8af623c5a..a62a455c20a 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"54c18bcb686a1f6ba04fcedf7b0e4f9297e5414fecf1f13ea82a0e0fe7acdd62","body_hash":"e524959b8b93d3c190a98475abe3899cd69537794db2bdf4a6b74b9a6932c494","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -43,6 +43,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -510,7 +511,6 @@ jobs: contents: read issues: read pull-requests: read - cache-mode: read concurrency: group: "gh-aw-copilot-${{ github.workflow }}" queue: max @@ -619,6 +619,14 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Save layout spec data to cache + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: layout-spec-cache-${{ github.run_id }} + path: /tmp/gh-aw/agent/layout-cache + restore-keys: layout-spec-cache- + - name: Save layout spec data to cache + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: layout-spec-cache-${{ github.run_id }} diff --git a/.github/workflows/linter-miner.lock.yml b/.github/workflows/linter-miner.lock.yml index 5a5e0d46169..8e732f3b1a0 100644 --- a/.github/workflows/linter-miner.lock.yml +++ b/.github/workflows/linter-miner.lock.yml @@ -2479,7 +2479,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 04fe22080df..c18fc31bfc0 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -2309,7 +2309,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index 31b156965b2..e5811fceaf3 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"4b87954de14b41b8efff2f00b0fe7ad7551ebd43af42451d254f6e98ab8e0bc2","body_hash":"5ef9335cf9dc1c41708d3b3768cc3792b3dc8c60af6f1fc56c3d7157cd7036b9","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["mattpocock/skills/codebase-design@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/diagnosing-bugs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/grill-with-docs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/improve-codebase-architecture@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/tdd@49dd158d1076134a641b33efb035946536778336"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["mattpocock/skills/codebase-design@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/diagnosing-bugs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/grill-with-docs@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/improve-codebase-architecture@49dd158d1076134a641b33efb035946536778336","mattpocock/skills/tdd@49dd158d1076134a641b33efb035946536778336"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -44,6 +44,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -673,7 +674,6 @@ jobs: contents: read copilot-requests: write pull-requests: read - cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -779,6 +779,15 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} + path: /tmp/gh-aw/agent + restore-keys: | + pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha && format('{0}-', github.event.pull_request.head.sha) || '' }} + - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index 45a79bcd91e..debbeb5209a 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -2836,7 +2836,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/objective-impact-report.lock.yml b/.github/workflows/objective-impact-report.lock.yml index 3a4623adb4e..cf79cd703b4 100644 --- a/.github/workflows/objective-impact-report.lock.yml +++ b/.github/workflows/objective-impact-report.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8d45320ce38f441a165a41ac573fa73881dc43a8840a353356de18ff0ca06341","body_hash":"a66c7952cb6e7fc02028bae75e758df0112f7a54cefff838e2c5dcb28c7e481a","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["close_issue","create_issue","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"safeoutputs","tools":["close_issue","create_issue","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -39,6 +39,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -478,7 +479,6 @@ jobs: contents: read issues: read pull-requests: read - cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -586,6 +586,14 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Save objective impact report dataset cache + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: objective-impact-report-cache-${{ github.run_id }} + path: /tmp/gh-aw/agent/objective-impact-report + restore-keys: objective-impact-report-cache- + - name: Save objective impact report dataset cache + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: objective-impact-report-cache-${{ github.run_id }} diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index c2ce585301d..2e33cba874f 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -2391,7 +2391,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index ea5729edc74..3a5bbdd5458 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -2504,7 +2504,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index a87b8a3bc6f..f7b351d2fb4 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -3264,7 +3264,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/ponytail-reviewer.lock.yml b/.github/workflows/ponytail-reviewer.lock.yml index 1a367d0ee9d..aeb5aa71249 100644 --- a/.github/workflows/ponytail-reviewer.lock.yml +++ b/.github/workflows/ponytail-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"27c79195ab7529356c5858163c42c5174c53a855b09849621cdccb4b89105c69","body_hash":"5bbf29c8bdec373cf68befed46bd04a57a9c8d86c26106c4cd55e5c23c42c7ff","strict":true,"agent_id":"codex","agent_model":"openai/gpt-5.6-terra","engine_versions":{"codex":"0.164.0"}} -# gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["DietrichGebert/ponytail/skills/ponytail-review@09c434ab73ca43761c5d8b0c5d341926c2fba710"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"skills":["DietrichGebert/ponytail/skills/ponytail-review@09c434ab73ca43761c5d8b0c5d341926c2fba710"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -46,6 +46,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -605,7 +606,6 @@ jobs: contents: read copilot-requests: write pull-requests: read - cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -711,6 +711,15 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} + path: /tmp/gh-aw/agent + restore-keys: | + pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha && format('{0}-', github.event.pull_request.head.sha) || '' }} + - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index 4a8841a94e8..9b4f0b47ae1 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -2484,7 +2484,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index 9a8082b8664..dd1a5a61170 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8009c5eec04c98445dcba7823a4fc49e14dbb2267e7122e00a78162fd2e7d673","body_hash":"4ca40ffb96ba078c06fd9b549349765c4cb72a760b472ba13a7af66980efe78a","strict":true,"agent_id":"copilot","agent_model":"copilot/gpt-5","engine_versions":{"copilot":"1.0.103","copilot-sdk":"1.0.16"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["create_check_run","create_pull_request_review_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -44,6 +44,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -567,7 +568,6 @@ jobs: copilot-requests: write issues: read pull-requests: read - cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -690,6 +690,15 @@ jobs: await main(); # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} + path: /tmp/gh-aw/agent + restore-keys: | + pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha && format('{0}-', github.event.pull_request.head.sha) || '' }} + - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index 7b5565ac633..47d640bef6b 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"0cb9aac0e9f5f5dfe99acd1bb8414dc4a002b0a2cd49fb33a12404e3c24253c9","body_hash":"f6837c0e4406a81aeaa7aaa79a31beeffebd4063938e58f9a1a2e9005c54c125","strict":true,"agent_id":"claude","engine_versions":{"claude":"2.1.310"}} -# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"6d4fd22b20465ccc0f7354476588e8df7c9ca0e0","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"astral-sh/setup-uv","sha":"07a047e608db84b3d8c06cd9a7c7dcc9c355c18e","version":"v10.3.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","list_branches","list_commits","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["create_discussion","noop","report_incomplete","report_missing_data","report_missing_tool","upload_asset"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"6d4fd22b20465ccc0f7354476588e8df7c9ca0e0","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"astral-sh/setup-uv","sha":"07a047e608db84b3d8c06cd9a7c7dcc9c355c18e","version":"v10.3.2"},{"repo":"docker/build-push-action","sha":"c3c9e263c25d99ce0380d002d59b67737d91b0dc","version":"v7.4.0"},{"repo":"docker/setup-buildx-action","sha":"f87e5991a6d7451dcb8d9637bfbc97413f497069","version":"v4.4.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"mcp_servers":[{"name":"agenticworkflows","tools":["*"]},{"name":"github","tools":["get_commit","get_file_contents","get_latest_release","get_pull_request","get_pull_request_comments","get_pull_request_diff","get_pull_request_files","get_pull_request_review_comments","get_pull_request_reviews","get_pull_request_status","get_release_by_tag","get_tag","list_branches","list_commits","list_pull_requests","list_releases","list_starred_repositories","list_tags","pull_request_read","search_code","search_pull_requests","search_repositories"]},{"name":"safeoutputs","tools":["create_discussion","noop","report_incomplete","report_missing_data","report_missing_tool","upload_asset"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -52,6 +52,7 @@ # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -511,7 +512,6 @@ jobs: contents: read issues: read pull-requests: read - cache-mode: read concurrency: group: "gh-aw-claude-${{ github.workflow }}" queue: max @@ -714,6 +714,14 @@ jobs: # Cache configuration from frontmatter processed below - name: Save prompt clustering data to cache + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: prompt-clustering-cache-${{ github.run_id }} + path: /tmp/gh-aw/agent/prompt-cache + restore-keys: prompt-clustering-cache- + - name: Save prompt clustering data to cache + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: prompt-clustering-cache-${{ github.run_id }} @@ -2472,7 +2480,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/purelock.lock.yml b/.github/workflows/purelock.lock.yml index 5748cede9ea..445a8dee1c2 100644 --- a/.github/workflows/purelock.lock.yml +++ b/.github/workflows/purelock.lock.yml @@ -3165,7 +3165,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index a44b10ab5d0..68d5f3b6269 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -2435,7 +2435,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/refactoring-cadence.lock.yml b/.github/workflows/refactoring-cadence.lock.yml index f77c82d882e..6416b21deb8 100644 --- a/.github/workflows/refactoring-cadence.lock.yml +++ b/.github/workflows/refactoring-cadence.lock.yml @@ -2329,7 +2329,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index 5a1fe030205..bb62a475a16 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -2734,7 +2734,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index f3673e811eb..7679a5436b6 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -2292,7 +2292,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 8e9edf13488..e001c123581 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -2414,7 +2414,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index c77b75d5a59..77986a8d1cf 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -2282,7 +2282,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 6d63c702d17..63318f69bf7 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -2601,7 +2601,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 4b31c8482e7..e84a3b76060 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -2606,7 +2606,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 24aee0895d5..a97a8f0a15a 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -3379,7 +3379,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 225c62efff7..5af842ba028 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -3203,7 +3203,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index 76f06f426cd..06927e88908 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -4496,7 +4496,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index b217c3f5f0e..4710e707684 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -4525,7 +4525,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index a52cf92ab36..2b17d4fe357 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -3735,7 +3735,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 31019195bdf..e716e8b1c79 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -4511,7 +4511,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-deepseek-harness.lock.yml b/.github/workflows/smoke-deepseek-harness.lock.yml index 76772349c65..ab354bdf388 100644 --- a/.github/workflows/smoke-deepseek-harness.lock.yml +++ b/.github/workflows/smoke-deepseek-harness.lock.yml @@ -2641,7 +2641,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-drive.lock.yml b/.github/workflows/smoke-drive.lock.yml index 8c8959675c6..99d56f3cd8f 100644 --- a/.github/workflows/smoke-drive.lock.yml +++ b/.github/workflows/smoke-drive.lock.yml @@ -2613,7 +2613,9 @@ jobs: - activation - agent - detection - if: always() && needs.detection.result == 'success' && needs.agent.result == 'success' + if: > + always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && + needs.agent.result == 'success' runs-on: ubuntu-latest # Permissions for the update_drive_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 66ecf8e6989..2e4d9da177b 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -3137,7 +3137,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-goose.lock.yml b/.github/workflows/smoke-goose.lock.yml index 08a6126dfef..139e41ca8ee 100644 --- a/.github/workflows/smoke-goose.lock.yml +++ b/.github/workflows/smoke-goose.lock.yml @@ -2889,7 +2889,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index 131954118b6..a447d761187 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -2823,7 +2823,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index 39893492ed6..27570fd725d 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -2537,7 +2537,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index 014eac7f8b3..43af0b3831a 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -2729,7 +2729,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index 1e1b73af74c..9d157b296cb 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -2904,7 +2904,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index 86eae43d448..a323ab9af79 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -2486,7 +2486,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index a7681384a90..8c0e15d8671 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -2913,7 +2913,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index b39a1c273ff..f983cbaa2d6 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -2553,7 +2553,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index f3468c2dd9d..18cd2a0681a 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -2320,7 +2320,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index cf1f9f08e2c..906f05e81e5 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -2361,7 +2361,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index da98aad777a..e3be22f891e 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -3081,7 +3081,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index 485b3f62c79..f7bd5056c40 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -1,5 +1,5 @@ # gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"74eeb48d2038a4e7ce9550248b27283d32f276fcf116bf4cfaf3d43e89419838","body_hash":"31ab401e5b7ee4f5eb709116a6c78289f7e52bcd112a17e03ebaff87d069883a","strict":true,"agent_id":"copilot","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"copilot":"1.0.103"}} -# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} +# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0","digest":"sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.29.0@sha256:b14bd399376180b5649a9324be3b50fbfc82bfe8f0c80045840416b5a4e65b96"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0","digest":"sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.29.0@sha256:baff00b856a4bdc93bce134928c70af3d3492f2e518757115042040674d56b0b"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0","digest":"sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.29.0@sha256:087a8e4efff8ac62d46e106cd22005c002822b1481fc233097799511be353b5d"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0","digest":"sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.29.0@sha256:6e0cbf7f980beb78b5461563a8164f6439ca959bc93733d5a6b52972e523ed50"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.5.0","digest":"sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.5.0@sha256:d3544a4222e7efeeeb38669d8a1af0c72691c55b8f6506b15aa5920f7f31b7bc"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f","pinned_image":"ghcr.io/github/gh-aw-node@sha256:2c2ea524e648b91c8333ce246e3838fcf5b19ac70e45baac1a51b9207299749f"},{"image":"ghcr.io/github/github-mcp-server:v2.0.3","digest":"sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.3@sha256:250bc6ce70788207608ef74cef4397230ff2e8481218da74d6093e4bd9101132"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","noop","report_incomplete","report_missing_data","report_missing_tool","submit_pull_request_review"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # # ___ _ _ @@ -41,6 +41,7 @@ # # Custom actions used: # - actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 +# - actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 # - actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 # - actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2 # - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 @@ -604,7 +605,6 @@ jobs: contents: read copilot-requests: write pull-requests: read - cache-mode: read timeout-minutes: 60 env: DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} @@ -718,6 +718,15 @@ jobs: # Cache configuration from frontmatter processed below - name: Cache (pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }}) + if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + key: pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }} + path: /tmp/gh-aw/agent + restore-keys: | + pr-test-prefetch-${{ github.event.pull_request.number || github.event.issue.number }}- + - name: Cache (pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }}) + if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }} diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index cf30080e6fd..053ac20f9f2 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -2972,7 +2972,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index dae82d80528..15978af2080 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -2288,7 +2288,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/weekly-network-domains-audit.lock.yml b/.github/workflows/weekly-network-domains-audit.lock.yml index a04f2d748d8..4aa923ffa3d 100644 --- a/.github/workflows/weekly-network-domains-audit.lock.yml +++ b/.github/workflows/weekly-network-domains-audit.lock.yml @@ -2233,7 +2233,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/windows-grower.lock.yml b/.github/workflows/windows-grower.lock.yml index 2d2ca3c035b..33867611790 100644 --- a/.github/workflows/windows-grower.lock.yml +++ b/.github/workflows/windows-grower.lock.yml @@ -2354,7 +2354,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index 03c2ab5f6e1..baba7e083f2 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -2362,7 +2362,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md index acc6fedc08f..8c94f2572b0 100644 --- a/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md +++ b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md @@ -1,50 +1,38 @@ -# ADR-72543: Detection-Gated Cache Access via Job-Level `cache-mode` +# ADR-72543: Detection-gated cache access via job-level `cache-mode` -**Date**: 2026-05-14 -**Status**: Draft -**Deciders**: pelikhan (PR author); [TODO: verify reviewers] +## Status ---- +Proposed in [PR #72543](https://github.com/github/gh-aw/pull/72543). +Adoption is pending repository maintainer review; no decider identities or human approval are asserted by this record. -### Context +## Context -When threat detection is enabled, compiled workflows run the agent job before detection has judged its output, and a separate cache-memory publisher job later persists agent memory. Previously the agent job used restore-only cache *actions*, but selecting a restore-only action does not restrict the job's scoped cache token, so agent-executed code could still write to the Actions cache before detection ran. In addition, detection running in warning mode can leave the detection job successful while its verdict rejects persistence, so "detection job succeeded" was not a sufficient gate for the publisher. GitHub.com now supports a `cache-mode` field at workflow and job level that limits the cache token's capability; GHES deployments may not support it. +An agent executes before threat detection can judge its output. Selecting a restore-only cache action does not restrict the job's scoped cache token: agent-executed code can still call the cache service directly. Preventing publication before detection therefore requires a platform-enforced token boundary, not just a different cache action. -### Decision +Cache-memory publication must remain possible after detection explicitly accepts the run. Detection in warning mode can succeed as a job while rejecting persistence, so job success alone is not an acceptance signal. Acceptance also does not establish artifact authenticity or turn low-trust inputs into trusted cache content. -We will use the platform `cache-mode` field as the cache-access boundary for detection-gated workflows. On GitHub.com, the compiler emits `cache-mode: read` on the agent job whenever detection is enabled (for every trigger type, including trusted, mixed, dispatch, and expression-controlled detection), and compiles frontmatter dependency caches as restore-only. The separate cache-memory publisher gets `cache-mode: write-only` and only runs when the agent and detection jobs succeed **and** `needs.detection.outputs.detection_success == 'true'`. GHES compatibility mode omits all compiler-generated `cache-mode` fields. The Actions AST preserves job-level `cache-mode`, and the `cache-poisoning` linter warns about explicit `write`/`write-only` overrides on `pull_request_target`, `issue_comment`, and `workflow_run`, including inherited workflow-level and reusable-caller modes. +GitHub.com supports workflow- and job-level `cache-mode` token policies. GHES compatibility mode cannot assume that support. Trusted workflows also use dependency caches, whose existing save behavior should not be lost merely because threat detection is enabled. -### Alternatives Considered +## Decision -#### Alternative 1: Rely on restore-only cache actions alone +Use job-level `cache-mode` on GitHub.com to limit agent cache access while detection is pending, except where trusted dependency-cache saves require the platform's trigger-scoped default token. Without dependency-cache saves, the detection-enabled agent uses `cache-mode: read`. With dependency caches, low-trust events use restore-only actions and inherit the platform's read-only default; trusted events retain combined restore/save actions and the platform's default write access. Runtime event conditions preserve that distinction in mixed-trigger workflows because `cache-mode` accepts literal values, not event-dependent expressions. -Keep the existing approach of using restore-only cache actions in the agent job. This needs no new platform feature and works on GHES. It was rejected because the action choice doesn't constrain the job's cache token: code running in the agent job can still write cache entries directly, which leaves the cache-poisoning path open. +A separate cache-memory publisher uses `cache-mode: write-only` and requires both successful prerequisite jobs and explicit detection acceptance (`needs.detection.outputs.detection_success == 'true'`). Missing acceptance, rejected output, or runtime-skipped detection must not authorize publication. The publisher must also be disabled at runtime for `pull_request_target`, `issue_comment`, and `workflow_run`: detection acceptance does not justify overriding their low-trust defaults or writing cache lineages restored by higher-trust runs. -#### Alternative 2: Workflow-level read-only cap +GHES compatibility mode omits compiler-generated `cache-mode` fields. The Actions AST preserves authored job-level policies, and the `cache-poisoning` linter warns about explicit `write` or `write-only` overrides on `pull_request_target`, `issue_comment`, and `workflow_run`, including inherited workflow and reusable-caller policies. The actionlint compatibility filter ignores only unsupported-key diagnostics at the supported workflow and job locations, not misplaced keys or malformed values. -Set `cache-mode: read` once at workflow level for detection-enabled workflows. This is simpler and covers every job. It was rejected because it would also block the intended cache-memory publisher, which must write after detection accepts the output. The spec explicitly says the compiler MUST NOT impose a workflow-wide read cap that prevents this publication path. +### Alternatives considered -#### Alternative 3: Gate the publisher only on detection job success +- **Restore-only actions alone:** Compatible with GHES and simpler, but insufficient because they do not restrict direct cache writes using the job token. +- **Workflow-level read-only cap:** Restricts the agent, but also prevents the separate publisher from writing accepted memory and disables trusted dependency-cache saves. Job-level policies and trigger-scoped defaults preserve those responsibilities. +- **Publisher gated only on detection job success:** Insufficient in warning mode, where a successful job can still reject persistence. An explicit acceptance output is required. -Run the publisher whenever the detection job finishes successfully, without checking the `detection_success` output. This is simpler, but in warning mode the detection job can succeed even when its verdict rejects persistence, so rejected output could still be persisted. +## Consequences -### Consequences +The GitHub.com agent token cannot write caches while the detection gate is active unless trusted dependency-cache compatibility requires the platform default. Publication requires an explicit acceptance signal and is disabled for the three low-trust event types above. On eligible runs the separate publisher can write without receiving cache-read access. -#### Positive -- The agent job's cache token is limited to reads on GitHub.com, so agent-executed code can't poison caches before detection runs. -- Persistence requires an explicit detection acceptance (`detection_success == 'true'`), so warning-mode rejections, missing acceptance, and runtime-skipped detection all block publication. -- The linter flags explicit write overrides on low-trust triggers, including inherited modes, so authors notice when they widen cache access. +Trusted dependency-cache saves are intentionally not detection-gated. A trusted agent with those caches retains direct token write capability before detection runs; restore-only actions would not remove that capability. This is a compatibility tradeoff, not a claim that detection attests cached dependencies. -#### Negative -- The publisher's explicit `write-only` mode deliberately overrides the platform's low-trust read-only default. Its security depends on detection plus input validation, and detection acceptance is not artifact authenticity or attestation. -- GHES deployments get no scoped-token enforcement because `cache-mode` is omitted there, so behavior differs by platform. -- Regenerates around 307 lock files and adds compiler, AST, and linter surface that must stay in sync with platform `cache-mode` semantics. +GHES does not receive scoped-token enforcement from these generated fields. Restore-only actions there are not an equivalent security boundary. Authored custom jobs, third-party cache writers, dependency-cache namespaces, and persistent runner caches require their own review; detection acceptance is not attestation. -#### Neutral -- Workflows without detection keep their existing same-job cache-memory behavior. Dry-run omits the publisher and stays read-only. -- Authored custom jobs, third-party cache writers, dependency-cache namespaces, and persistent runner caches stay outside this boundary and need their own review. -- The detector's internal no-output short-circuit still counts as acceptance. - ---- - -*ADR created by [adr-writer agent]. Review and finalize before changing status from Draft to Accepted.* +Compiler job policies, detection conditions, cache actions, AST validation, lint compatibility, and generated locks must remain consistent. Trusted dependency-cache save behavior must be covered by regression tests. Workflows without detection retain their existing same-job cache-memory behavior. Dry-run compilation omits the publisher and uses restore-only compiler-managed actions, with scoped-token read restrictions only outside GHES compatibility mode. diff --git a/docs/src/content/docs/reference/cache-memory.md b/docs/src/content/docs/reference/cache-memory.md index 55627ccb87a..b4ae0ffbc36 100644 --- a/docs/src/content/docs/reference/cache-memory.md +++ b/docs/src/content/docs/reference/cache-memory.md @@ -169,15 +169,17 @@ Do not store sensitive data in cache memory. It follows repository permissions, ### Cache access boundaries -On GitHub.com, detection-enabled workflows give the agent job `cache-mode: read`. This restricts its scoped cache token, including dependency caches and custom cache actions in that job; selecting a restore-only action alone would not restrict other writers. Frontmatter `cache:` entries also use `actions/cache/restore` in this mode. This applies to every trigger, including mixed-trigger workflows and `repository_dispatch`. +On GitHub.com, detection-enabled workflows without frontmatter dependency caches give the agent job `cache-mode: read`. This restricts its scoped cache token; selecting a restore-only action alone would not restrict other writers. -Writable cache-memory entries are published by the separate `update_cache_memory` job with `cache-mode: write-only`. The job requires successful agent and detection jobs and `needs.detection.outputs.detection_success == 'true'`, then applies configured memory validation before saving. Detection warnings, rejected verdicts, missing acceptance outputs, failed jobs, and a detection job skipped by its runtime condition block persistence even when `continue-on-error` permits other safe outputs. The detector's internal no-output short-circuit still reports acceptance; it is not evidence that every cached file was scanned. +Workflows with frontmatter `cache:` entries instead retain the platform's trigger-scoped token defaults so dependency caches can still be populated. Runtime event conditions select restore-only actions for `pull_request_target`, `issue_comment`, and `workflow_run`, and combined restore/save actions for other events, including `push`, `workflow_dispatch`, and `repository_dispatch`. This also applies to mixed-trigger workflows. Trusted dependency-cache saves are not detection-gated, and agents on those events retain direct token write capability before detection. -The publisher's explicit write capability deliberately overrides GitHub's read-only cache default for triggers such as `pull_request_target`, `issue_comment`, and `workflow_run`. It authorizes this bounded publication path, not arbitrary agent cache writes, and does not authenticate the uploaded artifact or cached content. Treat memory as data, not executable code. A successful detector verdict is not a provenance guarantee. +Writable cache-memory entries are published by the separate `update_cache_memory` job with `cache-mode: write-only`. The job requires successful agent and detection jobs and `needs.detection.outputs.detection_success == 'true'`, then applies configured memory validation before saving. It never runs on `pull_request_target`, `issue_comment`, or `workflow_run`, even after detector acceptance, so those events cannot publish into the lineage trusted runs restore. Detection warnings, rejected verdicts, missing acceptance outputs, failed jobs, and a detection job skipped by its runtime condition block persistence even when `continue-on-error` permits other safe outputs. The detector's internal no-output short-circuit still reports acceptance; it is not evidence that every cached file was scanned. + +The publisher's explicit write capability is restricted to eligible events by its job condition; detector acceptance alone cannot authorize low-trust publication. Neither this capability nor a detector verdict authenticates the uploaded artifact or cached content. Treat memory as data, not executable code. Dry-run compilation uses restore-only compiler-managed cache actions and omits the cache-memory publisher. Outside GHES compatibility mode, it also sets workflow-level and agent-job `cache-mode: read`. `restore-only: true` entries are never published. -For servers that do not support `cache-mode`, enable [GHES compatibility mode](/gh-aw/reference/enterprise-configuration/#ghes-compatibility-mode) with `gh aw compile --ghes my-workflow.md` or `"ghes": true` in `.github/workflows/aw.json`, then recompile. This omits compiler-generated `cache-mode` fields even during dry-run and also changes artifact-action pins. GitHub's announcement confirms GitHub.com availability, not a GHES release. Cache-memory restore-only agent actions and publisher validation gates remain, but ordinary frontmatter dependency caches retain combined restore/save actions outside dry-run. Without scoped-token enforcement, arbitrary cache writers are not constrained by this compiler boundary. +For servers that do not support `cache-mode`, enable [GHES compatibility mode](/gh-aw/reference/enterprise-configuration/#ghes-compatibility-mode) with `gh aw compile --ghes my-workflow.md` or `"ghes": true` in `.github/workflows/aw.json`, then recompile. This omits compiler-generated `cache-mode` fields even during dry-run and also changes artifact-action pins. GitHub's announcement confirms GitHub.com availability, not a GHES release. Cache-memory restore-only agent actions, publisher event/validation gates, and event-conditioned dependency-cache actions remain. Without scoped-token enforcement, arbitrary cache writers are not constrained by this compiler boundary. Without detection, existing same-job cache-memory behavior is unchanged: cache saves depend on the platform's trigger-based defaults. GitHub.com defaults low-trust default-branch triggers to read-only, while `push`, `workflow_dispatch`, and `repository_dispatch` can write by default. Custom jobs have their own cache-access boundary. The [`cache-poisoning` linter](/gh-aw/reference/workflow-linters/) warns about effective explicit write overrides on `pull_request_target`, `issue_comment`, and `workflow_run`; it does not prove a dedicated publisher safe or validate arbitrary shell cache operations. diff --git a/docs/src/content/docs/reference/compilation-process.md b/docs/src/content/docs/reference/compilation-process.md index 590b4215ce6..d43d9737c9d 100644 --- a/docs/src/content/docs/reference/compilation-process.md +++ b/docs/src/content/docs/reference/compilation-process.md @@ -329,8 +329,8 @@ unrecognized versions fall back to Docker. Local actionlint uses shellcheck and pyflakes from `PATH` when those integrations are enabled; it does not install them. Compilation and `gh aw lint` ignore actionlint's unsupported-key diagnostic for -workflow-level `cache-mode`. Other syntax and security diagnostics, including -misplaced `cache-mode` keys, are unaffected. +workflow- and job-level `cache-mode`. Other syntax and security diagnostics, +including step-level keys, misspelled keys, and malformed values, are unaffected. ### Development Testing Mode diff --git a/docs/src/content/docs/reference/enterprise-configuration.md b/docs/src/content/docs/reference/enterprise-configuration.md index 39dcd92c3e0..e773d094652 100644 --- a/docs/src/content/docs/reference/enterprise-configuration.md +++ b/docs/src/content/docs/reference/enterprise-configuration.md @@ -23,7 +23,7 @@ gh-aw includes a GHES compatibility mode toggle (`aw.json` `ghes` or `gh aw comp Compatibility mode also omits compiler-generated workflow and job `cache-mode` fields, including dry-run fields. The [GitHub announcement](https://github.blog/changelog/2026-09-10-control-github-actions-cache-access-with-cache-mode/) establishes availability on GitHub.com, not a supported GHES release. Enable compatibility mode when the target server does not support this syntax, then recompile the workflows. This is the existing combined GHES switch, not an independent cache-only option or automatic server-version negotiation. > [!WARNING] -> Omitting `cache-mode` removes the scoped-token cache restriction. Detection-enabled cache-memory restores and publisher validation gates remain, but ordinary frontmatter dependency caches retain combined restore/save actions outside dry-run. Dry-run still uses restore-only compiler-managed cache actions and omits the cache-memory publisher; it cannot constrain arbitrary cache writers through the scoped token on unsupported servers. See [cache access boundaries](/gh-aw/reference/cache-memory/#cache-access-boundaries). +> Omitting `cache-mode` removes the scoped-token cache restriction. Detection-enabled cache-memory restores, publisher event/validation gates, and event-conditioned dependency-cache actions remain. Dry-run still uses restore-only compiler-managed cache actions and omits the cache-memory publisher; it cannot constrain arbitrary cache writers through the scoped token on unsupported servers. See [cache access boundaries](/gh-aw/reference/cache-memory/#cache-access-boundaries). This compatibility path supports GHES 3.21.x and earlier when the workflow runs on Actions Runner 2.327.1 or later, which is required by the Node.js 24 runtime used by these pinned artifact actions. For later GHES releases, keep compatibility mode enabled until your instance supports the v4 artifact backend. diff --git a/pkg/cli/lint_command.go b/pkg/cli/lint_command.go index 6ae5231cb81..d17ffd13ee5 100644 --- a/pkg/cli/lint_command.go +++ b/pkg/cli/lint_command.go @@ -29,8 +29,9 @@ var defaultGhAwActionlintIgnorePatterns = []string{ `property "workflow_(repository|sha|ref|file_path)" is not defined in object type`, // GitHub is rolling out queue under concurrency before actionlint support. `unexpected key "queue" for "concurrency" section`, - // Dry-run workflows use GitHub's workflow-level cache policy before actionlint support. + // Generated workflows use GitHub's workflow/job cache policies before actionlint support. `^unexpected key "cache-mode" for "workflow" section(\.|$)`, + `^unexpected key "cache-mode" for "job" section(\.|$)`, // gh-aw injects additional activation context properties in generated workflows. `property "(activation|activated)" is not defined in object type`, // gh-aw injects additional artifact context properties in generated workflows. diff --git a/pkg/cli/lint_command_test.go b/pkg/cli/lint_command_test.go index a72497b55cd..87bc2ddd0f6 100644 --- a/pkg/cli/lint_command_test.go +++ b/pkg/cli/lint_command_test.go @@ -112,16 +112,34 @@ func TestActionlintCacheModeCompatibility(t *testing.T) { }, { name: "job cache policy", + message: `unexpected key "cache-mode" for "job" section. expected one of "concurrency", "container", "defaults", "env", "environment"`, + ignored: true, + }, + { + name: "job cache policy without expected keys", message: `unexpected key "cache-mode" for "job" section`, + ignored: true, }, { name: "step cache policy", message: `unexpected key "cache-mode" for "step" section`, }, + { + name: "run step cache policy", + message: `unexpected key "cache-mode" for step to run shell command. expected one of "continue-on-error", "env", "id", "if", "name", "run", "shell", "timeout-minutes", "working-directory"`, + }, { name: "misspelled workflow key", message: `unexpected key "cache-modes" for "workflow" section`, }, + { + name: "misspelled job key", + message: `unexpected key "cache-modes" for "job" section`, + }, + { + name: "invalid job section suffix", + message: `unexpected key "cache-mode" for "job" sectional`, + }, { name: "other workflow key", message: `unexpected key "unknown-key" for "workflow" section`, @@ -134,6 +152,10 @@ func TestActionlintCacheModeCompatibility(t *testing.T) { name: "other diagnostic mentioning the key", message: `invalid expression: unexpected key "cache-mode" for "workflow" section`, }, + { + name: "other diagnostic mentioning the job key", + message: `invalid expression: unexpected key "cache-mode" for "job" section`, + }, } { t.Run(tt.name, func(t *testing.T) { ignored := false diff --git a/pkg/workflow/cache_access_test.go b/pkg/workflow/cache_access_test.go index 6a99aef6dbf..8c7f89c7b81 100644 --- a/pkg/workflow/cache_access_test.go +++ b/pkg/workflow/cache_access_test.go @@ -39,15 +39,15 @@ func TestCompiledCacheAccessBoundaries(t *testing.T) { assert.NotContains(t, jobs, "update_cache_memory") return } - assert.Equal(t, "read", agent["cache-mode"]) - assert.NotContains(t, agentSteps, "actions/cache@") + assert.NotContains(t, agent, "cache-mode", "dependency caches inherit trigger-scoped access so trusted runs can save") + assert.Contains(t, agentSteps, "actions/cache@") assert.NotContains(t, agentSteps, "actions/cache/save@") assert.Contains(t, agentSteps, "actions/cache/restore@") publisher := jobs["update_cache_memory"].(map[string]any) assert.Equal(t, "write-only", publisher["cache-mode"]) assert.Equal(t, map[string]any{"actions": "write", "contents": "read"}, publisher["permissions"]) condition := strings.Join(strings.Fields(publisher["if"].(string)), " ") - assert.Equal(t, "always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && needs.agent.result == 'success'", condition) + assert.Equal(t, "always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run'", condition) assert.ElementsMatch(t, []any{"activation", "agent", "detection"}, publisher["needs"]) publisherSteps := fmt.Sprint(publisher["steps"]) assert.Contains(t, publisherSteps, "actions/cache/save@") @@ -56,9 +56,10 @@ func TestCompiledCacheAccessBoundaries(t *testing.T) { require.NoError(t, err, "generated job cache modes must remain readable by native lint") for _, job := range native.Jobs { if string(job.ID) == "agent" { - assert.Equal(t, "read", job.CacheMode) + assert.Empty(t, job.CacheMode) } } + assertDependencyCacheTrustGates(t, agent) }) } } @@ -74,8 +75,13 @@ func TestCompiledCacheAccessDryRunAndGHES(t *testing.T) { agent := jobs["agent"].(map[string]any) if ghes { assert.NotContains(t, content, "cache-mode:") - } else { + } else if dryRun { assert.Equal(t, "read", agent["cache-mode"]) + } else { + assert.NotContains(t, agent, "cache-mode") + } + if !dryRun { + assertDependencyCacheTrustGates(t, agent) } if dryRun || restoreOnly { assert.NotContains(t, jobs, "update_cache_memory") @@ -99,6 +105,14 @@ func TestCompiledCacheAccessDryRunAndGHES(t *testing.T) { } } +func TestCacheMemoryAgentRemainsReadOnlyWithoutDependencyCaches(t *testing.T) { + for _, event := range []string{"push", "issue_comment"} { + compiled, _ := compileCacheAccessFixture(t, event, "true", false, false, false, false) + agent := compiled["jobs"].(map[string]any)["agent"].(map[string]any) + assert.Equal(t, "read", agent["cache-mode"]) + } +} + func TestCachePublisherRequiresDetectionAcceptance(t *testing.T) { data := &WorkflowData{ CacheMemoryConfig: &CacheMemoryConfig{Caches: []CacheMemoryEntry{{ID: "default"}}}, @@ -112,20 +126,68 @@ func TestCachePublisherRequiresDetectionAcceptance(t *testing.T) { for _, agent := range []string{"success", "failure", "cancelled", "skipped", ""} { for _, detection := range []string{"success", "failure", "cancelled", "skipped", ""} { for _, accepted := range []string{"true", "false", ""} { - values := map[string]string{ - "needs.agent.result": agent, - "needs.detection.result": detection, - "needs.detection.outputs.detection_success": accepted, + for _, event := range []string{"push", "workflow_dispatch", "repository_dispatch", "schedule", "pull_request_target", "issue_comment", "workflow_run"} { + values := map[string]string{ + "needs.agent.result": agent, + "needs.detection.result": detection, + "needs.detection.outputs.detection_success": accepted, + "github.event_name": event, + } + trusted := event != "pull_request_target" && event != "issue_comment" && event != "workflow_run" + assert.Equal(t, trusted && agent == "success" && detection == "success" && accepted == "true", + evaluateCacheTrustGate(t, node, values), + "event=%s agent=%s detection=%s detection_success=%s", event, agent, detection, accepted) } - assert.Equal(t, agent == "success" && detection == "success" && accepted == "true", - evaluateDetectionRedactionGate(t, node, values), - "agent=%s detection=%s detection_success=%s", agent, detection, accepted) } } } } -func compileCacheAccessFixture(t *testing.T, trigger, detection string, ghes, dryRun, restoreOnly bool) (map[string]any, string) { +func assertDependencyCacheTrustGates(t *testing.T, agent map[string]any) { + t.Helper() + for _, event := range []string{"push", "workflow_dispatch", "repository_dispatch", "pull_request_target", "issue_comment", "workflow_run"} { + var activeActions []string + for _, rawStep := range agent["steps"].([]any) { + step := rawStep.(map[string]any) + if step["name"] != "Cache (dependencies)" { + continue + } + condition, err := ParseExpression(stripExpressionWrapper(step["if"].(string))) + require.NoError(t, err) + if evaluateCacheTrustGate(t, condition, map[string]string{"github.event_name": event}) { + activeActions = append(activeActions, step["uses"].(string)) + } + } + require.Len(t, activeActions, 1, "event=%s", event) + if event == "pull_request_target" || event == "issue_comment" || event == "workflow_run" { + assert.Contains(t, activeActions[0], "actions/cache/restore@") + } else { + assert.Contains(t, activeActions[0], "actions/cache@", "trusted dependency caches must retain their post-action save") + } + } +} + +func evaluateCacheTrustGate(t *testing.T, node ConditionNode, values map[string]string) bool { + t.Helper() + switch node := node.(type) { + case *AndNode: + return evaluateCacheTrustGate(t, node.Left, values) && evaluateCacheTrustGate(t, node.Right, values) + case *OrNode: + return evaluateCacheTrustGate(t, node.Left, values) || evaluateCacheTrustGate(t, node.Right, values) + case *NotNode: + return !evaluateCacheTrustGate(t, node.Child, values) + case *ExpressionNode: + if property, expected, found := strings.Cut(node.Expression, " != '"); found { + expected, quoted := strings.CutSuffix(expected, "'") + require.True(t, quoted) + require.Contains(t, values, property) + return values[property] != expected + } + } + return evaluateDetectionRedactionGate(t, node, values) +} + +func compileCacheAccessFixture(t *testing.T, trigger, detection string, ghes, dryRun, restoreOnly bool, dependencyCache ...bool) (map[string]any, string) { t.Helper() source := fmt.Sprintf(`--- on: %s @@ -151,6 +213,9 @@ jobs: --- Test cache access separation. `, trigger, restoreOnly, detection) + if len(dependencyCache) > 0 && !dependencyCache[0] { + source = strings.Replace(source, "cache:\n key: dependencies\n path: node_modules\n", "", 1) + } dir := t.TempDir() path := filepath.Join(dir, "cache.md") require.NoError(t, os.WriteFile(path, []byte(source), 0600)) diff --git a/pkg/workflow/cache_memory.go b/pkg/workflow/cache_memory.go index 5d7adcc13ef..c531c491ff1 100644 --- a/pkg/workflow/cache_memory.go +++ b/pkg/workflow/cache_memory.go @@ -559,11 +559,10 @@ func (c *Compiler) buildUpdateCacheMemoryJob(data *WorkflowData, threatDetection BuildPropertyAccess(fmt.Sprintf("needs.%s.result", constants.AgentJobName)), BuildStringLiteral("success"), ) - detectionAccepted := BuildAnd(buildDetectionSuccessCondition(), BuildEquals( - BuildPropertyAccess(fmt.Sprintf("needs.%s.outputs.detection_success", constants.DetectionJobName)), - BuildStringLiteral("true"), + jobCondition := RenderCondition(BuildAnd( + BuildAnd(BuildAnd(BuildFunctionCall("always"), buildDetectionAcceptedCondition()), agentSucceeded), + cacheWriteAllowedCondition(), )) - jobCondition := RenderCondition(BuildAnd(BuildAnd(BuildFunctionCall("always"), detectionAccepted), agentSucceeded)) // Set up permissions for the cache update job. // actions: write is required only when this job actually emits cache-save steps. diff --git a/pkg/workflow/cache_steps.go b/pkg/workflow/cache_steps.go index f520619122f..edecd2592e0 100644 --- a/pkg/workflow/cache_steps.go +++ b/pkg/workflow/cache_steps.go @@ -25,14 +25,35 @@ func generateCacheSteps(builder *strings.Builder, data *WorkflowData, verbose bo return } for i, cache := range caches { - if data.DryRun || (!data.GHES && IsDetectionJobEnabled(data.SafeOutputs)) { + if data.DryRun { writeCacheStepWithAction(builder, cache, i, len(caches), "actions/cache/restore") + } else if IsDetectionJobEnabled(data.SafeOutputs) { + // Match the runner's trigger-scoped cache-write boundary, including + // workflows that mix trusted and low-trust events. + trusted := cacheWriteAllowedCondition() + writeConditionalCacheStep(builder, cache, i, len(caches), "actions/cache", trusted) + writeConditionalCacheStep(builder, cache, i, len(caches), "actions/cache/restore", &NotNode{Child: trusted}) } else { writeCacheStep(builder, cache, i, len(caches)) } } } +// cacheWriteAllowedCondition excludes events whose runs can carry untrusted +// input while executing in the base repository's cache namespace. +func cacheWriteAllowedCondition() ConditionNode { + var condition ConditionNode + for _, event := range []string{"pull_request_target", "issue_comment", "workflow_run"} { + allowed := BuildNotEquals(BuildPropertyAccess("github.event_name"), BuildStringLiteral(event)) + if condition == nil { + condition = allowed + } else { + condition = BuildAnd(condition, allowed) + } + } + return condition +} + func parseCacheStepConfigs(cacheYAML string) ([]map[string]any, error) { var topLevel map[string]any if err := yaml.Unmarshal([]byte(cacheYAML), &topLevel); err != nil { @@ -68,8 +89,15 @@ func writeCacheStep(builder *strings.Builder, cache map[string]any, idx int, tot } func writeCacheStepWithAction(builder *strings.Builder, cache map[string]any, idx int, total int, action string) { + writeConditionalCacheStep(builder, cache, idx, total, action, nil) +} + +func writeConditionalCacheStep(builder *strings.Builder, cache map[string]any, idx, total int, action string, condition ConditionNode) { stepName := resolveCacheStepName(cache, idx, total) fmt.Fprintf(builder, " - name: %s\n", stepName) + if condition != nil { + builder.WriteString(" if: ${{ " + RenderCondition(condition) + " }}\n") + } fmt.Fprintf(builder, " uses: %s\n", getActionPin(action)) builder.WriteString(" with:\n") writeCacheStepValue(builder, "key", cache["key"]) diff --git a/pkg/workflow/compiler_custom_job_detection.go b/pkg/workflow/compiler_custom_job_detection.go index ebb8178dc28..bfd75c87afd 100644 --- a/pkg/workflow/compiler_custom_job_detection.go +++ b/pkg/workflow/compiler_custom_job_detection.go @@ -83,8 +83,7 @@ func addCustomJobDetectionGuard(job *Job, statusOnly bool) error { if statusOnly { return nil } - // Warn-mode detections can report job success while flagging tainted output. - guard := "needs." + detection + ".result == 'success' && needs." + detection + ".outputs.detection_success == 'true'" + guard := RenderCondition(buildDetectionAcceptedCondition()) if condition != "" { guard += " && (" + condition + ")" } diff --git a/pkg/workflow/compiler_main_job.go b/pkg/workflow/compiler_main_job.go index b4e4671deb5..0a2e5f1b5a5 100644 --- a/pkg/workflow/compiler_main_job.go +++ b/pkg/workflow/compiler_main_job.go @@ -64,8 +64,10 @@ func (c *Compiler) buildMainJob(data *WorkflowData, activationJobCreated bool) ( } cacheMode := "" - if !data.GHES && (data.DryRun || IsDetectionJobEnabled(data.SafeOutputs)) { + if !data.GHES && (data.DryRun || (IsDetectionJobEnabled(data.SafeOutputs) && data.Cache == "")) { // Restore-only actions alone do not restrict the job's scoped cache token. + // Dependency caches use the runner's trigger-scoped default instead: + // trusted events can save, while low-trust events retain read-only access. cacheMode = "read" } diff --git a/pkg/workflow/drive_memory.go b/pkg/workflow/drive_memory.go index c84fb60a5ac..337987bde92 100644 --- a/pkg/workflow/drive_memory.go +++ b/pkg/workflow/drive_memory.go @@ -237,7 +237,7 @@ func (c *Compiler) buildUpdateDriveMemoryJob(data *WorkflowData, threatDetection BuildPropertyAccess(fmt.Sprintf("needs.%s.result", constants.AgentJobName)), BuildStringLiteral("success"), ) - condition := RenderCondition(BuildAnd(BuildAnd(BuildFunctionCall("always"), buildDetectionSuccessCondition()), agentSucceeded)) + condition := RenderCondition(BuildAnd(BuildAnd(BuildFunctionCall("always"), buildDetectionAcceptedCondition()), agentSucceeded)) perms := NewPermissionsEmpty() perms.Set(PermissionContents, PermissionRead) perms.Set(PermissionIdToken, PermissionWrite) diff --git a/pkg/workflow/drive_memory_test.go b/pkg/workflow/drive_memory_test.go index 428b2591a04..6cf6fb23d1c 100644 --- a/pkg/workflow/drive_memory_test.go +++ b/pkg/workflow/drive_memory_test.go @@ -370,6 +370,8 @@ Use drive memory. assert.Contains(t, lockYAML, "id-token: write") assert.Contains(t, lockYAML, "contents: read") assert.Contains(t, lockYAML, "/tmp/gh-aw/drive-memory/") + assert.NotContains(t, lockYAML, updateDriveMemoryJobName+":") + assert.Contains(t, extractJobSection(lockYAML, "agent"), "actions/gh-drives-preview/commit@") } func TestCompileDriveMemoryThreatDetectionWorkflow(t *testing.T) { @@ -405,6 +407,7 @@ Use drive memory. assert.Contains(t, agentSection, "drives: read") assert.NotContains(t, agentSection, "actions/gh-drives-preview/commit@") assert.Contains(t, updateSection, "runs-on: ubuntu-latest") + assert.Contains(t, updateSection, "needs.detection.outputs.detection_success == 'true'") assert.Contains(t, updateSection, "drives: write") assert.Contains(t, updateSection, "Check drive-memory for concurrent updates") assert.Contains(t, updateSection, "refusing to overwrite a newer version") @@ -466,6 +469,27 @@ func TestDriveMemoryThreatDetectionJob(t *testing.T) { assert.Equal(t, "runs-on: ubuntu-latest", job.RunsOn) assert.Contains(t, job.Permissions, "drives: write") assert.Contains(t, strings.Join(job.Steps, "\n"), "actions/gh-drives-preview/commit@") + + node, err := ParseExpression(job.If) + require.NoError(t, err) + for _, agentResult := range []string{"success", "failure", "cancelled", "skipped", ""} { + for _, detectionResult := range []string{"success", "failure", "cancelled", "skipped", ""} { + for _, accepted := range []string{"true", "false", ""} { + values := map[string]string{ + "needs.agent.result": agentResult, + "needs.detection.result": detectionResult, + "needs.detection.outputs.detection_success": accepted, + } + want := agentResult == "success" && detectionResult == "success" && accepted == "true" + assert.Equal(t, want, evaluateDetectionRedactionGate(t, node, values), + "agent=%q detection=%q detection_success=%q", agentResult, detectionResult, accepted) + } + } + } + + job, err = compiler.buildUpdateDriveMemoryJob(data, false) + require.NoError(t, err) + assert.Nil(t, job, "without detection, persistence remains in the agent job") } func TestDriveMemoryUpdateCheckoutStepIDsAreUnique(t *testing.T) { diff --git a/pkg/workflow/expression_builder.go b/pkg/workflow/expression_builder.go index 6745056fd03..0a427862684 100644 --- a/pkg/workflow/expression_builder.go +++ b/pkg/workflow/expression_builder.go @@ -298,10 +298,9 @@ func buildSkipAuthorAssociationsCondition(skipAuthorAssociations map[string][]st return &NotNode{Child: BuildDisjunction(false, skipTerms...)} } -// buildDetectionSuccessCondition builds the condition to check if detection passed. -// Detection runs in a separate detection job that only succeeds (result == 'success') when -// the analysis worked, the output was parsed, and no threats were found. When threats are -// detected the detection job exits with a non-zero code, giving it a 'failure' result. +// buildDetectionSuccessCondition checks whether the detection job completed successfully. +// Warn mode can report success even when threats were found; use +// buildDetectionAcceptedCondition when consuming or persisting agent output. func buildDetectionSuccessCondition() ConditionNode { return BuildEquals( BuildPropertyAccess(fmt.Sprintf("needs.%s.result", constants.DetectionJobName)), @@ -309,6 +308,17 @@ func buildDetectionSuccessCondition() ConditionNode { ) } +// buildDetectionAcceptedCondition also requires explicit acceptance of the agent output. +func buildDetectionAcceptedCondition() ConditionNode { + return BuildAnd( + buildDetectionSuccessCondition(), + BuildEquals( + BuildPropertyAccess(fmt.Sprintf("needs.%s.outputs.detection_success", constants.DetectionJobName)), + BuildStringLiteral("true"), + ), + ) +} + // buildDetectionPassedCondition builds the condition to check if the detection job either // succeeded (no threats found) or was skipped (agent produced no outputs or patch — nothing // to detect against). Use this for downstream jobs that must run in both cases. diff --git a/pkg/workflow/expression_builder_detection_test.go b/pkg/workflow/expression_builder_detection_test.go new file mode 100644 index 00000000000..0bea34e6b18 --- /dev/null +++ b/pkg/workflow/expression_builder_detection_test.go @@ -0,0 +1,27 @@ +//go:build !integration + +package workflow + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestBuildDetectionAcceptedCondition(t *testing.T) { + condition := RenderCondition(buildDetectionAcceptedCondition()) + assert.Equal(t, "needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true'", condition) + node, err := ParseExpression(condition) + require.NoError(t, err) + for _, result := range []string{"success", "failure", "cancelled", "skipped", ""} { + for _, accepted := range []string{"true", "false", ""} { + values := map[string]string{ + "needs.detection.result": result, + "needs.detection.outputs.detection_success": accepted, + } + assert.Equal(t, result == "success" && accepted == "true", evaluateDetectionRedactionGate(t, node, values), + "result=%q detection_success=%q", result, accepted) + } + } +} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden index f5e75ae3c6f..4a03f3622e9 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden @@ -3247,7 +3247,8 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' + needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && + github.event_name != 'workflow_run' runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/specs/compiler-threat-detection-changelog.md b/specs/compiler-threat-detection-changelog.md index 35c37ae7096..801a5c6b26b 100644 --- a/specs/compiler-threat-detection-changelog.md +++ b/specs/compiler-threat-detection-changelog.md @@ -16,6 +16,7 @@ This changelog records the version history and the dated mapping audits for `spe | Version | Change | |---|---| +| 1.0.75 | Blocks cache-memory publication on `pull_request_target`, `issue_comment`, and `workflow_run` regardless of detector acceptance, preventing low-trust publication into trusted cache lineages. Preserves trusted dependency-cache saves through runtime-conditioned actions and trigger-scoped tokens, explicitly documenting their pre-detection write capability. Shares the detection-acceptance helper with drive-memory publication and custom-job guards. Extends narrow actionlint compatibility to job-level cache policies while preserving malformed-value and misplaced-key errors. Maps trust/save, rejection, dry-run, and compatibility tests; generated locks require regeneration. No new threat identifier or frontmatter setting. | | 1.0.74 | Strengthens CTR-019 with read-only agent cache tokens, restore-only frontmatter dependency caches, a separate write-only cache-memory publisher, and explicit detector acceptance in addition to successful jobs. Specifies warning/failed/skipped/missing detection handling, dry-run precedence, the existing CLI/config GHES opt-out, and unchanged no-detection behavior. Maps effective low-trust explicit-write diagnostics and generated-YAML/acceptance regression coverage. Separates capability grants from artifact authenticity and records GHES, custom-job, unsigned-content, and persistent-runner limitations. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | 1.0.72 | Audit-only clarification that same-repository bot PR `labeled` events remain subject to the RS-05a collaborator permission floor. No new threat identifier, permission grant, or lock-file schema change. | | 1.0.71 | Added a separate compiler-only `artipacked` exception for agent checkouts immediately followed by compiler-owned credential cleanup and verification. Requires current-compilation provenance, unique full-block parsed-field matching, exact adjacency, and statically proven discovery coverage; altered, authored, ambiguous, interrupted, deep-path, and unknown-path blocks remain warned. Preserves runtime YAML, per-checkout authentication, other diagnostics, and standalone lint. Maps adversarial, discovery-depth boundary, multi-repository, sparse-checkout, compilation, and provenance-reset regressions. | diff --git a/specs/compiler-threat-detection-spec.md b/specs/compiler-threat-detection-spec.md index c74abd5a472..90aede8a8ed 100644 --- a/specs/compiler-threat-detection-spec.md +++ b/specs/compiler-threat-detection-spec.md @@ -7,7 +7,7 @@ sidebar: # GitHub Actions Compiler Threat Detection Specification -**Version**: 1.0.74 +**Version**: 1.0.75 **Status**: Candidate Recommendation **Latest Version**: https://github.com/github/gh-aw/blob/main/specs/compiler-threat-detection-spec.md **Editors**: GitHub Next (GitHub, Inc.) @@ -32,6 +32,7 @@ Each version maps to the minimum compatible binary. A version change MUST update | Versions | Minimum gh-aw | Compatibility | |---|---:|---| +| `1.0.75` | Unreleased | Blocks detection-separated cache-memory publication on low-trust events, restores trusted dependency-cache saves using trigger-scoped tokens, and shares explicit detection acceptance across cache/drive publishers and custom jobs. Adds job-level actionlint compatibility without suppressing invalid locations or values. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.74` | Unreleased | Strengthens CTR-019 with detection-separated agent/publisher cache access and explicit detector acceptance. Specifies the existing GHES compatibility opt-out, dry-run precedence, low-trust explicit-write warnings, and unchanged no-detection behavior. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.73` | Unreleased | Audit-only clarification that same-repository bot PR `edited` checkout is a runtime trust control restricted to allow-listed actors and body-only changes under Security Architecture Specification RS-05a. No new threat identifier, permission grant, or lock-file schema change. | | `1.0.72` | Unreleased | Audit-only clarification that same-repository bot PR `labeled` events remain subject to the collaborator permission floor under Security Architecture Specification RS-05a. No new threat identifier, permission grant, or lock-file schema change. | @@ -197,13 +198,13 @@ The Actions/AW `custom-job-detection` linter MUST check transitive ordering, req ### 5.1.3 Cache Access and Publication (CTR-019) -When detection is enabled and GHES compatibility mode is disabled, the compiler MUST emit `cache-mode: read` on the agent job and restore-only actions for frontmatter dependency caches. This MUST apply to every configured trigger, including trusted triggers, `repository_dispatch`, mixed-trigger workflows, and expression-controlled detection. A runtime-skipped detection job MUST NOT restore agent cache-write capability. Selecting a restore-only action alone does not restrict the job's scoped cache token. +When detection is enabled and GHES compatibility mode is disabled, the compiler MUST emit `cache-mode: read` on the agent job unless frontmatter dependency caches require the platform's trigger-scoped default token. With dependency caches, runtime event conditions MUST select restore-only actions for `pull_request_target`, `issue_comment`, and `workflow_run`, and combined restore/save actions for other events, including `push`, `workflow_dispatch`, and `repository_dispatch`. This MUST work in mixed-trigger workflows and with expression-controlled detection. Trusted dependency-cache saves are intentionally not detection-gated; the agent retains direct cache-write capability on those events. Selecting a restore-only action alone does not restrict the job's scoped cache token. -Writable cache-memory entries MUST use a separate publisher requiring `needs.agent.result == 'success'`, `needs.detection.result == 'success'`, and `needs.detection.outputs.detection_success == 'true'` before configured memory validation and saving. Failed, cancelled, skipped, or missing detection results, missing acceptance outputs, and warning-mode rejection MUST block publication even if the detection job reports success. The detector's internal no-output short-circuit still reports acceptance; this MUST NOT be described as proof that every cached file was scanned. +Writable cache-memory entries MUST use a separate publisher requiring `needs.agent.result == 'success'`, `needs.detection.result == 'success'`, and `needs.detection.outputs.detection_success == 'true'` before configured memory validation and saving. The publisher MUST additionally exclude `pull_request_target`, `issue_comment`, and `workflow_run` at runtime so accepted low-trust output cannot populate a cache lineage later restored by trusted runs. Failed, cancelled, skipped, or missing detection results, missing acceptance outputs, and warning-mode rejection MUST block publication even if the detection job reports success. Cache-memory and drive-memory publishers and ordinary downstream custom-job guards MUST share the explicit detection-acceptance condition. The detector's internal no-output short-circuit still reports acceptance; this MUST NOT be described as proof that every cached file was scanned. -Outside GHES compatibility mode, the publisher MUST use `cache-mode: write-only`. The compiler MUST NOT impose a workflow-wide read cap that prevents this intended publication path during ordinary execution. Explicit publisher writes deliberately override low-trust event defaults; this capability change MUST NOT be described as artifact authenticity, provenance, or attestation. Dry-run MUST omit the publisher and MUST NOT acquire write capability through a job-level override. Dry-run MUST use restore-only compiler-managed cache actions and, outside GHES compatibility mode, workflow-level and agent-job `cache-mode: read`. Entries marked `restore-only: true` MUST NOT be published. +Outside GHES compatibility mode, the publisher MUST use `cache-mode: write-only`; its runtime event guard MUST prevent that explicit capability from overriding the low-trust defaults on an executing job. The compiler MUST NOT impose a workflow-wide read cap that prevents intended trusted publication during ordinary execution. This capability boundary MUST NOT be described as artifact authenticity, provenance, or attestation. Dry-run MUST omit the publisher and MUST NOT acquire write capability through a job-level override. Dry-run MUST use restore-only compiler-managed cache actions and, outside GHES compatibility mode, workflow-level and agent-job `cache-mode: read`. Entries marked `restore-only: true` MUST NOT be published. -The existing `gh aw compile --ghes` flag and `.github/workflows/aw.json` setting `"ghes": true` MUST omit compiler-generated workflow and job `cache-mode` fields, including dry-run fields. GitHub.com availability does not establish support in a deployed GHES release; compatibility mode MUST NOT claim scoped-token enforcement there. It retains cache-memory restore-only agent actions and publisher validation gates, but detection-enabled frontmatter dependency caches retain their existing combined cache actions outside dry-run. This compatibility switch also selects GHES artifact-action pins; it is not an independent cache-service capability negotiation. +The existing `gh aw compile --ghes` flag and `.github/workflows/aw.json` setting `"ghes": true` MUST omit compiler-generated workflow and job `cache-mode` fields, including dry-run fields. GitHub.com availability does not establish support in a deployed GHES release; compatibility mode MUST NOT claim scoped-token enforcement there. It retains cache-memory restore-only agent actions, publisher event/validation gates, and event-conditioned dependency-cache actions, without assuming the deployed server enforces GitHub.com's token defaults. This compatibility switch also selects GHES artifact-action pins; it is not an independent cache-service capability negotiation. Without detection, existing same-job cache-memory behavior MUST remain unchanged, except for independent dry-run restrictions. Custom jobs retain their own cache-access boundary. The Actions/AW `cache-poisoning` linter MUST warn about effective explicit `write` or `write-only` overrides on `pull_request_target`, `issue_comment`, and `workflow_run`, including workflow-level inheritance and reusable callers; a job-level `read` or `none` overrides inherited write access. Job names MUST NOT establish publisher trust. `repository_dispatch` MUST NOT be classified as having the platform's low-trust read-only default. @@ -291,7 +292,7 @@ Every active rule MUST map to implementation and test coverage. References are p | CTR-016 Compile-Time Manifest Drift | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | | CTR-017 Secret Leakage via Environment Variables and Telemetry | safe-update, strict env/update, cache, and expression builder; `pkg/workflow/awf_command_builder.go`, `threat_detection_external.go`, `evals_steps.go`; AST subsets: `pkg/workflow/lint/secrets.go`, `otlp_secret_leak.go`, `pkg/workflow/taint/` | corresponding enforcement, secrets, update, cache, and OTLP leak tests; `TestOTLPEnvExcludedFromAWFSandboxes` in `awf_env_test.go`, `TestEvalsOTLPEnvExcludedFromSandbox` in `evals_steps_test.go`, `TestCompiledOTLPEnvExcludedFromAgentDetectionAndEvals` in `threat_detection_isolation_test.go`; `pkg/workflow/taint/taint_test.go`, `pkg/workflow/lint/otlp_secret_leak_test.go` | | CTR-018 Version Integrity Bypass | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | -| CTR-019 Cache-Memory Integrity Enforcement | `pkg/workflow/compiler_main_job.go`, `cache_memory.go`, `cache_steps.go`, `compiler_yaml.go`; GHES configuration in `compiler.go`; AST subset: `pkg/workflow/lint/cache_write_overrides.go` | `pkg/workflow/cache_access_test.go`, `cache_memory_threat_detection_test.go`, `compiler_development_test.go`; `pkg/workflow/lint/cache_write_overrides_test.go`, `pkg/cli/lint_cache_mode_test.go` | +| CTR-019 Cache-Memory Integrity Enforcement | `pkg/workflow/compiler_main_job.go`, `cache_memory.go`, `cache_steps.go`, `drive_memory.go`, `expression_builder.go`, `compiler_yaml.go`; GHES configuration in `compiler.go`; AST subset: `pkg/workflow/lint/cache_write_overrides.go` | `pkg/workflow/cache_access_test.go`, `cache_memory_threat_detection_test.go`, `compiler_development_test.go`, `drive_memory_test.go`, `expression_builder_detection_test.go`; `pkg/workflow/lint/cache_write_overrides_test.go`, `pkg/cli/lint_cache_mode_test.go` | | CTR-020 Conditional Import Security | `pkg/parser/import_bfs.go` | `pkg/parser/import_bfs_test.go` | | CTR-021 Workflow Run Trigger Branch Scope | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go`; AST subset: `pkg/workflow/lint/workflow_run_scope.go` | workflow-run, bash-allowlist, gitutil, and download tests; `pkg/workflow/lint/workflow_run_scope_test.go` | | CTR-022 Git Subprocess Argument Injection | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go` | workflow-run, bash-allowlist, gitutil, and download tests | From 295924d4581bf4185e6ae2daa6156039ab97b7ac Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 28 Oct 2026 10:20:47 +0000 Subject: [PATCH 06/13] Fix CI test and vulnerable Go dependency Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- pkg/workflow/engine_helpers_test.go | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 5301f7edb40..943d586620c 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( // .golangci.yml. golang.org/x/crypto v0.58.0 golang.org/x/mod v0.42.0 - golang.org/x/net v0.61.0 + golang.org/x/net v0.62.0 golang.org/x/sync v0.24.0 golang.org/x/term v0.47.0 golang.org/x/tools v0.52.0 diff --git a/go.sum b/go.sum index f949e7a22de..377fda3a589 100644 --- a/go.sum +++ b/go.sum @@ -244,8 +244,8 @@ golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWB golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/mod v0.42.0 h1:ICeL3t2L30ljSPHHxDnR4fqVcBt/zR2zJAb9juavmQg= golang.org/x/mod v0.42.0/go.mod h1:u5fzIrRInkL8MaO1cbRkUHT64v303YIT5KEqpNr7jRs= -golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw= -golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= +golang.org/x/net v0.62.0 h1:18ELalfM5+XNRwzM2nYqXsZQ9ByS1uhj2O/U7+5jqRY= +golang.org/x/net v0.62.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.24.0 h1:iqiDrGoDgyuvAKrhLQthUEzU/R378N78gXbBjxed7oA= diff --git a/pkg/workflow/engine_helpers_test.go b/pkg/workflow/engine_helpers_test.go index 2101eb9cc05..e14b16a1354 100644 --- a/pkg/workflow/engine_helpers_test.go +++ b/pkg/workflow/engine_helpers_test.go @@ -279,9 +279,9 @@ func TestDockerSudoIptablesPreservesSelectedRubyPath(t *testing.T) { awfScript := fmt.Sprintf("#!/bin/bash\nset -e\nunset GOROOT ERLANG_HOME\n%s\nruby --version\nnpm-agent\n", GetNpmBinPathSetup()) require.NoError(t, os.WriteFile(fakeAWF, []byte(awfScript), 0o755)) require.NoError(t, os.WriteFile(filepath.Join(commandBin, "sudo"), []byte(`#!/bin/sh -if [ "$1" = "-E" ]; then - shift -fi +case "$1" in + -E|--preserve-env=*) shift ;; +esac export PATH="$GH_AW_TEST_SECURE_PATH" exec "$@" `), 0o755)) From fac8a97715a1677c1a76df1fbf087fb58fee5162 Mon Sep 17 00:00:00 2001 From: pelikhan Date: Wed, 28 Oct 2026 03:50:18 -0700 Subject: [PATCH 07/13] Fail closed on cache-write trigger permissions Use GitHub's documented default-branch cache-write allowlist plus merge-ref-isolated pull_request instead of an incomplete low-trust denylist. Share trigger classification with known-event lint diagnostics and cover issue/discussion, unknown, mixed, and reusable-caller cases even when detection accepts output. Preserve trusted dependency-cache saves, dry-run, GHES, and no-detection behavior; synchronize the threat spec, ADR, documentation, generated locks, and WASM fixture. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/workflows/ab-testing-advisor.lock.yml | 5 +- .../actions-aw-linter-factory.lock.yml | 5 +- .github/workflows/agent-job-health.lock.yml | 5 +- .../workflows/agent-persona-explorer.lock.yml | 5 +- .../workflows/api-consumption-report.lock.yml | 5 +- .github/workflows/audit-workflows.lock.yml | 5 +- .../aw-failure-investigator.lock.yml | 4 +- .../workflows/chaos-pr-bundle-fuzzer.lock.yml | 5 +- .github/workflows/ci-coach.lock.yml | 5 +- .../claude-code-user-docs-review.lock.yml | 5 +- .../workflows/cli-version-checker.lock.yml | 5 +- .github/workflows/cloclo.lock.yml | 5 +- .../workflows/code-scanning-fixer.lock.yml | 5 +- .../constraint-solving-potd.lock.yml | 5 +- .../workflows/copilot-agent-analysis.lock.yml | 5 +- .github/workflows/copilot-opt.lock.yml | 5 +- .../copilot-pr-merged-report.lock.yml | 5 +- .../copilot-pr-nlp-analysis.lock.yml | 5 +- .../copilot-pr-prompt-analysis.lock.yml | 5 +- .../copilot-session-insights.lock.yml | 5 +- ...daily-action-setup-security-audit.lock.yml | 5 +- .../daily-agentrx-trace-optimizer.lock.yml | 5 +- .../daily-architecture-diagram.lock.yml | 5 +- .../workflows/daily-arxiv-researcher.lock.yml | 5 +- ...daily-aw-cross-repo-compile-check.lock.yml | 5 +- .../daily-cache-strategy-analyzer.lock.yml | 5 +- .../daily-caveman-optimizer.lock.yml | 5 +- .github/workflows/daily-code-metrics.lock.yml | 5 +- .../workflows/daily-compiler-quality.lock.yml | 5 +- .github/workflows/daily-doc-healer.lock.yml | 5 +- .github/workflows/daily-doc-updater.lock.yml | 5 +- .../daily-documentation-diagram.lock.yml | 5 +- .../daily-experiment-report.lock.yml | 5 +- .../workflows/daily-firewall-report.lock.yml | 5 +- .../daily-formal-spec-verifier.lock.yml | 5 +- .../workflows/daily-function-namer.lock.yml | 5 +- .../daily-go-test-parallelizer.lock.yml | 5 +- .github/workflows/daily-hippo-learn.lock.yml | 5 +- .../workflows/daily-issues-report.lock.yml | 5 +- .../daily-mcp-concurrency-analysis.lock.yml | 5 +- .github/workflows/daily-news.lock.yml | 5 +- .../daily-performance-summary.lock.yml | 5 +- .../daily-rendering-scripts-verifier.lock.yml | 5 +- .../workflows/daily-repo-chronicle.lock.yml | 5 +- .../daily-safe-output-optimizer.lock.yml | 5 +- .../workflows/daily-secrets-analysis.lock.yml | 5 +- .../daily-security-observability.lock.yml | 5 +- .../daily-security-red-team.lock.yml | 5 +- .../daily-spdd-spec-planner.lock.yml | 5 +- .../daily-spending-forecast.lock.yml | 5 +- .github/workflows/daily-storify.lock.yml | 5 +- .../daily-workflow-security-model.lock.yml | 5 +- .../dataflow-pr-discussion-dataset.lock.yml | 5 +- .github/workflows/dead-code-remover.lock.yml | 5 +- .github/workflows/deep-report.lock.yml | 5 +- .github/workflows/dependabot-burner.lock.yml | 4 +- .../detection-analysis-report.lock.yml | 5 +- .../developer-docs-consolidator.lock.yml | 5 +- .github/workflows/eslint-miner.lock.yml | 5 +- .github/workflows/evoskill-evolver.lock.yml | 5 +- .github/workflows/feature-grower.lock.yml | 5 +- .github/workflows/firewall-escape.lock.yml | 5 +- .../github-mcp-structural-analysis.lock.yml | 5 +- .../github-mcp-tools-report.lock.yml | 5 +- .../workflows/glossary-maintainer.lock.yml | 5 +- .github/workflows/go-fan.lock.yml | 5 +- .github/workflows/go-logger.lock.yml | 5 +- .github/workflows/gpclean.lock.yml | 5 +- .../impeccable-skills-reviewer.lock.yml | 4 +- .../workflows/instructions-janitor.lock.yml | 5 +- .github/workflows/jsweep.lock.yml | 5 +- .../workflows/layout-spec-maintainer.lock.yml | 4 +- .github/workflows/linter-miner.lock.yml | 5 +- .github/workflows/lockfile-stats.lock.yml | 5 +- .../mattpocock-skills-reviewer.lock.yml | 4 +- .github/workflows/mcp-inspector.lock.yml | 5 +- .../objective-impact-report.lock.yml | 4 +- .github/workflows/org-health-report.lock.yml | 5 +- .github/workflows/pdf-summary.lock.yml | 5 +- .github/workflows/poem-bot.lock.yml | 5 +- .github/workflows/ponytail-reviewer.lock.yml | 4 +- .github/workflows/portfolio-analyst.lock.yml | 5 +- .../pr-code-quality-reviewer.lock.yml | 4 +- .../prompt-clustering-analysis.lock.yml | 9 ++-- .github/workflows/purelock.lock.yml | 5 +- .github/workflows/python-data-charts.lock.yml | 5 +- .../workflows/refactoring-cadence.lock.yml | 5 +- .../workflows/repo-audit-analyzer.lock.yml | 5 +- .../repository-quality-improver.lock.yml | 5 +- .github/workflows/safe-output-health.lock.yml | 5 +- .../schema-consistency-checker.lock.yml | 5 +- .github/workflows/scout.lock.yml | 5 +- .../workflows/slide-deck-maintainer.lock.yml | 5 +- .github/workflows/smoke-claude.lock.yml | 5 +- .github/workflows/smoke-codex.lock.yml | 5 +- .../smoke-copilot-aoai-apikey.lock.yml | 5 +- .../smoke-copilot-aoai-entra.lock.yml | 5 +- .github/workflows/smoke-copilot-arm.lock.yml | 5 +- .github/workflows/smoke-copilot.lock.yml | 5 +- .../workflows/smoke-deepseek-harness.lock.yml | 5 +- .github/workflows/smoke-gemini.lock.yml | 5 +- .github/workflows/smoke-goose.lock.yml | 5 +- .github/workflows/smoke-opencode.lock.yml | 5 +- .github/workflows/smoke-pi.lock.yml | 5 +- .../smoke-update-cross-repo-pr.lock.yml | 5 +- .github/workflows/spec-enforcer.lock.yml | 5 +- .github/workflows/spec-extractor.lock.yml | 5 +- .../workflows/stale-repo-identifier.lock.yml | 5 +- .../workflows/static-analysis-report.lock.yml | 5 +- .../workflows/step-name-alignment.lock.yml | 5 +- .github/workflows/super-linter.lock.yml | 5 +- .../workflows/technical-doc-writer.lock.yml | 5 +- .../workflows/test-quality-sentinel.lock.yml | 4 +- .github/workflows/unbloat-docs.lock.yml | 5 +- .../workflows/weekly-issue-summary.lock.yml | 5 +- .../weekly-network-domains-audit.lock.yml | 5 +- .github/workflows/windows-grower.lock.yml | 5 +- .../workflows/workflow-normalizer.lock.yml | 5 +- ...d-cache-access-via-job-level-cache-mode.md | 6 +-- .../content/docs/reference/cache-memory.md | 6 +-- .../docs/reference/workflow-linters.md | 2 +- pkg/cli/lint_cache_mode_test.go | 4 ++ pkg/workflow/cache_access_test.go | 46 ++++++++++++++++--- pkg/workflow/cache_steps.go | 17 +++---- pkg/workflow/cachepolicy/events.go | 33 +++++++++++++ pkg/workflow/lint/cache_write_overrides.go | 7 +-- .../lint/cache_write_overrides_test.go | 24 +++++++++- .../smoke-copilot.golden | 5 +- specs/compiler-threat-detection-changelog.md | 1 + specs/compiler-threat-detection-spec.md | 11 +++-- 130 files changed, 474 insertions(+), 273 deletions(-) create mode 100644 pkg/workflow/cachepolicy/events.go diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index 34efa3e6f9c..1c49a99126e 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -2891,8 +2891,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/actions-aw-linter-factory.lock.yml b/.github/workflows/actions-aw-linter-factory.lock.yml index b2d0dd09a73..02540b45d7a 100644 --- a/.github/workflows/actions-aw-linter-factory.lock.yml +++ b/.github/workflows/actions-aw-linter-factory.lock.yml @@ -2422,8 +2422,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/agent-job-health.lock.yml b/.github/workflows/agent-job-health.lock.yml index 27613ba8dcd..0d8df8089b8 100644 --- a/.github/workflows/agent-job-health.lock.yml +++ b/.github/workflows/agent-job-health.lock.yml @@ -2873,8 +2873,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index c2b860a735d..c83f48229a7 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -2897,8 +2897,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/api-consumption-report.lock.yml b/.github/workflows/api-consumption-report.lock.yml index 98fc4e0d2f0..f1288c9e909 100644 --- a/.github/workflows/api-consumption-report.lock.yml +++ b/.github/workflows/api-consumption-report.lock.yml @@ -2867,8 +2867,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 826487947c0..2693c63a96a 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -3210,8 +3210,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/aw-failure-investigator.lock.yml b/.github/workflows/aw-failure-investigator.lock.yml index c775862db1f..3aba187db7e 100644 --- a/.github/workflows/aw-failure-investigator.lock.yml +++ b/.github/workflows/aw-failure-investigator.lock.yml @@ -705,13 +705,13 @@ jobs: # Cache configuration from frontmatter processed below - name: Failure investigator prefetch - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: aw-failure-investigator-prefetch-${{ github.run_id }} path: /tmp/gh-aw/agent/failure-investigator - name: Failure investigator prefetch - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: aw-failure-investigator-prefetch-${{ github.run_id }} diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index 495b5dfc9bc..d79ce60e186 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -2347,8 +2347,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index d6ab5d7abe7..02c15e857fd 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -3028,8 +3028,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index 85d4690ca80..cf6318ef9db 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -2731,8 +2731,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 89f46184e70..c85a7a0f37f 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -2736,8 +2736,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 426a1f2b72f..2f02b430658 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -3249,8 +3249,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 9192a3538ec..0ac174b141f 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -3012,8 +3012,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/constraint-solving-potd.lock.yml b/.github/workflows/constraint-solving-potd.lock.yml index df282d34652..177e78eda14 100644 --- a/.github/workflows/constraint-solving-potd.lock.yml +++ b/.github/workflows/constraint-solving-potd.lock.yml @@ -2682,8 +2682,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index 1a5ee5ef222..8539dd6cd86 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -3062,8 +3062,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-opt.lock.yml b/.github/workflows/copilot-opt.lock.yml index 89b25585152..d24992011ef 100644 --- a/.github/workflows/copilot-opt.lock.yml +++ b/.github/workflows/copilot-opt.lock.yml @@ -2763,8 +2763,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 244517deb04..f0d76e918f2 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -2653,8 +2653,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 42e8f60ed2b..0036294348d 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -3135,8 +3135,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index 497fc91f695..5dfe2d10fa2 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -2916,8 +2916,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 2ec76154a8d..78f4f2d5bb0 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -2960,8 +2960,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-action-setup-security-audit.lock.yml b/.github/workflows/daily-action-setup-security-audit.lock.yml index 8ecd618889e..4f1af9db959 100644 --- a/.github/workflows/daily-action-setup-security-audit.lock.yml +++ b/.github/workflows/daily-action-setup-security-audit.lock.yml @@ -2732,8 +2732,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml index b97072a7a62..3b32d42af90 100644 --- a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml +++ b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml @@ -3008,8 +3008,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 35dd1662862..f3d1a3a838a 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -3071,8 +3071,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-arxiv-researcher.lock.yml b/.github/workflows/daily-arxiv-researcher.lock.yml index 179c324617f..7ff2e336875 100644 --- a/.github/workflows/daily-arxiv-researcher.lock.yml +++ b/.github/workflows/daily-arxiv-researcher.lock.yml @@ -2498,8 +2498,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml index 0c2ddb07b5e..262f3144a39 100644 --- a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml +++ b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml @@ -2733,8 +2733,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index 1f10a901f5d..c5e272b4dca 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -3006,8 +3006,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-caveman-optimizer.lock.yml b/.github/workflows/daily-caveman-optimizer.lock.yml index 1e245532b5b..992d0ccabe5 100644 --- a/.github/workflows/daily-caveman-optimizer.lock.yml +++ b/.github/workflows/daily-caveman-optimizer.lock.yml @@ -3320,8 +3320,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index 852f7b525d0..139a5a187f4 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -3203,8 +3203,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index 0c7bad9fea0..d9566ffeb8d 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -3021,8 +3021,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index af7d5ee3bfd..a372efe65c1 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -3104,8 +3104,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 0339e41dd6b..718bd7f3edd 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -3012,8 +3012,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-documentation-diagram.lock.yml b/.github/workflows/daily-documentation-diagram.lock.yml index 9545fcff8d2..452005d74ab 100644 --- a/.github/workflows/daily-documentation-diagram.lock.yml +++ b/.github/workflows/daily-documentation-diagram.lock.yml @@ -2882,8 +2882,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-experiment-report.lock.yml b/.github/workflows/daily-experiment-report.lock.yml index ea87b76f3c0..cb17d3d0ff8 100644 --- a/.github/workflows/daily-experiment-report.lock.yml +++ b/.github/workflows/daily-experiment-report.lock.yml @@ -2822,8 +2822,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index e4051189e26..e8ed16b91b0 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -2864,8 +2864,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-formal-spec-verifier.lock.yml b/.github/workflows/daily-formal-spec-verifier.lock.yml index f2bdd215977..612b2783d76 100644 --- a/.github/workflows/daily-formal-spec-verifier.lock.yml +++ b/.github/workflows/daily-formal-spec-verifier.lock.yml @@ -2565,8 +2565,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index f3729f8464f..8a2e26c40c7 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -2738,8 +2738,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-go-test-parallelizer.lock.yml b/.github/workflows/daily-go-test-parallelizer.lock.yml index 21ce89ccf14..984462a750d 100644 --- a/.github/workflows/daily-go-test-parallelizer.lock.yml +++ b/.github/workflows/daily-go-test-parallelizer.lock.yml @@ -2891,8 +2891,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index 363309dfe38..6f4c6e60a41 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -2821,8 +2821,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index 754da3bea11..83da80f1371 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -3163,8 +3163,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index 94f4c4f55bc..d348c974e7e 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -3179,8 +3179,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 2986bfe22cd..0f2e8b90e30 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -3173,8 +3173,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index 72d191115b5..c7b22ab3dbe 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -3378,8 +3378,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 0e361126859..720b71f84bf 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -3203,8 +3203,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index f41d8cffd1a..a814b5c5d3a 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -2758,8 +2758,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index adb25c83e30..22c3cf76586 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -3123,8 +3123,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index 18aa335acbf..124129b5638 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -2754,8 +2754,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-security-observability.lock.yml b/.github/workflows/daily-security-observability.lock.yml index c45adacd801..99daa2ceffe 100644 --- a/.github/workflows/daily-security-observability.lock.yml +++ b/.github/workflows/daily-security-observability.lock.yml @@ -2881,8 +2881,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index 30447f51b52..e29a94775a1 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -3267,8 +3267,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-spdd-spec-planner.lock.yml b/.github/workflows/daily-spdd-spec-planner.lock.yml index e103f0b5d54..617e0311ca9 100644 --- a/.github/workflows/daily-spdd-spec-planner.lock.yml +++ b/.github/workflows/daily-spdd-spec-planner.lock.yml @@ -2743,8 +2743,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-spending-forecast.lock.yml b/.github/workflows/daily-spending-forecast.lock.yml index 1b4d7e71195..9c56f5ca104 100644 --- a/.github/workflows/daily-spending-forecast.lock.yml +++ b/.github/workflows/daily-spending-forecast.lock.yml @@ -2865,8 +2865,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-storify.lock.yml b/.github/workflows/daily-storify.lock.yml index d1648ed4c45..90ed186e9e6 100644 --- a/.github/workflows/daily-storify.lock.yml +++ b/.github/workflows/daily-storify.lock.yml @@ -2971,8 +2971,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/daily-workflow-security-model.lock.yml b/.github/workflows/daily-workflow-security-model.lock.yml index eb34fcb61d6..cea3b1f1fd9 100644 --- a/.github/workflows/daily-workflow-security-model.lock.yml +++ b/.github/workflows/daily-workflow-security-model.lock.yml @@ -2431,8 +2431,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml index a6d62af94ee..c48d425cef8 100644 --- a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml +++ b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml @@ -3230,8 +3230,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 2e49ed41197..12d2e506650 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -2511,8 +2511,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index f6b5ac64907..3f10ba2fc4d 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -3650,8 +3650,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index b390bd29752..d17ec058eab 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -704,13 +704,13 @@ jobs: # Cache configuration from frontmatter processed below - name: Dependabot burner selection context - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: dependabot-burner-selection-${{ github.run_id }} path: /tmp/gh-aw/agent/dependabot-burner - name: Dependabot burner selection context - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: dependabot-burner-selection-${{ github.run_id }} diff --git a/.github/workflows/detection-analysis-report.lock.yml b/.github/workflows/detection-analysis-report.lock.yml index 00ab82e3816..319768c91a5 100644 --- a/.github/workflows/detection-analysis-report.lock.yml +++ b/.github/workflows/detection-analysis-report.lock.yml @@ -2858,8 +2858,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 6f26ace2c52..c15e8f3670c 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -3096,8 +3096,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/eslint-miner.lock.yml b/.github/workflows/eslint-miner.lock.yml index 8e4cbb27ca8..cc062c6fa52 100644 --- a/.github/workflows/eslint-miner.lock.yml +++ b/.github/workflows/eslint-miner.lock.yml @@ -2840,8 +2840,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/evoskill-evolver.lock.yml b/.github/workflows/evoskill-evolver.lock.yml index acdb45069b8..7658cece727 100644 --- a/.github/workflows/evoskill-evolver.lock.yml +++ b/.github/workflows/evoskill-evolver.lock.yml @@ -2834,8 +2834,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/feature-grower.lock.yml b/.github/workflows/feature-grower.lock.yml index 4926bb58b0e..5bdb970e8da 100644 --- a/.github/workflows/feature-grower.lock.yml +++ b/.github/workflows/feature-grower.lock.yml @@ -2351,8 +2351,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index a7022fbac23..c10c6e85094 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -2578,8 +2578,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index 56b8b8c090f..293bf445455 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -2659,8 +2659,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index e3234d3e71c..8d2f4cee6c3 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -2462,8 +2462,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 3e351c1c68c..3252ca20d49 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -3069,8 +3069,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 1e0d62c55dc..172748776cf 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -2972,8 +2972,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index e2d6056a723..79a375bbe08 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -2860,8 +2860,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index df9d218d04e..9d9d0a3ca7c 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -2895,8 +2895,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index 6a614708e5a..0d596820a6a 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -675,7 +675,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }} @@ -683,7 +683,7 @@ jobs: restore-keys: | pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}- - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number }}-${{ github.event.pull_request.head.sha }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 6a72e93055b..1a87b4db9fd 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -2451,8 +2451,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index 69495c89def..bdb1c623143 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -2388,8 +2388,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index a62a455c20a..874e46f6d1d 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -619,14 +619,14 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Save layout spec data to cache - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: layout-spec-cache-${{ github.run_id }} path: /tmp/gh-aw/agent/layout-cache restore-keys: layout-spec-cache- - name: Save layout spec data to cache - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: layout-spec-cache-${{ github.run_id }} diff --git a/.github/workflows/linter-miner.lock.yml b/.github/workflows/linter-miner.lock.yml index 8e732f3b1a0..d19ebad9b2d 100644 --- a/.github/workflows/linter-miner.lock.yml +++ b/.github/workflows/linter-miner.lock.yml @@ -2479,8 +2479,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index c18fc31bfc0..fddcbdc1aba 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -2309,8 +2309,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index e5811fceaf3..4a2651f39f6 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -779,7 +779,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} @@ -787,7 +787,7 @@ jobs: restore-keys: | pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha && format('{0}-', github.event.pull_request.head.sha) || '' }} - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index debbeb5209a..63d3a914fe2 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -2836,8 +2836,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/objective-impact-report.lock.yml b/.github/workflows/objective-impact-report.lock.yml index cf79cd703b4..616186b2eba 100644 --- a/.github/workflows/objective-impact-report.lock.yml +++ b/.github/workflows/objective-impact-report.lock.yml @@ -586,14 +586,14 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Save objective impact report dataset cache - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: objective-impact-report-cache-${{ github.run_id }} path: /tmp/gh-aw/agent/objective-impact-report restore-keys: objective-impact-report-cache- - name: Save objective impact report dataset cache - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: objective-impact-report-cache-${{ github.run_id }} diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index 2e33cba874f..27621e41ef4 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -2391,8 +2391,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 3a5bbdd5458..237e73fff64 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -2504,8 +2504,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index f7b351d2fb4..e08fb20306e 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -3264,8 +3264,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/ponytail-reviewer.lock.yml b/.github/workflows/ponytail-reviewer.lock.yml index aeb5aa71249..3d633af2d1e 100644 --- a/.github/workflows/ponytail-reviewer.lock.yml +++ b/.github/workflows/ponytail-reviewer.lock.yml @@ -711,7 +711,7 @@ jobs: path: /tmp/gh-aw # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} @@ -719,7 +719,7 @@ jobs: restore-keys: | pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha && format('{0}-', github.event.pull_request.head.sha) || '' }} - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index 9b4f0b47ae1..4f347f6334d 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -2484,8 +2484,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index dd1a5a61170..906289554e1 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -690,7 +690,7 @@ jobs: await main(); # Cache configuration from frontmatter processed below - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} @@ -698,7 +698,7 @@ jobs: restore-keys: | pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha && format('{0}-', github.event.pull_request.head.sha) || '' }} - name: Cache (pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }}) - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-prefetch-v2-${{ github.event.pull_request.number || github.event.issue.number || (fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_type == 'pull_request' && fromJSON(github.event.inputs.aw_context || github.event.client_payload.aw_context || '{}').item_number) }}-${{ github.event.pull_request.head.sha || 'unknown' }}-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index 47d640bef6b..5459e3169a1 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -714,14 +714,14 @@ jobs: # Cache configuration from frontmatter processed below - name: Save prompt clustering data to cache - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: prompt-clustering-cache-${{ github.run_id }} path: /tmp/gh-aw/agent/prompt-cache restore-keys: prompt-clustering-cache- - name: Save prompt clustering data to cache - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: prompt-clustering-cache-${{ github.run_id }} @@ -2480,8 +2480,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/purelock.lock.yml b/.github/workflows/purelock.lock.yml index 54264ef7ae0..eaa634b7c70 100644 --- a/.github/workflows/purelock.lock.yml +++ b/.github/workflows/purelock.lock.yml @@ -3165,8 +3165,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 68d5f3b6269..fed79dd3af9 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -2435,8 +2435,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/refactoring-cadence.lock.yml b/.github/workflows/refactoring-cadence.lock.yml index 6416b21deb8..a8aa3a9b85c 100644 --- a/.github/workflows/refactoring-cadence.lock.yml +++ b/.github/workflows/refactoring-cadence.lock.yml @@ -2329,8 +2329,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index bb62a475a16..9c39433d7a8 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -2734,8 +2734,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 7679a5436b6..e024a31ae56 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -2292,8 +2292,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index e001c123581..20d49d6444c 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -2414,8 +2414,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index 77986a8d1cf..3d27ae51a57 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -2282,8 +2282,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 63318f69bf7..0aa953a46d9 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -2601,8 +2601,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index e84a3b76060..e3072f9fe94 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -2606,8 +2606,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index a97a8f0a15a..a6d001e753f 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -3379,8 +3379,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 6c201cac9d1..e20951e23f1 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -3203,8 +3203,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index 06927e88908..d99a317454b 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -4496,8 +4496,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index 4710e707684..b981e428ff2 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -4525,8 +4525,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index 2b17d4fe357..2c677dffb63 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -3735,8 +3735,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index e716e8b1c79..4fbaa78328d 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -4511,8 +4511,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-deepseek-harness.lock.yml b/.github/workflows/smoke-deepseek-harness.lock.yml index ab354bdf388..e3d37e8b604 100644 --- a/.github/workflows/smoke-deepseek-harness.lock.yml +++ b/.github/workflows/smoke-deepseek-harness.lock.yml @@ -2641,8 +2641,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 2e4d9da177b..a3dbcec1838 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -3137,8 +3137,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-goose.lock.yml b/.github/workflows/smoke-goose.lock.yml index 139e41ca8ee..276e5e85d2f 100644 --- a/.github/workflows/smoke-goose.lock.yml +++ b/.github/workflows/smoke-goose.lock.yml @@ -2889,8 +2889,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index a447d761187..240381890a8 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -2823,8 +2823,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index 27570fd725d..414dc0839ac 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -2537,8 +2537,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index 43af0b3831a..22caa503043 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -2729,8 +2729,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index 9d157b296cb..5b0d3231bf0 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -2904,8 +2904,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index a323ab9af79..8514cac1d48 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -2486,8 +2486,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index 8c0e15d8671..d650803139d 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -2913,8 +2913,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index f983cbaa2d6..c7736ec32e7 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -2553,8 +2553,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index 18cd2a0681a..5db98f5bbc6 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -2320,8 +2320,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 906f05e81e5..389411b2645 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -2361,8 +2361,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index e3be22f891e..8d1b1215d0c 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -3081,8 +3081,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index f7bd5056c40..945ae24e0fa 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -718,7 +718,7 @@ jobs: # Cache configuration from frontmatter processed below - name: Cache (pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }}) - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run' }} + if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request' }} uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }} @@ -726,7 +726,7 @@ jobs: restore-keys: | pr-test-prefetch-${{ github.event.pull_request.number || github.event.issue.number }}- - name: Cache (pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }}) - if: ${{ !(github.event_name != 'pull_request_target') || !(github.event_name != 'issue_comment') || !(github.event_name != 'workflow_run') }} + if: ${{ (!(github.event_name == 'push')) && (!(github.event_name == 'workflow_dispatch')) && (!(github.event_name == 'repository_dispatch')) && (!(github.event_name == 'delete')) && (!(github.event_name == 'registry_package')) && (!(github.event_name == 'page_build')) && (!(github.event_name == 'schedule')) && (!(github.event_name == 'pull_request')) }} uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: key: pr-test-prefetch-${{ github.event.pull_request.head.sha || github.event.issue.number }} diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 053ac20f9f2..5712d621d4e 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -2972,8 +2972,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 15978af2080..802fb613d0c 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -2288,8 +2288,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/weekly-network-domains-audit.lock.yml b/.github/workflows/weekly-network-domains-audit.lock.yml index 4aa923ffa3d..c72e5385374 100644 --- a/.github/workflows/weekly-network-domains-audit.lock.yml +++ b/.github/workflows/weekly-network-domains-audit.lock.yml @@ -2233,8 +2233,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/windows-grower.lock.yml b/.github/workflows/windows-grower.lock.yml index 33867611790..90110186410 100644 --- a/.github/workflows/windows-grower.lock.yml +++ b/.github/workflows/windows-grower.lock.yml @@ -2354,8 +2354,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index baba7e083f2..c7e0cbbffba 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -2362,8 +2362,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md index 8c94f2572b0..0bb743b7873 100644 --- a/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md +++ b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md @@ -17,9 +17,9 @@ GitHub.com supports workflow- and job-level `cache-mode` token policies. GHES co Use job-level `cache-mode` on GitHub.com to limit agent cache access while detection is pending, except where trusted dependency-cache saves require the platform's trigger-scoped default token. Without dependency-cache saves, the detection-enabled agent uses `cache-mode: read`. With dependency caches, low-trust events use restore-only actions and inherit the platform's read-only default; trusted events retain combined restore/save actions and the platform's default write access. Runtime event conditions preserve that distinction in mixed-trigger workflows because `cache-mode` accepts literal values, not event-dependent expressions. -A separate cache-memory publisher uses `cache-mode: write-only` and requires both successful prerequisite jobs and explicit detection acceptance (`needs.detection.outputs.detection_success == 'true'`). Missing acceptance, rejected output, or runtime-skipped detection must not authorize publication. The publisher must also be disabled at runtime for `pull_request_target`, `issue_comment`, and `workflow_run`: detection acceptance does not justify overriding their low-trust defaults or writing cache lineages restored by higher-trust runs. +A separate cache-memory publisher uses `cache-mode: write-only` and requires both successful prerequisite jobs and explicit detection acceptance (`needs.detection.outputs.detection_success == 'true'`). Missing acceptance, rejected output, or runtime-skipped detection must not authorize publication. Both publisher and dependency-save actions use a fail-closed event allowlist: `push`, `workflow_dispatch`, `repository_dispatch`, `delete`, `registry_package`, `page_build`, `schedule`, and merge-ref-isolated `pull_request`. All other events are restore-only, including issue/discussion events and unknown future events. Reusable workflows use the original caller's runtime event; `workflow_call` by itself grants nothing. Detection acceptance, including the detector's no-output short-circuit, does not justify overriding the platform's low-trust defaults or writing cache lineages restored by higher-trust runs. -GHES compatibility mode omits compiler-generated `cache-mode` fields. The Actions AST preserves authored job-level policies, and the `cache-poisoning` linter warns about explicit `write` or `write-only` overrides on `pull_request_target`, `issue_comment`, and `workflow_run`, including inherited workflow and reusable-caller policies. The actionlint compatibility filter ignores only unsupported-key diagnostics at the supported workflow and job locations, not misplaced keys or malformed values. +GHES compatibility mode omits compiler-generated `cache-mode` fields. The Actions AST preserves authored job-level policies, and the `cache-poisoning` linter warns about explicit `write` or `write-only` overrides on known events outside the write allowlist, including inherited workflow and reusable-caller policies. The actionlint compatibility filter ignores only unsupported-key diagnostics at the supported workflow and job locations, not misplaced keys or malformed values. ### Alternatives considered @@ -29,7 +29,7 @@ GHES compatibility mode omits compiler-generated `cache-mode` fields. The Action ## Consequences -The GitHub.com agent token cannot write caches while the detection gate is active unless trusted dependency-cache compatibility requires the platform default. Publication requires an explicit acceptance signal and is disabled for the three low-trust event types above. On eligible runs the separate publisher can write without receiving cache-read access. +The GitHub.com agent token cannot write caches while the detection gate is active unless allowed dependency-cache compatibility requires the platform default. Publication requires an explicit acceptance signal and an event from the write allowlist. On eligible runs the separate publisher can write without receiving cache-read access. Trusted dependency-cache saves are intentionally not detection-gated. A trusted agent with those caches retains direct token write capability before detection runs; restore-only actions would not remove that capability. This is a compatibility tradeoff, not a claim that detection attests cached dependencies. diff --git a/docs/src/content/docs/reference/cache-memory.md b/docs/src/content/docs/reference/cache-memory.md index b4ae0ffbc36..20178d3c067 100644 --- a/docs/src/content/docs/reference/cache-memory.md +++ b/docs/src/content/docs/reference/cache-memory.md @@ -171,9 +171,9 @@ Do not store sensitive data in cache memory. It follows repository permissions, On GitHub.com, detection-enabled workflows without frontmatter dependency caches give the agent job `cache-mode: read`. This restricts its scoped cache token; selecting a restore-only action alone would not restrict other writers. -Workflows with frontmatter `cache:` entries instead retain the platform's trigger-scoped token defaults so dependency caches can still be populated. Runtime event conditions select restore-only actions for `pull_request_target`, `issue_comment`, and `workflow_run`, and combined restore/save actions for other events, including `push`, `workflow_dispatch`, and `repository_dispatch`. This also applies to mixed-trigger workflows. Trusted dependency-cache saves are not detection-gated, and agents on those events retain direct token write capability before detection. +Workflows with frontmatter `cache:` entries instead retain the platform's trigger-scoped token defaults so dependency caches can still be populated. Runtime event conditions allow combined restore/save actions only for `push`, `workflow_dispatch`, `repository_dispatch`, `delete`, `registry_package`, `page_build`, `schedule`, and merge-ref-isolated `pull_request` runs. Every other event, including `issues`, `discussion`, `discussion_comment`, and unknown future events, selects restore-only actions. This also applies to mixed-trigger and reusable workflows: the original caller's runtime event controls access. Allowed dependency-cache saves are not detection-gated, and agents on those events retain direct token write capability before detection. -Writable cache-memory entries are published by the separate `update_cache_memory` job with `cache-mode: write-only`. The job requires successful agent and detection jobs and `needs.detection.outputs.detection_success == 'true'`, then applies configured memory validation before saving. It never runs on `pull_request_target`, `issue_comment`, or `workflow_run`, even after detector acceptance, so those events cannot publish into the lineage trusted runs restore. Detection warnings, rejected verdicts, missing acceptance outputs, failed jobs, and a detection job skipped by its runtime condition block persistence even when `continue-on-error` permits other safe outputs. The detector's internal no-output short-circuit still reports acceptance; it is not evidence that every cached file was scanned. +Writable cache-memory entries are published by the separate `update_cache_memory` job with `cache-mode: write-only`. The job requires an event from the same write allowlist, successful agent and detection jobs, and `needs.detection.outputs.detection_success == 'true'`, then applies configured memory validation before saving. All other events remain blocked even after detector acceptance, so issue/discussion-driven runs cannot publish into the lineage trusted runs restore. Detection warnings, rejected verdicts, missing acceptance outputs, failed jobs, and a detection job skipped by its runtime condition block persistence even when `continue-on-error` permits other safe outputs. The detector's internal no-output short-circuit still reports acceptance; it is not evidence that every cached file was scanned. The publisher's explicit write capability is restricted to eligible events by its job condition; detector acceptance alone cannot authorize low-trust publication. Neither this capability nor a detector verdict authenticates the uploaded artifact or cached content. Treat memory as data, not executable code. @@ -181,7 +181,7 @@ Dry-run compilation uses restore-only compiler-managed cache actions and omits t For servers that do not support `cache-mode`, enable [GHES compatibility mode](/gh-aw/reference/enterprise-configuration/#ghes-compatibility-mode) with `gh aw compile --ghes my-workflow.md` or `"ghes": true` in `.github/workflows/aw.json`, then recompile. This omits compiler-generated `cache-mode` fields even during dry-run and also changes artifact-action pins. GitHub's announcement confirms GitHub.com availability, not a GHES release. Cache-memory restore-only agent actions, publisher event/validation gates, and event-conditioned dependency-cache actions remain. Without scoped-token enforcement, arbitrary cache writers are not constrained by this compiler boundary. -Without detection, existing same-job cache-memory behavior is unchanged: cache saves depend on the platform's trigger-based defaults. GitHub.com defaults low-trust default-branch triggers to read-only, while `push`, `workflow_dispatch`, and `repository_dispatch` can write by default. Custom jobs have their own cache-access boundary. The [`cache-poisoning` linter](/gh-aw/reference/workflow-linters/) warns about effective explicit write overrides on `pull_request_target`, `issue_comment`, and `workflow_run`; it does not prove a dedicated publisher safe or validate arbitrary shell cache operations. +Without detection, existing same-job cache-memory behavior is unchanged: cache saves depend on the platform's trigger-based defaults. GitHub.com defaults events outside its default-branch write allowlist to read-only; `pull_request` caches are isolated to the merge ref. Custom jobs have their own cache-access boundary. The [`cache-poisoning` linter](/gh-aw/reference/workflow-linters/) warns about effective explicit write overrides for known events outside the allowlist and for reusable workflows whose caller policy needs review; it does not prove a dedicated publisher safe or validate arbitrary shell cache operations. Cache contents are unsigned and unverified. Cache-memory key isolation does not cover ordinary dependency-cache keys, third-party cache writers, or persistent caches on reused runners. See GitHub's [cache access reference](https://docs.github.com/en/actions/reference/workflows-and-actions/dependency-caching#controlling-cache-access-with-cache-mode). diff --git a/docs/src/content/docs/reference/workflow-linters.md b/docs/src/content/docs/reference/workflow-linters.md index b094437b23e..aa1f31131e8 100644 --- a/docs/src/content/docs/reference/workflow-linters.md +++ b/docs/src/content/docs/reference/workflow-linters.md @@ -42,7 +42,7 @@ The compiler threat IDs reference the [Compiler Threat Detection Specification]( | `grader-file-io` | — | AW | Custom `graders..script` JavaScript ASTs do not access filesystem/host capabilities or load modules. Requires the optional native JavaScript parser; missing parser configuration produces a visible coverage warning. | | `grader-shell-file-write` | — | AW | Repository-owned `graders.operational-value.run` Bash ASTs avoid detected file writes and unchecked shell execution. Loads confined evaluator source without executing it; no optional JavaScript parser required. | | `artipacked` | — | AW, Actions | `actions/checkout` explicitly disables credential persistence. Omitted, enabled, or dynamic persistence produces a review warning; later authenticated Git operations may require it. During compilation only, exact compiler-generated blocks can exempt PR checkouts in `safe_outputs` whose trusted handlers require retained credentials, or agent checkouts immediately followed by compiler-owned credential cleanup and verification when their paths are statically within discovery coverage (at most 13 directory components beneath the workspace). Deeper or unknown paths retain warnings. Authored steps and standalone `gh aw lint` checks remain unchanged. | -| `cache-poisoning` | — | AW, Actions | Release-event and tag-push workflows avoid cache restoration through `actions/cache`, `actions/cache/restore`, `actions/setup-go`, and `actions/setup-node`; save-only and lookup-only actions are exempt from the restore check. Explicit effective `cache-mode: write` or `write-only` on `pull_request_target`, `issue_comment`, or `workflow_run` warns about overriding the read-only default, including reusable-workflow callers. A job-level `read` or `none` overrides an inherited workflow write mode. Job names do not establish publisher trust. | +| `cache-poisoning` | — | AW, Actions | Release-event and tag-push workflows avoid cache restoration through `actions/cache`, `actions/cache/restore`, `actions/setup-go`, and `actions/setup-node`; save-only and lookup-only actions are exempt from the restore check. Explicit effective `cache-mode: write` or `write-only` on known events outside GitHub's write allowlist, including issue/discussion events, warns about overriding the read-only default. Reusable workflows require caller-policy review. A job-level `read` or `none` overrides an inherited workflow write mode. Job names do not establish publisher trust. | | `excessive-permissions` | `CTR-001` | Actions | Workflow-wide write grants are moved to the jobs that require them. Job-level writes and AW root grants are not workflow-wide permissions. | | `obfuscation` | — | AW, Actions | Runner-interpolated fields avoid literal-only string expressions such as `${{ '' }}`. Ordinary expressions, fallback strings, and boolean conditions are unaffected. | | `bash-case-pattern` | — | AW, Actions | Bash `case` patterns inside `$(...)` use balanced `(pattern)` syntax for Bash 3.2 compatibility. Intentional variable glob matching remains unquoted. Reports warnings without executing scripts or requiring ShellCheck. | diff --git a/pkg/cli/lint_cache_mode_test.go b/pkg/cli/lint_cache_mode_test.go index ab74e3411c6..8791739a64a 100644 --- a/pkg/cli/lint_cache_mode_test.go +++ b/pkg/cli/lint_cache_mode_test.go @@ -19,6 +19,10 @@ func TestCacheWriteOverrideCLI(t *testing.T) { name, trigger, root, job, want string }{ {"low trust job", "issue_comment", "", "write-only", "jobs.check.cache-mode"}, + {"issues job", "issues", "", "write-only", "jobs.check.cache-mode"}, + {"discussion job", "discussion", "", "write", "jobs.check.cache-mode"}, + {"discussion comment job", "discussion_comment", "", "write-only", "jobs.check.cache-mode"}, + {"mixed issues caller", "{push: {}, issues: {}}", "write", "", "cache-mode"}, {"inherited workflow", "workflow_run", "write", "", "cache-mode"}, {"capped job", "pull_request_target", "write", "read", ""}, {"dispatch default", "repository_dispatch", "", "write", ""}, diff --git a/pkg/workflow/cache_access_test.go b/pkg/workflow/cache_access_test.go index 8c7f89c7b81..c2829f9a4bd 100644 --- a/pkg/workflow/cache_access_test.go +++ b/pkg/workflow/cache_access_test.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/github/gh-aw/pkg/workflow/actions" + "github.com/github/gh-aw/pkg/workflow/cachepolicy" "github.com/goccy/go-yaml" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -19,8 +20,15 @@ func TestCompiledCacheAccessBoundaries(t *testing.T) { for _, trigger := range []string{ "pull_request_target", "issue_comment", + "issues", + "discussion", + "discussion_comment", + "pull_request", + "workflow_call", "{workflow_run: {workflows: [CI], branches: [main]}}", "{push: {}, issue_comment: {}}", + "{push: {}, issues: {}}", + "{workflow_call: {}, discussion_comment: {}}", "{repository_dispatch: {types: [refresh]}}", "push", "workflow_dispatch", @@ -47,7 +55,7 @@ func TestCompiledCacheAccessBoundaries(t *testing.T) { assert.Equal(t, "write-only", publisher["cache-mode"]) assert.Equal(t, map[string]any{"actions": "write", "contents": "read"}, publisher["permissions"]) condition := strings.Join(strings.Fields(publisher["if"].(string)), " ") - assert.Equal(t, "always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && github.event_name != 'workflow_run'", condition) + assert.Equal(t, "always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request')", condition) assert.ElementsMatch(t, []any{"activation", "agent", "detection"}, publisher["needs"]) publisherSteps := fmt.Sprint(publisher["steps"]) assert.Contains(t, publisherSteps, "actions/cache/save@") @@ -106,7 +114,7 @@ func TestCompiledCacheAccessDryRunAndGHES(t *testing.T) { } func TestCacheMemoryAgentRemainsReadOnlyWithoutDependencyCaches(t *testing.T) { - for _, event := range []string{"push", "issue_comment"} { + for _, event := range []string{"push", "issue_comment", "issues", "discussion_comment"} { compiled, _ := compileCacheAccessFixture(t, event, "true", false, false, false, false) agent := compiled["jobs"].(map[string]any)["agent"].(map[string]any) assert.Equal(t, "read", agent["cache-mode"]) @@ -126,14 +134,14 @@ func TestCachePublisherRequiresDetectionAcceptance(t *testing.T) { for _, agent := range []string{"success", "failure", "cancelled", "skipped", ""} { for _, detection := range []string{"success", "failure", "cancelled", "skipped", ""} { for _, accepted := range []string{"true", "false", ""} { - for _, event := range []string{"push", "workflow_dispatch", "repository_dispatch", "schedule", "pull_request_target", "issue_comment", "workflow_run"} { + for _, event := range cacheAccessTestEvents() { values := map[string]string{ "needs.agent.result": agent, "needs.detection.result": detection, "needs.detection.outputs.detection_success": accepted, "github.event_name": event, } - trusted := event != "pull_request_target" && event != "issue_comment" && event != "workflow_run" + trusted := cacheAccessTestAllowsWrite(event) assert.Equal(t, trusted && agent == "success" && detection == "success" && accepted == "true", evaluateCacheTrustGate(t, node, values), "event=%s agent=%s detection=%s detection_success=%s", event, agent, detection, accepted) @@ -145,7 +153,7 @@ func TestCachePublisherRequiresDetectionAcceptance(t *testing.T) { func assertDependencyCacheTrustGates(t *testing.T, agent map[string]any) { t.Helper() - for _, event := range []string{"push", "workflow_dispatch", "repository_dispatch", "pull_request_target", "issue_comment", "workflow_run"} { + for _, event := range cacheAccessTestEvents() { var activeActions []string for _, rawStep := range agent["steps"].([]any) { step := rawStep.(map[string]any) @@ -159,7 +167,7 @@ func assertDependencyCacheTrustGates(t *testing.T, agent map[string]any) { } } require.Len(t, activeActions, 1, "event=%s", event) - if event == "pull_request_target" || event == "issue_comment" || event == "workflow_run" { + if !cacheAccessTestAllowsWrite(event) { assert.Contains(t, activeActions[0], "actions/cache/restore@") } else { assert.Contains(t, activeActions[0], "actions/cache@", "trusted dependency caches must retain their post-action save") @@ -167,6 +175,32 @@ func assertDependencyCacheTrustGates(t *testing.T, agent map[string]any) { } } +func cacheAccessTestEvents() []string { + return append(append([]string{}, validGitHubEventTypes...), "", "future_untrusted_event") +} + +func cacheAccessTestAllowsWrite(event string) bool { + switch event { + case "push", "workflow_dispatch", "repository_dispatch", "delete", "registry_package", "page_build", "schedule", "pull_request": + return true + default: + return false + } +} + +func TestCacheWriteTriggerClassification(t *testing.T) { + readOnly := make(map[string]bool) + for _, event := range cachepolicy.ReadOnlyEvents() { + readOnly[event] = true + } + for _, event := range cacheAccessTestEvents() { + assert.Equal(t, cacheAccessTestAllowsWrite(event), cachepolicy.AllowsWrite(event), "event=%s", event) + } + for _, event := range validGitHubEventTypes { + assert.NotEqual(t, cachepolicy.AllowsWrite(event), readOnly[event], "each known event needs exactly one classification: %s", event) + } +} + func evaluateCacheTrustGate(t *testing.T, node ConditionNode, values map[string]string) bool { t.Helper() switch node := node.(type) { diff --git a/pkg/workflow/cache_steps.go b/pkg/workflow/cache_steps.go index edecd2592e0..579c75234e3 100644 --- a/pkg/workflow/cache_steps.go +++ b/pkg/workflow/cache_steps.go @@ -6,6 +6,7 @@ import ( "os" "strings" + "github.com/github/gh-aw/pkg/workflow/cachepolicy" "github.com/goccy/go-yaml" ) @@ -39,19 +40,13 @@ func generateCacheSteps(builder *strings.Builder, data *WorkflowData, verbose bo } } -// cacheWriteAllowedCondition excludes events whose runs can carry untrusted -// input while executing in the base repository's cache namespace. +// cacheWriteAllowedCondition grants writes only for platform-write-capable events. func cacheWriteAllowedCondition() ConditionNode { - var condition ConditionNode - for _, event := range []string{"pull_request_target", "issue_comment", "workflow_run"} { - allowed := BuildNotEquals(BuildPropertyAccess("github.event_name"), BuildStringLiteral(event)) - if condition == nil { - condition = allowed - } else { - condition = BuildAnd(condition, allowed) - } + var terms []ConditionNode + for _, event := range cachepolicy.WriteEvents() { + terms = append(terms, BuildEquals(BuildPropertyAccess("github.event_name"), BuildStringLiteral(event))) } - return condition + return BuildDisjunction(false, terms...) } func parseCacheStepConfigs(cacheYAML string) ([]map[string]any, error) { diff --git a/pkg/workflow/cachepolicy/events.go b/pkg/workflow/cachepolicy/events.go new file mode 100644 index 00000000000..2c297b9ad76 --- /dev/null +++ b/pkg/workflow/cachepolicy/events.go @@ -0,0 +1,33 @@ +// Package cachepolicy defines the trigger boundary for compiler-managed cache writes. +package cachepolicy + +import "slices" + +// WriteEvents returns GitHub's default-branch cache-write allowlist, plus +// pull_request, whose caches are isolated to the pull request's merge ref. +// https://docs.github.com/en/actions/reference/workflows-and-actions/dependency-caching#cache-access-for-low-trust-workflow-triggers +func WriteEvents() []string { + return []string{ + "push", "workflow_dispatch", "repository_dispatch", "delete", + "registry_package", "page_build", "schedule", "pull_request", + } +} + +// AllowsWrite fails closed for unknown events. Reusable workflows use the +// original caller's runtime event, not workflow_call. +func AllowsWrite(event string) bool { + return slices.Contains(WriteEvents(), event) +} + +// ReadOnlyEvents lists known events outside the write allowlist for authored +// trigger diagnostics. workflow_call requires review of the caller's policy. +func ReadOnlyEvents() []string { + return []string{ + "branch_protection_rule", "check_run", "check_suite", "create", + "deployment", "deployment_status", "discussion", "discussion_comment", + "fork", "gollum", "issue_comment", "issues", "label", "merge_group", + "milestone", "project", "project_card", "project_column", "public", + "pull_request_review", "pull_request_review_comment", "pull_request_target", + "release", "status", "watch", "workflow_call", "workflow_run", + } +} diff --git a/pkg/workflow/lint/cache_write_overrides.go b/pkg/workflow/lint/cache_write_overrides.go index 74b79068e4a..3be14436633 100644 --- a/pkg/workflow/lint/cache_write_overrides.go +++ b/pkg/workflow/lint/cache_write_overrides.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/github/gh-aw/pkg/workflow/aw" + "github.com/github/gh-aw/pkg/workflow/cachepolicy" ) func cacheWriteOverrides(ctx context.Context, input Input, blocks []aw.ExecutionBlock) ([]Diagnostic, error) { @@ -41,8 +42,8 @@ func cacheWriteOverrides(ctx context.Context, input Input, blocks []aw.Execution reported[field] = struct{}{} diagnostics = append(diagnostics, Diagnostic{ Path: field, - Message: "Explicit cache-write access overrides the read-only default for pull_request_target, issue_comment, or workflow_run; " + - "use cache-mode: read for untrusted execution and review any dedicated cache publisher's input validation and cache consumers", + Message: "Explicit cache-write access can override the read-only default outside GitHub's write-capable trigger allowlist; " + + "use cache-mode: read for untrusted execution and review reusable callers, publisher input validation, and cache consumers", }) } } @@ -68,7 +69,7 @@ func cacheWriteOverrides(ctx context.Context, input Input, blocks []aw.Execution } func cacheLowTrustTrigger(ctx context.Context, on any) (bool, error) { - for _, event := range []string{"pull_request_target", "issue_comment", "workflow_run"} { + for _, event := range cachepolicy.ReadOnlyEvents() { if _, found, err := authoredTrigger(ctx, on, event); err != nil || found { return found, err } diff --git a/pkg/workflow/lint/cache_write_overrides_test.go b/pkg/workflow/lint/cache_write_overrides_test.go index f8433fff517..bb8b6a69a10 100644 --- a/pkg/workflow/lint/cache_write_overrides_test.go +++ b/pkg/workflow/lint/cache_write_overrides_test.go @@ -10,13 +10,18 @@ import ( ) func TestCacheLowTrustWriteOverrides(t *testing.T) { - const message = "Explicit cache-write access overrides the read-only default for pull_request_target, issue_comment, or workflow_run; use cache-mode: read for untrusted execution and review any dedicated cache publisher's input validation and cache consumers" + const message = "Explicit cache-write access can override the read-only default outside GitHub's write-capable trigger allowlist; use cache-mode: read for untrusted execution and review reusable callers, publisher input validation, and cache consumers" for _, test := range []struct { name, on, mode string want bool }{ {"target write", "pull_request_target", "write", true}, {"comment write only", "issue_comment", "write-only", true}, + {"issues write", "issues", "write-only", true}, + {"discussion write", "discussion", "write", true}, + {"discussion comment write", "discussion_comment", "write-only", true}, + {"mixed issues", "{push: {}, issues: {}}", "write-only", true}, + {"reusable caller unknown", "workflow_call", "write-only", true}, {"workflow run write", "{workflow_run: {workflows: [CI], branches: [main]}}", "write", true}, {"mixed events", "[push, issue_comment]", "write", true}, {"mixed mapping", "{push: {}, pull_request_target: {}}", "write-only", true}, @@ -93,6 +98,23 @@ func TestCacheWriteModeInheritance(t *testing.T) { } } +func TestCacheIssueReusableCallerWriteOverride(t *testing.T) { + for _, target := range []ASTTargets{ActionsAST, AWAST} { + input := ruleContractInput(t, `on: {push: {}, issues: {}, discussion_comment: {}} +jobs: + call: + uses: ./.github/workflows/worker.yml + cache-mode: write-only +`, target, false) + runner, err := Default().Select("cache-poisoning") + require.NoError(t, err) + diagnostics, err := runner.Run(context.Background(), input) + require.NoError(t, err) + require.Len(t, diagnostics, 1) + assert.Equal(t, "jobs.call.cache-mode", diagnostics[0].Path) + } +} + func TestCacheWriterJobNamesDoNotEstablishTrust(t *testing.T) { for _, target := range []ASTTargets{ActionsAST, AWAST} { input := ruleContractInput(t, `on: issue_comment diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden index 4a03f3622e9..99db9434a5f 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden @@ -3247,8 +3247,9 @@ jobs: - detection if: > always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && - needs.agent.result == 'success' && github.event_name != 'pull_request_target' && github.event_name != 'issue_comment' && - github.event_name != 'workflow_run' + needs.agent.result == 'success' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || + github.event_name == 'repository_dispatch' || github.event_name == 'delete' || github.event_name == 'registry_package' || + github.event_name == 'page_build' || github.event_name == 'schedule' || github.event_name == 'pull_request') runs-on: ubuntu-slim # Permissions for the update_cache_memory job (workflow permissions default to none). permissions: diff --git a/specs/compiler-threat-detection-changelog.md b/specs/compiler-threat-detection-changelog.md index 818ea6b2a49..f87290d9b9a 100644 --- a/specs/compiler-threat-detection-changelog.md +++ b/specs/compiler-threat-detection-changelog.md @@ -16,6 +16,7 @@ This changelog records the version history and the dated mapping audits for `spe | Version | Change | |---|---| +| 1.0.76 | Fixes an incomplete cache-write denylist that allowed issue/discussion runs to override GitHub's default-branch read-only cache boundary. Publisher and dependency-save guards now share a fail-closed allowlist matching the seven documented write-capable events plus merge-ref-isolated `pull_request`; missing and unknown events are denied. Extends known-event lint diagnostics, mixed-trigger and reusable-caller coverage, and the acceptance matrix, including accepted no-output results. Preserves dry-run, GHES, dispatch, and no-detection boundaries. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | 1.0.75 | Blocks cache-memory publication on `pull_request_target`, `issue_comment`, and `workflow_run` regardless of detector acceptance, preventing low-trust publication into trusted cache lineages. Preserves trusted dependency-cache saves through runtime-conditioned actions and trigger-scoped tokens, explicitly documenting their pre-detection write capability. Shares the detection-acceptance helper with drive-memory publication and custom-job guards. Extends narrow actionlint compatibility to job-level cache policies while preserving malformed-value and misplaced-key errors. Maps trust/save, rejection, dry-run, and compatibility tests; generated locks require regeneration. No new threat identifier or frontmatter setting. | | 1.0.74 | Strengthens CTR-019 with read-only agent cache tokens, restore-only frontmatter dependency caches, a separate write-only cache-memory publisher, and explicit detector acceptance in addition to successful jobs. Specifies warning/failed/skipped/missing detection handling, dry-run precedence, the existing CLI/config GHES opt-out, and unchanged no-detection behavior. Maps effective low-trust explicit-write diagnostics and generated-YAML/acceptance regression coverage. Separates capability grants from artifact authenticity and records GHES, custom-job, unsigned-content, and persistent-runner limitations. Also clarifies pwn-request coverage boundaries between compiler rules and runtime/operator controls: trusted custom execution, immutable-pin currency, actor versus historical-revision approval, upstream artifact-as-data handling, clean hosts and cache separation, platform-policy limits with effective-policy checks, opt-outs, and safe-output warn mode. Preserves CTR-005's clean-detection gate for ordinary downstream custom jobs. Generated locks require regeneration; no new threat identifier, compiler rejection, permission grant, or frontmatter setting. | | 1.0.72 | Audit-only clarification that same-repository bot PR `labeled` events remain subject to the RS-05a collaborator permission floor. No new threat identifier, permission grant, or lock-file schema change. | diff --git a/specs/compiler-threat-detection-spec.md b/specs/compiler-threat-detection-spec.md index 71a841f4e91..67513a10730 100644 --- a/specs/compiler-threat-detection-spec.md +++ b/specs/compiler-threat-detection-spec.md @@ -7,7 +7,7 @@ sidebar: # GitHub Actions Compiler Threat Detection Specification -**Version**: 1.0.75 +**Version**: 1.0.76 **Status**: Candidate Recommendation **Latest Version**: https://github.com/github/gh-aw/blob/main/specs/compiler-threat-detection-spec.md **Editors**: GitHub Next (GitHub, Inc.) @@ -32,6 +32,7 @@ Each version maps to the minimum compatible binary. A version change MUST update | Versions | Minimum gh-aw | Compatibility | |---|---:|---| +| `1.0.76` | Unreleased | Replaces the incomplete cache-write event denylist with GitHub's documented write allowlist plus merge-ref-isolated `pull_request`. Publisher and dependency-save guards deny all other and unknown events, including issues/discussions; known-event lint diagnostics share the classification. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.75` | Unreleased | Blocks detection-separated cache-memory publication on low-trust events, restores trusted dependency-cache saves using trigger-scoped tokens, and shares explicit detection acceptance across cache/drive publishers and custom jobs. Adds job-level actionlint compatibility without suppressing invalid locations or values. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.74` | Unreleased | Strengthens CTR-019 with detection-separated agent/publisher cache access and explicit detector acceptance. Specifies the existing GHES compatibility opt-out, dry-run precedence, low-trust explicit-write warnings, and unchanged no-detection behavior. Also clarifies pwn-request compiler coverage versus runtime/deployment trust: host/cache persistence, producer-code trust, approval-to-revision binding, action version currency, custom executable steps, effective platform-policy checks, and safe-output warn mode. Generated locks require regeneration; no new threat identifier, compiler rejection, permission grant, or lock-file schema change. | | `1.0.73` | Unreleased | Audit-only clarification that same-repository bot PR `edited` checkout is a runtime trust control restricted to allow-listed actors and body-only changes under Security Architecture Specification RS-05a. No new threat identifier, permission grant, or lock-file schema change. | @@ -214,15 +215,15 @@ The Actions/AW `custom-job-detection` linter MUST check transitive ordering, req ### 5.1.3 Cache Access and Publication (CTR-019) -When detection is enabled and GHES compatibility mode is disabled, the compiler MUST emit `cache-mode: read` on the agent job unless frontmatter dependency caches require the platform's trigger-scoped default token. With dependency caches, runtime event conditions MUST select restore-only actions for `pull_request_target`, `issue_comment`, and `workflow_run`, and combined restore/save actions for other events, including `push`, `workflow_dispatch`, and `repository_dispatch`. This MUST work in mixed-trigger workflows and with expression-controlled detection. Trusted dependency-cache saves are intentionally not detection-gated; the agent retains direct cache-write capability on those events. Selecting a restore-only action alone does not restrict the job's scoped cache token. +When detection is enabled and GHES compatibility mode is disabled, the compiler MUST emit `cache-mode: read` on the agent job unless frontmatter dependency caches require the platform's trigger-scoped default token. Publisher and dependency-save guards MUST allow only `push`, `workflow_dispatch`, `repository_dispatch`, `delete`, `registry_package`, `page_build`, `schedule`, and merge-ref-isolated `pull_request`. Every other event, including `issues`, `discussion`, `discussion_comment`, missing events, and unknown future events, MUST fail closed. Dependency caches MUST select restore-only actions outside this allowlist and combined restore/save actions inside it. This MUST work in mixed-trigger workflows, reusable workflows using the original caller's runtime event, and expression-controlled detection. `workflow_call` itself MUST NOT grant cache writes. Allowed dependency-cache saves are intentionally not detection-gated; the agent retains direct cache-write capability on those events. Selecting a restore-only action alone does not restrict the job's scoped cache token. -Writable cache-memory entries MUST use a separate publisher requiring `needs.agent.result == 'success'`, `needs.detection.result == 'success'`, and `needs.detection.outputs.detection_success == 'true'` before configured memory validation and saving. The publisher MUST additionally exclude `pull_request_target`, `issue_comment`, and `workflow_run` at runtime so accepted low-trust output cannot populate a cache lineage later restored by trusted runs. Failed, cancelled, skipped, or missing detection results, missing acceptance outputs, and warning-mode rejection MUST block publication even if the detection job reports success. Cache-memory and drive-memory publishers and ordinary downstream custom-job guards MUST share the explicit detection-acceptance condition. The detector's internal no-output short-circuit still reports acceptance; this MUST NOT be described as proof that every cached file was scanned. +Writable cache-memory entries MUST use a separate publisher requiring `needs.agent.result == 'success'`, `needs.detection.result == 'success'`, and `needs.detection.outputs.detection_success == 'true'` before configured memory validation and saving. The publisher MUST additionally require an allowlisted runtime event so accepted low-trust output cannot populate a cache lineage later restored by trusted runs. Failed, cancelled, skipped, or missing detection results, missing acceptance outputs, and warning-mode rejection MUST block publication even if the detection job reports success. Cache-memory and drive-memory publishers and ordinary downstream custom-job guards MUST share the explicit detection-acceptance condition. The detector's internal no-output short-circuit still reports acceptance; this MUST NOT be described as proof that every cached file was scanned or as authorization for events outside the write allowlist. Outside GHES compatibility mode, the publisher MUST use `cache-mode: write-only`; its runtime event guard MUST prevent that explicit capability from overriding the low-trust defaults on an executing job. The compiler MUST NOT impose a workflow-wide read cap that prevents intended trusted publication during ordinary execution. This capability boundary MUST NOT be described as artifact authenticity, provenance, or attestation. Dry-run MUST omit the publisher and MUST NOT acquire write capability through a job-level override. Dry-run MUST use restore-only compiler-managed cache actions and, outside GHES compatibility mode, workflow-level and agent-job `cache-mode: read`. Entries marked `restore-only: true` MUST NOT be published. The existing `gh aw compile --ghes` flag and `.github/workflows/aw.json` setting `"ghes": true` MUST omit compiler-generated workflow and job `cache-mode` fields, including dry-run fields. GitHub.com availability does not establish support in a deployed GHES release; compatibility mode MUST NOT claim scoped-token enforcement there. It retains cache-memory restore-only agent actions, publisher event/validation gates, and event-conditioned dependency-cache actions, without assuming the deployed server enforces GitHub.com's token defaults. This compatibility switch also selects GHES artifact-action pins; it is not an independent cache-service capability negotiation. -Without detection, existing same-job cache-memory behavior MUST remain unchanged, except for independent dry-run restrictions. Custom jobs retain their own cache-access boundary. The Actions/AW `cache-poisoning` linter MUST warn about effective explicit `write` or `write-only` overrides on `pull_request_target`, `issue_comment`, and `workflow_run`, including workflow-level inheritance and reusable callers; a job-level `read` or `none` overrides inherited write access. Job names MUST NOT establish publisher trust. `repository_dispatch` MUST NOT be classified as having the platform's low-trust read-only default. +Without detection, existing same-job cache-memory behavior MUST remain unchanged, except for independent dry-run restrictions. Custom jobs retain their own cache-access boundary. The Actions/AW `cache-poisoning` linter MUST warn about effective explicit `write` or `write-only` overrides for known events outside the write allowlist, including issue/discussion events, workflow-level inheritance, and reusable callers whose effective runtime event is unknown; a job-level `read` or `none` overrides inherited write access. Job names MUST NOT establish publisher trust. `repository_dispatch` MUST NOT be classified as having the platform's low-trust read-only default. These controls do not authenticate unsigned cache contents or uploaded artifacts, prove arbitrary shell/third-party cache writers safe, or cover persistent runner caches. Conformance evidence MUST cover generated YAML for low-trust, trusted, mixed, dispatch, dry-run, GHES, no-detection, and legitimate publisher cases, plus detector-result and acceptance-output combinations. @@ -308,7 +309,7 @@ Every active rule MUST map to implementation and test coverage. References are p | CTR-016 Compile-Time Manifest Drift | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | | CTR-017 Secret Leakage via Environment Variables and Telemetry | safe-update, strict env/update, cache, and expression builder; `pkg/workflow/awf_command_builder.go`, `threat_detection_external.go`, `evals_steps.go`; AST subsets: `pkg/workflow/lint/secrets.go`, `otlp_secret_leak.go`, `pkg/workflow/taint/` | corresponding enforcement, secrets, update, cache, and OTLP leak tests; `TestOTLPEnvExcludedFromAWFSandboxes` in `awf_env_test.go`, `TestEvalsOTLPEnvExcludedFromSandbox` in `evals_steps_test.go`, `TestCompiledOTLPEnvExcludedFromAgentDetectionAndEvals` in `threat_detection_isolation_test.go`; `pkg/workflow/taint/taint_test.go`, `pkg/workflow/lint/otlp_secret_leak_test.go` | | CTR-018 Version Integrity Bypass | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | -| CTR-019 Cache-Memory Integrity Enforcement | `pkg/workflow/compiler_main_job.go`, `cache_memory.go`, `cache_steps.go`, `drive_memory.go`, `expression_builder.go`, `compiler_yaml.go`; GHES configuration in `compiler.go`; AST subset: `pkg/workflow/lint/cache_write_overrides.go` | `pkg/workflow/cache_access_test.go`, `cache_memory_threat_detection_test.go`, `compiler_development_test.go`, `drive_memory_test.go`, `expression_builder_detection_test.go`; `pkg/workflow/lint/cache_write_overrides_test.go`, `pkg/cli/lint_cache_mode_test.go` | +| CTR-019 Cache-Memory Integrity Enforcement | `pkg/workflow/compiler_main_job.go`, `cache_memory.go`, `cache_steps.go`, shared `cachepolicy/events.go`, `drive_memory.go`, `expression_builder.go`, `compiler_yaml.go`; GHES configuration in `compiler.go`; AST subset: `pkg/workflow/lint/cache_write_overrides.go` | `pkg/workflow/cache_access_test.go`, `cache_memory_threat_detection_test.go`, `compiler_development_test.go`, `drive_memory_test.go`, `expression_builder_detection_test.go`; `pkg/workflow/lint/cache_write_overrides_test.go`, `pkg/cli/lint_cache_mode_test.go` | | CTR-020 Conditional Import Security | `pkg/parser/import_bfs.go` | `pkg/parser/import_bfs_test.go` | | CTR-021 Workflow Run Trigger Branch Scope | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go`; AST subset: `pkg/workflow/lint/workflow_run_scope.go` | workflow-run, bash-allowlist, gitutil, and download tests; `pkg/workflow/lint/workflow_run_scope_test.go` | | CTR-022 Git Subprocess Argument Injection | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go` | workflow-run, bash-allowlist, gitutil, and download tests | From aa7255565376f7e158f6bf55e654fcb71543bf9f Mon Sep 17 00:00:00 2001 From: pelikhan Date: Wed, 28 Oct 2026 04:20:04 -0700 Subject: [PATCH 08/13] Use cache-aware schema validation for compiler YAML Keep string-based compiler validation consistent with the parsed path and cover cache-mode scopes, invalid modes, misplaced fields, and expression rejection. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- pkg/workflow/compiler_validation_test.go | 66 ++++++++++++++++++++++++ pkg/workflow/schema_validation.go | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/pkg/workflow/compiler_validation_test.go b/pkg/workflow/compiler_validation_test.go index 57aa4b0eb77..f7ed3058bc7 100644 --- a/pkg/workflow/compiler_validation_test.go +++ b/pkg/workflow/compiler_validation_test.go @@ -327,6 +327,72 @@ jobs: uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd`, wantErr: false, }, + { + name: "valid workflow cache mode", + yaml: `cache-mode: read +on: push +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: echo hello`, + }, + { + name: "valid job cache mode", + yaml: `on: push +jobs: + test: + cache-mode: write-only + runs-on: ubuntu-latest + steps: + - run: echo hello`, + }, + { + name: "valid reusable job cache mode", + yaml: `on: push +jobs: + test: + cache-mode: none + uses: ./.github/workflows/test.yml`, + }, + { + name: "invalid cache mode", + yaml: `cache-mode: invalid +on: push +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: echo hello`, + wantErr: true, + errMsg: "cache-mode", + }, + { + name: "invalid step cache mode", + yaml: `on: push +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: echo hello + cache-mode: read`, + wantErr: true, + errMsg: "cache-mode", + }, + { + name: "invalid expression with cache mode", + yaml: `cache-mode: read +on: push +jobs: + test: + runs-on: ubuntu-latest + env: + VALUE: '${{ github.ref + 1 }}' + steps: + - run: echo hello`, + wantErr: true, + errMsg: "unexpected symbol", + }, { name: "invalid workflow - missing jobs", yaml: `name: "Test Workflow" diff --git a/pkg/workflow/schema_validation.go b/pkg/workflow/schema_validation.go index d34edf1a179..d13b8d75985 100644 --- a/pkg/workflow/schema_validation.go +++ b/pkg/workflow/schema_validation.go @@ -85,7 +85,7 @@ func (c *Compiler) validateGitHubActionsSchema(yamlContent string) error { if err := c.validateGitHubActionsSchemaFromParsed(workflowData); err != nil { return err } - return actionslanguageservice.ValidateWorkflow("workflow.yml", yamlContent) + return actionslanguageservice.ValidateWorkflowWithCacheMode("workflow.yml", yamlContent) } // validateGitHubActionsSchemaFromParsed validates pre-parsed workflow data against the From 58cd33352c1d563be07138648f8281f38fd7dfca Mon Sep 17 00:00:00 2001 From: pelikhan Date: Wed, 28 Oct 2026 05:18:36 -0700 Subject: [PATCH 09/13] fix(workflow): validate compiler job cache modes Reject noncanonical cache-mode values during job registration and the compiler's pre-emission validation. Cover control-character injection, invalid modes, post-registration mutations, and native Actions scalar boundaries. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- pkg/workflow/actions/parse_test.go | 33 +++++++++++ pkg/workflow/jobs_cache_mode_test.go | 85 ++++++++++++++++++++++++++++ pkg/workflow/jobs_validation.go | 6 ++ 3 files changed, 124 insertions(+) create mode 100644 pkg/workflow/jobs_cache_mode_test.go diff --git a/pkg/workflow/actions/parse_test.go b/pkg/workflow/actions/parse_test.go index 5bbb9bf5ff5..04ec17a45ea 100644 --- a/pkg/workflow/actions/parse_test.go +++ b/pkg/workflow/actions/parse_test.go @@ -125,6 +125,39 @@ func TestParseJobCacheModes(t *testing.T) { } } +func TestCacheModeEmissionPreservesScalarBoundary(t *testing.T) { + for _, mode := range []string{ + "read\n permissions:\n contents: write", + "read\r permissions: write-all", + "read\r\n steps:\n - run: echo injected", + " read\t ", + } { + t.Run(mode, func(t *testing.T) { + for _, authored := range []bool{false, true} { + input := &Workflow{Jobs: []*Job{{ + ID: "call", Uses: "./.github/workflows/worker.yml", + }}} + if authored { + var err error + input, err = Parse([]byte("jobs:\n call:\n uses: ./.github/workflows/worker.yml\n")) + require.NoError(t, err) + } + input.Jobs[0].CacheMode = mode + content, err := Emit(input) + require.NoError(t, err) + var parsed map[string]any + require.NoError(t, yaml.Unmarshal([]byte(content), &parsed)) + jobs := parsed["jobs"].(map[string]any) + require.Len(t, jobs, 1) + fields := jobs["call"].(map[string]any) + require.Len(t, fields, 2) + assert.Equal(t, mode, fields["cache-mode"]) + assert.Equal(t, "./.github/workflows/worker.yml", fields["uses"]) + } + }) + } +} + func TestParseMultilineAuthoredConditions(t *testing.T) { condition := "contains(github.event.comment.body, '/q\n') &&\n github.event_name == 'issue_comment'" source := "jobs:\n call:\n uses: ./.github/workflows/worker.yml\n if: " + diff --git a/pkg/workflow/jobs_cache_mode_test.go b/pkg/workflow/jobs_cache_mode_test.go new file mode 100644 index 00000000000..7ab4398d3dd --- /dev/null +++ b/pkg/workflow/jobs_cache_mode_test.go @@ -0,0 +1,85 @@ +//go:build !integration + +package workflow + +import ( + "strings" + "testing" + + "github.com/goccy/go-yaml" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestJobManagerCacheMode(t *testing.T) { + for _, mode := range []string{"", "read", "write", "write-only", "none"} { + t.Run(mode, func(t *testing.T) { + for _, reusable := range []bool{false, true} { + jm := NewJobManager() + job := &Job{Name: "test", CacheMode: mode} + if reusable { + job.Uses = "./.github/workflows/worker.yml" + } else { + job.RunsOn = "runs-on: ubuntu-latest" + job.Steps = []string{" - run: echo data\n"} + } + require.NoError(t, jm.AddJob(job)) + require.NoError(t, jm.resolveActions()) + var output strings.Builder + jm.WriteJobsYAML(&output) + var parsed map[string]any + require.NoError(t, yaml.Unmarshal([]byte(output.String()), &parsed)) + fields := parsed["jobs"].(map[string]any)["test"].(map[string]any) + if mode == "" { + assert.NotContains(t, fields, "cache-mode") + assert.NotContains(t, output.String(), "cache-mode:") + } else { + assert.Equal(t, mode, fields["cache-mode"]) + assert.Contains(t, output.String(), " cache-mode: "+mode+"\n") + } + } + }) + } +} + +func TestJobManagerRejectsInvalidCacheMode(t *testing.T) { + tests := []struct { + name string + mode string + }{ + {"unsupported", "read-write"}, + {"case", "READ"}, + {"newline injection", "read\n permissions:\n contents: write"}, + {"carriage return injection", "read\r permissions: write-all"}, + {"crlf injection", "read\r\n permissions: write-all"}, + {"trailing newline", "read\n"}, + {"leading space", " read"}, + {"trailing space", "read "}, + {"space only", " "}, + {"tab", "read\t"}, + {"unicode whitespace", "read\u00a0"}, + {"nul", "read\x00"}, + {"escape", "read\x1b"}, + {"delete", "read\x7f"}, + {"yaml comment", "read # private"}, + {"yaml mapping", "{permissions: write-all}"}, + {"expression", "${{ inputs.cache-mode }}"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + jm := NewJobManager() + job := &Job{Name: "test", CacheMode: tt.mode} + const message = "job 'test' cache-mode must be read, write, write-only, or none; omit cache-mode to use the default" + require.EqualError(t, jm.AddJob(job), message) + assert.Empty(t, jm.GetAllJobs()) + var output strings.Builder + jm.WriteJobsYAML(&output) + assert.Equal(t, "jobs:\n", output.String()) + + job.CacheMode = "read" + require.NoError(t, jm.AddJob(job)) + job.CacheMode = tt.mode + require.EqualError(t, jm.resolveActions(), message, "revalidate mutations before compiler emission") + }) + } +} diff --git a/pkg/workflow/jobs_validation.go b/pkg/workflow/jobs_validation.go index 68000131c4c..2d59afdc5b8 100644 --- a/pkg/workflow/jobs_validation.go +++ b/pkg/workflow/jobs_validation.go @@ -29,6 +29,12 @@ func validateJobDefinition(job *Job) error { return errors.New("job definition cannot be nil") } + switch job.CacheMode { + case "", "read", "write", "write-only", "none": + default: + return fmt.Errorf("job '%s' cache-mode must be read, write, write-only, or none; omit cache-mode to use the default", job.Name) + } + if job.Uses != "" && (job.TimeoutMinutes > 0 || job.TimeoutMinutesExpression != "") { return fmt.Errorf( "job '%s' uses a reusable workflow and cannot set timeout-minutes; remove timeout-minutes from the caller job or move it into the called workflow", From 5daa8604a5720155a3ff896d5275fb393e2bf463 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 12:32:14 +0000 Subject: [PATCH 10/13] Add changeset --- .changeset/patch-harden-detection-cache-access.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/patch-harden-detection-cache-access.md diff --git a/.changeset/patch-harden-detection-cache-access.md b/.changeset/patch-harden-detection-cache-access.md new file mode 100644 index 00000000000..0ba104c1e5f --- /dev/null +++ b/.changeset/patch-harden-detection-cache-access.md @@ -0,0 +1,5 @@ +--- +"gh-aw": patch +--- + +Harden detection-gated cache access by restricting cache publication to trusted runtime events and requiring explicit detection acceptance before persisting agent memory. From 05f99d42165fb1fb86a74a47d29ad2e497e30bd7 Mon Sep 17 00:00:00 2001 From: pelikhan Date: Wed, 28 Oct 2026 06:16:18 -0700 Subject: [PATCH 11/13] fix(cache): close empty-list policy and lint gaps Require actual dependency-cache entries before retaining write-capable agent tokens. Validate authored cache-mode literals independently of event classification, preserving presence metadata for empty/null policies and adding workflow_call CLI coverage. Update the cache contract to v1.0.77. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- ...d-cache-access-via-job-level-cache-mode.md | 2 +- .../content/docs/reference/cache-memory.md | 2 +- .../docs/reference/workflow-linters.md | 2 +- pkg/cli/lint_cache_mode_test.go | 66 ++++++++++++++++ pkg/workflow/actions/parse.go | 20 +++++ pkg/workflow/actions/parse_test.go | 47 ++++++++++++ pkg/workflow/actions/workflow.go | 20 ++--- pkg/workflow/cache_access_test.go | 76 ++++++++++++++++++- pkg/workflow/compiler_main_job.go | 10 ++- pkg/workflow/lint/cache_poisoning.go | 17 ++--- pkg/workflow/lint/cache_write_overrides.go | 30 ++++---- .../lint/cache_write_overrides_test.go | 32 ++++++++ specs/compiler-threat-detection-changelog.md | 1 + specs/compiler-threat-detection-spec.md | 9 ++- 14 files changed, 292 insertions(+), 42 deletions(-) diff --git a/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md index 0bb743b7873..2559fc8bb22 100644 --- a/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md +++ b/docs/adr/72543-detection-gated-cache-access-via-job-level-cache-mode.md @@ -15,7 +15,7 @@ GitHub.com supports workflow- and job-level `cache-mode` token policies. GHES co ## Decision -Use job-level `cache-mode` on GitHub.com to limit agent cache access while detection is pending, except where trusted dependency-cache saves require the platform's trigger-scoped default token. Without dependency-cache saves, the detection-enabled agent uses `cache-mode: read`. With dependency caches, low-trust events use restore-only actions and inherit the platform's read-only default; trusted events retain combined restore/save actions and the platform's default write access. Runtime event conditions preserve that distinction in mixed-trigger workflows because `cache-mode` accepts literal values, not event-dependent expressions. +Use job-level `cache-mode` on GitHub.com to limit agent cache access while detection is pending, except where trusted dependency-cache saves require the platform's trigger-scoped default token. Without nonempty dependency-cache entries, including `cache: []`, the detection-enabled agent uses `cache-mode: read`. With dependency caches, low-trust events use restore-only actions and inherit the platform's read-only default; trusted events retain combined restore/save actions and the platform's default write access. Runtime event conditions preserve that distinction in mixed-trigger workflows because `cache-mode` accepts literal values, not event-dependent expressions. A separate cache-memory publisher uses `cache-mode: write-only` and requires both successful prerequisite jobs and explicit detection acceptance (`needs.detection.outputs.detection_success == 'true'`). Missing acceptance, rejected output, or runtime-skipped detection must not authorize publication. Both publisher and dependency-save actions use a fail-closed event allowlist: `push`, `workflow_dispatch`, `repository_dispatch`, `delete`, `registry_package`, `page_build`, `schedule`, and merge-ref-isolated `pull_request`. All other events are restore-only, including issue/discussion events and unknown future events. Reusable workflows use the original caller's runtime event; `workflow_call` by itself grants nothing. Detection acceptance, including the detector's no-output short-circuit, does not justify overriding the platform's low-trust defaults or writing cache lineages restored by higher-trust runs. diff --git a/docs/src/content/docs/reference/cache-memory.md b/docs/src/content/docs/reference/cache-memory.md index 20178d3c067..1f581a9701b 100644 --- a/docs/src/content/docs/reference/cache-memory.md +++ b/docs/src/content/docs/reference/cache-memory.md @@ -169,7 +169,7 @@ Do not store sensitive data in cache memory. It follows repository permissions, ### Cache access boundaries -On GitHub.com, detection-enabled workflows without frontmatter dependency caches give the agent job `cache-mode: read`. This restricts its scoped cache token; selecting a restore-only action alone would not restrict other writers. +On GitHub.com, detection-enabled workflows without nonempty frontmatter dependency-cache entries give the agent job `cache-mode: read`. An empty list (`cache: []`) does not enable dependency-cache saves or remove this restriction. This restricts its scoped cache token; selecting a restore-only action alone would not restrict other writers. Workflows with frontmatter `cache:` entries instead retain the platform's trigger-scoped token defaults so dependency caches can still be populated. Runtime event conditions allow combined restore/save actions only for `push`, `workflow_dispatch`, `repository_dispatch`, `delete`, `registry_package`, `page_build`, `schedule`, and merge-ref-isolated `pull_request` runs. Every other event, including `issues`, `discussion`, `discussion_comment`, and unknown future events, selects restore-only actions. This also applies to mixed-trigger and reusable workflows: the original caller's runtime event controls access. Allowed dependency-cache saves are not detection-gated, and agents on those events retain direct token write capability before detection. diff --git a/docs/src/content/docs/reference/workflow-linters.md b/docs/src/content/docs/reference/workflow-linters.md index 203bad360c7..d0557bfe02e 100644 --- a/docs/src/content/docs/reference/workflow-linters.md +++ b/docs/src/content/docs/reference/workflow-linters.md @@ -42,7 +42,7 @@ The compiler threat IDs reference the [Compiler Threat Detection Specification]( | `grader-file-io` | — | AW | Custom `graders..script` JavaScript ASTs do not access filesystem/host capabilities or load modules. Requires the optional native JavaScript parser; missing parser configuration produces a visible coverage warning. | | `grader-shell-file-write` | — | AW | Repository-owned `graders.operational-value.run` Bash ASTs avoid detected file writes and unchecked shell execution. Loads confined evaluator source without executing it; no optional JavaScript parser required. | | `artipacked` | — | AW, Actions | `actions/checkout` explicitly disables credential persistence. Omitted, enabled, or dynamic persistence produces a review warning; later authenticated Git operations may require it. During compilation only, exact compiler-generated blocks can exempt PR checkouts in `safe_outputs` whose trusted handlers require retained credentials, or agent checkouts immediately followed by compiler-owned credential cleanup and verification when their paths are statically within discovery coverage (at most 13 directory components beneath the workspace). Deeper or unknown paths retain warnings. Authored steps and standalone `gh aw lint` checks remain unchanged. | -| `cache-poisoning` | — | AW, Actions | Release-event and tag-push workflows avoid cache restoration through `actions/cache`, `actions/cache/restore`, `actions/setup-go`, and `actions/setup-node`; save-only and lookup-only actions are exempt from the restore check. Explicit effective `cache-mode: write` or `write-only` on known events outside GitHub's write allowlist, including issue/discussion events, warns about overriding the read-only default. Reusable workflows require caller-policy review. A job-level `read` or `none` overrides an inherited workflow write mode. Job names do not establish publisher trust. | +| `cache-poisoning` | — | AW, Actions | Authored workflow- and job-level `cache-mode` values must be literal `read`, `write`, `write-only`, or `none`, regardless of trigger or cache-action presence; omit the key for defaults, rather than specifying an empty or null value. Release-event and tag-push workflows avoid cache restoration through `actions/cache`, `actions/cache/restore`, `actions/setup-go`, and `actions/setup-node`; save-only and lookup-only actions are exempt from the restore check. Explicit effective `cache-mode: write` or `write-only` on known events outside GitHub's write allowlist, including issue/discussion events, warns about overriding the read-only default. Reusable workflows require caller-policy review. A job-level `read` or `none` overrides an inherited workflow write mode. Job names do not establish publisher trust. | | `excessive-permissions` | `CTR-001` | Actions | Workflow-wide write grants are moved to the jobs that require them. Job-level writes and AW root grants are not workflow-wide permissions. | | `obfuscation` | — | AW, Actions | Runner-interpolated fields avoid literal-only string expressions such as `${{ '' }}`. Ordinary expressions, fallback strings, and boolean conditions are unaffected. | | `bash-case-pattern` | — | AW, Actions | Bash `case` patterns inside `$(...)` use balanced `(pattern)` syntax for Bash 3.2 compatibility. Intentional variable glob matching remains unquoted. Reports warnings without executing scripts or requiring ShellCheck. | diff --git a/pkg/cli/lint_cache_mode_test.go b/pkg/cli/lint_cache_mode_test.go index 8791739a64a..0a829b2ade0 100644 --- a/pkg/cli/lint_cache_mode_test.go +++ b/pkg/cli/lint_cache_mode_test.go @@ -24,6 +24,9 @@ func TestCacheWriteOverrideCLI(t *testing.T) { {"discussion comment job", "discussion_comment", "", "write-only", "jobs.check.cache-mode"}, {"mixed issues caller", "{push: {}, issues: {}}", "write", "", "cache-mode"}, {"inherited workflow", "workflow_run", "write", "", "cache-mode"}, + {"reusable caller grants no writes", "workflow_call", "", "write-only", "jobs.check.cache-mode"}, + {"reusable caller default", "workflow_call", "", "", ""}, + {"reusable caller read", "workflow_call", "", "read", ""}, {"capped job", "pull_request_target", "write", "read", ""}, {"dispatch default", "repository_dispatch", "", "write", ""}, } { @@ -57,3 +60,66 @@ func TestCacheWriteOverrideCLI(t *testing.T) { }) } } + +func TestLintCacheModeLiteralsCLI(t *testing.T) { + for _, scope := range []string{"workflow", "job"} { + for _, test := range []struct { + name, mode string + valid bool + }{ + {"absent", "", true}, + {"read", "read", true}, + {"write", "write", true}, + {"write only", "write-only", true}, + {"none", "none", true}, + {"unsupported", "read-only", false}, + {"empty string", `""`, false}, + {"empty scalar", "\n", false}, + {"null", "null", false}, + {"number", "42", false}, + {"boolean", "true", false}, + {"sequence", "[read]", false}, + {"mapping", "{mode: read}", false}, + {"expression", `"${{ 'read' }}"`, false}, + {"leading whitespace", `" read"`, false}, + {"trailing whitespace", `"read "`, false}, + {"uppercase", "READ", false}, + } { + t.Run(scope+"/"+test.name, func(t *testing.T) { + source := "on: push\npermissions: {contents: read}\n" + if scope == "workflow" && test.mode != "" { + source += "cache-mode: " + test.mode + "\n" + } + source += "jobs:\n check:\n runs-on: ubuntu-latest\n" + if scope == "job" && test.mode != "" { + source += " cache-mode: " + test.mode + "\n" + } + source += " steps: [{run: echo data}]\n" + file := filepath.Join(t.TempDir(), "cache.yml") + require.NoError(t, os.WriteFile(file, []byte(source), 0600)) + for _, args := range [][]string{{file}, {"--rules=cache-poisoning", file}} { + cmd := NewLintCommand() + var output bytes.Buffer + cmd.SetOut(&output) + cmd.SetErr(&output) + cmd.SetArgs(args) + err := cmd.Execute() + if test.valid { + require.NoError(t, err, output.String()) + } else { + require.Error(t, err, output.String()) + if test.mode == "read-only" || test.mode == `""` { + path := "cache-mode" + if scope == "job" { + path = "jobs.check.cache-mode" + } + require.ErrorContains(t, err, "cache-poisoning") + require.ErrorContains(t, err, path) + require.ErrorContains(t, err, "requires read, write, write-only, or none") + } + } + } + }) + } + } +} diff --git a/pkg/workflow/actions/parse.go b/pkg/workflow/actions/parse.go index 66bc3819630..2b9dc3aaa5d 100644 --- a/pkg/workflow/actions/parse.go +++ b/pkg/workflow/actions/parse.go @@ -92,12 +92,32 @@ func Parse(content []byte) (*Workflow, error) { return nil, fmt.Errorf("validating job %q: %w", job.ID, err) } } + if err := retainCacheModePresence(resolved, content); err != nil { + return nil, err + } if err := retainWorkflowSource(resolved, content); err != nil { return nil, err } return resolved, nil } +func retainCacheModePresence(workflow *Workflow, content []byte) error { + // String decoding alone conflates absent, empty, and null policies. + var fields map[string]any + if err := yaml.Unmarshal(content, &fields); err != nil { + return fmt.Errorf("parsing cache-mode presence: %w", err) + } + _, workflow.CacheModeSet = fields["cache-mode"] + if jobs, ok := fields["jobs"].(map[string]any); ok { + for _, job := range workflow.Jobs { + if fields, ok := jobs[string(job.ID)].(map[string]any); ok { + _, job.CacheModeSet = fields["cache-mode"] + } + } + } + return nil +} + func parseJob(id JobID, source *jobYAML) (*Job, error) { if source == nil { return nil, errors.New("job cannot be null") diff --git a/pkg/workflow/actions/parse_test.go b/pkg/workflow/actions/parse_test.go index 04ec17a45ea..93a43bfd5a8 100644 --- a/pkg/workflow/actions/parse_test.go +++ b/pkg/workflow/actions/parse_test.go @@ -125,6 +125,53 @@ func TestParseJobCacheModes(t *testing.T) { } } +func TestParseCacheModePresence(t *testing.T) { + for _, test := range []struct { + name, policy string + present bool + }{ + {"absent", "", false}, + {"read", "cache-mode: read\n", true}, + {"empty string", "cache-mode: \"\"\n", true}, + {"empty scalar", "cache-mode:\n", true}, + {"null", "cache-mode: null\n", true}, + } { + t.Run(test.name, func(t *testing.T) { + source := test.policy + "jobs:\n check:\n runs-on: ubuntu-latest\n steps: [{run: echo data}]\n" + if test.policy != "" { + source += " " + test.policy + } + input, err := Parse([]byte(source)) + require.NoError(t, err) + assert.Equal(t, test.present, input.CacheModeSet) + assert.Equal(t, test.present, input.Jobs[0].CacheModeSet) + emitted, err := Emit(input) + require.NoError(t, err) + assert.Equal(t, source, emitted) + }) + } +} + +func TestParseCacheModePresenceThroughAliases(t *testing.T) { + source := `cache-mode: &policy null +jobs: + check: &job + runs-on: ubuntu-latest + cache-mode: *policy + steps: [{run: echo data}] + inherited: + <<: *job +` + input, err := Parse([]byte(source)) + require.NoError(t, err) + assert.True(t, input.CacheModeSet) + require.Len(t, input.Jobs, 2) + for _, job := range input.Jobs { + assert.True(t, job.CacheModeSet) + assert.Empty(t, job.CacheMode) + } +} + func TestCacheModeEmissionPreservesScalarBoundary(t *testing.T) { for _, mode := range []string{ "read\n permissions:\n contents: write", diff --git a/pkg/workflow/actions/workflow.go b/pkg/workflow/actions/workflow.go index a2b4a68c3df..19c2fc138c4 100644 --- a/pkg/workflow/actions/workflow.go +++ b/pkg/workflow/actions/workflow.go @@ -4,15 +4,16 @@ import "errors" // Workflow contains only GitHub Actions workflow properties. type Workflow struct { - Name string - RunName string - On any - Permissions any - Env map[string]Expression - Defaults map[string]any - Concurrency any - CacheMode string - Jobs []*Job + Name string + RunName string + On any + Permissions any + Env map[string]Expression + Defaults map[string]any + Concurrency any + CacheMode string + CacheModeSet bool // Distinguishes an authored empty value from an absent cache policy. + Jobs []*Job source *workflowSource } @@ -29,6 +30,7 @@ type Job struct { Permissions any CacheMode string + CacheModeSet bool Defaults map[string]any Concurrency any Environment any diff --git a/pkg/workflow/cache_access_test.go b/pkg/workflow/cache_access_test.go index c2829f9a4bd..1d7826d5035 100644 --- a/pkg/workflow/cache_access_test.go +++ b/pkg/workflow/cache_access_test.go @@ -115,12 +115,80 @@ func TestCompiledCacheAccessDryRunAndGHES(t *testing.T) { func TestCacheMemoryAgentRemainsReadOnlyWithoutDependencyCaches(t *testing.T) { for _, event := range []string{"push", "issue_comment", "issues", "discussion_comment"} { - compiled, _ := compileCacheAccessFixture(t, event, "true", false, false, false, false) + compiled, _ := compileCacheAccessFixture(t, event, "true", false, false, false, "") agent := compiled["jobs"].(map[string]any)["agent"].(map[string]any) assert.Equal(t, "read", agent["cache-mode"]) } } +func TestCompiledCacheAccessEmptyDependencyArray(t *testing.T) { + for _, trigger := range []string{"push", "issue_comment", "{push: {}, issue_comment: {}}"} { + for _, detection := range []string{"true", "false", `"${{ vars.DETECT == 'true' }}"`} { + for _, ghes := range []bool{false, true} { + for _, dryRun := range []bool{false, true} { + t.Run(fmt.Sprintf("%s/detection=%s/ghes=%t/dry-run=%t", trigger, detection, ghes, dryRun), func(t *testing.T) { + compiled, content := compileCacheAccessFixture(t, trigger, detection, ghes, dryRun, false, "cache: []\n") + jobs := compiled["jobs"].(map[string]any) + agent := jobs["agent"].(map[string]any) + if !ghes && (dryRun || detection != "false") { + assert.Equal(t, "read", agent["cache-mode"]) + } else { + assert.NotContains(t, agent, "cache-mode") + } + agentSteps := fmt.Sprint(agent["steps"]) + assert.NotContains(t, agentSteps, "Cache (dependencies)") + if dryRun || detection != "false" { + assert.NotContains(t, agentSteps, "actions/cache@") + assert.NotContains(t, agentSteps, "actions/cache/save@") + assert.Contains(t, agentSteps, "actions/cache/restore@") + } else { + assert.Contains(t, agentSteps, "actions/cache@", "preserve same-job cache-memory writes without detection") + } + if dryRun || detection == "false" { + assert.NotContains(t, jobs, "update_cache_memory") + } else { + publisher := jobs["update_cache_memory"].(map[string]any) + assert.Contains(t, fmt.Sprint(publisher["steps"]), "actions/cache/save@") + assert.Contains(t, publisher["if"], "needs.detection.outputs.detection_success == 'true'") + if !ghes { + assert.Equal(t, "write-only", publisher["cache-mode"]) + } + } + if ghes { + assert.NotContains(t, content, "cache-mode:") + } else if dryRun { + assert.Equal(t, "read", compiled["cache-mode"]) + } else { + assert.NotContains(t, compiled, "cache-mode") + } + }) + } + } + } + } +} + +func TestCompiledCacheAccessNonemptyDependencyArray(t *testing.T) { + compiled, _ := compileCacheAccessFixture(t, "{push: {}, issue_comment: {}}", "true", false, false, false, + "cache:\n - key: dependencies\n path: node_modules\n") + jobs := compiled["jobs"].(map[string]any) + agent := jobs["agent"].(map[string]any) + assert.NotContains(t, agent, "cache-mode", "nonempty dependency caches must retain post-action saves") + assertDependencyCacheTrustGates(t, agent) + assert.Equal(t, "write-only", jobs["update_cache_memory"].(map[string]any)["cache-mode"]) +} + +func TestBuildMainJobRejectsMalformedDependencyCache(t *testing.T) { + for _, cache := range []string{"cache: [", "other: []"} { + t.Run(cache, func(t *testing.T) { + compiler := NewCompiler() + job, err := compiler.buildMainJob(&WorkflowData{Cache: cache}, false) + require.ErrorContains(t, err, "failed to parse cache configuration:") + assert.Nil(t, job) + }) + } +} + func TestCachePublisherRequiresDetectionAcceptance(t *testing.T) { data := &WorkflowData{ CacheMemoryConfig: &CacheMemoryConfig{Caches: []CacheMemoryEntry{{ID: "default"}}}, @@ -221,7 +289,7 @@ func evaluateCacheTrustGate(t *testing.T, node ConditionNode, values map[string] return evaluateDetectionRedactionGate(t, node, values) } -func compileCacheAccessFixture(t *testing.T, trigger, detection string, ghes, dryRun, restoreOnly bool, dependencyCache ...bool) (map[string]any, string) { +func compileCacheAccessFixture(t *testing.T, trigger, detection string, ghes, dryRun, restoreOnly bool, dependencyCache ...string) (map[string]any, string) { t.Helper() source := fmt.Sprintf(`--- on: %s @@ -247,8 +315,8 @@ jobs: --- Test cache access separation. `, trigger, restoreOnly, detection) - if len(dependencyCache) > 0 && !dependencyCache[0] { - source = strings.Replace(source, "cache:\n key: dependencies\n path: node_modules\n", "", 1) + if len(dependencyCache) > 0 { + source = strings.Replace(source, "cache:\n key: dependencies\n path: node_modules\n", dependencyCache[0], 1) } dir := t.TempDir() path := filepath.Join(dir, "cache.md") diff --git a/pkg/workflow/compiler_main_job.go b/pkg/workflow/compiler_main_job.go index 0a2e5f1b5a5..dcfb2478997 100644 --- a/pkg/workflow/compiler_main_job.go +++ b/pkg/workflow/compiler_main_job.go @@ -20,6 +20,14 @@ func isBuiltinJobName(jobName string) bool { // The bulk of the construction is delegated to focused helpers in compiler_main_job_helpers.go. func (c *Compiler) buildMainJob(data *WorkflowData, activationJobCreated bool) (*Job, error) { workflowLog.Printf("Building main job for workflow: %s", data.Name) + hasDependencyCaches := false + if data.Cache != "" { + caches, err := parseCacheStepConfigs(data.Cache) + if err != nil { + return nil, fmt.Errorf("failed to parse cache configuration: %w", err) + } + hasDependencyCaches = len(caches) > 0 + } var steps []string setupActionRef := c.resolveActionReference("./actions/setup", data) @@ -64,7 +72,7 @@ func (c *Compiler) buildMainJob(data *WorkflowData, activationJobCreated bool) ( } cacheMode := "" - if !data.GHES && (data.DryRun || (IsDetectionJobEnabled(data.SafeOutputs) && data.Cache == "")) { + if !data.GHES && (data.DryRun || (IsDetectionJobEnabled(data.SafeOutputs) && !hasDependencyCaches)) { // Restore-only actions alone do not restrict the job's scoped cache token. // Dependency caches use the runner's trigger-scoped default instead: // trusted events can save, while low-trust events retain read-only access. diff --git a/pkg/workflow/lint/cache_poisoning.go b/pkg/workflow/lint/cache_poisoning.go index 75f91243e95..8f599e2dc45 100644 --- a/pkg/workflow/lint/cache_poisoning.go +++ b/pkg/workflow/lint/cache_poisoning.go @@ -21,6 +21,8 @@ func checkCachePoisoning(ctx context.Context, input Input) ([]Diagnostic, error) if err := integrityInput(ctx, input); err != nil { return nil, err } + blocks, blockErr := executionPolicyBlocks(ctx, input) + diagnostics, modeErr := cacheWriteOverrides(ctx, input, blocks) var on any if input.Workflow != nil { on = input.Workflow.On @@ -29,19 +31,16 @@ func checkCachePoisoning(ctx context.Context, input Input) ([]Diagnostic, error) } release, err := cacheReleaseTrigger(ctx, on) if err != nil { - return nil, err + return nil, errors.Join(modeErr, err) } lowTrust, err := cacheLowTrustTrigger(ctx, on) - if err != nil || (!release && !lowTrust) { - return nil, err + if !lowTrust { + diagnostics = nil } - blocks, err := executionPolicyBlocks(ctx, input) - failures := []error{err} - var diagnostics []Diagnostic - if lowTrust { - diagnostics, err = cacheWriteOverrides(ctx, input, blocks) - failures = append(failures, err) + if err != nil || (!release && !lowTrust) { + return diagnostics, errors.Join(modeErr, err) } + failures := []error{blockErr, modeErr} if !release { return diagnostics, errors.Join(failures...) } diff --git a/pkg/workflow/lint/cache_write_overrides.go b/pkg/workflow/lint/cache_write_overrides.go index 3be14436633..60baf7e7f93 100644 --- a/pkg/workflow/lint/cache_write_overrides.go +++ b/pkg/workflow/lint/cache_write_overrides.go @@ -12,24 +12,23 @@ import ( func cacheWriteOverrides(ctx context.Context, input Input, blocks []aw.ExecutionBlock) ([]Diagnostic, error) { var root any + var present bool if input.Workflow != nil { root = input.Workflow.CacheMode + present = input.Workflow.CacheModeSet || input.Workflow.CacheMode != "" } else { - root = input.Document.Frontmatter["cache-mode"] - } - rootMode, err := cachePolicyMode(root, "cache-mode") - if err != nil { - return nil, err + root, present = input.Document.Frontmatter["cache-mode"] } + rootMode, err := cachePolicyMode(root, "cache-mode", present) var diagnostics []Diagnostic - var failures []error + failures := []error{err} reported := make(map[string]struct{}) - check := func(value any, path string) { + check := func(value any, present bool, path string) { field := "cache-mode" if path != "" { field = path + ".cache-mode" } - mode, err := cachePolicyMode(value, field) + mode, err := cachePolicyMode(value, field, present) if err != nil { failures = append(failures, err) return @@ -52,7 +51,7 @@ func cacheWriteOverrides(ctx context.Context, input Input, blocks []aw.Execution if err := ctx.Err(); err != nil { return diagnostics, errors.Join(append(failures, err)...) } - check(job.CacheMode, "jobs."+string(job.ID)) + check(job.CacheMode, job.CacheModeSet || job.CacheMode != "", "jobs."+string(job.ID)) } } else { for _, block := range blocks { @@ -61,7 +60,12 @@ func cacheWriteOverrides(ctx context.Context, input Input, blocks []aw.Execution } if block.Path == "" || strings.HasPrefix(block.Path, "jobs.") || strings.HasPrefix(block.Path, "safe-jobs.") || strings.HasPrefix(block.Path, "safe-outputs.jobs.") { - check(block.Fields["cache-mode"], block.Path) + if block.Path != "" { + value, present := block.Fields["cache-mode"] + check(value, present, block.Path) + } else { + check(nil, false, "") + } } } } @@ -77,13 +81,13 @@ func cacheLowTrustTrigger(ctx context.Context, on any) (bool, error) { return false, nil } -func cachePolicyMode(value any, path string) (string, error) { - if value == nil { +func cachePolicyMode(value any, path string, present bool) (string, error) { + if !present { return "", nil } if mode, ok := value.(string); ok { switch mode { - case "", "read", "write", "write-only", "none": + case "read", "write", "write-only", "none": return mode, nil } } diff --git a/pkg/workflow/lint/cache_write_overrides_test.go b/pkg/workflow/lint/cache_write_overrides_test.go index bb8b6a69a10..37d749fecfe 100644 --- a/pkg/workflow/lint/cache_write_overrides_test.go +++ b/pkg/workflow/lint/cache_write_overrides_test.go @@ -170,3 +170,35 @@ func TestCachePolicyUnrelatedTriggerIgnoresExecution(t *testing.T) { require.NoError(t, err) assert.Empty(t, diagnostics) } + +func TestCachePolicyLiteralValidation(t *testing.T) { + runner, err := Default().Select("cache-poisoning") + require.NoError(t, err) + for _, target := range []ASTTargets{ActionsAST, AWAST} { + for _, trigger := range []string{"", "push", "workflow_dispatch", "release", "workflow_call", "issue_comment"} { + for _, scope := range []string{"workflow", "job"} { + for _, mode := range []string{"read-only", `""`, "null", `" read"`, `"read "`, `"${{ 'read' }}"`} { + t.Run(target.String()+"/"+trigger+"/"+scope+"/"+mode, func(t *testing.T) { + source := "" + if trigger != "" { + source += "on: " + trigger + "\n" + } + path := "cache-mode" + if scope == "workflow" { + source += "cache-mode: " + mode + "\n" + } + source += contractJob + contractSafeSteps + if scope == "job" { + source += " cache-mode: " + mode + "\n" + path = "jobs.check.cache-mode" + } + input := ruleContractInput(t, source, target, false) + _, err := runner.Run(context.Background(), input) + require.ErrorContains(t, err, path) + assert.ErrorContains(t, err, "requires read, write, write-only, or none") + }) + } + } + } + } +} diff --git a/specs/compiler-threat-detection-changelog.md b/specs/compiler-threat-detection-changelog.md index 2bb2ee33f0a..70f4a528162 100644 --- a/specs/compiler-threat-detection-changelog.md +++ b/specs/compiler-threat-detection-changelog.md @@ -16,6 +16,7 @@ This changelog records the version history and the dated mapping audits for `spe | Version | Change | |---|---| +| 1.0.77 | Closes the empty dependency-cache list exception to the detection-enabled agent's read-only cache policy: only parsed, nonempty entries preserve dependency-save capability. Requires independent validation of workflow- and job-level cache-mode literals before actionlint compatibility suppression, including trusted events without cache actions. Maps empty-list generated-YAML, invalid-scalar CLI, and reusable-caller regression coverage. Preserves valid dependency saves, dry-run, GHES, and no-detection boundaries; no new threat identifier, frontmatter setting, or lock-file schema change. | | 1.0.76 | Fixes an incomplete cache-write denylist that allowed issue/discussion runs to override GitHub's default-branch read-only cache boundary. Publisher and dependency-save guards now share a fail-closed allowlist matching the seven documented write-capable events plus merge-ref-isolated `pull_request`; missing and unknown events are denied. Extends known-event lint diagnostics, mixed-trigger and reusable-caller coverage, and the acceptance matrix, including accepted no-output results. Preserves dry-run, GHES, dispatch, and no-detection boundaries. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | 1.0.75 | Blocks cache-memory publication on `pull_request_target`, `issue_comment`, and `workflow_run` regardless of detector acceptance, preventing low-trust publication into trusted cache lineages. Preserves trusted dependency-cache saves through runtime-conditioned actions and trigger-scoped tokens, explicitly documenting their pre-detection write capability. Shares the detection-acceptance helper with drive-memory publication and custom-job guards. Extends narrow actionlint compatibility to job-level cache policies while preserving malformed-value and misplaced-key errors. Maps trust/save, rejection, dry-run, and compatibility tests; generated locks require regeneration. No new threat identifier or frontmatter setting. | | 1.0.74 | Strengthens CTR-019 with read-only agent cache tokens, restore-only frontmatter dependency caches, a separate write-only cache-memory publisher, and explicit detector acceptance in addition to successful jobs. Specifies warning/failed/skipped/missing detection handling, dry-run precedence, the existing CLI/config GHES opt-out, and unchanged no-detection behavior. Maps effective low-trust explicit-write diagnostics and generated-YAML/acceptance regression coverage. Separates capability grants from artifact authenticity and records GHES, custom-job, unsigned-content, and persistent-runner limitations. Also specifies the default Actions/AW `privileged-checkout` and `artifact-execution` warning contracts, mapping adversarial, benign, registry, and compiler integration evidence. Separates unsafe checkout opt-outs and direct source selection from authorization, and cross-run workspace extraction or modeled execution from artifact authenticity. Includes token-gated built-in cross-run lookup, context-aware workspace and runner-temp paths with ancestor containment, metadata-only npm commands, clone source operands, forced PR refspecs, additional commit selectors, a boolean-guarded landed merge-SHA exception with bounded dependency/status propagation, atomic multiline interpolation, and runner-default shell boundaries. Clarifies pwn-request compiler coverage versus runtime and deployment trust, including trusted custom execution, immutable-pin currency, actor versus historical-revision approval, upstream artifact-as-data handling, host/cache persistence and separation, platform-policy limits with date-independent effective-policy checks, opt-outs, and safe-output warn mode. Preserves data-only consumers, current-run artifacts, strict PRT policy and clean-detection gates, direct template-injection protections, offline compilation, and full-SHA pinning. Unknown or historical SHAs are not assigned invented vulnerability status. Generated locks require regeneration for cache access changes; the new review warnings add no runtime enforcement. No new threat identifier, compiler rejection, permission grant, frontmatter setting, or lock-file schema change. | diff --git a/specs/compiler-threat-detection-spec.md b/specs/compiler-threat-detection-spec.md index c15d319fef9..837da8fdc5c 100644 --- a/specs/compiler-threat-detection-spec.md +++ b/specs/compiler-threat-detection-spec.md @@ -7,7 +7,7 @@ sidebar: # GitHub Actions Compiler Threat Detection Specification -**Version**: 1.0.76 +**Version**: 1.0.77 **Status**: Candidate Recommendation **Latest Version**: https://github.com/github/gh-aw/blob/main/specs/compiler-threat-detection-spec.md **Editors**: GitHub Next (GitHub, Inc.) @@ -32,6 +32,7 @@ Each version maps to the minimum compatible binary. A version change MUST update | Versions | Minimum gh-aw | Compatibility | |---|---:|---| +| `1.0.77` | Unreleased | Requires parsed, nonempty dependency-cache entries before omitting the detection-enabled agent's read-only cache policy; `cache: []` retains the restriction. Requires trigger-independent validation of authored cache-mode literals before actionlint compatibility suppression. No new threat identifier, frontmatter setting, or lock-file schema change. | | `1.0.76` | Unreleased | Replaces the incomplete cache-write event denylist with GitHub's documented write allowlist plus merge-ref-isolated `pull_request`. Publisher and dependency-save guards deny all other and unknown events, including issues/discussions; known-event lint diagnostics share the classification. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.75` | Unreleased | Blocks detection-separated cache-memory publication on low-trust events, restores trusted dependency-cache saves using trigger-scoped tokens, and shares explicit detection acceptance across cache/drive publishers and custom jobs. Adds job-level actionlint compatibility without suppressing invalid locations or values. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.74` | Unreleased | Strengthens CTR-019 with detection-separated agent/publisher cache access and explicit detector acceptance. Specifies the existing GHES compatibility opt-out, dry-run precedence, low-trust explicit-write warnings, and unchanged no-detection behavior. Also specifies bounded Actions/AW `privileged-checkout` and `artifact-execution` review warnings for privileged custom source selection and cross-run artifact execution, and clarifies pwn-request compiler coverage versus runtime/deployment trust: host/cache persistence, producer-code trust, approval-to-revision binding, action version currency, custom executable steps, date-independent effective platform-policy checks, and safe-output warn mode. Preserves strict PRT enforcement, offline pin integrity, data-only consumers, and explicit analysis limits. Generated locks require regeneration for cache access changes; the new review warnings add no runtime enforcement. No new threat identifier, compiler rejection, permission grant, or lock-file schema change. | @@ -215,7 +216,7 @@ The Actions/AW `custom-job-detection` linter MUST check transitive ordering, req ### 5.1.3 Cache Access and Publication (CTR-019) -When detection is enabled and GHES compatibility mode is disabled, the compiler MUST emit `cache-mode: read` on the agent job unless frontmatter dependency caches require the platform's trigger-scoped default token. Publisher and dependency-save guards MUST allow only `push`, `workflow_dispatch`, `repository_dispatch`, `delete`, `registry_package`, `page_build`, `schedule`, and merge-ref-isolated `pull_request`. Every other event, including `issues`, `discussion`, `discussion_comment`, missing events, and unknown future events, MUST fail closed. Dependency caches MUST select restore-only actions outside this allowlist and combined restore/save actions inside it. This MUST work in mixed-trigger workflows, reusable workflows using the original caller's runtime event, and expression-controlled detection. `workflow_call` itself MUST NOT grant cache writes. Allowed dependency-cache saves are intentionally not detection-gated; the agent retains direct cache-write capability on those events. Selecting a restore-only action alone does not restrict the job's scoped cache token. +When detection is enabled and GHES compatibility mode is disabled, the compiler MUST emit `cache-mode: read` on the agent job unless parsed, nonempty frontmatter dependency-cache entries require the platform's trigger-scoped default token. An empty list (`cache: []`) MUST NOT activate this exception. Publisher and dependency-save guards MUST allow only `push`, `workflow_dispatch`, `repository_dispatch`, `delete`, `registry_package`, `page_build`, `schedule`, and merge-ref-isolated `pull_request`. Every other event, including `issues`, `discussion`, `discussion_comment`, missing events, and unknown future events, MUST fail closed. Dependency caches MUST select restore-only actions outside this allowlist and combined restore/save actions inside it. This MUST work in mixed-trigger workflows, reusable workflows using the original caller's runtime event, and expression-controlled detection. `workflow_call` itself MUST NOT grant cache writes. Allowed dependency-cache saves are intentionally not detection-gated; the agent retains direct cache-write capability on those events. Selecting a restore-only action alone does not restrict the job's scoped cache token. Writable cache-memory entries MUST use a separate publisher requiring `needs.agent.result == 'success'`, `needs.detection.result == 'success'`, and `needs.detection.outputs.detection_success == 'true'` before configured memory validation and saving. The publisher MUST additionally require an allowlisted runtime event so accepted low-trust output cannot populate a cache lineage later restored by trusted runs. Failed, cancelled, skipped, or missing detection results, missing acceptance outputs, and warning-mode rejection MUST block publication even if the detection job reports success. Cache-memory and drive-memory publishers and ordinary downstream custom-job guards MUST share the explicit detection-acceptance condition. The detector's internal no-output short-circuit still reports acceptance; this MUST NOT be described as proof that every cached file was scanned or as authorization for events outside the write allowlist. @@ -225,7 +226,9 @@ The existing `gh aw compile --ghes` flag and `.github/workflows/aw.json` setting Without detection, existing same-job cache-memory behavior MUST remain unchanged, except for independent dry-run restrictions. Custom jobs retain their own cache-access boundary. The Actions/AW `cache-poisoning` linter MUST warn about effective explicit `write` or `write-only` overrides for known events outside the write allowlist, including issue/discussion events, workflow-level inheritance, and reusable callers whose effective runtime event is unknown; a job-level `read` or `none` overrides inherited write access. Job names MUST NOT establish publisher trust. `repository_dispatch` MUST NOT be classified as having the platform's low-trust read-only default. -These controls do not authenticate unsigned cache contents or uploaded artifacts, prove arbitrary shell/third-party cache writers safe, or cover persistent runner caches. Conformance evidence MUST cover generated YAML for low-trust, trusted, mixed, dispatch, dry-run, GHES, no-detection, and legitimate publisher cases, plus detector-result and acceptance-output combinations. +Authored workflow- and job-level `cache-mode` values MUST be validated independently of trigger classification before unsupported-key actionlint diagnostics are suppressed. Only literal `read`, `write`, `write-only`, and `none` policies are supported; explicit empty or null values MUST NOT be treated as an absent policy. Unsupported scalars MUST NOT pass lint solely because the event is write-eligible or no cache action exists. + +These controls do not authenticate unsigned cache contents or uploaded artifacts, prove arbitrary shell/third-party cache writers safe, or cover persistent runner caches. Conformance evidence MUST cover generated YAML for low-trust, trusted, mixed, dispatch, dry-run, GHES, no-detection, empty dependency-cache lists, and legitimate publisher cases, plus detector-result and acceptance-output combinations and trigger-independent invalid-mode diagnostics. ### 5.2 Compiler Response Requirements From ff61c6d585d540fa6edcefe8daf847242342aebf Mon Sep 17 00:00:00 2001 From: pelikhan Date: Wed, 28 Oct 2026 06:23:07 -0700 Subject: [PATCH 12/13] docs(spec): synchronize cache lifecycle and read-only boundaries Update compiler threat spec v1.0.78 with cache lifecycle and namespace guarantees, artifact retention limits, scoped-token versus restore-only/MCP read-only semantics, and concrete conformance mappings. Document the lack of a cache-service proof in existing workflow, transport, Git, and MCP models. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- specs/compiler-threat-detection-changelog.md | 1 + specs/compiler-threat-detection-spec.md | 37 ++++++++++++++++++-- specs/workflow-security/README.md | 17 +++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/specs/compiler-threat-detection-changelog.md b/specs/compiler-threat-detection-changelog.md index 70f4a528162..54ae6516c44 100644 --- a/specs/compiler-threat-detection-changelog.md +++ b/specs/compiler-threat-detection-changelog.md @@ -16,6 +16,7 @@ This changelog records the version history and the dated mapping audits for `spe | Version | Change | |---|---| +| 1.0.78 | Synchronizes CTR-019 with the implemented cache lifecycle: restore and local edits, artifact handoff, stricter successful-agent/detection/event publication gates, optional validation, and later restoration. Records policy-hash/custom-key/repository-scope limits, artifact-only retention, and the absence of retroactive cache authentication or purge. Distinguishes platform cache-token read policies, entry restore-only configuration, dry-run, and host-side MCP read-only compilation. Maps compiler sink validation, native scalar handling, namespace/lifecycle regressions, and the limits of existing workflow/safe-output/MCP TLA+ models. Documentation/evidence clarification only; no new runtime behavior, threat identifier, or lock-file compatibility change. | | 1.0.77 | Closes the empty dependency-cache list exception to the detection-enabled agent's read-only cache policy: only parsed, nonempty entries preserve dependency-save capability. Requires independent validation of workflow- and job-level cache-mode literals before actionlint compatibility suppression, including trusted events without cache actions. Maps empty-list generated-YAML, invalid-scalar CLI, and reusable-caller regression coverage. Preserves valid dependency saves, dry-run, GHES, and no-detection boundaries; no new threat identifier, frontmatter setting, or lock-file schema change. | | 1.0.76 | Fixes an incomplete cache-write denylist that allowed issue/discussion runs to override GitHub's default-branch read-only cache boundary. Publisher and dependency-save guards now share a fail-closed allowlist matching the seven documented write-capable events plus merge-ref-isolated `pull_request`; missing and unknown events are denied. Extends known-event lint diagnostics, mixed-trigger and reusable-caller coverage, and the acceptance matrix, including accepted no-output results. Preserves dry-run, GHES, dispatch, and no-detection boundaries. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | 1.0.75 | Blocks cache-memory publication on `pull_request_target`, `issue_comment`, and `workflow_run` regardless of detector acceptance, preventing low-trust publication into trusted cache lineages. Preserves trusted dependency-cache saves through runtime-conditioned actions and trigger-scoped tokens, explicitly documenting their pre-detection write capability. Shares the detection-acceptance helper with drive-memory publication and custom-job guards. Extends narrow actionlint compatibility to job-level cache policies while preserving malformed-value and misplaced-key errors. Maps trust/save, rejection, dry-run, and compatibility tests; generated locks require regeneration. No new threat identifier or frontmatter setting. | diff --git a/specs/compiler-threat-detection-spec.md b/specs/compiler-threat-detection-spec.md index 837da8fdc5c..09e5c582f1d 100644 --- a/specs/compiler-threat-detection-spec.md +++ b/specs/compiler-threat-detection-spec.md @@ -7,7 +7,7 @@ sidebar: # GitHub Actions Compiler Threat Detection Specification -**Version**: 1.0.77 +**Version**: 1.0.78 **Status**: Candidate Recommendation **Latest Version**: https://github.com/github/gh-aw/blob/main/specs/compiler-threat-detection-spec.md **Editors**: GitHub Next (GitHub, Inc.) @@ -32,6 +32,7 @@ Each version maps to the minimum compatible binary. A version change MUST update | Versions | Minimum gh-aw | Compatibility | |---|---:|---| +| `1.0.78` | Unreleased | Documents the implemented cache-memory restore/edit/artifact/publication lifecycle, integrity namespaces and restore scope, and distinct meanings of read-only policies. Maps lifecycle and mode-validation evidence and separates CTR-019 from the host-side MCP read-only and safe-output lifecycle models. Documentation/evidence clarification only; no new runtime behavior, threat identifier, or lock-file compatibility change. | | `1.0.77` | Unreleased | Requires parsed, nonempty dependency-cache entries before omitting the detection-enabled agent's read-only cache policy; `cache: []` retains the restriction. Requires trigger-independent validation of authored cache-mode literals before actionlint compatibility suppression. No new threat identifier, frontmatter setting, or lock-file schema change. | | `1.0.76` | Unreleased | Replaces the incomplete cache-write event denylist with GitHub's documented write allowlist plus merge-ref-isolated `pull_request`. Publisher and dependency-save guards deny all other and unknown events, including issues/discussions; known-event lint diagnostics share the classification. Generated locks require regeneration; no new threat identifier or frontmatter setting. | | `1.0.75` | Unreleased | Blocks detection-separated cache-memory publication on low-trust events, restores trusted dependency-cache saves using trigger-scoped tokens, and shares explicit detection acceptance across cache/drive publishers and custom jobs. Adds job-level actionlint compatibility without suppressing invalid locations or values. Generated locks require regeneration; no new threat identifier or frontmatter setting. | @@ -230,6 +231,38 @@ Authored workflow- and job-level `cache-mode` values MUST be validated independe These controls do not authenticate unsigned cache contents or uploaded artifacts, prove arbitrary shell/third-party cache writers safe, or cover persistent runner caches. Conformance evidence MUST cover generated YAML for low-trust, trusted, mixed, dispatch, dry-run, GHES, no-detection, empty dependency-cache lists, and legitimate publisher cases, plus detector-result and acceptance-output combinations and trigger-independent invalid-mode diagnostics. +#### Cache lifecycle and poisoning boundaries + +The detection-separated lifecycle has distinct local, artifact, and cache-service effects: + +| Phase | Compiler-managed behavior | Trust boundary | +|---|---|---| +| Restore and prepare | Restore cache-memory with `actions/cache/restore`, then initialize the integrity-branch workspace and configured pre-agent sanitization. | A cache hit is input, not approval of its producer or contents. | +| Agent edits | The agent can modify local memory files. Writable entries receive local Git commits and configured post-agent validation. | Local file writes and Git history are not cache-service publication or provenance. | +| Artifact handoff | Writable entries are uploaded for the downstream publisher, subject to configured validation. These steps can run after agent failure; reusable calls use invocation-specific artifact names. | Artifact existence or a successful upload MUST NOT imply detector acceptance or permission to save a cache. | +| Publication gate | The publisher requires a successful agent, successful detection, explicit acceptance, and an allowlisted runtime event. | A rejected, failed, missing, or runtime-skipped detection result MUST block publication even if an artifact already exists. This is stricter than safe-output paths that may process valid requests after agent failure. | +| Validate and save | The publisher downloads the current invocation's memory artifact, checks for content, requires configured validation to succeed, and saves through `actions/cache/save`. If every entry is restore-only, no publisher is generated. | Validation enforces its configured content policy, not general artifact authenticity. The write-only job does not restore caches. | +| Later restore | Subsequent runs select entries through the integrity/policy namespace and configured restore prefixes, subject to platform cache visibility. | Previously published data remains untrusted input; neither a cache hit nor a prior accepted run proves safe future interpretation. | + +Generated cache-memory save and restore keys MUST retain the integrity-level and policy-hash namespace, including when a custom key suffix is configured. The policy hash is a truncated configuration digest, not a signature, producer identity, or collision-resistant authenticity guarantee. Default keys include the workflow identifier and run ID; restore prefixes permit reuse across runs. Repository scope intentionally adds cross-workflow restoration within the namespace. Custom key choices and repository scope MUST NOT be described as universal workflow isolation. These namespaces do not encode event trust, so they MUST NOT replace the runtime publication event gate. + +The configured cache-memory `retention-days` is emitted on the intermediate artifact upload; it MUST NOT be described as a cache-service expiry, secure deletion, or revocation policy. GitHub cache visibility, eviction, and already-existing entries remain platform/operator concerns. This hardening does not retroactively authenticate or purge caches created under older policies. + +#### Read-only models and evidence limits + +| Read-only mechanism | What it restricts | What it does not establish | +|---|---|---| +| Job `cache-mode: read` | The GitHub.com job's scoped cache-service write capability. | Local memory immutability, content authenticity, or a restriction on every credential/custom writer available to the job. Repository `permissions: read-all` alone is not this cache-token boundary. | +| Entry `restore-only: true` | Compiler-managed persistence for that entry: restore instead of combined restore/save, and no post-agent commit, validation/upload, or publisher save for it. | A read-only filesystem or a per-entry token restriction; other configured dependency caches can still require job-wide write capability. | +| Dry-run | Compiler-managed cache actions are restore-only and the cache-memory publisher is omitted; supported platform tokens are capped to read. | General script side-effect freedom or GHES scoped-token enforcement. | +| MCP read-only compilation | Compilation-controlled filesystem/image-store preservation and cached-only import use under `MCP-COMPILE-*`. | Runtime Actions cache-token restrictions or the trustworthiness of cached imported content. Ordinary CLI `--no-emit` is not the stronger MCP read-only mode. | + +For the scoped platform cache token, `none` disables both reads and writes, `read` permits restoration without writes, `write` permits reads and writes, and `write-only` permits writes without cache reads. Omitting the policy retains platform defaults and applicable caller restrictions; omission MUST NOT be interpreted as `none` or as proof of read-only access. An explicit low-trust write override is a deliberate capability-boundary change, not automatic authenticity. + +Compiler job registration and pre-emission validation MUST reject noncanonical cache-mode strings rather than concatenate unchecked policy text into generated YAML. Empty compiler-internal values mean omission, not permission to accept an explicitly empty authored policy. Native Actions scalar serialization MUST preserve YAML structure; parsing or emitting a scalar alone is not enum validation. + +[`CompiledWorkflow.tla`](workflow-security/CompiledWorkflow.tla) models job/artifact/credential ordering, while [`SafeOutputTransport.tla`](workflow-security/SafeOutputTransport.tla) and [`SafeOutputGit.tla`](workflow-security/SafeOutputGit.tla) model safe-output transport and Git lifecycles. None models cache-service entries, eviction, event-scoped token grants, or cache-memory publication as a separate principal. [`MCPCompile.tla`](workflow-security/MCPCompile.tla) models host compilation and import-cache mutation, not runtime cache poisoning. CTR-019 evidence therefore comes from the mapped generated-YAML, lifecycle, namespace, and lint tests; passing these bounded models MUST NOT be presented as a proof of cache non-poisonability or compiler refinement. + ### 5.2 Compiler Response Requirements The compiler MUST produce deterministic, actionable diagnostics and either reject insecure generation or apply a safe rewrite for every active rule in Section 5.1. @@ -312,7 +345,7 @@ Every active rule MUST map to implementation and test coverage. References are p | CTR-016 Compile-Time Manifest Drift | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | | CTR-017 Secret Leakage via Environment Variables and Telemetry | safe-update, strict env/update, cache, and expression builder; `pkg/workflow/awf_command_builder.go`, `threat_detection_external.go`, `evals_steps.go`; AST subsets: `pkg/workflow/lint/secrets.go`, `otlp_secret_leak.go`, `pkg/workflow/taint/` | corresponding enforcement, secrets, update, cache, and OTLP leak tests; `TestOTLPEnvExcludedFromAWFSandboxes` in `awf_env_test.go`, `TestEvalsOTLPEnvExcludedFromSandbox` in `evals_steps_test.go`, `TestCompiledOTLPEnvExcludedFromAgentDetectionAndEvals` in `threat_detection_isolation_test.go`; `pkg/workflow/taint/taint_test.go`, `pkg/workflow/lint/otlp_secret_leak_test.go` | | CTR-018 Version Integrity Bypass | safe-update, strict env/update, cache, and expression builder | corresponding enforcement, secrets, update, and cache tests | -| CTR-019 Cache-Memory Integrity Enforcement | `pkg/workflow/compiler_main_job.go`, `cache_memory.go`, `cache_steps.go`, shared `cachepolicy/events.go`, `drive_memory.go`, `expression_builder.go`, `compiler_yaml.go`; GHES configuration in `compiler.go`; AST subset: `pkg/workflow/lint/cache_write_overrides.go` | `pkg/workflow/cache_access_test.go`, `cache_memory_threat_detection_test.go`, `compiler_development_test.go`, `drive_memory_test.go`, `expression_builder_detection_test.go`; `pkg/workflow/lint/cache_write_overrides_test.go`, `pkg/cli/lint_cache_mode_test.go` | +| CTR-019 Cache-Memory Integrity Enforcement | `pkg/workflow/compiler_main_job.go`, `cache_memory.go`, `cache_integrity.go`, `cache_steps.go`, shared `cachepolicy/events.go`, `compiler_yaml_post_agent.go`, `drive_memory.go`, `expression_builder.go`, `compiler_yaml.go`, `jobs_validation.go`; GHES configuration in `compiler.go`; native policy presence/scalar handling in `actions/parse.go`, `actions/lower.go`; AST subset: `pkg/workflow/lint/cache_poisoning.go`, `cache_write_overrides.go` | `pkg/workflow/cache_access_test.go`, `cache_integrity_test.go`, `cache_memory_threat_detection_test.go`, `cache_memory_restore_only_test.go`, `cache_memory_restore_keys_test.go`, `cache_scope_validation_test.go`, `cache_retention_days_validation_test.go`, `compiler_jobs_memory_test.go`, `compiler_development_test.go`, `jobs_cache_mode_test.go`, `drive_memory_test.go`, `expression_builder_detection_test.go`; `pkg/workflow/actions/parse_test.go`, `pkg/workflow/lint/cache_write_overrides_test.go`, `pkg/cli/lint_cache_mode_test.go` | | CTR-020 Conditional Import Security | `pkg/parser/import_bfs.go` | `pkg/parser/import_bfs_test.go` | | CTR-021 Workflow Run Trigger Branch Scope | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go`; AST subset: `pkg/workflow/lint/workflow_run_scope.go` | workflow-run, bash-allowlist, gitutil, and download tests; `pkg/workflow/lint/workflow_run_scope_test.go` | | CTR-022 Git Subprocess Argument Injection | `agent_validation.go`, `agentic_engine.go`, `pkg/gitutil/gitutil.go` | workflow-run, bash-allowlist, gitutil, and download tests | diff --git a/specs/workflow-security/README.md b/specs/workflow-security/README.md index 4e091b7e433..c8d6cbc608d 100644 --- a/specs/workflow-security/README.md +++ b/specs/workflow-security/README.md @@ -64,6 +64,23 @@ fail. Agent failures revoke the modeled engine credential. A minted installation token remains live until the `actions/create-github-app-token` post step, which revokes it after either safe-output success or failure. +## Cache lifecycle and read-only boundaries + +The compiler's [CTR-019 cache contract](../compiler-threat-detection-spec.md#513-cache-access-and-publication-ctr-019) +separates cache restoration and local edits from artifact handoff and +detection-gated cache publication. Unlike the safe-output lifecycle above, +the cache-memory publisher requires the agent job to succeed as well as +explicit detector acceptance and an eligible runtime event. Artifact existence +does not authorize publication. + +These models do not represent cache-service entries, restore-prefix matching, +eviction, event-scoped cache tokens, or the cache-memory publisher principal. +The host-side `MCPCompile.tla` model's read-only filesystem/import-cache +invariants are independent of runtime job `cache-mode: read`. Entry +`restore-only: true` also does not make the local workspace immutable. +Generated-YAML, namespace, lifecycle, and lint tests mapped under CTR-019 are +the current evidence; the models are not a cache-poisoning proof. + ## Pull-request fork admission [`PullRequestForkAdmission.tla`](PullRequestForkAdmission.tla) models the From 8ff38a6f80cb263ab004d86bda204fc9b207b5c6 Mon Sep 17 00:00:00 2001 From: pelikhan Date: Wed, 28 Oct 2026 07:47:00 -0700 Subject: [PATCH 13/13] Clarify and cover drive persistence trust boundaries Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../content/docs/experimental/drive-memory.md | 6 +- .../drive_memory_event_policy_test.go | 123 ++++++++++++++++++ pkg/workflow/drive_memory_test.go | 18 ++- specs/compiler-threat-detection-changelog.md | 1 + specs/compiler-threat-detection-spec.md | 11 +- 5 files changed, 150 insertions(+), 9 deletions(-) create mode 100644 pkg/workflow/drive_memory_event_policy_test.go diff --git a/docs/src/content/docs/experimental/drive-memory.md b/docs/src/content/docs/experimental/drive-memory.md index 4a8394e7ee2..f17f81043e9 100644 --- a/docs/src/content/docs/experimental/drive-memory.md +++ b/docs/src/content/docs/experimental/drive-memory.md @@ -16,10 +16,14 @@ Drive memory is an experimental, feature-gated integration backed by the [GitHub For enrolled preview repositories, the compiler mounts configured drives into the agent at `/tmp/gh-aw/drive-memory/` (or `/tmp/gh-aw/drive-memory-{id}/` for named entries). It grants the generated job `contents: read`, `id-token: write`, and the required `drives` permission. -The compiler checks out each drive before the agent and commits validated changes afterward. With threat detection enabled, it stages drive contents as an artifact; a separate `update_drive_memory` job publishes it only after detection succeeds and verifies the drive has not changed since checkout. +The compiler checks out each drive before the agent and commits validated changes afterward. With threat detection enabled, it stages drive contents as an artifact; a separate `update_drive_memory` job publishes it only after the agent succeeds and detection explicitly accepts the output, and verifies the drive has not changed since checkout. Failed, skipped, missing, or rejected detection blocks publication, including rejection in warning mode. Drive names are repository-wide and branch-aware according to the preview service. GitHub Drives allows one active writer for a drive, so overlapping runs that write the same drive can contend for the writer lease. +Drive publication intentionally supports admitted issue and slash-command runs; it does not use the Actions cache service's event allowlist or `cache-mode` policy. The pinned preview action requests storage using the repository, `GITHUB_REF`, and drive name. Runs sharing that scope can exchange persisted content across event types. Detection acceptance and configured validation do not authenticate the content or guarantee safe interpretation by a later agent; the detector's no-output short-circuit is not a scan of every drive file. Do not share a drive scope across contexts that require stronger producer isolation. + +`restore-only: true` and dry-run prevent compiler-managed drive publication, not local file edits or arbitrary script effects. Without threat detection, writable drives retain same-job publication without a detection gate. The compiler does not verify the preview service's server-side namespace enforcement. + ## Validation Drive-memory supports the same `validation.json-schemas` declarations as repo-memory and cache-memory. Each declaration has an inline `schema` and may specify a relative file path or glob (with `*` within a path segment and `**` across segments). If `file` is omitted, the schema applies to every eligible `.json` and `.jsonl` file in the memory directory, excluding `.git`; omit `format` too so the format is inferred for each file. Otherwise, each path must exist, each glob must match at least one file, and every matched file must pass validation before the drive accepts or persists the candidate. The format is inferred from each matched file's `.json` or `.jsonl` extension (case-insensitive). Optional `format: json` or `format: jsonl` overrides inference and is required for other extensions. diff --git a/pkg/workflow/drive_memory_event_policy_test.go b/pkg/workflow/drive_memory_event_policy_test.go new file mode 100644 index 00000000000..874c65a926b --- /dev/null +++ b/pkg/workflow/drive_memory_event_policy_test.go @@ -0,0 +1,123 @@ +//go:build !integration + +package workflow + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/github/gh-aw/pkg/testutil" + "github.com/goccy/go-yaml" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +const driveMemoryAcceptedCondition = "always() && needs.detection.result == 'success' && needs.detection.outputs.detection_success == 'true' && needs.agent.result == 'success'" + +func TestCompiledDriveMemoryEventPolicy(t *testing.T) { + // Drives use the preview service's repository/ref/name namespace, not the + // Actions cache service's event-based publication policy. In particular, + // admitted slash commands must retain their validated drive writes. + for _, trigger := range []string{ + "push", + "workflow_dispatch", + "issue_comment", + "issues", + "discussion_comment", + "pull_request", + "pull_request_target", + "workflow_call", + "{push: {}, issue_comment: {}}", + "{workflow_call: {}, discussion_comment: {}}", + "{slash_command: {name: remember, events: [issues, issue_comment, pull_request_comment]}}", + } { + t.Run(trigger, func(t *testing.T) { + compiled, content := compileDriveMemoryEventFixture(t, trigger, "true", false, false, false) + jobs := compiled["jobs"].(map[string]any) + agent := extractJobSection(content, "agent") + publisher := jobs[updateDriveMemoryJobName].(map[string]any) + assert.Equal(t, driveMemoryAcceptedCondition, strings.Join(strings.Fields(publisher["if"].(string)), " ")) + assert.ElementsMatch(t, []any{"agent", "detection", "activation"}, publisher["needs"]) + assert.Equal(t, map[string]any{"contents": "read", "id-token": "write", "drives": "write"}, publisher["permissions"]) + assert.Contains(t, agent, "write: false") + assert.NotContains(t, agent, "actions/gh-drives-preview/commit@") + assert.Contains(t, agent, "Upload drive-memory data as artifact") + update := extractJobSection(content, updateDriveMemoryJobName) + assert.Contains(t, update, "write: true") + assert.Contains(t, update, "Check drive-memory for concurrent updates") + assert.Contains(t, update, "Validate drive-memory before commit") + assert.Contains(t, update, "actions/gh-drives-preview/commit@") + assert.NotContains(t, update, "cache-mode:") + }) + } +} + +func TestCompiledDriveMemoryPersistenceModes(t *testing.T) { + for _, detection := range []string{"true", "false", `"${{ vars.DETECT == 'true' }}"`} { + for _, ghes := range []bool{false, true} { + for _, dryRun := range []bool{false, true} { + for _, restoreOnly := range []bool{false, true} { + t.Run(fmt.Sprintf("detection=%s/ghes=%t/dry-run=%t/restore-only=%t", detection, ghes, dryRun, restoreOnly), func(t *testing.T) { + compiled, content := compileDriveMemoryEventFixture(t, "{push: {}, issue_comment: {}}", detection, ghes, dryRun, restoreOnly) + jobs := compiled["jobs"].(map[string]any) + agent := extractJobSection(content, "agent") + if dryRun || restoreOnly { + assert.Contains(t, agent, "write: false") + assert.NotContains(t, content, "actions/gh-drives-preview/commit@") + assert.NotContains(t, jobs, updateDriveMemoryJobName) + } else if detection == "false" { + assert.Contains(t, agent, "write: true") + assert.Contains(t, agent, "actions/gh-drives-preview/commit@") + assert.NotContains(t, jobs, updateDriveMemoryJobName) + } else { + assert.Contains(t, agent, "write: false") + assert.NotContains(t, agent, "actions/gh-drives-preview/commit@") + publisher := jobs[updateDriveMemoryJobName].(map[string]any) + assert.Equal(t, driveMemoryAcceptedCondition, strings.Join(strings.Fields(publisher["if"].(string)), " ")) + } + }) + } + } + } + } +} + +func compileDriveMemoryEventFixture(t *testing.T, trigger, detection string, ghes, dryRun, restoreOnly bool) (map[string]any, string) { + t.Helper() + dir := testutil.TempDir(t, "drive-memory-event-policy") + path := filepath.Join(dir, "drive.md") + source := fmt.Sprintf(`--- +on: %s +strict: false +engine: copilot +permissions: + contents: read +tools: + github: false + drive-memory: + drive-name: agent-state + restore-only: %t + allowed-extensions: [".json"] +safe-outputs: + create-issue: + threat-detection: %s +--- +Read the saved drive state and persist this admitted run's notes. +`, trigger, restoreOnly, detection) + require.NoError(t, os.WriteFile(path, []byte(source), 0600)) + compiler := NewCompiler() + compiler.gitRoot = dir + compiler.SetSkipValidation(true) + compiler.SetGHESCompat(ghes) + compiler.SetDryRun(dryRun) + require.NoError(t, compiler.CompileWorkflow(path)) + content, err := os.ReadFile(filepath.Join(dir, "drive.lock.yml")) + require.NoError(t, err) + var compiled map[string]any + require.NoError(t, yaml.Unmarshal(content, &compiled)) + require.NoError(t, compiler.validateGitHubActionsSchemaFromParsed(compiled)) + return compiled, string(content) +} diff --git a/pkg/workflow/drive_memory_test.go b/pkg/workflow/drive_memory_test.go index 6cf6fb23d1c..f90a4891c66 100644 --- a/pkg/workflow/drive_memory_test.go +++ b/pkg/workflow/drive_memory_test.go @@ -469,20 +469,24 @@ func TestDriveMemoryThreatDetectionJob(t *testing.T) { assert.Equal(t, "runs-on: ubuntu-latest", job.RunsOn) assert.Contains(t, job.Permissions, "drives: write") assert.Contains(t, strings.Join(job.Steps, "\n"), "actions/gh-drives-preview/commit@") + assert.Equal(t, driveMemoryAcceptedCondition, job.If) node, err := ParseExpression(job.If) require.NoError(t, err) for _, agentResult := range []string{"success", "failure", "cancelled", "skipped", ""} { for _, detectionResult := range []string{"success", "failure", "cancelled", "skipped", ""} { for _, accepted := range []string{"true", "false", ""} { - values := map[string]string{ - "needs.agent.result": agentResult, - "needs.detection.result": detectionResult, - "needs.detection.outputs.detection_success": accepted, + for _, event := range append(append([]string{}, validGitHubEventTypes...), "", "future_event") { + values := map[string]string{ + "github.event_name": event, + "needs.agent.result": agentResult, + "needs.detection.result": detectionResult, + "needs.detection.outputs.detection_success": accepted, + } + want := agentResult == "success" && detectionResult == "success" && accepted == "true" + assert.Equal(t, want, evaluateDetectionRedactionGate(t, node, values), + "event=%q agent=%q detection=%q detection_success=%q", event, agentResult, detectionResult, accepted) } - want := agentResult == "success" && detectionResult == "success" && accepted == "true" - assert.Equal(t, want, evaluateDetectionRedactionGate(t, node, values), - "agent=%q detection=%q detection_success=%q", agentResult, detectionResult, accepted) } } } diff --git a/specs/compiler-threat-detection-changelog.md b/specs/compiler-threat-detection-changelog.md index 54ae6516c44..aac7a0f95ab 100644 --- a/specs/compiler-threat-detection-changelog.md +++ b/specs/compiler-threat-detection-changelog.md @@ -16,6 +16,7 @@ This changelog records the version history and the dated mapping audits for `spe | Version | Change | |---|---| +| 1.0.79 | Clarifies drive-memory's separate persistence boundary: admitted issue/slash-command runs retain detection-accepted writes through repository/ref/drive-name preview storage, not Actions cache event/token policy. Documents cross-event content reuse, unverified service-side enforcement, detector limitations, and dry-run/restore-only/no-detection behavior. Adds exact generated-YAML and event/result regression evidence without changing production behavior, threat identifiers, or lock-file compatibility. | | 1.0.78 | Synchronizes CTR-019 with the implemented cache lifecycle: restore and local edits, artifact handoff, stricter successful-agent/detection/event publication gates, optional validation, and later restoration. Records policy-hash/custom-key/repository-scope limits, artifact-only retention, and the absence of retroactive cache authentication or purge. Distinguishes platform cache-token read policies, entry restore-only configuration, dry-run, and host-side MCP read-only compilation. Maps compiler sink validation, native scalar handling, namespace/lifecycle regressions, and the limits of existing workflow/safe-output/MCP TLA+ models. Documentation/evidence clarification only; no new runtime behavior, threat identifier, or lock-file compatibility change. | | 1.0.77 | Closes the empty dependency-cache list exception to the detection-enabled agent's read-only cache policy: only parsed, nonempty entries preserve dependency-save capability. Requires independent validation of workflow- and job-level cache-mode literals before actionlint compatibility suppression, including trusted events without cache actions. Maps empty-list generated-YAML, invalid-scalar CLI, and reusable-caller regression coverage. Preserves valid dependency saves, dry-run, GHES, and no-detection boundaries; no new threat identifier, frontmatter setting, or lock-file schema change. | | 1.0.76 | Fixes an incomplete cache-write denylist that allowed issue/discussion runs to override GitHub's default-branch read-only cache boundary. Publisher and dependency-save guards now share a fail-closed allowlist matching the seven documented write-capable events plus merge-ref-isolated `pull_request`; missing and unknown events are denied. Extends known-event lint diagnostics, mixed-trigger and reusable-caller coverage, and the acceptance matrix, including accepted no-output results. Preserves dry-run, GHES, dispatch, and no-detection boundaries. Generated locks require regeneration; no new threat identifier or frontmatter setting. | diff --git a/specs/compiler-threat-detection-spec.md b/specs/compiler-threat-detection-spec.md index 09e5c582f1d..a46f94b50a0 100644 --- a/specs/compiler-threat-detection-spec.md +++ b/specs/compiler-threat-detection-spec.md @@ -7,7 +7,7 @@ sidebar: # GitHub Actions Compiler Threat Detection Specification -**Version**: 1.0.78 +**Version**: 1.0.79 **Status**: Candidate Recommendation **Latest Version**: https://github.com/github/gh-aw/blob/main/specs/compiler-threat-detection-spec.md **Editors**: GitHub Next (GitHub, Inc.) @@ -32,6 +32,7 @@ Each version maps to the minimum compatible binary. A version change MUST update | Versions | Minimum gh-aw | Compatibility | |---|---:|---| +| `1.0.79` | Unreleased | Distinguishes drive-memory persistence from Actions cache event/token policy. Documents admitted issue/slash-command writes, repository/ref/drive scope, cross-event residual trust, explicit acceptance, and dry-run/restore-only/no-detection boundaries. Adds generated-YAML and event/result evidence; no runtime or lock-file compatibility change. | | `1.0.78` | Unreleased | Documents the implemented cache-memory restore/edit/artifact/publication lifecycle, integrity namespaces and restore scope, and distinct meanings of read-only policies. Maps lifecycle and mode-validation evidence and separates CTR-019 from the host-side MCP read-only and safe-output lifecycle models. Documentation/evidence clarification only; no new runtime behavior, threat identifier, or lock-file compatibility change. | | `1.0.77` | Unreleased | Requires parsed, nonempty dependency-cache entries before omitting the detection-enabled agent's read-only cache policy; `cache: []` retains the restriction. Requires trigger-independent validation of authored cache-mode literals before actionlint compatibility suppression. No new threat identifier, frontmatter setting, or lock-file schema change. | | `1.0.76` | Unreleased | Replaces the incomplete cache-write event denylist with GitHub's documented write allowlist plus merge-ref-isolated `pull_request`. Publisher and dependency-save guards deny all other and unknown events, including issues/discussions; known-event lint diagnostics share the classification. Generated locks require regeneration; no new threat identifier or frontmatter setting. | @@ -231,6 +232,14 @@ Authored workflow- and job-level `cache-mode` values MUST be validated independe These controls do not authenticate unsigned cache contents or uploaded artifacts, prove arbitrary shell/third-party cache writers safe, or cover persistent runner caches. Conformance evidence MUST cover generated YAML for low-trust, trusted, mixed, dispatch, dry-run, GHES, no-detection, empty dependency-cache lists, and legitimate publisher cases, plus detector-result and acceptance-output combinations and trigger-independent invalid-mode diagnostics. +#### Drive-memory persistence is a separate boundary + +The detection-separated drive-memory publisher MUST require successful agent and detection jobs and explicit detection acceptance, including rejection in warning mode. It MUST preserve supported admitted issue and slash-command writes rather than apply the Actions cache event allowlist. The pinned GitHub Drives preview action requests repository/ref/drive-name storage; drive persistence MUST NOT be described as Actions cache storage or as constrained by `cache-mode`. + +Runs sharing the requested repository, `GITHUB_REF`, and drive name can exchange persistent content across event types. Detection acceptance, local Git bookkeeping, concurrency checks, and configured validation MUST NOT be described as producer authentication or proof that later interpretation is safe. Detector false negatives and its no-output short-circuit remain residual risks. The compiler does not establish server-side namespace enforcement by the preview service. Deployments requiring stronger producer isolation MUST NOT rely on detection acceptance alone. + +Dry-run and restore-only drive entries MUST omit compiler-managed publication. Without detection, writable drives retain their existing same-job publication without a detection gate. Conformance evidence in `drive_memory_test.go` and `drive_memory_event_policy_test.go` MUST cover exact acceptance guards, event/result combinations, mixed and reusable triggers, admitted slash commands, expression-controlled detection, GHES, dry-run, restore-only, and no-detection behavior. + #### Cache lifecycle and poisoning boundaries The detection-separated lifecycle has distinct local, artifact, and cache-service effects: