Introducing siftwise · Part 7 of 10

Evidence

These are replays of real CI history with no peeking: for each target run, history is rebuilt only from runs before it, and import graphs are built at that commit. The repos were picked for having JUnit artifacts and real failures, not for flattering results. The method is in the eval methodology; every number below is in eval results.

Selection replays

RepoFailures caughtTest time skipped
RDFLib/rdflib
Python, ~18,000 tests
2,049 of 2,050 in 39 failing PRs; 140 of 141 in selective runs 10.4% on the 10 most recent PRs; 0.6% over 19 main commits
agent-substrate/substrate
Go, ~9,000 tests
2,043 of 2,044 in 72 failing PRs; 38 of 39 in selective runs, with two declared rules 5.1% on PR runs; 13.9% over 40 main commits, with both rules
quantumlib/Cirq
Python monorepo, 9 packages
Not measurable: JUnit only from main, which never failed 37.9% over 132 merged PRs
ipfs/kubo
Go, ~4,100 tests, week-2 code
19 of 19 in failing PRs 30.7% over 20 main commits replayed as PRs; 0% on recent PRs
A terminal running siftwise select on an rdflib commit that changed rdflib/graph.py: 325 test files import the changed modules, and siftwise selects 17921 of 18020 known tests.
Why rdflib saves so little: a commit changing rdflib/graph.py reaches 325 test files through the import graph, so 17,921 of 18,020 known tests run. That's correct for this codebase.

The caveats matter as much:

Triage eval

Every run with failures was triaged by the production engine as of just before it, then scored against proxy labels from what happened afterwards.

Caveats: the labels are proxies that partly share evidence with the rules, and episodes are few (12 on rdflib, 34 on substrate), so treat percentages as counts. Blind spot: on rdflib, where every change links to every test and CI never re-runs a commit, the remote-service tests were called new_regression 12 times out of 13.

Shadow mode

No live shadow-mode recall numbers are published yet; that comes after launch. The mechanism is tested end to end: the project's action-e2e.yml runs all three actions against a real server on every push and PR, including a shadow run with a miss. The screenshot is that comment; the tests are the workflow's fixtures, not a real project's.

siftwise PR comment on a shadow run: would have run 197 of 900 tests, two failures with verdicts, and one missed test with its cause, new test.
A shadow run's PR comment: what siftwise would have run, each failure with its verdict, and the failure the selection would have missed, with its cause.

Live numbers will be raw counts: failures are rare on healthy repos, and zero misses in n failures only bounds the miss rate below about 3/n at 95%.

Performance

Measured on 2026-10-19 on a Windows laptop, Postgres 16 in Docker; results identical before and after.

PathBeforeAfter
Triage of rdflib's widest CI run attempt (22 variants)1,032 ms, 180 queries220 ms, 12 queries
Selection inside /select, rdflib, a one-file change605 ms237 ms
Shadow comparison, 1 / 5 / 20 variants (synthetic)27 / 75 / 255 queries27 / 27 / 27
Ingest of a 9,891-result rdflib upload~2.2 s~1.25 s

/select takes about 0.4 s on rdflib's 18,000 tests (0.3–1.4 s across the measured changes). Not everything is fast: the repo-wide stats rollup takes 119 s on rdflib, and that wasn't changed.

Tip: use the ← and → keys to move between sections.Tip: swipe left or right to move between sections.