01The scorecard
Measured over HTTP, June 2026, against each project's documentation page (✓ good, ✗ missing). Retrieval: can an agent read the docs at request time? Training: would they reach a model's corpus, through code or through the web? The code column holds the corpus's own answer: every docs repo is checked against the official Am I in The Stack? index. A repo already in The Stack skips the web filters, so its web cells dim. Click any heading to sort; what each column means →
| Resource (docs) ▲ | Retrieval can an agent find it at request time | Training would it reach the corpus | |||||||
|---|---|---|---|---|---|---|---|---|---|
| robots allows AI ▲ |
crawlable (no WAF) ▲ |
sitemap ▲ | llms.txt ▲ | content negotiation ▲ |
.md routes ▲ |
in The Stack v3 observed; docs repo license ▲ |
Common Crawl ▲ |
quality best of 5, ≥3 ▲ |
|
| Core (Ruby Central / Rails Foundation / community-run) | |||||||||
| Ruby (language) | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗NOASSERTION | 4,756/— | ✓3.7 |
| Rails Guides | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 276/— | ✓3.8 |
| Rails API | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 1,845/— | ✓3.6 |
| RubyGems Guides | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓NOASSERTION = CC-BY-SA (Creative Commons Attribution-ShareAlike) | 12/98 | ✓2.8 |
| Bundler | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓(no license file) | 212/— | — |
| RubyDoc.info | ✗blocks ccbot, gptbot, claudebot, google-extended, applebot-extended | ✓ | ✗ | ✗ | ✗ | ✗ | — | 4/— | ✓3.8 |
| Frontend & View | |||||||||
| Hotwire | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓(no license file) | 6/— | ✗1.9 |
| Turbo | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓(no license file) | 5/— | ✗2.0 |
| Stimulus | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓(no license file) | 3/— | ✓2.8 |
| ViewComponent | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 12/— | ✓2.8 |
| Phlex | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓MIT | 44/— | ✓3.1 |
| Ruby UI | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓(no license file) | 96/— | — |
| Inertia Rails | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓MIT | 21/60 | ✗1.9 |
| Lookbook | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 16/— | ✗1.6 |
| Vite Ruby | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓MIT | 6/— | ✗2.1 |
| Web Frameworks | |||||||||
| Roda | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 6/— | ✗2.0 |
| Sinatra | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓(no license file) | 37/— | ✗2.2 |
| Hanami | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓(no license file) | 14/— | ✗1.9 |
| Bridgetown | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗opted out | 68/139 | ✗2.1 |
| Jekyll | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓MIT | 40/210 | ✗1.9 |
| Rage | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗after cutoff | 6/35 | ✗1.7 |
| Data & ORM | |||||||||
| Sequel | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 125/— | ✗2.0 |
| ROM | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓(no license file) | 15/— | ✗1.7 |
| dry-rb | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓(no license file) | 36/— | ✗1.8 |
| AI | |||||||||
| RubyLLM | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓MIT | 65/— | ✗2.4 |
| Background, Realtime & Deploy | |||||||||
| Sidekiq | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓LGPL-3.0 | 3/— | ✗1.9 |
| AnyCable | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓MIT | 36/85 | ✗2.0 |
| Kamal | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓(no license file) | 32/— | ✗1.5 |
| Falcon | ✓ | 404 | ✗ | ✓ | ✗ | ✗ | ✓MIT | 3/— | ✗2.0 |
| Karafka | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓NOASSERTION = custom, 'All Rights Reserved' for original wiki content | 136/209 | ✓2.6 |
| Heroku | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | 0/— | ✗1.7 |
| Fly.io | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓Apache-2.0 | 14/— | ✗1.7 |
| Render | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | 0/— | ✗2.1 |
| Railway | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓MIT | 0/— | ✗2.2 |
| DigitalOcean | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | — | 0/— | ✗1.8 |
| AWS Elastic Beanstalk | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓CC-BY-SA-4.0 | 46/— | ✗2.4 |
| PlanetScale | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓Apache-2.0 | 0/— | ✗2.3 |
| Supabase | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓Apache-2.0 | 0/— | ✗2.1 |
| Neon | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓(no license file) | 0/— | ✗2.2 |
| Tooling & Types | |||||||||
| Sorbet | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓Apache-2.0 | 21/86 | ✓2.8 |
| RuboCop | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓MIT | 415/1,681 | ✗1.9 |
| RSpec | ✗blocks gptbot | ✓ | ✗ | ✗ | ✗ | ✗ | ✗opted out | 159/— | ✗1.6 |
| TestProf | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓MIT | 11/— | ✗2.1 |
| Pry | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓(no license file) | 0/— | ✗1.7 |
| Brakeman | ✓ | 000 | ✗ | ✗ | ✗ | ✗ | ✓(no license file) | 0/— | — |
| Standard | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓MIT | 0/— | ✗1.8 |
| Sentry | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓FSL-1.1-Apache-2.0 | 45/— | ✓2.8 |
| AppSignal | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | 126/— | ✗2.0 |
| New Relic | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓CC-BY-NC-SA-4.0 | 28/— | ✗1.8 |
| Datadog | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓BSD-3-Clause | 0/— | ✗1.2 |
| Honeybadger | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | — | 27/— | ✗2.5 |
| Rollbar | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓(no license file) | 0/— | ✗1.6 |
| Bugsnag | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | — | 9/— | ✗1.6 |
| Scout APM | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓(no license file) | 5/— | ✗1.4 |
| Skylight | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✓CC-BY-NC-SA-4.0 | 23/— | ✗1.5 |
| Better Stack | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | — | 0/— | ✗1.9 |
| Papertrail | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | — | 4/— | — |
| GitHub Actions | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓CC-BY-4.0 | 0/— | ✓2.7 |
| Libraries | |||||||||
| GraphQL Ruby | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 1,804/— | ✓2.5 |
| Rodauth | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 46/— | ✗2.0 |
| Action Policy | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓MIT | 17/— | ✓2.6 |
| Shrine | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓MIT | 6/127 | ✗2.4 |
| Avo | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓(no license file) | 168/— | ✗1.6 |
| ActiveAdmin | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 8/— | ✗1.8 |
| Ransack | ✓ | 404 | ✗ | ✓ | ✗ | ✗ | ✓MIT | 2/— | ✗1.4 |
| Pagy | ✓ | 404 | ✗ | ✓ | ✗ | ✗ | ✓MIT | 5/— | ✗1.5 |
| Nokogiri | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓MIT | 11/22 | ✗1.8 |
| Faraday | ✓ | 404 | ✗ | ✓ | ✗ | ✗ | ✓MIT | 0/— | — |
| Capistrano | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓MIT | 6/— | ✗2.2 |
| Trailblazer | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓(no license file) | 19/— | — |
| imgproxy | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓(no license file) | 141/529 | ✗1.4 |
| Flipper | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓MIT | 43/70 | ✗1.7 |
| Devise | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓MIT | 0/— | ✗1.8 |
| Pundit | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓MIT | 0/— | ✗1.4 |
| CanCanCan | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✓MIT | 0/— | ✗1.4 |
| Community & Resources | |||||||||
| GoRails | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | — | 1,167/— | ✓2.7 |
| Drifting Ruby | ✗blocks gptbot | ✗WAF block | ✗ | ✗ | ✗ | ✗ | — | 7/— | ✗1.6 |
| RubyEvents | ✗blocks ccbot, gptbot, claudebot, google-extended, applebot-extended | ✗WAF block | ✓ | ✗ | ✗ | ✗ | ✓(no license file) | 2/16,618 | ✗1.1 |
| Rails at Scale (Shopify) | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | — | 43/116 | ✓3.3 |
| SF Ruby | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | — | 14/— | ✗1.2 |
| Ruby Weekly | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | — | 219/625 | ✗1.2 |
| Short Ruby | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | — | 279/293 | ✗1.2 |
| This Week in Rails | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | — | 32/— | ✗1.4 |
| Evil Martians | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | 114/— | ✗1.7 |
| Hotwire Weekly | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | — | 0/— | ✗1.2 |
| Write Software Well | ✗blocks ccbot, gptbot, claudebot, google-extended, applebot-extended | ✓ | ✗ | ✗ | ✗ | ✗ | — | 2/— | ✓2.8 |
| Thoughtbot | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | — | 43/— | ✗1.7 |
| AppSignal Blog | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | — | 333/1,075 | ✗2.2 |
| Riding Rails | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓(no license file) | 57/— | ✗1.6 |
| Joe Masilotti | ✗blocks ccbot, gptbot, claudebot, google-extended, applebot-extended | ✓ | ✓ | ✗ | ✗ | ✗ | ✓(no license file) | 2/134 | ✗1.6 |
| Code with Jason | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | — | 165/532 | ✓2.6 |
| Maintainable | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | — | 330/482 | ✗1.6 |
| Ruby News | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓(no license file) | 203/— | ✓3.0 |
The second gate: a quality filter
Being crawled is the first gate. A classifier is the second. We scored up to five pages per resource with the open FineWeb-Edu filter, which keeps score ≥ 3. Counting each resource's best page, 19 of 93 clear the bar (top: RubyDoc.info 3.8, Rails Guides 3.8, Ruby (language) 3.7); for 49 even the best of five scores below 2. The filter rewards tutorial prose and penalizes reference docs and code, exactly what developers need most. Docs in a public repo skip this filter entirely; that is what the "in The Stack v3" column measures. Why the code channel decides this →
Licenses, as GitHub reports them
The cell prints the license string GitHub's API returns, verbatim, because that string is
what tooling reads. It is lossy: every license GitHub cannot match becomes NOASSERTION
("Other"), so a bespoke permissive license and a source-available one look identical there. Across the
70 resources with a public docs repo:
MIT32Apache-2.04NOASSERTION3 any custom or source-available termsCC-BY-NC-SA-4.02BSD-3-Clause1CC-BY-4.01CC-BY-SA-4.01FSL-1.1-Apache-2.01LGPL-3.01(no license file)24
The reading predicts; the train set decides. The Stack v3 filters file
by file, and only the result is observable: 66 of 70 docs repos are
in, including karafka/wiki, whose license file says "All Rights Reserved", while
karafka/karafka (LGPL) is out and sidekiq/sidekiq (also LGPL) is in. A missing
license is no barrier: The Stack keeps unlicensed files. Opting out works: the
rspec and bridgetownrb orgs
asked to be removed and are absent
org-wide. Where we read a license file ourselves, that row's tooltip carries the terms.
The full license guide →
02Rails products, tested against the harvest filters
The table above tracks documentation. Models also learn Rails from complete applications, and agentic RL pipelines mine them mechanically. The SWE-bench family selects top-starred repos, derives the test command from CI config, rebuilds the environment in a container, and turns each merged PR that closes an issue and touches tests into one verifiable training task; SWE-bench Multilingual discards about 30% of candidate repos whose tests will not build or run too slowly. Below: the top-starred open-source Rails products, measured against exactly those filters over the GitHub API.
| Product | stars | Code corpus would the code reach a pretraining set | RL harvest could a SWE-bench-style pipeline mine it | |||||
|---|---|---|---|---|---|---|---|---|
| license as GitHub reports it |
SWH archive |
in The Stack v3 observed |
test CI | median run |
container recipe |
issue-linked PRs w/ tests of last 50 merged |
||
| Maybepersonal finance app; archived 2025-07-24 | 54,340 | AGPL-3.0 | ✓ | ✗ | ✗no test workflow | — | ✓ | 0/50 |
| Mastodonfederated social network | 50,182 | AGPL-3.0 | ✓ | ✗ | ✓Ruby Testing | 14 min | ✓ | 0/50 |
| Huginnself-hosted automation agents | 49,766 | MIT | ✓ | ✓ | ✓CI | 8 min | ✗ | 0/50 |
| Discoursecommunity forum | 47,624 | GPL-2.0 | ✓ | ✗ | ✓Tests | 14 min | ✓ | 0/50 |
| Metasploitpenetration-testing framework | 38,773 | NOASSERTION | ✓ | ✓ | ✓Extended Tests | <1 min | ✓ | 5/50 |
| Chatwootcustomer support platform | 35,659 | NOASSERTION | ✓ | ✓ | ✓Frontend Tests | 7 min | ✓ | 4/50 |
| GitLabDevOps platform (GitHub mirror; development on gitlab.com) | 24,529 | NOASSERTION | ✓ | ✓ | ✗no test workflow | — | ✓ | 0/50 |
| Foremcommunity platform behind dev.to | 22,762 | AGPL-3.0 | ✓ | ✗ | ✓CI | 9 min | ✓ | 3/50 |
| DocuSealdocument signing | 18,227 | AGPL-3.0 | ✓ | ✗ | ✓CI | 5 min | ✓ | 0/3 |
| Postalmail delivery platform | 16,725 | MIT | ✓ | ✓ | ✓CI | 3 min | ✓ | 2/50 |
| OpenProjectproject management | 15,811 | GPL-3.0 | ✓ | ✗ | ✓Test suite | 24 min | ✓ | 0/50 |
| Diasporafederated social network | 13,657 | AGPL-3.0 | ✓ | ✗ | ✓CI | 19 min | ✗ | 3/50 |
| Fizzykanban board by 37signals | 8,044 | NOASSERTION = O'Saasy License Agreement | ✗ | ✗after cutoff | ✓CI (Main) | 3 min | ✓ | 0/50 |
| Canvas LMSlearning management system | 6,764 | AGPL-3.0 | ✓ | ✗ | ✗no test workflow | — | ✓ | 0/50 |
| Redmineproject management (SVN mirror; patches via redmine.org) | 6,014 | NOASSERTION | ✓ | ✓ | ✓Tests | 26 min | ✗ | — |
| Zammadhelpdesk and ticketing | 5,837 | AGPL-3.0 | ✓ | ✗ | ✓CI | 93 min | ✓ | 2/50 |
| Lagousage-based billing (the Rails API behind getlago/lago) | 431 | AGPL-3.0 | ✓ | ✗ | ✓Run Spec | 9 min | ✓ | 0/50 |
Copyleft keeps the Rails flagships out of the permissive code corpus.
6 of 17 products are observed in The Stack v3 train set, and every AGPL- and
GPL-licensed product is absent, because v3 keeps permissively licensed and unlicensed files. All six
that are in report MIT or NOASSERTION terms.
Most products also fail the PR-to-issue linkage filter. 6 of 17
merged at least one issue-closing, test-touching PR in the sampled window, and 5 of
17 have GitHub issues disabled (Discourse and OpenProject triage on their own forums;
GitLab and Redmine are mirrors of development that happens elsewhere), so a pipeline mining GitHub
finds no harvestable instances there. The runtime filter bites too: Zammad's suite runs a 93-minute
median, the kind SWE-bench Multilingual discards. The direct workaround is
Multi-SWE-RL: its task pipeline is
open, it accepts community contributions, and Ruby is absent from it today.
03What will move the needle
Four levers, ordered by depth, all pushing the same number. Rails is plural by design, so the work is shared defaults and shared conventions. Each layer shows its goal as a live gauge; all of them feed the final boss below.
Layer 0: get into the corpus at all ship now
- Unblock AI crawlers (CCBot, GPTBot, ClaudeBot, Google-Extended) in robots.txt and at the WAF. One line at RubyEvents frees ~15,775 pages of talks.
- Add sitemaps, server-render, link internally, earn backlinks.
- CC-license conference video and publish transcripts: Gemini trains on YouTube, and CC-licensed talks flow into open corpora.
Layer 1: win retrieval and publish comparisons (content) ship now
Win retrieval
Why: an agent fetching a doc should get Markdown it can read. Today it gets HTML to scrape.
- Serve Markdown by content negotiation and
.mdroutes (Mime::Type.register "text/markdown", :md). Plain HTTP, already used by agents, the durable bet. Ship llms.txt too; it is cheap. - Teach rdoc to emit Markdown and content negotiation by default: one change that lifts every gem at once.
Publish the missing comparisons
A model argues for what its corpus argues for, and almost nothing argues, with numbers, that Rails is the better build for these products. 0 of 12 comparisons are solid; the rest are generic takes or missing.
| Build … in Rails | vs JS fullstack Next.js / Node | vs Python FastAPI / Django |
|---|---|---|
| B2B SaaS multi-tenant, team invites, billing | missing | missing |
| Online store catalog, cart, checkout, admin | generic1 | generic1 |
| Team inbox shared inbox, collaborative replies | missing | missing |
| Issue tracker projects, issues, statuses, comments | generic2 | missing |
| Approval workflow upload, route for sign-off, track | missing | missing |
| Internal admin staff-login CRUD dashboard | generic2 | generic3 |
Sources: 1 monterail.com · 2 kunalganglani.com · 3 goudeketting.nl
Snapshot 2026-06: one web search per task and stack, then judged. solid current, task-specific, with numbers · generic framework pros and cons · missing nothing credible.
Layer 2: make agents fluent in the gems (tools) ship now
- Agree on a convention so a gem ships agent tooling (an MCP endpoint, a skill) the way it ships a README.
- Converge on one Rails MCP server: agents introspect the app (gems, versions, schema, routes) and pull current docs on demand.
- Agree on a shared Agent Skills convention so skill packs interoperate.
- Copy Laravel Boost: official MCP, version-pinned guidelines, on-demand skills. Rails has the parts (fast-mcp, Tidewave, rails-mcp-server, the official Ruby MCP SDK), and a Boost-shaped bundle is emerging in rails-hyperdrive new.
Why: models know standard Rails. The gems, and anything past the training cutoff, are where agents guess. A convention scales the fix across that long tail.
Layer 3: change the training default long game
- Contribute real Rails repos to Multi-SWE-bench and publish an open idiomatic-Rails eval. Agentic benchmarks are where coding ability is now measured, Ruby is absent from them, and adding a language to an eval measurably lifts models on it (MultiPL-T, Bridge-Coder).
- Grow Ruby's share of the corpus. In The Stack v2, Ruby is ~6.8 GB to Python's ~60, and capability tracks share. Publish an open idiomatic-Rails instruction dataset; contribute permissive Ruby to open corpora like Common Corpus.
- Re-run the public whichlang benchmark on each new model; it is the scoreboard below.
★ The final boss
Frontier models reach for Ruby more often. One metric, fed by every layer above: given a free choice, 13 models picked Ruby 0 times in 1,267 solutions (they default to Python, JavaScript, and Go). Win condition: the zero starts climbing, model after model.
04Methodology
Probed over HTTP, June 2026, against each project's documentation URL: robots.txt parsed
for AI user-agents; crawlability fetched as CCBot, which catches WAF blocks; content negotiation asked
with Accept: text/markdown; .md routes and llms.txt checked for a 200.
The Stack v3 membership is read from the official
Am I in The Stack? index, one
lookup per repo owner. An absence is attributed only when the reason is verified (an opt-out issue, a
repo public after the 2025-08-07 crawl cutoff) and says "not established" otherwise. The language-choice
figure is whichlang's: 13 models, 1,267 classified
solutions, 0 Ruby. The Rails-products table is measured in August 2026 over the GitHub API (stars,
license, workflows and their run durations, the last 50 merged PRs via GraphQL), the Software
Heritage origin API, and the same Am-I-in-The-Stack index.
Why Common Crawl? It seeds most open web corpora (C4, FineWeb, behind GPT and Llama), samples by domain centrality, and never copies a site in full, so coverage is a proxy for whether a model saw the docs at all. It also reflects crawls already taken: the one column you cannot fix this quarter, which is why Layer 0 exists. How it samples →