feat: make bundle the default patch format for create-pull-request and push-to-pull-request-branch#24230
feat: make bundle the default patch format for create-pull-request and push-to-pull-request-branch#24230
Conversation
…d push-to-pull-request-branch - Update JSON schema defaults from "am" to "bundle" for both handlers - Compiler now always emits patch_format="bundle" as default instead of omitting the field - Update struct comments and parsing comments to reflect new default - Recompile all 183 workflow lock files with new default - Detection job already supported bundle files (no changes needed) Agent-Logs-Url: https://github.com/github/gh-aw/sessions/b76db471-3eee-4a6b-a9d2-397d8bc5ccfa Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR changes the default patch-format for create-pull-request and push-to-pull-request-branch from am to bundle, and ensures the compiled safe-outputs handler configs always include patch_format explicitly (defaulting to bundle when not configured).
Changes:
- Update workflow JSON schema defaults for
patch-formatto"bundle"for both affected handlers. - Update safe-outputs handler config compilation to always emit
patch_format, defaulting to"bundle"when unset. - Recompile workflow lock files so handler configs include
"patch_format":"bundle"wherepatch-formatwas previously implicit.
Reviewed changes
Copilot reviewed 47 out of 47 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| pkg/workflow/push_to_pull_request_branch.go | Updates patch-format comments/parsing notes to reflect the new default (bundle). |
| pkg/workflow/create_pull_request.go | Updates patch-format comments/parsing notes to reflect the new default (bundle). |
| pkg/workflow/compiler_safe_outputs_config.go | Ensures patch_format is always emitted in handler configs, defaulting to bundle when unset. |
| pkg/parser/schemas/main_workflow_schema.json | Switches schema defaults for patch-format from am to bundle for both handlers. |
| .github/workflows/weekly-safe-outputs-spec-review.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/weekly-editors-health-check.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/weekly-blog-post-writer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/update-astro.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/unbloat-docs.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/ubuntu-image-analyzer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/tidy.lock.yml | Lockfile recompile: injects patch_format:"bundle" for both create/push handlers where applicable. |
| .github/workflows/test-create-pr-error-handling.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/technical-doc-writer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/smoke-update-cross-repo-pr.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/smoke-project.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/smoke-multi-pr.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/smoke-create-cross-repo-pr.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/smoke-claude.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/slide-deck-maintainer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/schema-feature-coverage.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/refiner.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/q.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/poem-bot.lock.yml | Lockfile recompile: injects patch_format:"bundle" for create/push handlers where applicable. |
| .github/workflows/mergefest.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/layout-spec-maintainer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/jsweep.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/instructions-janitor.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/hourly-ci-cleaner.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/go-logger.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/glossary-maintainer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/github-mcp-tools-report.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/functional-pragmatist.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/dictation-prompt.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/developer-docs-consolidator.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/dead-code-remover.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/daily-workflow-updater.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/daily-safe-output-integrator.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/daily-rendering-scripts-verifier.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/daily-doc-updater.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/daily-doc-healer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/daily-community-attribution.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/daily-architecture-diagram.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/craft.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/code-simplifier.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/code-scanning-fixer.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/cloclo.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
| .github/workflows/ci-coach.lock.yml | Lockfile recompile: injects patch_format:"bundle" into compiled handler config. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
💫 TO BE CONTINUED... Smoke Claude was cancelled! Our hero faces unexpected challenges... |
|
📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing... |
|
❌ Tool validation failed! Agent Container Smoke Test detected missing tools: was cancelled |
|
🌑 The shadows whisper... Smoke Codex was cancelled. The oracle requires further meditation... |
|
|
|
🧪 Smoke Temporary ID is now testing temporary ID functionality... |
|
🧪 Smoke Project is now testing project operations... |
|
📰 BREAKING: Smoke Copilot ARM64 is now investigating this pull request. Sources say the story is developing... |
🔍 Checkout Validation ResultsTask:
Details
✅ PASSCheckout validation succeeded. The workspace is properly initialized, the correct branch is checked out, remote is configured, and commit history is accessible.
|
|
✅ Smoke Temporary ID completed successfully. Temporary ID validation passed. |
|
✅ Smoke Project completed successfully. All project operations validated. |
|
✅ All tools validated successfully! Agent Container Smoke Test confirms agent container is ready. |
|
🌑 The shadows whisper... Smoke Codex was cancelled. The oracle requires further meditation... |
|
💫 TO BE CONTINUED... Smoke Claude was cancelled! Our hero faces unexpected challenges... |
|
📰 DEVELOPING STORY: Smoke Copilot ARM64 reports was cancelled. Our correspondents are investigating the incident... |
Smoke Test Results — Run §23934464137
Overall: PASS (Serena tools unavailable) PR author:
|
There was a problem hiding this comment.
Smoke test review for PR #24230. This PR makes bundle the default patch_format for create-pull-request and push-to-pull-request-branch across all workflow lock files. The change is clear and consistent. Minor note about AGENTS.md inconsistency in protected files config (pre-existing, not a blocker).
📰 BREAKING: Report filed by Smoke Copilot · ● 1.2M
| mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs | ||
| cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/config.json << 'GH_AW_SAFE_OUTPUTS_CONFIG_d5c17f2353f2cc4a_EOF' | ||
| {"create_pull_request":{"expires":48,"max":1,"max_patch_size":1024,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_files_policy":"fallback-to-issue","protected_path_prefixes":[".github/",".agents/"],"title_prefix":"[ci-coach] "},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"}} | ||
| {"create_pull_request":{"expires":48,"max":1,"max_patch_size":1024,"patch_format":"bundle","protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_files_policy":"fallback-to-issue","protected_path_prefixes":[".github/",".agents/"],"title_prefix":"[ci-coach] "},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"}} |
There was a problem hiding this comment.
👍 Good change - adding "patch_format":"bundle" as the default makes the patch format explicit. This ensures consistent bundle-format patches across all workflows rather than relying on implicit defaults.
There was a problem hiding this comment.
Agreed! The patch_format: bundle default is a solid improvement. Bundle format preserving merge history makes it much more reliable for complex branches. 👍
📰 BREAKING: Report filed by Smoke Copilot · ● 1.5M
| GITHUB_SERVER_URL: ${{ github.server_url }} | ||
| GITHUB_API_URL: ${{ github.api_url }} | ||
| GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"create_pull_request\":{\"expires\":48,\"max\":1,\"max_patch_size\":1024,\"protected_files\":[\"package.json\",\"bun.lockb\",\"bunfig.toml\",\"deno.json\",\"deno.jsonc\",\"deno.lock\",\"global.json\",\"NuGet.Config\",\"Directory.Packages.props\",\"mix.exs\",\"mix.lock\",\"go.mod\",\"go.sum\",\"stack.yaml\",\"stack.yaml.lock\",\"pom.xml\",\"build.gradle\",\"build.gradle.kts\",\"settings.gradle\",\"settings.gradle.kts\",\"gradle.properties\",\"package-lock.json\",\"yarn.lock\",\"pnpm-lock.yaml\",\"npm-shrinkwrap.json\",\"requirements.txt\",\"Pipfile\",\"Pipfile.lock\",\"pyproject.toml\",\"setup.py\",\"setup.cfg\",\"Gemfile\",\"Gemfile.lock\",\"uv.lock\",\"CODEOWNERS\",\"AGENTS.md\"],\"protected_files_policy\":\"fallback-to-issue\",\"protected_path_prefixes\":[\".github/\",\".agents/\"],\"title_prefix\":\"[ci-coach] \"},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"}}" | ||
| GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"create_pull_request\":{\"expires\":48,\"max\":1,\"max_patch_size\":1024,\"patch_format\":\"bundle\",\"protected_files\":[\"package.json\",\"bun.lockb\",\"bunfig.toml\",\"deno.json\",\"deno.jsonc\",\"deno.lock\",\"global.json\",\"NuGet.Config\",\"Directory.Packages.props\",\"mix.exs\",\"mix.lock\",\"go.mod\",\"go.sum\",\"stack.yaml\",\"stack.yaml.lock\",\"pom.xml\",\"build.gradle\",\"build.gradle.kts\",\"settings.gradle\",\"settings.gradle.kts\",\"gradle.properties\",\"package-lock.json\",\"yarn.lock\",\"pnpm-lock.yaml\",\"npm-shrinkwrap.json\",\"requirements.txt\",\"Pipfile\",\"Pipfile.lock\",\"pyproject.toml\",\"setup.py\",\"setup.cfg\",\"Gemfile\",\"Gemfile.lock\",\"uv.lock\",\"CODEOWNERS\",\"AGENTS.md\"],\"protected_files_policy\":\"fallback-to-issue\",\"protected_path_prefixes\":[\".github/\",\".agents/\"],\"title_prefix\":\"[ci-coach] \"},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"}}" |
There was a problem hiding this comment.
Note: The AGENTS.md appears in the protected_files list in the env var config but not in the JSON file config above. This inconsistency was pre-existing and not introduced by this PR, but worth noting for future cleanup.
|
📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤 |
|
📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing... |
|
❌ Smoke Agent: all/merged failed. Check the logs for details. |
|
❌ Smoke Agent: public/approved failed. Check the logs for details. |
|
❌ Smoke Agent: public/none failed. Check the logs for details. |
|
❌ Smoke Agent: all/none failed. Check the logs for details. |
|
❌ Smoke Agent: scoped/approved failed. Check the logs for details. |
|
Smoke Test Results for run §23934614483:
Overall: ✅ PASS
|
There was a problem hiding this comment.
This PR correctly makes bundle the default patch format for create-pull-request and push-to-pull-request-branch handlers. The recompile of all 183 workflows adds explicit "patch_format":"bundle" to their configs — this is a mechanical but important change that ensures better git topology preservation. LGTM! 🚀
📰 BREAKING: Report filed by Smoke Copilot · ● 1.5M
| mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs | ||
| cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/config.json << 'GH_AW_SAFE_OUTPUTS_CONFIG_d5c17f2353f2cc4a_EOF' | ||
| {"create_pull_request":{"expires":48,"max":1,"max_patch_size":1024,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_files_policy":"fallback-to-issue","protected_path_prefixes":[".github/",".agents/"],"title_prefix":"[ci-coach] "},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"}} | ||
| {"create_pull_request":{"expires":48,"max":1,"max_patch_size":1024,"patch_format":"bundle","protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_files_policy":"fallback-to-issue","protected_path_prefixes":[".github/",".agents/"],"title_prefix":"[ci-coach] "},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"}} |
There was a problem hiding this comment.
✅ Good change — adding "patch_format":"bundle" as the default here ensures consistent bundle-format patches that preserve merge commit topology and per-commit authorship across all workflows.
| mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs | ||
| cat > ${RUNNER_TEMP}/gh-aw/safeoutputs/config.json << 'GH_AW_SAFE_OUTPUTS_CONFIG_4f1be287ae4acab7_EOF' | ||
| {"add_comment":{"max":1},"create_pull_request":{"excluded_files":[".github/workflows/*.lock.yml"],"expires":48,"labels":["automation","cloclo"],"max":1,"max_patch_size":1024,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_files_policy":"fallback-to-issue","protected_path_prefixes":[".github/",".agents/"],"title_prefix":"[cloclo] "},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"}} | ||
| {"add_comment":{"max":1},"create_pull_request":{"excluded_files":[".github/workflows/*.lock.yml"],"expires":48,"labels":["automation","cloclo"],"max":1,"max_patch_size":1024,"patch_format":"bundle","protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS"],"protected_files_policy":"fallback-to-issue","protected_path_prefixes":[".github/",".agents/"],"title_prefix":"[cloclo] "},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"}} |
There was a problem hiding this comment.
Same patch_format: bundle addition here. Consistent change across all workflow lock files — this is the expected result of a full recompile after changing the schema default.
|
📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤 |
patch-formatdefaulted to"am"(git format-patch/git am). This switches the default to"bundle"(git bundle), which preserves merge commit topology, per-commit authorship, and merge-resolution-only content.Changes
main_workflow_schema.json):"default"changed from"am"to"bundle"for bothcreate-pull-requestandpush-to-pull-request-branchcompiler_safe_outputs_config.go): Both handlers now always emitpatch_formatexplicitly (defaulting to"bundle"when unconfigured) instead of omitting the field viaAddIfNotEmptycreate_pull_request.go,push_to_pull_request_branch.go): Updated field comments and parsing notes to reflect the new defaultpatch-formatnow carry"patch_format":"bundle"in their handler configcollect_ndjson_output.cjsandsetup_threat_detection.cjsalready handle both.patchand.bundlefiles