---
title: "Move selected heavy checks after merge"
description: "Keep a deliberately chosen pull request gate and schedule heavier validation after merge, with explicit ownership of the resulting risk."
url: https://starsling.dev/ci-playbooks/techniques/defer-heavy-validation
canonicalUrl: https://starsling.dev/ci-playbooks/techniques/defer-heavy-validation
---

# Move selected heavy checks after merge

Keep a deliberately chosen pull request gate and schedule heavier validation after merge, with explicit ownership of the resulting risk.

## How to choose an approach

Compare the examples by repository setup, prerequisites, and risks before adopting one. Each company implemented this in its own environment; measure each change against your own baseline.

- **[OpenAI](https://starsling.dev/ci-playbooks/openai#defer-duplicate-validation)**: Use it when A heavyweight matrix repeats a signal another required workflow already provides. Check before adopting: A regression only the deferred legs catch now surfaces after merge. Count those leg-unique failures first, and give the post-merge run an owner who is notified and can block a release.
- **[Shopify](https://starsling.dev/ci-playbooks/shopify#schedule-heavy-validation)**: Use it when Heavy suites sit on the required path of every pull request, and the cheaper checks catch nearly every break first. Check before adopting: Failures in the moved suites show up on main after merge, so someone has to watch main and act on them.

## Apply this technique

````text
Evaluate and apply this CI technique to my repository: Move selected heavy checks after merge.

Keep a deliberately chosen pull request gate and schedule heavier validation after merge, with explicit ownership of the resulting risk.

Read the technique and its source-backed company examples: https://starsling.dev/ci-playbooks/techniques/defer-heavy-validation.md

Inspect this repository’s CI workflows, build and test commands, dependencies, and recent run timings. Identify where this technique applies and explain the expected benefit using this repository’s evidence.
Measure a baseline from recent comparable runs: elapsed time, queue time, runner minutes and failures where available. If data is unavailable, say what cannot be measured.
Compare relevant company approaches, checking prerequisites, platform differences and tradeoffs. Rank applicable options by evidence, fit and measurable opportunity; do not present company results as predictions for this repo.
Recommend the smallest safe change, show what checks and fallback paths remain, and ASK ME WHICH CHANGE TO APPROVE BEFORE EDITING ANY FILES.
Only after approval, work on a new feature branch, make one reversible change, and open a reviewable pull request. Never merge or push to a default or protected branch.
Keep required checks, test coverage, deployment and release behavior intact. Validate the change and compare equivalent runs where possible; report limitations and what should be monitored after merge.
````

## How companies used this technique

Read what each company changed and follow the original sources.

### OpenAI: Run the heavy matrix after merge

Codex kept Bazel build, test and clippy on pull requests, along with Cargo hygiene and its required aggregate, and moved the full Cargo matrix to pushes on main.

Evidence: Source PR/commit evidence

Full Cargo matrix moved to post-merge pushes on main ([Source](https://github.com/openai/codex/pull/16072))

Use it when: A heavyweight matrix repeats a signal another required workflow already provides.

Before applying it: A regression only the deferred legs catch now surfaces after merge. Count those leg-unique failures first, and give the post-merge run an owner who is notified and can block a release.

[Read more in the OpenAI playbook](https://starsling.dev/ci-playbooks/openai#defer-duplicate-validation)

[Primary source](https://github.com/openai/codex/pull/16072)

### Shopify: Move heavyweight checks after merge, by decision

Shopify/tecnix#74 keeps the component tests and cheap flake checks on pull requests. VM tests, the remaining flake checks, the installer tests and flake regressions run on pushes to main, merge-queue runs and manual dispatches, and as optional jobs on pull requests. The required check names still report on every pull request. The pattern match is partial: the PR moves whole suites after merge with their tradeoff written down in the PR.

Evidence: Source PR/commit evidence

Merged 2026-10-01; the pull-request conditions are on the default branch. ([Source](https://github.com/Shopify/tecnix/pull/74))

Use it when: Heavy suites sit on the required path of every pull request, and the cheaper checks catch nearly every break first.

Before applying it: Failures in the moved suites show up on main after merge, so someone has to watch main and act on them.

[Read more in the Shopify playbook](https://starsling.dev/ci-playbooks/shopify#schedule-heavy-validation)

[Primary source](https://github.com/Shopify/tecnix/pull/74)

## CI optimization is continuous work.

Apply this technique yourself, or use StarSling Runners for faster GitHub Actions and optional agent-driven optimization PRs, which teams on eligible paid plans can turn on.

[Get self-improving CI](https://starsling.dev/products/runners)

## Related techniques

### [Package once, and build full installers after merge](https://starsling.dev/ci-playbooks/techniques/package-once)

Drop the build step that packaging repeats, and build the unpacked app pull requests test.

1 implementation · 1 company (DoorDash)

### [After the first full agent scan, review only what changed](https://starsling.dev/ci-playbooks/techniques/scan-only-the-diff)

Run the full agent review once and keep its artifacts, then compare each new commit with the previous one and scan only the changes.

1 implementation · 1 company (Shopify)

### [Install and build only the workspace packages a job uses](https://starsling.dev/ci-playbooks/techniques/scope-workspace-builds)

Scope dependency installation and builds to the package or lane under test, including its actual dependencies.

3 implementations · 3 companies (Linear, Mastra, Shopify)

## Company Playbooks

### [Anthropic](https://starsling.dev/ci-playbooks/anthropic)

Run only affected tests

### [DoorDash](https://starsling.dev/ci-playbooks/doordash)

Run build and test in parallel, sharded across CI agents

### [Linear](https://starsling.dev/ci-playbooks/linear)

Benchmark the same job on faster hardware

### [Mastra](https://starsling.dev/ci-playbooks/mastra)

StarSling runners for the slowest test workflow

### [OpenAI](https://starsling.dev/ci-playbooks/openai)

Rank CI fixes by the minutes they save

### [Ramp](https://starsling.dev/ci-playbooks/ramp)

Move a CPU-bound test suite to a faster CPU

### [Shopify](https://starsling.dev/ci-playbooks/shopify)

Let an agent iterate against one CI metric

### [Spotify](https://starsling.dev/ci-playbooks/spotify)

Build arm64 on native arm64 runners

### [Stripe](https://starsling.dev/ci-playbooks/stripe)

Run only the tests a change can reach

### [Uber](https://starsling.dev/ci-playbooks/uber)

Build the merge-queue speculations most likely to be needed

## Related guides

Implementation guides for this technique.

### [Build and test only what changed](https://starsling.dev/best-practices/github-actions/build-only-affected)

Scope work with your dependency graph and keep a full-run fallback.

### [Cancel superseded CI runs](https://starsling.dev/best-practices/github-actions/cancel-superseded-runs)

Use concurrency groups to keep PR verification focused on the latest commit.

### [Cut CI queue time](https://starsling.dev/best-practices/github-actions/cut-queue-time)

Measure waiting time and identify concurrency or capacity constraints.

### [Filter workflows by changed files](https://starsling.dev/best-practices/github-actions/path-filter-workflows)

Distinguish workflow triggers from job-level conditions for required checks.
