Bugfix Fork Detection & Filtering

Published on January 16, 2019

Improvements to search result relevance were another big topic in the recent community survey. In that regard today I'd like to introduce the detection of bugfix forks.

Bugfix forks are patched variants of popular gems, usually from a time before bundler made it very easy to switch a gem source to a patched git repo branch while waiting for the fix to be merged and released upstream.

They usually have very few downloads and only a single release, long in the past - however, they often still link the very popular upstream github repo, leading to a very high toolbox popularity score. Now, since the score affects the search result order, for popular keywords the top results used to be full of those forked gems.

Based on what I observed on those libraries I added logic to detect those bugfix forks and excluded them by default from search results, with a toggle button to re-enable display.

To illustrate how this affects search results, here's the top 10 search results for the term "authentication" before this change and afterwards, with the default of filtered bugfix forks (Rubygem downloads in parentheses).

Before Now
devise (43168395) devise (43168395)
graffititracker_devise (2662) warden (43948376)
cloudfoundry-devise (3560) omniauth (26476271)
shingara-devise (4833) mixlib-authentication (10410063)
devise-no-session (365) ruby-hmac (11883122)
upstream-devise (997) ntlm-http (8837767)
mongoid-devise (3097) koala (6816462)
namxam-devise (1403) authlogic (3591583)
rmello-devise (2280) net-http-digest_auth (10186524)
loyal_devise (12907) rubyntlm (10124188)

On top of that search results now finally have pagination. Together with the recently launched project sorting, these three changes will hopefully bring a significant improvement to your Ruby Toolbox search experience:

This feature also brings the first feature documentation page. As mentioned before I want to work more on this topic in the next weeks to make the site's features easier to understand and accessible.

As usual if you'd like to give feedback on this a great place for that is the Pull Request of the feature.