From f68dd2ecfa7dd802fab01b17f07d8e7e8e9862d6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 22:40:37 +0000 Subject: [PATCH 1/7] Initial plan From bf51180f8d1224b41cdf8f8f35a6b1a77c0cd74f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 23:10:02 +0000 Subject: [PATCH 2/7] chore: plan side-repo context refactor Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c98ef796-ef1b-4031-af11-2ad2719a6ba2 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ci-coach.lock.yml | 5 +++++ .github/workflows/cloclo.lock.yml | 5 +++++ .github/workflows/code-scanning-fixer.lock.yml | 5 +++++ .github/workflows/code-simplifier.lock.yml | 5 +++++ .github/workflows/daily-architecture-diagram.lock.yml | 5 +++++ .github/workflows/daily-community-attribution.lock.yml | 5 +++++ .github/workflows/daily-doc-healer.lock.yml | 5 +++++ .github/workflows/daily-doc-updater.lock.yml | 5 +++++ .../daily-rendering-scripts-verifier.lock.yml | 5 +++++ .../workflows/daily-safe-output-integrator.lock.yml | 5 +++++ .github/workflows/daily-workflow-updater.lock.yml | 5 +++++ .github/workflows/dead-code-remover.lock.yml | 5 +++++ .github/workflows/developer-docs-consolidator.lock.yml | 5 +++++ .github/workflows/dictation-prompt.lock.yml | 5 +++++ .github/workflows/functional-pragmatist.lock.yml | 5 +++++ .github/workflows/github-mcp-tools-report.lock.yml | 5 +++++ .github/workflows/glossary-maintainer.lock.yml | 5 +++++ .github/workflows/go-logger.lock.yml | 5 +++++ .github/workflows/hourly-ci-cleaner.lock.yml | 5 +++++ .github/workflows/instructions-janitor.lock.yml | 5 +++++ .github/workflows/jsweep.lock.yml | 5 +++++ .github/workflows/layout-spec-maintainer.lock.yml | 5 +++++ .github/workflows/poem-bot.lock.yml | 5 +++++ .github/workflows/q.lock.yml | 5 +++++ .github/workflows/refiner.lock.yml | 5 +++++ .github/workflows/schema-feature-coverage.lock.yml | 5 +++++ .github/workflows/slide-deck-maintainer.lock.yml | 5 +++++ .github/workflows/smoke-claude.lock.yml | 10 ++++++++-- .github/workflows/smoke-create-cross-repo-pr.lock.yml | 5 +++++ .github/workflows/smoke-multi-pr.lock.yml | 5 +++++ .github/workflows/smoke-project.lock.yml | 5 +++++ .github/workflows/spec-enforcer.lock.yml | 5 +++++ .github/workflows/spec-extractor.lock.yml | 5 +++++ .github/workflows/technical-doc-writer.lock.yml | 5 +++++ .../workflows/test-create-pr-error-handling.lock.yml | 5 +++++ .github/workflows/tidy.lock.yml | 5 +++++ .github/workflows/ubuntu-image-analyzer.lock.yml | 5 +++++ .github/workflows/unbloat-docs.lock.yml | 5 +++++ .github/workflows/update-astro.lock.yml | 5 +++++ .github/workflows/weekly-blog-post-writer.lock.yml | 5 +++++ .github/workflows/weekly-editors-health-check.lock.yml | 5 +++++ .../workflows/weekly-safe-outputs-spec-review.lock.yml | 5 +++++ 42 files changed, 213 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 67a071ea5e9..45a4a41ce7e 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -496,6 +496,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 6358255848c..4ec1d5f925b 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -683,6 +683,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index fa8a5510cb3..1f5be471433 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -481,6 +481,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 29f2bdbfaaf..88f28dd807b 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -435,6 +435,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 143b2e1c743..3e5a1582630 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -492,6 +492,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index 085ba8bbcd0..84961ebcc66 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -477,6 +477,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 753cabc75c1..79e2f594a9a 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -500,6 +500,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 729b4851c93..c75398c5e84 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -461,6 +461,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 0aa2b543655..462ac5f2ac0 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -533,6 +533,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index 8bbda77b49f..f38f0fbff0a 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -436,6 +436,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 529fd4befbe..79320522362 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -430,6 +430,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 4d06aa87122..c4f178c5dd9 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -466,6 +466,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 35f8664df98..ad69d7baef4 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -538,6 +538,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 5506e22a74e..fffe51a5ff2 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -419,6 +419,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index 249733abe65..aee27471ea8 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -426,6 +426,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 40b85850fe1..1b5d386fd2c 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -480,6 +480,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 69255e24fe3..a8a7e3d2242 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -528,6 +528,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 3dc5143c781..b026bbfbbb1 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -466,6 +466,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index f1eeecbe8d5..d0e4492dbee 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -473,6 +473,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 1eed7cd93e7..d8f572c1c4e 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -444,6 +444,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index a50920c40de..3a8ccf26846 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -494,6 +494,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 44314c019ed..702c76e4416 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -430,6 +430,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 21a77e58c22..97c63218330 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -667,6 +667,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 5e8ac12b3b0..5207d52a25a 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -670,6 +670,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index ece8c723e74..35c3d049cd0 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -478,6 +478,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index 17dcabc7048..1c58796a563 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -429,6 +429,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 9eecb763a5a..ef8c9a52288 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -484,6 +484,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index c9cc51bc704..3f9f5675126 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -1066,13 +1066,19 @@ jobs: "maxLength": 256 }, "reviewers": { - "required": true, "type": "array", "itemType": "string", "itemSanitize": true, "itemMaxLength": 39 + }, + "team_reviewers": { + "type": "array", + "itemType": "string", + "itemSanitize": true, + "itemMaxLength": 100 } - } + }, + "customValidation": "requiresOneOf:reviewers,team_reviewers" }, "close_pull_request": { "defaultMax": 1, diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 481c69995b3..0a30120e5bf 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -535,6 +535,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index c8effcf0864..0e6c690b248 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -508,6 +508,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index 1369cef3040..f4c9eb731dd 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -603,6 +603,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index dd47a0c34e9..68b458e438c 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -446,6 +446,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index 590650c7664..ee641af905e 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -483,6 +483,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 9398b6a55bb..25da79eee4e 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -525,6 +525,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/test-create-pr-error-handling.lock.yml b/.github/workflows/test-create-pr-error-handling.lock.yml index 8fd36552ae3..bc33ef88b32 100644 --- a/.github/workflows/test-create-pr-error-handling.lock.yml +++ b/.github/workflows/test-create-pr-error-handling.lock.yml @@ -439,6 +439,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 4d6da127483..cb4819d8dba 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -498,6 +498,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 57d3f50e59d..7034ccd99ca 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -428,6 +428,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 5015965096c..48784451ae3 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -545,6 +545,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index 6589db8626f..259f0b857df 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -441,6 +441,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index fc3e312e2ed..19c54bd0f29 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -505,6 +505,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index 68ebad24432..684e6109902 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -428,6 +428,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index 5c4f21dcdd6..a221da88dec 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -417,6 +417,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", From fe192007bd0afa110bab34b31b7ccf882e250259 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 23:24:02 +0000 Subject: [PATCH 3/7] fix: support side-repo invocation context for workflow run comments Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c98ef796-ef1b-4031-af11-2ad2719a6ba2 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ci-coach.lock.yml | 5 - .github/workflows/cloclo.lock.yml | 5 - .../workflows/code-scanning-fixer.lock.yml | 5 - .github/workflows/code-simplifier.lock.yml | 5 - .../daily-architecture-diagram.lock.yml | 5 - .../daily-community-attribution.lock.yml | 5 - .github/workflows/daily-doc-healer.lock.yml | 5 - .github/workflows/daily-doc-updater.lock.yml | 5 - .../daily-rendering-scripts-verifier.lock.yml | 5 - .../daily-safe-output-integrator.lock.yml | 5 - .../workflows/daily-workflow-updater.lock.yml | 5 - .github/workflows/dead-code-remover.lock.yml | 5 - .../developer-docs-consolidator.lock.yml | 5 - .github/workflows/dictation-prompt.lock.yml | 5 - .../workflows/functional-pragmatist.lock.yml | 5 - .../github-mcp-tools-report.lock.yml | 5 - .../workflows/glossary-maintainer.lock.yml | 5 - .github/workflows/go-logger.lock.yml | 5 - .github/workflows/hourly-ci-cleaner.lock.yml | 5 - .../workflows/instructions-janitor.lock.yml | 5 - .github/workflows/jsweep.lock.yml | 5 - .../workflows/layout-spec-maintainer.lock.yml | 5 - .github/workflows/poem-bot.lock.yml | 5 - .github/workflows/q.lock.yml | 5 - .github/workflows/refiner.lock.yml | 5 - .../schema-feature-coverage.lock.yml | 5 - .../workflows/slide-deck-maintainer.lock.yml | 5 - .github/workflows/smoke-claude.lock.yml | 10 +- .../smoke-create-cross-repo-pr.lock.yml | 5 - .github/workflows/smoke-multi-pr.lock.yml | 5 - .github/workflows/smoke-project.lock.yml | 5 - .github/workflows/spec-enforcer.lock.yml | 5 - .github/workflows/spec-extractor.lock.yml | 5 - .../workflows/technical-doc-writer.lock.yml | 5 - .../test-create-pr-error-handling.lock.yml | 5 - .github/workflows/tidy.lock.yml | 5 - .../workflows/ubuntu-image-analyzer.lock.yml | 5 - .github/workflows/unbloat-docs.lock.yml | 5 - .github/workflows/update-astro.lock.yml | 5 - .../weekly-blog-post-writer.lock.yml | 5 - .../weekly-editors-health-check.lock.yml | 5 - .../weekly-safe-outputs-spec-review.lock.yml | 5 - actions/setup/js/add_workflow_run_comment.cjs | 52 +++--- .../js/add_workflow_run_comment.test.cjs | 28 +++ .../setup/js/invocation_context_helpers.cjs | 165 ++++++++++++++++++ .../js/invocation_context_helpers.test.cjs | 70 ++++++++ 46 files changed, 294 insertions(+), 236 deletions(-) create mode 100644 actions/setup/js/invocation_context_helpers.cjs create mode 100644 actions/setup/js/invocation_context_helpers.test.cjs diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 45a4a41ce7e..67a071ea5e9 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -496,11 +496,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 4ec1d5f925b..6358255848c 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -683,11 +683,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 1f5be471433..fa8a5510cb3 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -481,11 +481,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 88f28dd807b..29f2bdbfaaf 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -435,11 +435,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 3e5a1582630..143b2e1c743 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -492,11 +492,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index 84961ebcc66..085ba8bbcd0 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -477,11 +477,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 79e2f594a9a..753cabc75c1 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -500,11 +500,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index c75398c5e84..729b4851c93 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -461,11 +461,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 462ac5f2ac0..0aa2b543655 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -533,11 +533,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index f38f0fbff0a..8bbda77b49f 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -436,11 +436,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 79320522362..529fd4befbe 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -430,11 +430,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index c4f178c5dd9..4d06aa87122 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -466,11 +466,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index ad69d7baef4..35f8664df98 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -538,11 +538,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index fffe51a5ff2..5506e22a74e 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -419,11 +419,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index aee27471ea8..249733abe65 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -426,11 +426,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 1b5d386fd2c..40b85850fe1 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -480,11 +480,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index a8a7e3d2242..69255e24fe3 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -528,11 +528,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index b026bbfbbb1..3dc5143c781 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -466,11 +466,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index d0e4492dbee..f1eeecbe8d5 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -473,11 +473,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index d8f572c1c4e..1eed7cd93e7 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -444,11 +444,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index 3a8ccf26846..a50920c40de 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -494,11 +494,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 702c76e4416..44314c019ed 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -430,11 +430,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 97c63218330..21a77e58c22 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -667,11 +667,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 5207d52a25a..5e8ac12b3b0 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -670,11 +670,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 35c3d049cd0..ece8c723e74 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -478,11 +478,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index 1c58796a563..17dcabc7048 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -429,11 +429,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index ef8c9a52288..9eecb763a5a 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -484,11 +484,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 3f9f5675126..c9cc51bc704 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -1066,19 +1066,13 @@ jobs: "maxLength": 256 }, "reviewers": { + "required": true, "type": "array", "itemType": "string", "itemSanitize": true, "itemMaxLength": 39 - }, - "team_reviewers": { - "type": "array", - "itemType": "string", - "itemSanitize": true, - "itemMaxLength": 100 } - }, - "customValidation": "requiresOneOf:reviewers,team_reviewers" + } }, "close_pull_request": { "defaultMax": 1, diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 0a30120e5bf..481c69995b3 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -535,11 +535,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index 0e6c690b248..c8effcf0864 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -508,11 +508,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index f4c9eb731dd..1369cef3040 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -603,11 +603,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index 68b458e438c..dd47a0c34e9 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -446,11 +446,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index ee641af905e..590650c7664 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -483,11 +483,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 25da79eee4e..9398b6a55bb 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -525,11 +525,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/test-create-pr-error-handling.lock.yml b/.github/workflows/test-create-pr-error-handling.lock.yml index bc33ef88b32..8fd36552ae3 100644 --- a/.github/workflows/test-create-pr-error-handling.lock.yml +++ b/.github/workflows/test-create-pr-error-handling.lock.yml @@ -439,11 +439,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index cb4819d8dba..4d6da127483 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -498,11 +498,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 7034ccd99ca..57d3f50e59d 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -428,11 +428,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 48784451ae3..5015965096c 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -545,11 +545,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index 259f0b857df..6589db8626f 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -441,11 +441,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index 19c54bd0f29..fc3e312e2ed 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -505,11 +505,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index 684e6109902..68ebad24432 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -428,11 +428,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index a221da88dec..5c4f21dcdd6 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -417,11 +417,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/actions/setup/js/add_workflow_run_comment.cjs b/actions/setup/js/add_workflow_run_comment.cjs index b1997835654..bf4c38e9ff4 100644 --- a/actions/setup/js/add_workflow_run_comment.cjs +++ b/actions/setup/js/add_workflow_run_comment.cjs @@ -10,6 +10,7 @@ const { getMessages } = require("./messages_core.cjs"); const { parseBoolTemplatable } = require("./templatable.cjs"); const { buildWorkflowRunUrl } = require("./workflow_metadata_helpers.cjs"); const { resolveTopLevelDiscussionCommentId } = require("./github_api_helpers.cjs"); +const { resolveInvocationContext } = require("./invocation_context_helpers.cjs"); /** * Event type descriptions for comment messages @@ -28,7 +29,7 @@ const EVENT_TYPE_DESCRIPTIONS = { * @param {number} discussionNumber - The discussion number * @returns {Promise} The discussion node ID */ -async function getDiscussionNodeId(discussionNumber) { +async function getDiscussionNodeId(discussionNumber, eventRepo = context.repo) { const { repository } = await github.graphql( ` query($owner: String!, $repo: String!, $num: Int!) { @@ -38,7 +39,7 @@ async function getDiscussionNodeId(discussionNumber) { } } }`, - { owner: context.repo.owner, repo: context.repo.repo, num: discussionNumber } + { owner: eventRepo.owner, repo: eventRepo.repo, num: discussionNumber } ); return repository.discussion.id; } @@ -48,14 +49,14 @@ async function getDiscussionNodeId(discussionNumber) { * @param {string|number} commentId - The comment ID * @param {string} commentUrl - The comment URL */ -function setCommentOutputs(commentId, commentUrl) { +function setCommentOutputs(commentId, commentUrl, eventRepo = context.repo) { core.info(`Successfully created comment with workflow link`); core.info(`Comment ID: ${commentId}`); core.info(`Comment URL: ${commentUrl}`); - core.info(`Comment Repo: ${context.repo.owner}/${context.repo.repo}`); + core.info(`Comment Repo: ${eventRepo.owner}/${eventRepo.repo}`); core.setOutput("comment-id", commentId.toString()); core.setOutput("comment-url", commentUrl); - core.setOutput("comment-repo", `${context.repo.owner}/${context.repo.repo}`); + core.setOutput("comment-repo", `${eventRepo.owner}/${eventRepo.repo}`); } /** @@ -71,22 +72,25 @@ async function main() { return; } - const runUrl = buildWorkflowRunUrl(context, context.repo); + const invocationContext = resolveInvocationContext(context); + const runUrl = buildWorkflowRunUrl(context, invocationContext.workflowRepo); core.info(`Run ID: ${context.runId}`); core.info(`Run URL: ${runUrl}`); + core.info(`Event source: ${invocationContext.source}`); // Determine the API endpoint based on the event type let commentEndpoint; - const eventName = context.eventName; - const owner = context.repo.owner; - const repo = context.repo.repo; + const eventName = invocationContext.eventName; + const owner = invocationContext.eventRepo.owner; + const repo = invocationContext.eventRepo.repo; + const payload = invocationContext.eventPayload; try { switch (eventName) { case "issues": case "issue_comment": { - const number = context.payload?.issue?.number; + const number = payload?.issue?.number; if (!number) { core.setFailed(`${ERR_NOT_FOUND}: Issue number not found in event payload`); return; @@ -97,7 +101,7 @@ async function main() { case "pull_request": case "pull_request_review_comment": { - const number = context.payload?.pull_request?.number; + const number = payload?.pull_request?.number; if (!number) { core.setFailed(`${ERR_NOT_FOUND}: Pull request number not found in event payload`); return; @@ -108,7 +112,7 @@ async function main() { } case "discussion": { - const discussionNumber = context.payload?.discussion?.number; + const discussionNumber = payload?.discussion?.number; if (!discussionNumber) { core.setFailed(`${ERR_NOT_FOUND}: Discussion number not found in event payload`); return; @@ -118,8 +122,8 @@ async function main() { } case "discussion_comment": { - const discussionCommentNumber = context.payload?.discussion?.number; - const discussionCommentId = context.payload?.comment?.id; + const discussionCommentNumber = payload?.discussion?.number; + const discussionCommentId = payload?.comment?.id; if (!discussionCommentNumber || !discussionCommentId) { core.setFailed(`${ERR_NOT_FOUND}: Discussion or comment information not found in event payload`); return; @@ -134,7 +138,7 @@ async function main() { } core.info(`Creating comment on: ${commentEndpoint}`); - await addCommentWithWorkflowLink(commentEndpoint, runUrl, eventName); + await addCommentWithWorkflowLink(commentEndpoint, runUrl, eventName, invocationContext); } catch (error) { const errorMessage = getErrorMessage(error); // Don't fail the job - just warn since this is not critical @@ -185,8 +189,8 @@ function buildCommentBody(eventName, runUrl) { * @param {string} commentBody - The comment body * @param {string|null} replyToNodeId - Parent comment node ID for threading (null for top-level) */ -async function postDiscussionComment(discussionNumber, commentBody, replyToNodeId = null) { - const discussionId = await getDiscussionNodeId(discussionNumber); +async function postDiscussionComment(discussionNumber, commentBody, replyToNodeId = null, eventRepo = context.repo) { + const discussionId = await getDiscussionNodeId(discussionNumber, eventRepo); /** @type {any} */ let result; @@ -213,7 +217,7 @@ async function postDiscussionComment(discussionNumber, commentBody, replyToNodeI } const comment = result.addDiscussionComment.comment; - setCommentOutputs(comment.id, comment.url); + setCommentOutputs(comment.id, comment.url, eventRepo); } /** @@ -222,13 +226,15 @@ async function postDiscussionComment(discussionNumber, commentBody, replyToNodeI * @param {string} runUrl - The URL of the workflow run * @param {string} eventName - The event type (to determine the comment text) */ -async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { +async function addCommentWithWorkflowLink(endpoint, runUrl, eventName, invocationContext = null) { + const eventPayload = invocationContext?.eventPayload || context.payload; + const eventRepo = invocationContext?.eventRepo || context.repo; const commentBody = buildCommentBody(eventName, runUrl); if (eventName === "discussion") { // Parse discussion number from special format: "discussion:NUMBER" const discussionNumber = parseInt(endpoint.split(":")[1], 10); - await postDiscussionComment(discussionNumber, commentBody); + await postDiscussionComment(discussionNumber, commentBody, null, eventRepo); return; } @@ -237,8 +243,8 @@ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { const discussionNumber = parseInt(endpoint.split(":")[1], 10); // GitHub Discussions only supports two nesting levels, so resolve the top-level parent's node ID - const commentNodeId = await resolveTopLevelDiscussionCommentId(github, context.payload?.comment?.node_id); - await postDiscussionComment(discussionNumber, commentBody, commentNodeId); + const commentNodeId = await resolveTopLevelDiscussionCommentId(github, eventPayload?.comment?.node_id); + await postDiscussionComment(discussionNumber, commentBody, commentNodeId, eventRepo); return; } @@ -248,7 +254,7 @@ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { headers: { Accept: "application/vnd.github+json" }, }); - setCommentOutputs(createResponse.data.id, createResponse.data.html_url); + setCommentOutputs(createResponse.data.id, createResponse.data.html_url, eventRepo); } module.exports = { main, addCommentWithWorkflowLink, buildCommentBody, postDiscussionComment }; diff --git a/actions/setup/js/add_workflow_run_comment.test.cjs b/actions/setup/js/add_workflow_run_comment.test.cjs index 51cde9c5c48..b049d8cc11c 100644 --- a/actions/setup/js/add_workflow_run_comment.test.cjs +++ b/actions/setup/js/add_workflow_run_comment.test.cjs @@ -170,6 +170,34 @@ describe("add_workflow_run_comment", () => { }); }); + describe("main() - repository_dispatch event", () => { + it("should use workflow repo for run URL and client payload repo for comments", async () => { + global.context = { + eventName: "repository_dispatch", + runId: 12345, + repo: { owner: "sideowner", repo: "siderepo" }, + payload: { + action: "issue_comment", + client_payload: { + issue: { number: 789 }, + repository: { owner: { login: "targetowner" }, name: "targetrepo" }, + }, + }, + }; + + await runScript(); + + expect(mockGithub.request).toHaveBeenCalledWith( + expect.stringContaining("POST /repos/targetowner/targetrepo/issues/789/comments"), + expect.objectContaining({ + body: expect.stringContaining("https://github.com/sideowner/siderepo/actions/runs/12345"), + }) + ); + expect(mockCore.setOutput).toHaveBeenCalledWith("comment-repo", "targetowner/targetrepo"); + expect(mockCore.setFailed).not.toHaveBeenCalled(); + }); + }); + describe("main() - pull_request event", () => { it("should create comment on a pull request", async () => { global.context = { diff --git a/actions/setup/js/invocation_context_helpers.cjs b/actions/setup/js/invocation_context_helpers.cjs new file mode 100644 index 00000000000..865a1e4602c --- /dev/null +++ b/actions/setup/js/invocation_context_helpers.cjs @@ -0,0 +1,165 @@ +// @ts-check +/// + +/** + * @typedef {{ owner: string, repo: string }} RepoRef + */ + +/** + * Parse a repository slug in owner/repo format. + * @param {unknown} value + * @returns {RepoRef|null} + */ +function parseRepoSlug(value) { + if (typeof value !== "string") { + return null; + } + + const trimmed = value.trim(); + if (!trimmed) { + return null; + } + + const parts = trimmed.split("/"); + if (parts.length !== 2 || !parts[0] || !parts[1]) { + return null; + } + + return { owner: parts[0], repo: parts[1] }; +} + +/** + * Normalize a repo object into { owner, repo } shape. + * @param {unknown} repoValue + * @returns {RepoRef|null} + */ +function normalizeRepo(repoValue) { + if (!repoValue || typeof repoValue !== "object") { + return null; + } + + const maybeRepo = /** @type {any} */ repoValue; + if (typeof maybeRepo.owner === "string" && typeof maybeRepo.repo === "string" && maybeRepo.owner && maybeRepo.repo) { + return { + owner: maybeRepo.owner, + repo: maybeRepo.repo, + }; + } + + return null; +} + +/** + * Extract a repository from event payload.repository. + * Supports both REST event shape (owner.login + name) and + * github-script context-style payload.repo style. + * @param {unknown} payload + * @returns {RepoRef|null} + */ +function extractRepoFromPayload(payload) { + if (!payload || typeof payload !== "object") { + return null; + } + + const repository = /** @type {any} */ payload.repository; + if (!repository || typeof repository !== "object") { + return null; + } + + const owner = typeof repository.owner?.login === "string" ? repository.owner.login : typeof repository.owner === "string" ? repository.owner : undefined; + const repo = typeof repository.name === "string" ? repository.name : typeof repository.repo === "string" ? repository.repo : undefined; + + if (owner && repo) { + return { owner, repo }; + } + + return null; +} + +/** + * Parse a JSON input string into object payload. + * @param {unknown} value + * @returns {Record|null} + */ +function parseJSONPayload(value) { + if (typeof value !== "string" || value.trim() === "") { + return null; + } + + try { + const parsed = JSON.parse(value); + if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { + return /** @type {Record} */ parsed; + } + } catch (_error) { + // Best-effort parsing only. + } + + return null; +} + +/** + * Resolve workflow repo and effective event context across invocation styles: + * - native events + * - workflow_dispatch (optional explicit overrides in inputs) + * - repository_dispatch (event wrapped in client_payload) + * + * @param {any} rawContext + * @returns {{ + * source: "native" | "workflow_dispatch" | "repository_dispatch", + * eventName: string, + * eventPayload: any, + * workflowRepo: RepoRef, + * eventRepo: RepoRef + * }} + */ +function resolveInvocationContext(rawContext) { + const contextRepo = normalizeRepo(rawContext?.repo) || { owner: "", repo: "" }; + const workflowRepo = normalizeRepo(rawContext?.workflowRepo) || contextRepo; + + /** @type {"native" | "workflow_dispatch" | "repository_dispatch"} */ + let source = "native"; + let eventName = rawContext?.eventName || ""; + let eventPayload = rawContext?.payload || {}; + let eventRepo = normalizeRepo(rawContext?.eventRepo); + + if (eventName === "repository_dispatch") { + const clientPayload = rawContext?.payload?.client_payload; + if (clientPayload && typeof clientPayload === "object") { + source = "repository_dispatch"; + eventName = rawContext?.payload?.action || eventName; + eventPayload = clientPayload; + eventRepo = eventRepo || extractRepoFromPayload(clientPayload) || parseRepoSlug(clientPayload?.aw_context?.repo); + } + } else if (eventName === "workflow_dispatch") { + source = "workflow_dispatch"; + const inputs = rawContext?.payload?.inputs; + if (inputs && typeof inputs === "object") { + const inputsEventName = typeof inputs.event_name === "string" ? inputs.event_name : typeof inputs.eventName === "string" ? inputs.eventName : ""; + const parsedPayload = parseJSONPayload(inputs.event_payload) || parseJSONPayload(inputs.eventPayload); + if (inputsEventName) { + eventName = inputsEventName; + } + if (parsedPayload) { + eventPayload = parsedPayload; + } + eventRepo = eventRepo || parseRepoSlug(inputs.event_repo) || parseRepoSlug(inputs.eventRepo) || parseRepoSlug(inputs.target_repo) || parseRepoSlug(inputs.targetRepo); + } + } + + if (!eventRepo) { + eventRepo = extractRepoFromPayload(eventPayload) || workflowRepo; + } + + return { + source, + eventName, + eventPayload, + workflowRepo, + eventRepo, + }; +} + +module.exports = { + resolveInvocationContext, +}; diff --git a/actions/setup/js/invocation_context_helpers.test.cjs b/actions/setup/js/invocation_context_helpers.test.cjs new file mode 100644 index 00000000000..5a3e1ba8e7f --- /dev/null +++ b/actions/setup/js/invocation_context_helpers.test.cjs @@ -0,0 +1,70 @@ +import { describe, it, expect } from "vitest"; + +const { resolveInvocationContext } = await import("./invocation_context_helpers.cjs"); + +describe("invocation_context_helpers", () => { + it("keeps native event context unchanged", () => { + const resolved = resolveInvocationContext({ + eventName: "issue_comment", + repo: { owner: "side-owner", repo: "side-repo" }, + payload: { + issue: { number: 42 }, + repository: { + owner: { login: "side-owner" }, + name: "side-repo", + }, + }, + }); + + expect(resolved.source).toBe("native"); + expect(resolved.eventName).toBe("issue_comment"); + expect(resolved.workflowRepo).toEqual({ owner: "side-owner", repo: "side-repo" }); + expect(resolved.eventRepo).toEqual({ owner: "side-owner", repo: "side-repo" }); + expect(resolved.eventPayload.issue.number).toBe(42); + }); + + it("unwraps repository_dispatch payload and repo", () => { + const resolved = resolveInvocationContext({ + eventName: "repository_dispatch", + repo: { owner: "side-owner", repo: "side-repo" }, + payload: { + action: "issue_comment", + client_payload: { + issue: { number: 99 }, + repository: { + owner: { login: "target-owner" }, + name: "target-repo", + }, + }, + }, + }); + + expect(resolved.source).toBe("repository_dispatch"); + expect(resolved.eventName).toBe("issue_comment"); + expect(resolved.workflowRepo).toEqual({ owner: "side-owner", repo: "side-repo" }); + expect(resolved.eventRepo).toEqual({ owner: "target-owner", repo: "target-repo" }); + expect(resolved.eventPayload.issue.number).toBe(99); + }); + + it("supports workflow_dispatch overrides from inputs", () => { + const resolved = resolveInvocationContext({ + eventName: "workflow_dispatch", + repo: { owner: "side-owner", repo: "side-repo" }, + payload: { + inputs: { + event_name: "issues", + event_repo: "target-owner/target-repo", + event_payload: JSON.stringify({ + issue: { number: 777 }, + }), + }, + }, + }); + + expect(resolved.source).toBe("workflow_dispatch"); + expect(resolved.eventName).toBe("issues"); + expect(resolved.workflowRepo).toEqual({ owner: "side-owner", repo: "side-repo" }); + expect(resolved.eventRepo).toEqual({ owner: "target-owner", repo: "target-repo" }); + expect(resolved.eventPayload.issue.number).toBe(777); + }); +}); From 4c95de92e4fa29183d65a18995d36442ac58e591 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 00:21:12 +0000 Subject: [PATCH 4/7] chore: plan systematic context refactor follow-up Agent-Logs-Url: https://github.com/github/gh-aw/sessions/f10b710f-a4c6-4913-b71b-38e4205e3114 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ci-coach.lock.yml | 5 +++++ .github/workflows/cloclo.lock.yml | 5 +++++ .github/workflows/code-scanning-fixer.lock.yml | 5 +++++ .github/workflows/code-simplifier.lock.yml | 5 +++++ .github/workflows/daily-architecture-diagram.lock.yml | 5 +++++ .github/workflows/daily-community-attribution.lock.yml | 5 +++++ .github/workflows/daily-doc-healer.lock.yml | 5 +++++ .github/workflows/daily-doc-updater.lock.yml | 5 +++++ .../daily-rendering-scripts-verifier.lock.yml | 5 +++++ .../workflows/daily-safe-output-integrator.lock.yml | 5 +++++ .github/workflows/daily-workflow-updater.lock.yml | 5 +++++ .github/workflows/dead-code-remover.lock.yml | 5 +++++ .github/workflows/developer-docs-consolidator.lock.yml | 5 +++++ .github/workflows/dictation-prompt.lock.yml | 5 +++++ .github/workflows/functional-pragmatist.lock.yml | 5 +++++ .github/workflows/github-mcp-tools-report.lock.yml | 5 +++++ .github/workflows/glossary-maintainer.lock.yml | 5 +++++ .github/workflows/go-logger.lock.yml | 5 +++++ .github/workflows/hourly-ci-cleaner.lock.yml | 5 +++++ .github/workflows/instructions-janitor.lock.yml | 5 +++++ .github/workflows/jsweep.lock.yml | 5 +++++ .github/workflows/layout-spec-maintainer.lock.yml | 5 +++++ .github/workflows/poem-bot.lock.yml | 5 +++++ .github/workflows/q.lock.yml | 5 +++++ .github/workflows/refiner.lock.yml | 5 +++++ .github/workflows/schema-feature-coverage.lock.yml | 5 +++++ .github/workflows/slide-deck-maintainer.lock.yml | 5 +++++ .github/workflows/smoke-claude.lock.yml | 10 ++++++++-- .github/workflows/smoke-create-cross-repo-pr.lock.yml | 5 +++++ .github/workflows/smoke-multi-pr.lock.yml | 5 +++++ .github/workflows/smoke-project.lock.yml | 5 +++++ .github/workflows/spec-enforcer.lock.yml | 5 +++++ .github/workflows/spec-extractor.lock.yml | 5 +++++ .github/workflows/technical-doc-writer.lock.yml | 5 +++++ .../workflows/test-create-pr-error-handling.lock.yml | 5 +++++ .github/workflows/tidy.lock.yml | 5 +++++ .github/workflows/ubuntu-image-analyzer.lock.yml | 5 +++++ .github/workflows/unbloat-docs.lock.yml | 5 +++++ .github/workflows/update-astro.lock.yml | 5 +++++ .github/workflows/weekly-blog-post-writer.lock.yml | 5 +++++ .github/workflows/weekly-editors-health-check.lock.yml | 5 +++++ .../workflows/weekly-safe-outputs-spec-review.lock.yml | 5 +++++ 42 files changed, 213 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 67a071ea5e9..45a4a41ce7e 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -496,6 +496,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 6358255848c..4ec1d5f925b 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -683,6 +683,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index fa8a5510cb3..1f5be471433 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -481,6 +481,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 29f2bdbfaaf..88f28dd807b 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -435,6 +435,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 143b2e1c743..3e5a1582630 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -492,6 +492,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index 085ba8bbcd0..84961ebcc66 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -477,6 +477,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 753cabc75c1..79e2f594a9a 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -500,6 +500,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 729b4851c93..c75398c5e84 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -461,6 +461,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 0aa2b543655..462ac5f2ac0 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -533,6 +533,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index 8bbda77b49f..f38f0fbff0a 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -436,6 +436,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 529fd4befbe..79320522362 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -430,6 +430,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 4d06aa87122..c4f178c5dd9 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -466,6 +466,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 35f8664df98..ad69d7baef4 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -538,6 +538,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 5506e22a74e..fffe51a5ff2 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -419,6 +419,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index 249733abe65..aee27471ea8 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -426,6 +426,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 40b85850fe1..1b5d386fd2c 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -480,6 +480,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 69255e24fe3..a8a7e3d2242 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -528,6 +528,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 3dc5143c781..b026bbfbbb1 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -466,6 +466,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index f1eeecbe8d5..d0e4492dbee 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -473,6 +473,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 1eed7cd93e7..d8f572c1c4e 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -444,6 +444,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index a50920c40de..3a8ccf26846 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -494,6 +494,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 44314c019ed..702c76e4416 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -430,6 +430,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 21a77e58c22..97c63218330 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -667,6 +667,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 5e8ac12b3b0..5207d52a25a 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -670,6 +670,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index ece8c723e74..35c3d049cd0 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -478,6 +478,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index 17dcabc7048..1c58796a563 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -429,6 +429,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 9eecb763a5a..ef8c9a52288 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -484,6 +484,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index c9cc51bc704..3f9f5675126 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -1066,13 +1066,19 @@ jobs: "maxLength": 256 }, "reviewers": { - "required": true, "type": "array", "itemType": "string", "itemSanitize": true, "itemMaxLength": 39 + }, + "team_reviewers": { + "type": "array", + "itemType": "string", + "itemSanitize": true, + "itemMaxLength": 100 } - } + }, + "customValidation": "requiresOneOf:reviewers,team_reviewers" }, "close_pull_request": { "defaultMax": 1, diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 481c69995b3..0a30120e5bf 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -535,6 +535,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index c8effcf0864..0e6c690b248 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -508,6 +508,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index 1369cef3040..f4c9eb731dd 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -603,6 +603,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index dd47a0c34e9..68b458e438c 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -446,6 +446,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index 590650c7664..ee641af905e 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -483,6 +483,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 9398b6a55bb..25da79eee4e 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -525,6 +525,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/test-create-pr-error-handling.lock.yml b/.github/workflows/test-create-pr-error-handling.lock.yml index 8fd36552ae3..bc33ef88b32 100644 --- a/.github/workflows/test-create-pr-error-handling.lock.yml +++ b/.github/workflows/test-create-pr-error-handling.lock.yml @@ -439,6 +439,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 4d6da127483..cb4819d8dba 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -498,6 +498,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 57d3f50e59d..7034ccd99ca 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -428,6 +428,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 5015965096c..48784451ae3 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -545,6 +545,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index 6589db8626f..259f0b857df 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -441,6 +441,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index fc3e312e2ed..19c54bd0f29 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -505,6 +505,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index 68ebad24432..684e6109902 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -428,6 +428,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index 5c4f21dcdd6..a221da88dec 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -417,6 +417,11 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { + "base": { + "type": "string", + "sanitize": true, + "maxLength": 128 + }, "body": { "required": true, "type": "string", From aaf5c5671b15de532a99fe0cca8075a20387702d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 00:46:35 +0000 Subject: [PATCH 5/7] refactor: apply invocation context handling across comment scripts Agent-Logs-Url: https://github.com/github/gh-aw/sessions/f10b710f-a4c6-4913-b71b-38e4205e3114 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ci-coach.lock.yml | 5 -- .github/workflows/cloclo.lock.yml | 5 -- .../workflows/code-scanning-fixer.lock.yml | 5 -- .github/workflows/code-simplifier.lock.yml | 5 -- .../daily-architecture-diagram.lock.yml | 5 -- .../daily-community-attribution.lock.yml | 5 -- .github/workflows/daily-doc-healer.lock.yml | 5 -- .github/workflows/daily-doc-updater.lock.yml | 5 -- .../daily-rendering-scripts-verifier.lock.yml | 5 -- .../daily-safe-output-integrator.lock.yml | 5 -- .../workflows/daily-workflow-updater.lock.yml | 5 -- .github/workflows/dead-code-remover.lock.yml | 5 -- .../developer-docs-consolidator.lock.yml | 5 -- .github/workflows/dictation-prompt.lock.yml | 5 -- .../workflows/functional-pragmatist.lock.yml | 5 -- .../github-mcp-tools-report.lock.yml | 5 -- .../workflows/glossary-maintainer.lock.yml | 5 -- .github/workflows/go-logger.lock.yml | 5 -- .github/workflows/hourly-ci-cleaner.lock.yml | 5 -- .../workflows/instructions-janitor.lock.yml | 5 -- .github/workflows/jsweep.lock.yml | 5 -- .../workflows/layout-spec-maintainer.lock.yml | 5 -- .github/workflows/poem-bot.lock.yml | 5 -- .github/workflows/q.lock.yml | 5 -- .github/workflows/refiner.lock.yml | 5 -- .../schema-feature-coverage.lock.yml | 5 -- .../workflows/slide-deck-maintainer.lock.yml | 5 -- .github/workflows/smoke-claude.lock.yml | 10 +--- .../smoke-create-cross-repo-pr.lock.yml | 5 -- .github/workflows/smoke-multi-pr.lock.yml | 5 -- .github/workflows/smoke-project.lock.yml | 5 -- .github/workflows/spec-enforcer.lock.yml | 5 -- .github/workflows/spec-extractor.lock.yml | 5 -- .../workflows/technical-doc-writer.lock.yml | 5 -- .../test-create-pr-error-handling.lock.yml | 5 -- .github/workflows/tidy.lock.yml | 5 -- .../workflows/ubuntu-image-analyzer.lock.yml | 5 -- .github/workflows/unbloat-docs.lock.yml | 5 -- .github/workflows/update-astro.lock.yml | 5 -- .../weekly-blog-post-writer.lock.yml | 5 -- .../weekly-editors-health-check.lock.yml | 5 -- .../weekly-safe-outputs-spec-review.lock.yml | 5 -- .../js/add_reaction_and_edit_comment.cjs | 57 +++++++++++-------- .../js/add_reaction_and_edit_comment.test.cjs | 27 +++++++++ actions/setup/js/add_workflow_run_comment.cjs | 3 + .../setup/js/invocation_context_helpers.cjs | 9 +-- .../setup/js/update_activation_comment.cjs | 7 ++- .../js/update_activation_comment.test.cjs | 11 ++++ 48 files changed, 83 insertions(+), 246 deletions(-) diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 45a4a41ce7e..67a071ea5e9 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -496,11 +496,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 4ec1d5f925b..6358255848c 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -683,11 +683,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 1f5be471433..fa8a5510cb3 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -481,11 +481,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 88f28dd807b..29f2bdbfaaf 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -435,11 +435,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 3e5a1582630..143b2e1c743 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -492,11 +492,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index 84961ebcc66..085ba8bbcd0 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -477,11 +477,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 79e2f594a9a..753cabc75c1 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -500,11 +500,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index c75398c5e84..729b4851c93 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -461,11 +461,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 462ac5f2ac0..0aa2b543655 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -533,11 +533,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index f38f0fbff0a..8bbda77b49f 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -436,11 +436,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 79320522362..529fd4befbe 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -430,11 +430,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index c4f178c5dd9..4d06aa87122 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -466,11 +466,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index ad69d7baef4..35f8664df98 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -538,11 +538,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index fffe51a5ff2..5506e22a74e 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -419,11 +419,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index aee27471ea8..249733abe65 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -426,11 +426,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 1b5d386fd2c..40b85850fe1 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -480,11 +480,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index a8a7e3d2242..69255e24fe3 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -528,11 +528,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index b026bbfbbb1..3dc5143c781 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -466,11 +466,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index d0e4492dbee..f1eeecbe8d5 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -473,11 +473,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index d8f572c1c4e..1eed7cd93e7 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -444,11 +444,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index 3a8ccf26846..a50920c40de 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -494,11 +494,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 702c76e4416..44314c019ed 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -430,11 +430,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 97c63218330..21a77e58c22 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -667,11 +667,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 5207d52a25a..5e8ac12b3b0 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -670,11 +670,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 35c3d049cd0..ece8c723e74 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -478,11 +478,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index 1c58796a563..17dcabc7048 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -429,11 +429,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index ef8c9a52288..9eecb763a5a 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -484,11 +484,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 3f9f5675126..c9cc51bc704 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -1066,19 +1066,13 @@ jobs: "maxLength": 256 }, "reviewers": { + "required": true, "type": "array", "itemType": "string", "itemSanitize": true, "itemMaxLength": 39 - }, - "team_reviewers": { - "type": "array", - "itemType": "string", - "itemSanitize": true, - "itemMaxLength": 100 } - }, - "customValidation": "requiresOneOf:reviewers,team_reviewers" + } }, "close_pull_request": { "defaultMax": 1, diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 0a30120e5bf..481c69995b3 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -535,11 +535,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index 0e6c690b248..c8effcf0864 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -508,11 +508,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index f4c9eb731dd..1369cef3040 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -603,11 +603,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index 68b458e438c..dd47a0c34e9 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -446,11 +446,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index ee641af905e..590650c7664 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -483,11 +483,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 25da79eee4e..9398b6a55bb 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -525,11 +525,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/test-create-pr-error-handling.lock.yml b/.github/workflows/test-create-pr-error-handling.lock.yml index bc33ef88b32..8fd36552ae3 100644 --- a/.github/workflows/test-create-pr-error-handling.lock.yml +++ b/.github/workflows/test-create-pr-error-handling.lock.yml @@ -439,11 +439,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index cb4819d8dba..4d6da127483 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -498,11 +498,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 7034ccd99ca..57d3f50e59d 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -428,11 +428,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 48784451ae3..5015965096c 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -545,11 +545,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index 259f0b857df..6589db8626f 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -441,11 +441,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index 19c54bd0f29..fc3e312e2ed 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -505,11 +505,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index 684e6109902..68ebad24432 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -428,11 +428,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index a221da88dec..5c4f21dcdd6 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -417,11 +417,6 @@ jobs: "create_pull_request": { "defaultMax": 1, "fields": { - "base": { - "type": "string", - "sanitize": true, - "maxLength": 128 - }, "body": { "required": true, "type": "string", diff --git a/actions/setup/js/add_reaction_and_edit_comment.cjs b/actions/setup/js/add_reaction_and_edit_comment.cjs index 3daf1e5a125..d917d7297b9 100644 --- a/actions/setup/js/add_reaction_and_edit_comment.cjs +++ b/actions/setup/js/add_reaction_and_edit_comment.cjs @@ -8,6 +8,7 @@ const { sanitizeContent } = require("./sanitize_content.cjs"); const { ERR_API, ERR_NOT_FOUND, ERR_VALIDATION } = require("./error_codes.cjs"); const { buildWorkflowRunUrl } = require("./workflow_metadata_helpers.cjs"); const { resolveTopLevelDiscussionCommentId } = require("./github_api_helpers.cjs"); +const { resolveInvocationContext } = require("./invocation_context_helpers.cjs"); /** * Event type descriptions for comment messages @@ -38,7 +39,8 @@ const DISCUSSION_REACTION_MAP = { async function main() { const reaction = process.env.GH_AW_REACTION || "eyes"; const command = process.env.GH_AW_COMMAND; // Only present for command workflows - const runUrl = buildWorkflowRunUrl(context, context.repo); + const invocationContext = resolveInvocationContext(context); + const runUrl = buildWorkflowRunUrl(context, invocationContext.workflowRepo); core.info(`Reaction type: ${reaction}`); core.info(`Command name: ${command || "none"}`); @@ -54,14 +56,15 @@ async function main() { let reactionEndpoint; let commentUpdateEndpoint; - const eventName = context.eventName; - const owner = context.repo.owner; - const repo = context.repo.repo; + const eventName = invocationContext.eventName; + const owner = invocationContext.eventRepo.owner; + const repo = invocationContext.eventRepo.repo; + const payload = invocationContext.eventPayload; try { switch (eventName) { case "issues": { - const issueNumber = context.payload?.issue?.number; + const issueNumber = payload?.issue?.number; if (!issueNumber) { core.setFailed(`${ERR_NOT_FOUND}: Issue number not found in event payload`); return; @@ -72,8 +75,8 @@ async function main() { } case "issue_comment": { - const commentId = context.payload?.comment?.id; - const issueNumberForComment = context.payload?.issue?.number; + const commentId = payload?.comment?.id; + const issueNumberForComment = payload?.issue?.number; if (!commentId) { core.setFailed(`${ERR_VALIDATION}: Comment ID not found in event payload`); return; @@ -89,7 +92,7 @@ async function main() { } case "pull_request": { - const prNumber = context.payload?.pull_request?.number; + const prNumber = payload?.pull_request?.number; if (!prNumber) { core.setFailed(`${ERR_NOT_FOUND}: Pull request number not found in event payload`); return; @@ -101,8 +104,8 @@ async function main() { } case "pull_request_review_comment": { - const reviewCommentId = context.payload?.comment?.id; - const prNumberForReviewComment = context.payload?.pull_request?.number; + const reviewCommentId = payload?.comment?.id; + const prNumberForReviewComment = payload?.pull_request?.number; if (!reviewCommentId) { core.setFailed(`${ERR_VALIDATION}: Review comment ID not found in event payload`); return; @@ -118,7 +121,7 @@ async function main() { } case "discussion": { - const discussionNumber = context.payload?.discussion?.number; + const discussionNumber = payload?.discussion?.number; if (!discussionNumber) { core.setFailed(`${ERR_NOT_FOUND}: Discussion number not found in event payload`); return; @@ -131,13 +134,13 @@ async function main() { } case "discussion_comment": { - const discussionCommentNumber = context.payload?.discussion?.number; - const discussionCommentId = context.payload?.comment?.id; + const discussionCommentNumber = payload?.discussion?.number; + const discussionCommentId = payload?.comment?.id; if (!discussionCommentNumber || !discussionCommentId) { core.setFailed(`${ERR_NOT_FOUND}: Discussion or comment information not found in event payload`); return; } - const commentNodeId = context.payload?.comment?.node_id; + const commentNodeId = payload?.comment?.node_id; if (!commentNodeId) { core.setFailed(`${ERR_NOT_FOUND}: Discussion comment node ID not found in event payload`); return; @@ -163,7 +166,7 @@ async function main() { if (commentUpdateEndpoint) { core.info(`Comment endpoint: ${commentUpdateEndpoint}`); - await addCommentWithWorkflowLink(commentUpdateEndpoint, runUrl, eventName); + await addCommentWithWorkflowLink(commentUpdateEndpoint, runUrl, eventName, invocationContext); } } catch (error) { const errorMessage = getErrorMessage(error); @@ -270,15 +273,16 @@ async function getDiscussionId(owner, repo, discussionNumber) { * Helper function to set comment outputs * @param {string} commentId - The comment ID * @param {string} commentUrl - The comment URL + * @param {{ owner: string, repo: string }} [eventRepo=context.repo] - Repository where the comment was created */ -function setCommentOutputs(commentId, commentUrl) { +function setCommentOutputs(commentId, commentUrl, eventRepo = context.repo) { core.info(`Successfully created comment with workflow link`); core.info(`Comment ID: ${commentId}`); core.info(`Comment URL: ${commentUrl}`); - core.info(`Comment Repo: ${context.repo.owner}/${context.repo.repo}`); + core.info(`Comment Repo: ${eventRepo.owner}/${eventRepo.repo}`); core.setOutput("comment-id", commentId); core.setOutput("comment-url", commentUrl); - core.setOutput("comment-repo", `${context.repo.owner}/${context.repo.repo}`); + core.setOutput("comment-repo", `${eventRepo.owner}/${eventRepo.repo}`); } /** @@ -286,8 +290,11 @@ function setCommentOutputs(commentId, commentUrl) { * @param {string} endpoint - The GitHub API endpoint to create the comment (or special format for discussions) * @param {string} runUrl - The URL of the workflow run * @param {string} eventName - The event type (to determine the comment text) + * @param {{ eventPayload?: any, eventRepo?: { owner: string, repo: string } } | null} [invocationContext=null] - Resolved invocation event context */ -async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { +async function addCommentWithWorkflowLink(endpoint, runUrl, eventName, invocationContext = null) { + const eventPayload = invocationContext?.eventPayload || context.payload; + const eventRepo = invocationContext?.eventRepo || context.repo; try { const workflowName = process.env.GH_AW_WORKFLOW_NAME || "Workflow"; const eventTypeDescription = EVENT_TYPE_DESCRIPTIONS[eventName] ?? "event"; @@ -316,7 +323,7 @@ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { if (eventName === "discussion") { // Parse discussion number from special format: "discussion:NUMBER" const discussionNumber = parseInt(endpoint.split(":")[1], 10); - const { id: discussionId } = await getDiscussionId(context.repo.owner, context.repo.repo, discussionNumber); + const { id: discussionId } = await getDiscussionId(eventRepo.owner, eventRepo.repo, discussionNumber); const result = await github.graphql( ` @@ -332,17 +339,17 @@ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { ); const comment = result.addDiscussionComment.comment; - setCommentOutputs(comment.id, comment.url); + setCommentOutputs(comment.id, comment.url, eventRepo); return; } else if (eventName === "discussion_comment") { // Parse discussion number from special format: "discussion_comment:NUMBER:COMMENT_ID" const discussionNumber = parseInt(endpoint.split(":")[1], 10); - const { id: discussionId } = await getDiscussionId(context.repo.owner, context.repo.repo, discussionNumber); + const { id: discussionId } = await getDiscussionId(eventRepo.owner, eventRepo.repo, discussionNumber); // Get the comment node ID to use as the parent for threading. // GitHub Discussions only supports two nesting levels, so if the triggering comment is // itself a reply, we resolve the top-level parent's node ID. - const commentNodeId = await resolveTopLevelDiscussionCommentId(github, context.payload?.comment?.node_id); + const commentNodeId = await resolveTopLevelDiscussionCommentId(github, eventPayload?.comment?.node_id); const result = await github.graphql( ` @@ -358,7 +365,7 @@ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { ); const comment = result.addDiscussionComment.comment; - setCommentOutputs(comment.id, comment.url); + setCommentOutputs(comment.id, comment.url, eventRepo); return; } @@ -370,7 +377,7 @@ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName) { }, }); - setCommentOutputs(createResponse.data.id.toString(), createResponse.data.html_url); + setCommentOutputs(createResponse.data.id.toString(), createResponse.data.html_url, eventRepo); } catch (error) { // Don't fail the entire job if comment creation fails - just log it const errorMessage = getErrorMessage(error); diff --git a/actions/setup/js/add_reaction_and_edit_comment.test.cjs b/actions/setup/js/add_reaction_and_edit_comment.test.cjs index f9d700308a6..ec2125d4f20 100644 --- a/actions/setup/js/add_reaction_and_edit_comment.test.cjs +++ b/actions/setup/js/add_reaction_and_edit_comment.test.cjs @@ -187,6 +187,33 @@ describe("add_reaction_and_edit_comment.cjs", () => { }); }); + describe("repository_dispatch reactions", () => { + it("should use workflow repo for run URL and event repo for reaction/comment APIs", async () => { + process.env.GH_AW_REACTION = "eyes"; + global.context = { + eventName: "repository_dispatch", + runId: 12345, + repo: { owner: "sideowner", repo: "siderepo" }, + payload: { + action: "issue_comment", + client_payload: { + issue: { number: 123 }, + comment: { id: 456 }, + repository: { owner: { login: "targetowner" }, name: "targetrepo" }, + }, + }, + }; + mockGithub.request.mockResolvedValueOnce({ data: { id: 111 } }).mockResolvedValueOnce({ data: { id: 789, html_url: "https://github.com/targetowner/targetrepo/issues/123#issuecomment-789" } }); + + const { main } = await loadModule(); + await main(); + + expect(mockGithub.request).toHaveBeenCalledWith("POST /repos/targetowner/targetrepo/issues/comments/456/reactions", expect.objectContaining({ content: "eyes" })); + expect(mockGithub.request).toHaveBeenCalledWith("POST /repos/targetowner/targetrepo/issues/123/comments", expect.objectContaining({ body: expect.stringContaining("https://github.com/sideowner/siderepo/actions/runs/12345") })); + expect(mockCore.setOutput).toHaveBeenCalledWith("comment-repo", "targetowner/targetrepo"); + }); + }); + describe("Pull request review comment reactions", () => { it("should create new comment for pull_request_review_comment event (not edit)", async () => { process.env.GH_AW_REACTION = "rocket"; diff --git a/actions/setup/js/add_workflow_run_comment.cjs b/actions/setup/js/add_workflow_run_comment.cjs index bf4c38e9ff4..ffa5ddd03fc 100644 --- a/actions/setup/js/add_workflow_run_comment.cjs +++ b/actions/setup/js/add_workflow_run_comment.cjs @@ -27,6 +27,7 @@ const EVENT_TYPE_DESCRIPTIONS = { /** * Helper function to get discussion node ID via GraphQL * @param {number} discussionNumber - The discussion number + * @param {{ owner: string, repo: string }} [eventRepo=context.repo] - Repository where the discussion event occurred * @returns {Promise} The discussion node ID */ async function getDiscussionNodeId(discussionNumber, eventRepo = context.repo) { @@ -48,6 +49,7 @@ async function getDiscussionNodeId(discussionNumber, eventRepo = context.repo) { * Helper function to set comment outputs * @param {string|number} commentId - The comment ID * @param {string} commentUrl - The comment URL + * @param {{ owner: string, repo: string }} [eventRepo=context.repo] - Repository where the comment was created */ function setCommentOutputs(commentId, commentUrl, eventRepo = context.repo) { core.info(`Successfully created comment with workflow link`); @@ -188,6 +190,7 @@ function buildCommentBody(eventName, runUrl) { * @param {number} discussionNumber - The discussion number * @param {string} commentBody - The comment body * @param {string|null} replyToNodeId - Parent comment node ID for threading (null for top-level) + * @param {{ owner: string, repo: string }} [eventRepo=context.repo] - Repository where the discussion exists */ async function postDiscussionComment(discussionNumber, commentBody, replyToNodeId = null, eventRepo = context.repo) { const discussionId = await getDiscussionNodeId(discussionNumber, eventRepo); diff --git a/actions/setup/js/invocation_context_helpers.cjs b/actions/setup/js/invocation_context_helpers.cjs index 865a1e4602c..9c1b18363b4 100644 --- a/actions/setup/js/invocation_context_helpers.cjs +++ b/actions/setup/js/invocation_context_helpers.cjs @@ -1,6 +1,8 @@ // @ts-check /// +const { parseRepoSlug: parseSharedRepoSlug } = require("./repo_helpers.cjs"); + /** * @typedef {{ owner: string, repo: string }} RepoRef */ @@ -20,12 +22,7 @@ function parseRepoSlug(value) { return null; } - const parts = trimmed.split("/"); - if (parts.length !== 2 || !parts[0] || !parts[1]) { - return null; - } - - return { owner: parts[0], repo: parts[1] }; + return parseSharedRepoSlug(trimmed); } /** diff --git a/actions/setup/js/update_activation_comment.cjs b/actions/setup/js/update_activation_comment.cjs index ec7cceef0cc..cfa250ce20b 100644 --- a/actions/setup/js/update_activation_comment.cjs +++ b/actions/setup/js/update_activation_comment.cjs @@ -10,6 +10,7 @@ const { generateXMLMarker } = require("./generate_footer.cjs"); const { getFooterMessage, getDetectionCautionAlert } = require("./messages_footer.cjs"); const { buildWorkflowRunUrl } = require("./workflow_metadata_helpers.cjs"); const { resolveTopLevelDiscussionCommentId } = require("./github_api_helpers.cjs"); +const { resolveInvocationContext } = require("./invocation_context_helpers.cjs"); /** * Update the activation comment with a link to the created pull request or issue @@ -23,7 +24,8 @@ const { resolveTopLevelDiscussionCommentId } = require("./github_api_helpers.cjs async function updateActivationComment(github, context, core, itemUrl, itemNumber, itemType = "pull_request") { const itemLabel = itemType === "issue" ? "issue" : "pull request"; const workflowName = process.env.GH_AW_WORKFLOW_NAME || "Workflow"; - const runUrl = buildWorkflowRunUrl(context, context.repo); + const invocationContext = resolveInvocationContext(context); + const runUrl = buildWorkflowRunUrl(context, invocationContext.workflowRepo); const body = itemType === "issue" ? getIssueCreatedMessage({ itemNumber, itemUrl }) : getPullRequestCreatedMessage({ itemNumber, itemUrl }); const footerMessage = getFooterMessage({ workflowName, runUrl }); const detectionCaution = getDetectionCautionAlert(workflowName, runUrl); @@ -45,7 +47,8 @@ async function updateActivationComment(github, context, core, itemUrl, itemNumbe async function updateActivationCommentWithCommit(github, context, core, commitSha, commitUrl, options = {}) { const shortSha = commitSha.substring(0, 7); const workflowName = process.env.GH_AW_WORKFLOW_NAME || "Workflow"; - const runUrl = buildWorkflowRunUrl(context, context.repo); + const invocationContext = resolveInvocationContext(context); + const runUrl = buildWorkflowRunUrl(context, invocationContext.workflowRepo); const footerMessage = getFooterMessage({ workflowName, runUrl }); const detectionCaution = getDetectionCautionAlert(workflowName, runUrl); const cautionSection = detectionCaution ? `${detectionCaution}\n\n` : ""; diff --git a/actions/setup/js/update_activation_comment.test.cjs b/actions/setup/js/update_activation_comment.test.cjs index b9cce90de8c..17a9aef997d 100644 --- a/actions/setup/js/update_activation_comment.test.cjs +++ b/actions/setup/js/update_activation_comment.test.cjs @@ -104,6 +104,17 @@ const createTestableFunction = scriptContent => { }, }; } + if (module === "./invocation_context_helpers.cjs") { + return { + resolveInvocationContext: ctx => ({ + source: "native", + eventName: ctx.eventName || "", + eventPayload: ctx.payload || {}, + workflowRepo: ctx.workflowRepo || ctx.repo, + eventRepo: ctx.eventRepo || ctx.repo, + }), + }; + } throw new Error(`Module ${module} not mocked in test`); }; return new Function( From b3bc6e0ac5955b6d263446ea49423666c84c943e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 00:59:12 +0000 Subject: [PATCH 6/7] test: clarify fallback docs and add workflowRepo attribution coverage Agent-Logs-Url: https://github.com/github/gh-aw/sessions/f10b710f-a4c6-4913-b71b-38e4205e3114 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .../js/add_reaction_and_edit_comment.cjs | 2 +- .../js/update_activation_comment.test.cjs | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/actions/setup/js/add_reaction_and_edit_comment.cjs b/actions/setup/js/add_reaction_and_edit_comment.cjs index d917d7297b9..43888ecf6dc 100644 --- a/actions/setup/js/add_reaction_and_edit_comment.cjs +++ b/actions/setup/js/add_reaction_and_edit_comment.cjs @@ -290,7 +290,7 @@ function setCommentOutputs(commentId, commentUrl, eventRepo = context.repo) { * @param {string} endpoint - The GitHub API endpoint to create the comment (or special format for discussions) * @param {string} runUrl - The URL of the workflow run * @param {string} eventName - The event type (to determine the comment text) - * @param {{ eventPayload?: any, eventRepo?: { owner: string, repo: string } } | null} [invocationContext=null] - Resolved invocation event context + * @param {{ eventPayload?: any, eventRepo?: { owner: string, repo: string } } | null} [invocationContext=null] - Resolved invocation event context. When omitted, falls back to global context payload/repo. */ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName, invocationContext = null) { const eventPayload = invocationContext?.eventPayload || context.payload; diff --git a/actions/setup/js/update_activation_comment.test.cjs b/actions/setup/js/update_activation_comment.test.cjs index 17a9aef997d..6f3e74b9580 100644 --- a/actions/setup/js/update_activation_comment.test.cjs +++ b/actions/setup/js/update_activation_comment.test.cjs @@ -156,6 +156,29 @@ describe("update_activation_comment.cjs", () => { ); expect(mockDependencies.core.info).toHaveBeenCalledWith("Successfully created comment with pull request link on #10"); }), + it("should use workflowRepo for run attribution in footer when context includes workflowRepo", async () => { + mockDependencies.process.env.GH_AW_COMMENT_ID = ""; + mockDependencies.context = { + ...mockDependencies.context, + runId: 12345, + repo: { owner: "targetowner", repo: "targetrepo" }, + workflowRepo: { owner: "sideowner", repo: "siderepo" }, + payload: { pull_request: { number: 10 } }, + }; + mockDependencies.github.request.mockResolvedValue({ + data: { id: 123, html_url: "https://github.com/targetowner/targetrepo/issues/10#issuecomment-123" }, + }); + + const { updateActivationComment } = createFunctionFromScript(mockDependencies); + await updateActivationComment(mockDependencies.github, mockDependencies.context, mockDependencies.core, "https://github.com/targetowner/targetrepo/pull/42", 42); + + expect(mockDependencies.github.request).toHaveBeenCalledWith( + "POST /repos/{owner}/{repo}/issues/{issue_number}/comments", + expect.objectContaining({ + body: expect.stringContaining("https://github.com/sideowner/siderepo/actions/runs/12345"), + }) + ); + }), it("should skip update when GH_AW_COMMENT_ID is not set and no target issue number", async () => { mockDependencies.process.env.GH_AW_COMMENT_ID = ""; const { updateActivationCommentWithMessage } = createFunctionFromScript(mockDependencies); From 9059ec7763ff0261bcc466c8a0233b0e6269aced Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 01:12:53 +0000 Subject: [PATCH 7/7] Agent-Logs-Url: https://github.com/github/gh-aw/sessions/f10b710f-a4c6-4913-b71b-38e4205e3114 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .../js/add_reaction_and_edit_comment.cjs | 8 ++- actions/setup/js/add_workflow_run_comment.cjs | 6 +-- .../js/update_activation_comment.test.cjs | 54 ++++++++++++++++--- 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/actions/setup/js/add_reaction_and_edit_comment.cjs b/actions/setup/js/add_reaction_and_edit_comment.cjs index 43888ecf6dc..aaa76782953 100644 --- a/actions/setup/js/add_reaction_and_edit_comment.cjs +++ b/actions/setup/js/add_reaction_and_edit_comment.cjs @@ -290,7 +290,13 @@ function setCommentOutputs(commentId, commentUrl, eventRepo = context.repo) { * @param {string} endpoint - The GitHub API endpoint to create the comment (or special format for discussions) * @param {string} runUrl - The URL of the workflow run * @param {string} eventName - The event type (to determine the comment text) - * @param {{ eventPayload?: any, eventRepo?: { owner: string, repo: string } } | null} [invocationContext=null] - Resolved invocation event context. When omitted, falls back to global context payload/repo. + * @param {{ + * source?: "native" | "workflow_dispatch" | "repository_dispatch", + * eventName?: string, + * eventPayload?: any, + * workflowRepo?: { owner: string, repo: string }, + * eventRepo?: { owner: string, repo: string } + * } | null} [invocationContext=null] - Resolved invocation event context. When omitted, falls back to global context payload/repo. */ async function addCommentWithWorkflowLink(endpoint, runUrl, eventName, invocationContext = null) { const eventPayload = invocationContext?.eventPayload || context.payload; diff --git a/actions/setup/js/add_workflow_run_comment.cjs b/actions/setup/js/add_workflow_run_comment.cjs index ffa5ddd03fc..24069173d60 100644 --- a/actions/setup/js/add_workflow_run_comment.cjs +++ b/actions/setup/js/add_workflow_run_comment.cjs @@ -27,7 +27,7 @@ const EVENT_TYPE_DESCRIPTIONS = { /** * Helper function to get discussion node ID via GraphQL * @param {number} discussionNumber - The discussion number - * @param {{ owner: string, repo: string }} [eventRepo=context.repo] - Repository where the discussion event occurred + * @param {{ owner: string, repo: string }} [eventRepo] - Repository where the discussion event occurred (defaults to context.repo at runtime) * @returns {Promise} The discussion node ID */ async function getDiscussionNodeId(discussionNumber, eventRepo = context.repo) { @@ -49,7 +49,7 @@ async function getDiscussionNodeId(discussionNumber, eventRepo = context.repo) { * Helper function to set comment outputs * @param {string|number} commentId - The comment ID * @param {string} commentUrl - The comment URL - * @param {{ owner: string, repo: string }} [eventRepo=context.repo] - Repository where the comment was created + * @param {{ owner: string, repo: string }} [eventRepo] - Repository where the comment was created (defaults to context.repo at runtime) */ function setCommentOutputs(commentId, commentUrl, eventRepo = context.repo) { core.info(`Successfully created comment with workflow link`); @@ -190,7 +190,7 @@ function buildCommentBody(eventName, runUrl) { * @param {number} discussionNumber - The discussion number * @param {string} commentBody - The comment body * @param {string|null} replyToNodeId - Parent comment node ID for threading (null for top-level) - * @param {{ owner: string, repo: string }} [eventRepo=context.repo] - Repository where the discussion exists + * @param {{ owner: string, repo: string }} [eventRepo] - Repository where the discussion exists (defaults to context.repo at runtime) */ async function postDiscussionComment(discussionNumber, commentBody, replyToNodeId = null, eventRepo = context.repo) { const discussionId = await getDiscussionNodeId(discussionNumber, eventRepo); diff --git a/actions/setup/js/update_activation_comment.test.cjs b/actions/setup/js/update_activation_comment.test.cjs index 6f3e74b9580..ffe4a30b8ea 100644 --- a/actions/setup/js/update_activation_comment.test.cjs +++ b/actions/setup/js/update_activation_comment.test.cjs @@ -106,13 +106,53 @@ const createTestableFunction = scriptContent => { } if (module === "./invocation_context_helpers.cjs") { return { - resolveInvocationContext: ctx => ({ - source: "native", - eventName: ctx.eventName || "", - eventPayload: ctx.payload || {}, - workflowRepo: ctx.workflowRepo || ctx.repo, - eventRepo: ctx.eventRepo || ctx.repo, - }), + resolveInvocationContext: ctx => { + if (ctx?.eventName === "repository_dispatch" && ctx?.payload?.client_payload) { + const payload = ctx.payload.client_payload; + const eventRepo = payload?.repository?.owner?.login && payload?.repository?.name ? { owner: payload.repository.owner.login, repo: payload.repository.name } : ctx.eventRepo || ctx.repo; + return { + source: "repository_dispatch", + eventName: ctx.payload.action || ctx.eventName, + eventPayload: payload, + workflowRepo: ctx.workflowRepo || ctx.repo, + eventRepo, + }; + } + + if (ctx?.eventName === "workflow_dispatch" && ctx?.payload?.inputs) { + const inputs = ctx.payload.inputs; + let parsedPayload = ctx.payload; + if (typeof inputs.event_payload === "string" && inputs.event_payload) { + try { + parsedPayload = JSON.parse(inputs.event_payload); + } catch (_error) { + parsedPayload = ctx.payload; + } + } + const eventRepo = + typeof inputs.event_repo === "string" && inputs.event_repo.includes("/") + ? (() => { + const [owner, repo] = inputs.event_repo.split("/"); + return { owner, repo }; + })() + : ctx.eventRepo || ctx.repo; + return { + source: "workflow_dispatch", + eventName: inputs.event_name || ctx.eventName, + eventPayload: parsedPayload, + workflowRepo: ctx.workflowRepo || ctx.repo, + eventRepo, + }; + } + + return { + source: "native", + eventName: ctx?.eventName || "", + eventPayload: ctx?.payload || {}, + workflowRepo: ctx?.workflowRepo || ctx?.repo, + eventRepo: ctx?.eventRepo || ctx?.repo, + }; + }, }; } throw new Error(`Module ${module} not mocked in test`);