Skip to content

Measure the effect of no longer requiring pull-request rebases #2547

Open

Description

@josecelano

Goal

Find out whether making pull-request rebases optional (issue #2507) reduced force-pushes, pull-request CI runner time, and rebase-fallout commits. Compare a two-week window under the new policy with the baseline that #2507 recorded for 1 to 13 October 2026.

Background

Issue #2507 stopped requiring a rebase onto develop before merge. The ADR was accepted in spec PR #2508, merged 2026-10-14 06:42 UTC. The maintainer merge tool was changed in PR #2526, merged 2026-10-14 12:18 UTC, to refresh a pull request's stale recorded base instead of asking for a rebase. The goal was to cut CI reruns, review noise, and serialized merging.

The #2507 specification planned this comparison as its task T7 and acceptance criterion AC9. It needs at least two weeks of merges under the new policy. The maintainer decided on 2026-10-15 to move it into this issue so #2507 could close once its implementation and manual verification were complete.

Issue #2507 recorded the baseline, with reproduction commands, in baseline-evidence.md. That file moves to docs/issues/closed/2507-stop-requiring-pull-request-rebases/ when #2507 is archived. The baseline has these sections:

  • section 4: pull-request volume and queue;
  • section 5: force-pushes per merged PR;
  • section 6: CI cost of pull-request runs;
  • section 7: rebase-fallout commits.
Measure (baseline) June 2026 1 to 13 October 2026
Merged PRs 67 67
Median open PRs waiting 0 8
Force-pushes per merged PR 0.39 1.58
Merged PRs force-pushed at least once 34% 81%
Estimated PR CI runner-hours — 197.8

The early merges are already mixed. Of the 18 merges from #2526 to #2543 (2026-10-14 12:18 to 2026-10-15 16:33 UTC), nine were merged while behind develop without a rebase, and six of those relied on the merge tool's refresh. Recommended rebases are still common, though: for example, #2530, #2538, and #2430 rebased clean branches. See #2507 manual-verification-evidence.md, section "Merges Under the New Policy".

Scope

In Scope

  • Measure the window from 2026-10-15 00:00 UTC to 2026-10-28 23:59 UTC (14 days) with the Stop requiring pull-request rebases and reconcile repository rulesets #2507 baseline commands, and normalize per merged PR and per day so the 13-day baseline stays comparable. This specification fixes how each measure selects its data, because the baseline sections do not all say how they selected theirs:
    • force-pushes per merged PR and the share of merged PRs force-pushed at least once. The population is the pull requests merged in the window (merged_at), with every force-push of each of them, including events before 2026-10-15: baseline section 5 selects pull requests by merge date and counts each one's whole force-push timeline. The classification below uses the same population;
    • estimated PR CI runner-hours per workflow, sampled as in the baseline. The runs are the pull_request workflow runs created within the window, not the runs of the pull requests merged in it, so runs of pull requests still open count too. Baseline section 6 reports 899 runs for 1 to 13 October and names no date field; creation date is this specification's reading of it;
    • rebase-fallout commits, compared with a baseline recounted for 1 to 13 October only: section 7 of the baseline lists 23 commits "since September 2026", of which 13 have author dates from 1 to 13 October, so do not divide the whole list by 13 days or by the 67 October merges. A commit is in the window when its author date is, as in that 13-of-23 recount. The command in section 7 filters with --since, which is the committer date, and prints author dates;
    • pull-request volume and the daily open-PR queue, for context, as in baseline section 4.
  • Classify every force-push of those pull requests with the method of Stop requiring pull-request rebases and reconcile repository rulesets #2507 manual-verification section V4, which compares where the push put the head's base, not only where the new head sits. The develop tip of its time is the last first-parent develop commit whose pull request has a merged_at before the push. A rewrite of a head that was already on the tip must not be counted as a rebase:
    • rebase: the push moved the base, that is, git merge-base <tip> <beforeCommit> differs from git merge-base <tip> <afterCommit>. It is required when the pushed-away head conflicted with the tip (git merge-tree --write-tree), and recommended when it merged cleanly;
    • not a rebase: the push left the base unchanged. Since PR docs(agents): allow rewriting an unmerged pull request's history with safeguards #2531 merged (merged_at 2026-10-14 16:09 UTC), AGENTS.md allows other rewrites of an unmerged pull request's history, such as splitting or reordering commits, which the baseline could not contain: baseline section 5 counts every force-push as a rebase because history rewrites were otherwise forbidden.
      Report the total force-pushes per merged PR, which is the baseline's measure, and the rebase-only figure, which excludes the second class.
  • Count merges made while behind develop whose head was pushed before develop reached M^1, the develop tip the merge was built on, and not pushed again before the merge (the recorded-base refresh path). The cutoff is M^1, not the Git merge base, which a head always postdates. As in Stop requiring pull-request rebases and reconcile repository rulesets #2507 manual-verification section V1, the count is inferred, because the merge tool's output is not captured.
  • Record the comparison and a short conclusion in issue-local post-change-evidence.md.

Out of Scope

Plan

The specification is added under docs/issues/open/ with the #2507 close-out pull request.

Activity

  1. self-assigned this
    on Oct 16, 2026
  2. added 14 commits that reference this issue on Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions