From 7c5d602605847a442faaa3e4a43b5b112fc0a1ea Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 22:39:00 +0000 Subject: [PATCH 1/7] Initial plan From 4177ec38f1ed4fa1c2035996bde107d8d0166005 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 23:09:16 +0000 Subject: [PATCH 2/7] chore: outline plan for base_branch safe-output fix Agent-Logs-Url: https://github.com/github/gh-aw/sessions/120b88c0-60cb-4f0f-8c75-730a8a965c60 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 67a071ea5e..45a4a41ce7 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 6358255848..4ec1d5f925 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 fa8a5510cb..1f5be47143 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 29f2bdbfaa..88f28dd807 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 143b2e1c74..3e5a158263 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 085ba8bbcd..84961ebcc6 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 753cabc75c..79e2f594a9 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 729b4851c9..c75398c5e8 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 0aa2b54365..462ac5f2ac 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 8bbda77b49..f38f0fbff0 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 529fd4befb..7932052236 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 4d06aa8712..c4f178c5dd 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 35f8664df9..ad69d7baef 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 5506e22a74..fffe51a5ff 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 249733abe6..aee27471ea 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 40b85850fe..1b5d386fd2 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 69255e24fe..a8a7e3d224 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 3dc5143c78..b026bbfbbb 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 f1eeecbe8d..d0e4492dbe 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 1eed7cd93e..d8f572c1c4 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 a50920c40d..3a8ccf2684 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 44314c019e..702c76e441 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 21a77e58c2..97c6321833 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 5e8ac12b3b..5207d52a25 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 ece8c723e7..35c3d049cd 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 17dcabc704..1c58796a56 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 9eecb763a5..ef8c9a5228 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 c9cc51bc70..3f9f567512 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 481c69995b..0a30120e5b 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 c8effcf086..0e6c690b24 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 1369cef304..f4c9eb731d 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 dd47a0c34e..68b458e438 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 590650c766..ee641af905 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 9398b6a55b..25da79eee4 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 8fd36552ae..bc33ef88b3 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 4d6da12748..cb4819d8db 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 57d3f50e59..7034ccd99c 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 5015965096..48784451ae 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 6589db8626..259f0b857d 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 fc3e312e2e..19c54bd0f2 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 68ebad2443..684e610990 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 5c4f21dcdd..a221da88de 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 bb906909e01d7033242babb23a77ba301df8c5b6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 23:21:20 +0000 Subject: [PATCH 3/7] fix: honor create_pull_request base_branch in safe output patch generation Agent-Logs-Url: https://github.com/github/gh-aw/sessions/120b88c0-60cb-4f0f-8c75-730a8a965c60 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/safe_outputs_handlers.cjs | 3 +- .../setup/js/safe_outputs_handlers.test.cjs | 31 +++++++++++++++++++ 44 files changed, 35 insertions(+), 214 deletions(-) diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 45a4a41ce7..67a071ea5e 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 4ec1d5f925..6358255848 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 1f5be47143..fa8a5510cb 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 88f28dd807..29f2bdbfaa 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 3e5a158263..143b2e1c74 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 84961ebcc6..085ba8bbcd 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 79e2f594a9..753cabc75c 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 c75398c5e8..729b4851c9 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 462ac5f2ac..0aa2b54365 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 f38f0fbff0..8bbda77b49 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 7932052236..529fd4befb 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 c4f178c5dd..4d06aa8712 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 ad69d7baef..35f8664df9 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 fffe51a5ff..5506e22a74 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 aee27471ea..249733abe6 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 1b5d386fd2..40b85850fe 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 a8a7e3d224..69255e24fe 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 b026bbfbbb..3dc5143c78 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 d0e4492dbe..f1eeecbe8d 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 d8f572c1c4..1eed7cd93e 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 3a8ccf2684..a50920c40d 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 702c76e441..44314c019e 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 97c6321833..21a77e58c2 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 5207d52a25..5e8ac12b3b 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 35c3d049cd..ece8c723e7 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 1c58796a56..17dcabc704 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 ef8c9a5228..9eecb763a5 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 3f9f567512..c9cc51bc70 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 0a30120e5b..481c69995b 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 0e6c690b24..c8effcf086 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 f4c9eb731d..1369cef304 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 68b458e438..dd47a0c34e 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 ee641af905..590650c766 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 25da79eee4..9398b6a55b 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 bc33ef88b3..8fd36552ae 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 cb4819d8db..4d6da12748 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 7034ccd99c..57d3f50e59 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 48784451ae..5015965096 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 259f0b857d..6589db8626 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 19c54bd0f2..fc3e312e2e 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 684e610990..68ebad2443 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 a221da88de..5c4f21dcdd 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/safe_outputs_handlers.cjs b/actions/setup/js/safe_outputs_handlers.cjs index 2030d36b44..ea86e46150 100644 --- a/actions/setup/js/safe_outputs_handlers.cjs +++ b/actions/setup/js/safe_outputs_handlers.cjs @@ -238,7 +238,8 @@ function createHandlers(server, appendSafeOutput, config = {}) { const { repoParts } = repoResult; // Get base branch for the resolved target repository - const baseBranch = await getBaseBranch(repoParts); + // Prefer explicit safe-output config value when provided. + const baseBranch = prConfig.base_branch || (await getBaseBranch(repoParts)); // Determine the working directory for git operations // If repo is specified, find where it's checked out diff --git a/actions/setup/js/safe_outputs_handlers.test.cjs b/actions/setup/js/safe_outputs_handlers.test.cjs index acac185b6a..8b09d67d49 100644 --- a/actions/setup/js/safe_outputs_handlers.test.cjs +++ b/actions/setup/js/safe_outputs_handlers.test.cjs @@ -70,6 +70,8 @@ describe("safe_outputs_handlers", () => { delete process.env.GITHUB_WORKSPACE; delete process.env.GITHUB_SERVER_URL; delete process.env.GITHUB_REPOSITORY; + delete process.env.GITHUB_BASE_REF; + delete process.env.GITHUB_REF_NAME; delete process.env.GH_AW_ASSETS_BRANCH; delete process.env.GH_AW_ASSETS_MAX_SIZE_KB; delete process.env.GH_AW_ASSETS_ALLOWED_EXTS; @@ -512,6 +514,35 @@ describe("safe_outputs_handlers", () => { const responseData = JSON.parse(result.content[0].text); expect(responseData.error).not.toContain("not found in workspace"); }); + + it("should prefer configured base_branch over trigger context base ref", async () => { + handlers = createHandlers(mockServer, mockAppendSafeOutput, { + create_pull_request: { + allow_empty: true, + base_branch: "main", + }, + }); + + process.env.GITHUB_BASE_REF = "master"; + process.env.GITHUB_REF_NAME = "feature/test-change"; + + const result = await handlers.createPullRequestHandler({ + branch: "main", + title: "Test PR", + body: "Test description", + }); + + expect(result.isError).toBeUndefined(); + const responseData = JSON.parse(result.content[0].text); + expect(responseData.result).toBe("success"); + expect(responseData.branch).toBe("feature/test-change"); + expect(mockAppendSafeOutput).toHaveBeenCalledWith( + expect.objectContaining({ + type: "create_pull_request", + branch: "feature/test-change", + }) + ); + }); }); describe("pushToPullRequestBranchHandler", () => { From 42ef4177a8503e99094270c21a7e20ac83bb452a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 23:36:20 +0000 Subject: [PATCH 4/7] test: strengthen base_branch precedence coverage in safe output handler Agent-Logs-Url: https://github.com/github/gh-aw/sessions/120b88c0-60cb-4f0f-8c75-730a8a965c60 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/safe_outputs_handlers.cjs | 5 ++- .../setup/js/safe_outputs_handlers.test.cjs | 41 ++++++++++--------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/actions/setup/js/safe_outputs_handlers.cjs b/actions/setup/js/safe_outputs_handlers.cjs index ea86e46150..710744b1bd 100644 --- a/actions/setup/js/safe_outputs_handlers.cjs +++ b/actions/setup/js/safe_outputs_handlers.cjs @@ -237,8 +237,9 @@ function createHandlers(server, appendSafeOutput, config = {}) { } const { repoParts } = repoResult; - // Get base branch for the resolved target repository - // Prefer explicit safe-output config value when provided. + // Get base branch for the resolved target repository. + // Prefer explicit safe-output config value when provided, otherwise fall back + // to dynamic resolution from trigger context/default branch. const baseBranch = prConfig.base_branch || (await getBaseBranch(repoParts)); // Determine the working directory for git operations diff --git a/actions/setup/js/safe_outputs_handlers.test.cjs b/actions/setup/js/safe_outputs_handlers.test.cjs index 8b09d67d49..fa128edcec 100644 --- a/actions/setup/js/safe_outputs_handlers.test.cjs +++ b/actions/setup/js/safe_outputs_handlers.test.cjs @@ -70,8 +70,6 @@ describe("safe_outputs_handlers", () => { delete process.env.GITHUB_WORKSPACE; delete process.env.GITHUB_SERVER_URL; delete process.env.GITHUB_REPOSITORY; - delete process.env.GITHUB_BASE_REF; - delete process.env.GITHUB_REF_NAME; delete process.env.GH_AW_ASSETS_BRANCH; delete process.env.GH_AW_ASSETS_MAX_SIZE_KB; delete process.env.GH_AW_ASSETS_ALLOWED_EXTS; @@ -525,23 +523,28 @@ describe("safe_outputs_handlers", () => { process.env.GITHUB_BASE_REF = "master"; process.env.GITHUB_REF_NAME = "feature/test-change"; - - const result = await handlers.createPullRequestHandler({ - branch: "main", - title: "Test PR", - body: "Test description", - }); - - expect(result.isError).toBeUndefined(); - const responseData = JSON.parse(result.content[0].text); - expect(responseData.result).toBe("success"); - expect(responseData.branch).toBe("feature/test-change"); - expect(mockAppendSafeOutput).toHaveBeenCalledWith( - expect.objectContaining({ - type: "create_pull_request", - branch: "feature/test-change", - }) - ); + try { + const result = await handlers.createPullRequestHandler({ + branch: "main", + title: "Test PR", + body: "Test description", + }); + + expect(result.isError).toBeUndefined(); + const responseData = JSON.parse(result.content[0].text); + expect(responseData.result).toBe("success"); + expect(responseData.branch).toBe("feature/test-change"); + expect(mockServer.debug).toHaveBeenCalledWith(expect.stringContaining("Branch equals base branch (main)")); + expect(mockAppendSafeOutput).toHaveBeenCalledWith( + expect.objectContaining({ + type: "create_pull_request", + branch: "feature/test-change", + }) + ); + } finally { + delete process.env.GITHUB_BASE_REF; + delete process.env.GITHUB_REF_NAME; + } }); }); From d91091a4de336c07f04b17c1b14c61d72e57838f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 00:20:24 +0000 Subject: [PATCH 5/7] chore: plan merge-main follow-up Agent-Logs-Url: https://github.com/github/gh-aw/sessions/1665f7da-8f8d-4fee-980c-14e865a26507 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 67a071ea5e..45a4a41ce7 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 6358255848..4ec1d5f925 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 fa8a5510cb..1f5be47143 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 29f2bdbfaa..88f28dd807 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 143b2e1c74..3e5a158263 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 085ba8bbcd..84961ebcc6 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 753cabc75c..79e2f594a9 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 729b4851c9..c75398c5e8 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 0aa2b54365..462ac5f2ac 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 8bbda77b49..f38f0fbff0 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 529fd4befb..7932052236 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 4d06aa8712..c4f178c5dd 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 35f8664df9..ad69d7baef 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 5506e22a74..fffe51a5ff 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 249733abe6..aee27471ea 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 40b85850fe..1b5d386fd2 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 69255e24fe..a8a7e3d224 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 3dc5143c78..b026bbfbbb 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 f1eeecbe8d..d0e4492dbe 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 1eed7cd93e..d8f572c1c4 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 a50920c40d..3a8ccf2684 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 44314c019e..702c76e441 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 21a77e58c2..97c6321833 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 5e8ac12b3b..5207d52a25 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 ece8c723e7..35c3d049cd 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 17dcabc704..1c58796a56 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 9eecb763a5..ef8c9a5228 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 c9cc51bc70..3f9f567512 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 481c69995b..0a30120e5b 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 c8effcf086..0e6c690b24 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 1369cef304..f4c9eb731d 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 dd47a0c34e..68b458e438 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 590650c766..ee641af905 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 9398b6a55b..25da79eee4 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 8fd36552ae..bc33ef88b3 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 4d6da12748..cb4819d8db 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 57d3f50e59..7034ccd99c 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 5015965096..48784451ae 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 6589db8626..259f0b857d 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 fc3e312e2e..19c54bd0f2 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 68ebad2443..684e610990 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 5c4f21dcdd..a221da88de 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 f5701ad6f8fc46ebecbf4444d9f153f8bd7bf436 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 00:37:51 +0000 Subject: [PATCH 6/7] fix: validate configured safe-output base_branch and merge main Agent-Logs-Url: https://github.com/github/gh-aw/sessions/1665f7da-8f8d-4fee-980c-14e865a26507 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/safe_outputs_handlers.cjs | 51 ++++++++++++++++++- .../setup/js/safe_outputs_handlers.test.cjs | 44 ++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/actions/setup/js/safe_outputs_handlers.cjs b/actions/setup/js/safe_outputs_handlers.cjs index 710744b1bd..5413813b54 100644 --- a/actions/setup/js/safe_outputs_handlers.cjs +++ b/actions/setup/js/safe_outputs_handlers.cjs @@ -240,7 +240,56 @@ function createHandlers(server, appendSafeOutput, config = {}) { // Get base branch for the resolved target repository. // Prefer explicit safe-output config value when provided, otherwise fall back // to dynamic resolution from trigger context/default branch. - const baseBranch = prConfig.base_branch || (await getBaseBranch(repoParts)); + let baseBranch = null; + if (prConfig.base_branch !== undefined && prConfig.base_branch !== null) { + if (typeof prConfig.base_branch !== "string") { + return { + content: [ + { + type: "text", + text: JSON.stringify({ + result: "error", + error: `Invalid create_pull_request.base_branch: expected string, got ${typeof prConfig.base_branch}`, + }), + }, + ], + isError: true, + }; + } + + const normalizedConfigBase = normalizeBranchName(prConfig.base_branch); + if (!normalizedConfigBase) { + return { + content: [ + { + type: "text", + text: JSON.stringify({ + result: "error", + error: `Invalid create_pull_request.base_branch: sanitization resulted in empty string (original: "${prConfig.base_branch}")`, + }), + }, + ], + isError: true, + }; + } + if (prConfig.base_branch !== normalizedConfigBase) { + return { + content: [ + { + type: "text", + text: JSON.stringify({ + result: "error", + error: `Invalid create_pull_request.base_branch: contains invalid characters (original: "${prConfig.base_branch}", normalized: "${normalizedConfigBase}")`, + }), + }, + ], + isError: true, + }; + } + baseBranch = prConfig.base_branch; + } else { + baseBranch = await getBaseBranch(repoParts); + } // Determine the working directory for git operations // If repo is specified, find where it's checked out diff --git a/actions/setup/js/safe_outputs_handlers.test.cjs b/actions/setup/js/safe_outputs_handlers.test.cjs index fa128edcec..964e6b7be5 100644 --- a/actions/setup/js/safe_outputs_handlers.test.cjs +++ b/actions/setup/js/safe_outputs_handlers.test.cjs @@ -546,6 +546,50 @@ describe("safe_outputs_handlers", () => { delete process.env.GITHUB_REF_NAME; } }); + + it("should return a clear error when configured base_branch is not a string", async () => { + handlers = createHandlers(mockServer, mockAppendSafeOutput, { + create_pull_request: { + allow_empty: true, + base_branch: 123, + }, + }); + + const result = await handlers.createPullRequestHandler({ + branch: "feature/test-change", + title: "Test PR", + body: "Test description", + }); + + expect(result.isError).toBe(true); + const responseData = JSON.parse(result.content[0].text); + expect(responseData.result).toBe("error"); + expect(responseData.error).toContain("Invalid create_pull_request.base_branch"); + expect(responseData.error).toContain("expected string"); + expect(mockAppendSafeOutput).not.toHaveBeenCalled(); + }); + + it("should return a clear error when configured base_branch contains invalid characters", async () => { + handlers = createHandlers(mockServer, mockAppendSafeOutput, { + create_pull_request: { + allow_empty: true, + base_branch: "main;rm -rf", + }, + }); + + const result = await handlers.createPullRequestHandler({ + branch: "feature/test-change", + title: "Test PR", + body: "Test description", + }); + + expect(result.isError).toBe(true); + const responseData = JSON.parse(result.content[0].text); + expect(responseData.result).toBe("error"); + expect(responseData.error).toContain("Invalid create_pull_request.base_branch"); + expect(responseData.error).toContain("contains invalid characters"); + expect(mockAppendSafeOutput).not.toHaveBeenCalled(); + }); }); describe("pushToPullRequestBranchHandler", () => { From 20b9cefca50d3b191b9b878218ec475c3000b09f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 18 Apr 2026 01:27:14 +0000 Subject: [PATCH 7/7] revert: remove strict safe-output base_branch validation Agent-Logs-Url: https://github.com/github/gh-aw/sessions/0b8eea5b-25b5-4bba-8196-d819751c99b7 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/safe_outputs_handlers.cjs | 51 +------------------ .../setup/js/safe_outputs_handlers.test.cjs | 44 ---------------- 2 files changed, 1 insertion(+), 94 deletions(-) diff --git a/actions/setup/js/safe_outputs_handlers.cjs b/actions/setup/js/safe_outputs_handlers.cjs index 5413813b54..710744b1bd 100644 --- a/actions/setup/js/safe_outputs_handlers.cjs +++ b/actions/setup/js/safe_outputs_handlers.cjs @@ -240,56 +240,7 @@ function createHandlers(server, appendSafeOutput, config = {}) { // Get base branch for the resolved target repository. // Prefer explicit safe-output config value when provided, otherwise fall back // to dynamic resolution from trigger context/default branch. - let baseBranch = null; - if (prConfig.base_branch !== undefined && prConfig.base_branch !== null) { - if (typeof prConfig.base_branch !== "string") { - return { - content: [ - { - type: "text", - text: JSON.stringify({ - result: "error", - error: `Invalid create_pull_request.base_branch: expected string, got ${typeof prConfig.base_branch}`, - }), - }, - ], - isError: true, - }; - } - - const normalizedConfigBase = normalizeBranchName(prConfig.base_branch); - if (!normalizedConfigBase) { - return { - content: [ - { - type: "text", - text: JSON.stringify({ - result: "error", - error: `Invalid create_pull_request.base_branch: sanitization resulted in empty string (original: "${prConfig.base_branch}")`, - }), - }, - ], - isError: true, - }; - } - if (prConfig.base_branch !== normalizedConfigBase) { - return { - content: [ - { - type: "text", - text: JSON.stringify({ - result: "error", - error: `Invalid create_pull_request.base_branch: contains invalid characters (original: "${prConfig.base_branch}", normalized: "${normalizedConfigBase}")`, - }), - }, - ], - isError: true, - }; - } - baseBranch = prConfig.base_branch; - } else { - baseBranch = await getBaseBranch(repoParts); - } + const baseBranch = prConfig.base_branch || (await getBaseBranch(repoParts)); // Determine the working directory for git operations // If repo is specified, find where it's checked out diff --git a/actions/setup/js/safe_outputs_handlers.test.cjs b/actions/setup/js/safe_outputs_handlers.test.cjs index 964e6b7be5..fa128edcec 100644 --- a/actions/setup/js/safe_outputs_handlers.test.cjs +++ b/actions/setup/js/safe_outputs_handlers.test.cjs @@ -546,50 +546,6 @@ describe("safe_outputs_handlers", () => { delete process.env.GITHUB_REF_NAME; } }); - - it("should return a clear error when configured base_branch is not a string", async () => { - handlers = createHandlers(mockServer, mockAppendSafeOutput, { - create_pull_request: { - allow_empty: true, - base_branch: 123, - }, - }); - - const result = await handlers.createPullRequestHandler({ - branch: "feature/test-change", - title: "Test PR", - body: "Test description", - }); - - expect(result.isError).toBe(true); - const responseData = JSON.parse(result.content[0].text); - expect(responseData.result).toBe("error"); - expect(responseData.error).toContain("Invalid create_pull_request.base_branch"); - expect(responseData.error).toContain("expected string"); - expect(mockAppendSafeOutput).not.toHaveBeenCalled(); - }); - - it("should return a clear error when configured base_branch contains invalid characters", async () => { - handlers = createHandlers(mockServer, mockAppendSafeOutput, { - create_pull_request: { - allow_empty: true, - base_branch: "main;rm -rf", - }, - }); - - const result = await handlers.createPullRequestHandler({ - branch: "feature/test-change", - title: "Test PR", - body: "Test description", - }); - - expect(result.isError).toBe(true); - const responseData = JSON.parse(result.content[0].text); - expect(responseData.result).toBe("error"); - expect(responseData.error).toContain("Invalid create_pull_request.base_branch"); - expect(responseData.error).toContain("contains invalid characters"); - expect(mockAppendSafeOutput).not.toHaveBeenCalled(); - }); }); describe("pushToPullRequestBranchHandler", () => {