Uh oh!
There was an error while loading. Please reload this page.
Restructure backport workflow with AI-driven decisions - #1934
Conversation
Run the backport workflow on every push to main and have AI analyze each commit to decide whether to recommend a backport to stable, instead of relying on a manual backport-stable label. The action now always opens a PR for human review and never pushes directly to stable. The backport-stable label is preserved as a manual override that forces a backport regardless of the AI verdict.
|
📊 Benchmark Results
workflow with no steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 1 step💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 10 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 25 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 50 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) Promise.all with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) Promise.all with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) Promise.all with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) Promise.race with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) Promise.race with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) Promise.race with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 10 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 25 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 50 sequential data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 10 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) workflow with 25 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Next.js (Turbopack) | Nitro workflow with 50 concurrent data payload steps (10KB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Next.js (Turbopack) | Nitro Stream Benchmarks(includes TTFB metrics)workflow with stream💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) stream pipeline with 5 transform steps (1MB)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) 10 parallel streams (1MB each)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) fan-out fan-in 10 streams (1MB each)💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) SummaryFastest Framework by WorldWinner determined by most benchmark wins
Fastest World by FrameworkWinner determined by most benchmark wins
Column Definitions
Worlds:
❌ Some benchmark jobs failed:
Check the workflow run for details. |
🧪 E2E Test Results✅ All tests passed Summary
Details by Category✅ ▲ Vercel Production
✅ 💻 Local Development
✅ 📦 Local Production
✅ 🐘 Local Postgres
✅ 🪟 Windows
✅ 📋 Other
|
There was a problem hiding this comment.
Pull request overview
This PR restructures the stable backport automation to run on every push to main, using AI to decide whether to open a backport PR, while keeping backport-stable as a manual override and ensuring backports never push directly to stable.
Changes:
- Trigger backport workflow on
pushtomainand use AI to decide “yes/no” backport per commit, with PR/commit context and a capped diff. - Always open a PR against
stable(even for clean cherry-picks), and comment on the source PR when a backport is created or declined. - Update
AGENTS.mdto document the new AI-driven decision criteria, override behavior, and conflict-handling flow.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
AGENTS.md | Updates contributor documentation to reflect AI-driven backport decisions and the “always PR” policy. |
.github/workflows/backport.yml | Reworks triggers and logic to AI-decide backports on main pushes, support label override, and always open backport PRs with notifications. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
…structions - Use uuidgen-based delimiters when writing multiline values (PR title, body, AI reasoning) to $GITHUB_OUTPUT, so user-/model-controlled content cannot collide with or inject into the heredoc terminator. - Update the manual conflict-resolution instructions to push a backport branch and open a PR against stable, matching the new "never push directly to stable" policy. - Document the head-commit-only behavior of the push trigger inline in the workflow.
Uh oh!
There was an error while loading. Please reload this page.
* origin/main: feat: serializable AbortController/AbortSignal (#1301) Auto-remove workflow packages from serverExternalPackages (#1481) Add missing changeset for Zod 4.4.x compatibility fix in @workflow/world (#1939) Push backport branch via GraphQL createCommitOnBranch for signed commits (#1937) Fix backport workflow opencode permission and surface AI failures (#1936) Restructure backport workflow with AI-driven decisions (#1934)
Summary
main. AI analyzes each commit and decides whether to recommend a backport tostable, instead of relying on a manualbackport-stablelabel being added to every PR. AI is given commit metadata, the full diff (capped at 200KB), and the associated PR's title/body when one exists.stable. Even clean cherry-picks now go through a PR for human review. The PR title/body include AI's reasoning (or a note that conflicts were AI-resolved).backport-stablelabel still works but now forces a backport regardless of the AI verdict (skips AI analysis entirely). Adding it before or after merge re-triggers the workflow via the existingpull_request_target: labeledevent. This is the escape hatch when AI declines a backport you actually want.main-only behavior — bug fixes, edge-case fixes, self-contained minor features, doc fixes, dependency bumps, infra/CI changes. Lean toward yes when in doubt; humans review the PR and can close it if not worth merging. Decline for changes building onmain-only APIs, major breaking changes for the next major, changes confined to directories not maintained onstable(thedocs/app outsidedocs/content/, andskills/), and release plumbing.actions/github-scriptinterpolations of dynamic content (AI reasoning, etc.) moved toenv:+process.envto prevent script injection.Existing conflict-resolution behavior is unchanged: auto-resolve
docs/(non-content) /skills//pnpm-lock.yamlconflicts, then fall back to opencode for anything remaining.AGENTS.mdupdated to describe the new behavior.