[]SELECTIVE
Login
// hero.txt

AI MADE YOU
FASTER.
CI MADE YOU
SLOWER.

> Selective is the intelligence layer
> on top of your CI. It shortens the
> feedback loop from minutes to
> seconds — without changing your stack.

14 days // no card // $10/committer · special early adopter pricing
[run.4127 // identity.rb → main][OPTIMIZING]
app/services/billing/identity.rbunchanged
1 class IdentityResolver
2 def resolve(commit)
3 return by_id(commit.author_id) if commit.author_id
4 by_email(commit.author_email)
5 end
6
7 def by_email(email)
8·
9·
10·
11
12
QUEUE · 9 of 30
01auth/session_spec.rb#refresh_token
02admin/audit_log_spec.rb#redact
03identity_spec.rb#resolve_when_github_id
04invoice_spec.rb#proration_mid_cycle
05cache_spec.rb#expires_after
06webhook_spec.rb GET /hooks/github
07commit_resolution_worker_spec.rb#perform
08portal_spec.rb GET /billing/portal
09pricing_spec.rb#per_committer
· Idle
// real_time.txt

RESULTS
WHILE
THEY HAPPEN.
NOT AFTER.

Results stream back as they finish — see a failure in 6 seconds, not 6 minutes. Pipe to your terminal, or watch the dashboard.

[$ selective tail --run-id=29238][STREAMING]
[listening · 0 events]
// distribution.txt

ALL NODES
FINISH
AT THE SAME
SECOND.

Splitting tests up front by file is the slowest way to run a suite. The heaviest file lands on one node, the others finish early — and you wait on the slowest node before you can merge. Selective splits dynamically, one example at a time, off a central queue. Fastest node grabs the next example. No straggler.

+ Per-example, not per-file   + Dynamic queue, not pre-split
[without selective // ci.yml split: by_file][RUNNING]
node-01
node-02
node-03
node-04
node-05
0s1:30
elapsed 0:00 of 1:30
[with selective // queue: dynamic][RUNNING]
node-01
node-02
node-03
node-04
node-05
0s0:50
elapsed 0:00 of 0:50
// retries.txt

RETRIES HAPPEN
WHILE THE SUITE
IS STILL RUNNING.

Not after. Not in a second pass. The moment a test fails, Selective re-queues it on the next free node — the rest of the suite never pauses. By the time the suite finishes, the retry has too.

+ No second job   + No 2× wall-clock   + Retry attempts logged honestly
[$ selective tail --run-id=29238][STREAMING]
00:01identity_spec#resolve_when_github_id
00:01commit_resolution_worker_spec#perform
00:02webhook_spec GET /hooks/github· flake
00:03portal_spec GET /billing/portal
00:03invoice_spec#per_committer
00:04team_spec#invite_member
00:05pricing_spec#proration
00:05billing_dashboard_spec#current_committer_count· failed on retry
00:06session_spec#refresh_token
00:06plan_spec#upgrade_path
00:07audit_log_spec#redact
00:08membership_spec#per_committer
[1 flake · 1 fail]
// flake_detection.txt

FLAKES SURFACE.
THEY DON'T HIDE
IN YOUR LOGS.

Every failed test retries automatically. If it passes on retry, the test is marked as a flake — not buried in your logs, not waiting to bite you in prod.

+ Same-run detection   + No log digging required
[flake_dashboard.txt // last 12 runs · branch: main][2 FLAKES]
testruns · oldest → newestratetrend
identity_spec#resolve_when_email············0%
webhook_spec GET /hooks/github··F··F··F·F·33%↑ 4×◆ FLAKE
invoice_spec#per_committer············0%
import_worker_spec#imports_batches·····F·····F17%↑ 2×◆ FLAKE
session_spec#refresh_token············0%
passfailpass on retry// click any row → 14-day timeline + last failure trace
// start.txt

STOP WAITING
FOR CI.

14 days of the real thing on your real test suite. No credit card, no sales call. One line in your CI config.

[pricing][14-DAY FREE TRIAL]
$10/ committer / month
+ Active committers only
+ No commits this month → $0
+ Early adopters: $10/mo locked in for a year
[install]
# 1. gem
$ gem install selective-ruby-rspec # or selective-ruby-minitest
# 2. push
$ git push
# 3. cli tail
$ selective tail --run-id=29238
// supported_runners
RSpec// Rubyready
Minitest// Rubyready
·ExUnit// Elixircoming soon
[]SELECTIVE
// © 2026 // built by rails engineers who waited too long