Skip to content

Investigate pocket vetoes (open PRs as implicit rejections) in merge rate #51

@jeffreyksmithjr

Description

@jeffreyksmithjr

Problem

The v3 scoring model computes merge rate as merged / (merged + closed). This excludes PRs that are still open, which means pocket vetoes (PRs that maintainers ignore rather than explicitly closing) are absent from both the numerator and denominator. A contributor whose PRs are routinely left to rot rather than closed would have an artificially high merge rate.

Pocket vetoes are common. Many maintainers use them as a softer alternative to explicit rejection, especially for PRs that aren't harmful but aren't wanted.

Prior work

The rejection awareness study (on experiments/ge-validation) and Bad Egg experiments (bad-egg branch) only considered MERGED and CLOSED states. Open PRs were never queried or analyzed. No prior experiment in this repo has addressed pocket vetoes.

Complexity

Defining a pocket veto requires a staleness threshold (e.g., open for 90+ days with no activity). But the right threshold varies by repo. A PR open for 6 months in a fast-moving repo is dead; the same in a slow-moving repo might just be waiting for a release cycle. This likely requires per-repo calibration based on each repo's typical PR lifecycle, which is infrastructurally more complicated than the current approach of pulling a single totalCount from the GraphQL API.

Proposed investigation

  1. Query open PR counts and ages for the existing author population
  2. Characterize the distribution of open-PR staleness across repos
  3. Test whether a repo-calibrated staleness threshold (e.g., open longer than 2x the repo's median time-to-close) changes merge rate distributions meaningfully
  4. Evaluate impact on v3 scoring accuracy if stale open PRs are counted as rejections
  5. Determine whether a universal threshold is viable or per-repo calibration is required

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions