Esc
↑↓ to move↵ to openEsc to close

DocsReference

Dataset plan: 100 repositories

The next model's corpus: 100 repositories, 2,919,190 pull requests measured, and how they split.

Proposed

Plan for expanding Riffle's training dataset from 50 to 100 public GitHub repositories.

At a glance

ScopeRepositoriesTotal PRsApprox. commitsStatus
Current 50501,899,996~3,482,259rust and envoy PRs pending
New 50501,019,194~1,526,983All measured
All 1001002,919,190~5,009,24298 repositories measured

Current 50 repositories (v1)

Systems, languages, and developer tools

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
1kubernetes/kubernetes94689,33390,279141,606TrainStale PRs auto-closed after 90 days
2rust-lang/cargo828,3408,422~20,000TrainReplaces golang/go
3python/cpython2,71774,68777,404~128,000TrainMany bot backport PRs
4rust-lang/rust———341,866TrainPRs not measured; bors rollups
5llvm/llvm-project10,033115,156125,189599,783TrainGitHub review only since Sep 2023
6rust-lang/rust-clippy2017,6557,856~19,000TrainReplaces git/git
7curl/curl5315,54415,597~35,000Val
8neovim/neovim29825,47625,774~34,000Testvim-patch port PRs
9microsoft/vscode2,73164,40667,137~140,000TrainMostly internal-team PRs
10microsoft/TypeScript13019,32619,456~37,000Train
Subtotal437,114~1,496,255

Web and application frameworks

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
11facebook/react48218,97719,459~21,000TrainNow redirects to react/react
12nodejs/node58442,04442,628~47,000TrainLands via commit-queue bot
13denoland/deno27118,22318,494~14,500Train
14django/django45321,08321,536~34,500TrainMergers push manually
15pallets/flask32,8462,849~5,500ValSmall
16rails/rails1,12038,15539,275~95,000Train
17laravel/framework4435,89335,937~40,000TestFast-close culture
18spring-projects/spring-boot117,8407,851~58,000TrainManual merges
19electron/electron14230,81030,952~31,000TrainBackport bot PRs
20vercel/next.js2,48638,02740,513~32,000TrainLarge open backlog
Subtotal259,494~378,500

Databases and data systems

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
21ClickHouse/ClickHouse1,44577,58679,031~240,000TrainBackport bot PRs
22redis/redis6797,5268,205~13,000TestLicence changes 2024/2025
23pingcap/tidb1,92645,12047,046~26,000TrainReplaces mongodb/mongo
24apache/airflow81045,72346,533~30,000TrainReplaces apache/cassandra
25elastic/elasticsearch1,241105,914107,155106,421Test
26apache/kafka49822,60823,106~17,500Train
27apache/spark40956,51256,921~50,000TrainMerged by script
28apache/flink36228,23428,596~37,000TrainMerged by committers
29apache/druid11914,89115,010~14,500Val
30duckdb/duckdb33813,99914,337~55,000Train
Subtotal425,940~589,421

Cloud, infrastructure, and observability

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
31docker/compose455,5695,614~7,000Trainv1 to v2 rewrite
32moby/moby59428,00428,598~52,000Train
33hashicorp/terraform16716,30116,468~35,000TrainBSL licence since 2023
34hashicorp/vault28024,98225,262~23,000TestEnterprise sync commits
35ansible/ansible34253,01753,359~55,000Train2020 collections split
36prometheus/prometheus37411,68512,059~14,000Val
37grafana/grafana63281,55582,187~62,000TrainBackport bot PRs
38open-telemetry/opentelemetry-collector7711,05611,133~8,000TrainShort history (2019 on)
39istio/istio7137,42537,496~24,000Train
40envoyproxy/envoy———28,474TrainPRs not measured
Subtotal272,176~308,474

ML, science, media, and end-user software

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
41pytorch/pytorch3,514133,276136,790111,609TrainLands via merge bot; ghstack
42tensorflow/tensorflow1,96376,53178,494~195,000TrainMostly Copybara sync PRs
43scikit-learn/scikit-learn58720,63121,218~33,000Train
44huggingface/transformers1,49726,43527,932~21,000Train
45jupyter/notebook482,5932,641~10,500TestSmall; v7 rewrite
46obsproject/obs-studio3307,6938,023~14,500Val
47godotengine/godot5,30451,45956,763~80,000ValLarge open backlog
48home-assistant/core1,063106,968108,031~118,000TrainMany dependency bumps
49nextcloud/server1,01239,24140,253~80,000TrainBackport bot PRs
50bitcoin/bitcoin38824,73925,127~46,000TrainMerged by maintainer script
Subtotal505,272~709,609

New 50 repositories (v2)

Languages and compilers

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
51swiftlang/swift1,72968,76570,494211,250TrainMoved from apple/swift (2024)
52dotnet/roslyn74846,00146,749146,826TrainMaestro bot PRs
53JuliaLang/julia1,06634,31435,38063,162TestBackport labels
54scala/scala312815,69915,827~30,000ValRenamed from lampepfl/dotty
55elixir-lang/elixir109,7569,766~22,000TestCore team pushes directly
56haskell/cabal1505,7465,896~17,000ValMergify merges
57php/php-src1,12017,13318,253~140,000TrainGitHub canonical only since 2021
58oven-sh/bun5,81218,68124,493~13,000TrainMany bot-authored PRs
Subtotal226,858~643,238

Frontend and mobile

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
59angular/angular18437,76137,945~33,000TrainMerged by merge tool
60vuejs/core3606,4506,8107,198TrainVue 2 history in vuejs/vue
61sveltejs/svelte1648,4138,577~11,000TestChangesets release PRs
62vitejs/vite2778,8819,158~9,500ValRenovate bot
63withastro/astro7710,98311,060~12,000TrainChangesets release PRs
64flutter/flutter59875,41176,00991,756TrainEngine merged in Dec 2024
65expo/expo54128,84029,381~30,000TrainMonorepo
66thunderbird/thunderbird-android275,3265,353~12,000TrainFormerly K-9 Mail
67AntennaPod/AntennaPod273,8503,877~6,500ValSmall
68wordpress-mobile/WordPress-iOS8116,41316,494~50,000TestRelease-branch merges
Subtotal204,664~262,954

Security and networking

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
69openssl/openssl55618,74019,296~36,000TrainManual pushes after approval
70keycloak/keycloak50425,69126,195~28,000TrainDependabot heavy
71aquasecurity/trivy834,9094,992~3,500TrainSecurity incident Mar 2026
72sigstore/cosign463,7983,844~2,800ValMany dependency bumps
73bitwarden/server2066,7256,931~5,500TestMixed licence
74cilium/cilium26236,11036,372~40,000TrainBackport PRs
75caddyserver/caddy923,0423,134~5,000Trainv2 rewrite 2019
76tailscale/tailscale54910,09310,642~11,000Train
Subtotal111,406~131,800

Data engineering and ML infrastructure

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
77apache/arrow38821,63422,022~17,000TrainJira to GitHub issues 2023
78trinodb/trino27422,13122,405~25,000TrainRenamed from prestosql
79pola-rs/polars37615,82716,203~12,000Val
80dbt-labs/dbt3066,4436,749~8,000TrainRenamed from dbt-labs/dbt-core
81ray-project/ray69942,35743,05631,787TrainExternal Buildkite CI
82vllm-project/vllm5,85234,17740,02920,901TrainShort history (2023 on)
83numpy/numpy30318,15618,45942,003TrainSVN-era history
84delta-io/delta5855,1725,757~4,500TestCheck internal-sync commits
Subtotal174,680~161,191

Developer tools, package managers, and editors

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
85Homebrew/brew817,80917,817~30,000TrainDependabot
86astral-sh/uv57012,04412,614~7,000TrainShort history (2023 on)
87pnpm/pnpm2327,4457,677~9,000TrainChangesets
88cli/cli624,5774,639~10,000Val
89BurntSushi/ripgrep761,0881,164~2,300TrainVery small
90helix-editor/helix5806,4136,993~6,500Test
91zed-industries/zed79032,15932,949~35,000TrainPrivate before Jan 2024
Subtotal83,853~99,800

Embedded, games, fintech, CMS, and social

#RepositoryOpenClosedTotal PRsApprox. commitsSplitNotes
92zephyrproject-rtos/zephyr1,90485,94987,853~110,000TrainBackport bot PRs
93esphome/esphome46516,50416,969~9,000Val
94bevyengine/bevy57414,53315,107~9,000TrainMerge queue
95luanti-org/luanti1238,3568,479~17,000TrainRenamed from minetest (2024)
96tigerbeetle/tigerbeetle293,2373,266~11,000TestSmall
97actualbudget/actual865,2245,310~4,000TestSmall
98lightningnetwork/lnd2875,8766,163~18,000Val
99WordPress/gutenberg2,67847,04049,718~30,000TrainSynced into WP core
100mastodon/mastodon18724,68124,868~20,000TrainRenovate/Crowdin bots
Subtotal217,733~228,000

Totals

ScopeRepositoriesTotal PRsApprox. commitsStatus
Systems, languages, and developer tools10437,114~1,496,255Measured PRs
Web and application frameworks10259,494~378,500Measured PRs
Databases and data systems10425,940~589,421Measured PRs
Cloud, infrastructure, and observability10272,176~308,474Measured PRs
ML, science, media, and end-user software10505,272~709,609Measured PRs
Languages and compilers8226,858~643,238Measured PRs
Frontend and mobile10204,664~262,954Measured PRs
Security and networking8111,406~131,800Measured PRs
Data engineering and ML infrastructure8174,680~161,191Measured PRs
Developer tools, package managers, and editors783,853~99,800Measured PRs
Embedded, games, fintech, CMS, and social9217,733~228,000Measured PRs
Current 50501,899,996~3,482,259rust and envoy PRs pending
New 50501,019,194~1,526,983All measured
All 1001002,919,190~5,009,24298 repositories measured

Dataset estimates

ItemValueStatus
Total PRs, 98 measured repositories (open and closed)2,919,190Measured
Closed PRs, 98 measured repositories2,837,457Measured
rust-lang/rust and envoyproxy/envoy PRsNot measured yetPending
Approx. commits, all 100 repositories~5,009,242Estimate
Mature PRs after the 30-day waitAbout the closed countDerived
Training rows after bot and backport filteringMeasure in the pilotPending
Feature columns100–300Estimate
Positive labels at 2% (upper bound)56,700Derived
Positive labels at 3% (upper bound)85,100Derived
Positive labels at 5% (upper bound)141,900Derived
Revert rate in open source1–5% of commitsSourced [1]
SZZ bug-inducing rate, if used as a labelAbout 26%Sourced [2]
R-SZZ label precision57–73%Sourced [12]
Permanent structured data15–61 GB without diffs or CI logsDerived [7]
Temporary clone and SZZ scratch space1–1.5 TB across machinesEstimate
Recommended total storage2 TBEstimate
Model artifact10–100 MBEstimate
Model plus repository layers100 MB–1 GBEstimate
Feature matrix and cache10–80 GBEstimate

Positive-label counts are upper bounds based on closed PRs before bot and backport filtering. Roughly one SZZ label in three is likely wrong, so SZZ is weighted below reverts and follow-up fixes.

Machine allocation

ItemValueStatus
Machines8Estimate
Repositories per machine3–22, balanced to about 360,000 PRs eachEstimate
Parallel workers per machine3–4Estimate
Repositories per worker1 at a timeEstimate
Recommended disk per machine250–500 GBEstimate
Largest repositoriesllvm-project, pytorch, swift and flutter on the biggest disksDecision

Data split

PurposeValueStatus
Training70 repositoriesDecision
Unseen-repository validation15 repositoriesDecision
Final unseen test15 repositoriesDecision

Each repository's split is in the tables above. Validation tunes the per-repository layer and thresholds; the final test is touched once. Held-out sets cover every category, most languages, at least four repositories under 6,000 PRs, and one giant each (godot in validation, elasticsearch in test). Splits within each training repository are time-ordered.

Extraction timeline

TaskExpected timeStatus
One- or two-repository pilot1–3 daysEstimate
Clone repositories and count commits1–2 daysEstimate
List-level PR metadata (GraphQL)2–3 daysDerived [6]
Full extraction with reviews and checks2–3 weeksDerived [6]
Labelling and audit (reverts, R-SZZ, follow-up fixes)5–7 daysEstimate
Feature generation1–7 daysEstimate
Global model trainingMinutes to several hoursEstimate
Repository-layer trainingSeconds to minutes per repositoryEstimate
BacktestingHours to several daysEstimate

API limits and data retention

ItemValueStatus
REST core limit5,000 requests an hour per userSourced [8]
REST secondary limit900 points a minute; 100 concurrent requestsSourced [8]
GraphQL limit5,000 points an hour; apps up to 12,500Sourced [8]
Search API limit30 requests a minute, authenticatedSourced [8]
Check runs and statuses retentionAt most 90 daysSourced [9]

Retention applies to public repositories from 1 October 2026.

Storage strategy

Store:

  • pull_requests.parquet
  • commits.parquet
  • file_changes.parquet
  • reviews.parquet
  • check_runs.parquet
  • tags.parquet
  • mined_history.json
  • features.parquet

Avoid storing permanently:

  • full historical blobs
  • complete repository clones
  • duplicate API responses
  • all full diffs
  • raw Claude transcripts

Temporary clones and diffs are used to compute features, then deleted once validation is complete.

Full diffs and accuracy

ItemValueStatus
Storage without full diffs15–61 GBDerived [7]
Storage with full diffs kept150 GB or moreEstimate
Accuracy gain from diff-text modelsSmall; often none over simple size featuresSourced [11]
Recommended approachCompute diff features from temporary diffs, then delete the diffsDecision

Zeng et al. tested deep models that read diff text (DeepJIT, CC2Vec) on over 310,000 changes. Neither beat traditional metric-based models consistently, and a logistic regression on lines added alone outperformed both. Keeping full diffs permanently therefore adds storage without a reliable accuracy gain.

Model expectations

MetricPlanning targetStatus
ROC-AUC, within-project time split0.70+Sourced [3][4]
ROC-AUC, unseen repositories0.65+Sourced [5]
PR-AUCAt least 2× the bad-rate baselineSourced [4]
Lift at top 20%2–4× FIFOSourced [3][4]
Recall at top 20% of effort40–60% (literature 35–75%)Sourced [3][4]
Reliable positive examples5,000 minimum; 10,000–20,000 preferredEstimate

These are targets, not guaranteed results. Cross-project models are notably weaker than within-project models, so the unseen-repository splits are judged on their own target.

Data caveats

  • From 1 October 2026, GitHub keeps check runs, workflow runs and commit statuses on public repositories for at most 90 days. CI-failure labels will only cover a rolling window from the day archiving starts. Missing CI data is treated as missing, not negative.
  • The 10 largest repositories hold about a third of all PRs. Each repository is capped (for example 20,000 PRs, sampled across time) or reweighted, and metrics are reported per repository.
  • Many repositories merge outside the GitHub merge button (rust, pytorch, angular, openssl, php-src, spark, flink, spring-boot, bitcoin, node). Merges are detected by commit SHA or the PR number in commit messages.
  • llvm/llvm-project has used GitHub PR review only since September 2023, and php/php-src only since 2021.
  • tensorflow/tensorflow PRs are mostly generated by an internal Copybara sync, and are filtered by author before training.
  • Bot, backport, sync and dependency-bump PRs are filtered, or modelled separately.
  • History breaks: renames (scala3, trino, luanti, thunderbird-android, dbt), repository mergers (the flutter engine), private-then-public history (zed), and tracker moves (arrow).
  • GH Archive under-captured PR and issue events from mid-2025 [13]. It is checked against the API before any backfill.
  • Commit counts marked ~ are estimates, replaced with git rev-list --count HEAD after cloning.

Minimum viable pilot

Before extracting all 100 repositories, one or two repositories must show that the pipeline can:

  • Resume after interruption
  • Avoid duplicate records
  • Produce valid Parquet tables
  • Produce a valid mined_history.json
  • Track API requests and rate limits
  • Report missing reviews and check runs
  • Detect merges done outside the GitHub merge button
  • Filter bot, backport and sync PRs
  • Generate point-in-time features
  • Complete schema validation
  • Run without Claude remaining active

Sources

  1. Shimagaki et al., Why are commits being reverted? (ICSME 2016)
  2. Keshavarz and Nagappan, ApacheJIT (MSR 2022)
  3. Kamei et al., A large-scale empirical study of just-in-time quality assurance (TSE 2013)
  4. Yan et al., Characterizing and identifying reverted commits (EMSE 2019)
  5. Kamei et al., Studying just-in-time defect prediction using cross-project models (EMSE 2016)
  6. Rate-limit arithmetic in this plan, plus the Kubernetes export anchor [7]
  7. Grunert, My exciting journey into Kubernetes history (Kubernetes Blog, 2020)
  8. GitHub Docs, Rate limits for the REST API
  9. GitHub Changelog, Actions retention will cover checks, workflow runs, and statuses (27 Aug 2026)
  10. Gousios and Zaidman, A dataset for pull request research (MSR 2014)
  11. Zeng et al., Deep just-in-time defect prediction: how far are we? (ISSTA 2021)
  12. Rosa et al., Evaluating SZZ implementations through a developer-informed oracle (ICSE 2021)
  13. OSSInsight, GitHub events feed under-capture notice