Luca Palmieri

Commit integration simulator

Should you listen to Thorsten and switch to trunk-based development?

Set up the experiment

Workload

Failure risks

Timing

Merge queue settings
Deployment & pricing

Preparing simulation…

How do they compare?

Direct to main

Changes merge before CI, even from old bases if there are no conflicts. Conflicts require a rebase and retry. Every main commit runs CI. Failed checks trigger repair commits after the repair delay. New changes can land while main is broken.

Merge queue

One batch runs CI against current main before merging. The queue takes up to the batch limit without waiting to fill it. Conflicting changes leave, rebase, and return at the back.

On failure, retest the first half (rounded up) without adding changes. The rest leave and return at the back after a rebase delay. Repeat until a failing change is found and sent for repair.

Up-to-date PR CI

Each PR runs CI before merging. If main advances, the PR must rebase and retest, even if its checks passed. Failed changes are repaired and retested. Running checks are not cancelled.

Quarantine & bypass

A failed batch moves aside instead of holding up the queue. Other changes can be tested and merged while the queue finds the cause.

Split the failed batch in half and test both halves in parallel against the same main snapshot. Keep splitting failing halves until individual broken changes are found. Repair those changes outside the queue, then put them at the back.

Passing groups get priority over new work, but never interrupt a running batch. A passing diagnosis is not permission to merge: each group must pass a fresh CI check against current main. One agent resolves conflicts before that check, one change at a time; clean merges need no rebase. Only one group goes through this final step at a time, so changes can overtake each other but never merge without validation.

Scroll the comparisons horizontally to see every column.

Where the work goes

Main, commit by commit

One mark per commit, in main order from left to right. Repair commits are included here but excluded from throughput above.

How integration progresses

Cumulative changes landed. Flat stretches mean nothing is reaching main.

Model contract and limitations

Failures and repairs

A change can fail alone, conflict with another change, or merge cleanly but break CI when combined with it.

Rebase and repair times are separate: work needing both pays both delays. A rebase uses main at its start, so later merges can force another retry.
Separate changes can be rebased or repaired at the same time, even by the same developer.

Deployment and metrics

A deployment is triggered when the latest commit on main passes CI. Deployments are assumed to be infallible.