#163 ✅ What happens to your audit findings after the audit?

Happy Wednesday!

Here is issue #163 of our newsletter, bringing you news and the best tools for your current or future Rails projects…

1. 🚀 A site audit is a snapshot, not a fix. Julio walks through how FastRuby.io turned thin-content, anchor-text, and metadata findings into checks that run on every build, instead of resurfacing at the next audit months later. The post covers a word count, text ratio, and semantic ratio checker built on Nokogiri, plus a request spec that verifies metadata tags across every public page. One fix, an sr-only span on icon-only links, doubles as an accessibility and SEO win.

2. 🧩 Why did new-developer growth to Ruby fall off a cliff? Matt Solt argues the cause is a 2020 decision not to merge ViewComponent into Rails core, which left the frontend without an official component convention and splintered it into ViewComponent, Phlex, Inertia, and partials. His fix is Poetry, an AI-native UI framework built on ViewComponent that gives coding agents a checkable component contract to compose from.

3. 🛠️ Eight Active Record deprecations are already on Rails main. Nothing breaks today. Most are renames you can knock out anytime. One isn't. Julio rounds up eight Active Record deprecations on Rails main, then flags the one to actually test for: update and update! On a scoped relation, now raise RecordNotFound instead of writing to a record outside that scope.

4. 🗄️ ActiveRecord is the wrong abstraction for record sets. This Noteflakes post argues that ActiveRecord's row-to-object mapping fits poorly for record-set-heavy data like tags, time series, and event logs, missing SQL features like window functions, CTEs, and RETURNING. In its place: hand-written "store" classes wrapping plain SQL on the Extralite gem, returning Ruby hashes, with Extralite's Transform turning joined rows into nested objects.

5. 🧪 Psych's new libfyaml backend passes 99.5% of the YAML conformance suite. Its default libyaml backend? 77.8%. David Berube ran the YAML conformance suite against a dozen parsers, comparing Psych's two backends, documenting exactly where the default libyaml backend breaks from spec, like rejecting unknown directives that most other parsers accept. He cautions the failures are mostly contrived edge cases, so whether the libfyaml backend is worth adopting is a judgment call.

6. 🧵 RSpec has before(:suite) and after(:suite), but no around(:suite). Ben Sheldon walks through using a plain Fiber to bridge a block-scoped API into separate start and stop methods: resume once to smuggle the resource out of the block, again to end it. He compares it to the Thread-and-two-Queues version he'd otherwise have reached for, and patches an around_suite callback onto RSpec with the same trick.

7. 🧹 Ruby's own exceptions don't end in a period. Now Grape's don't either. While reviewing a batch of Grape pull requests, dblock noticed its raise ArgumentError, "..." calls were capitalized and punctuated inconsistently, unlike Ruby's own lowercase, unpunctuated exceptions. He makes the case for that convention and introduces rubocop-exception_messages, a RuboCop plugin whose cops autocorrect messages to match and can enforce the opposite convention just as well.

8. 🤝 The GC finally stopped being a black box to Ruby's JIT. For eight years, JIT compilers couldn't touch object allocation and had to make a C function call for every object. Peter Zhu explains how ZJIT now has the GC hand it everything it needs to allocate an object directly, inlining the allocation fastpath and skipping that call. It already covers hash, range, array, and string literals plus plain object instances, and a hash microbenchmark runs 1.77x faster, 66.4ms versus 117.2ms, with 2-3x gains reported for other types.

Upcoming Events & Learning

  • Philly.rb's Lightning Talks at Indy Hall: September 15th, 5:30–8:00 pm. Space is limited, so submit a talk if you've got one, and RSVP now.
  • 🎓 Workshop: OmbuLabs is running a live, hands-on Claude workshop for small business owners on September 16th: set your account up safely, learn which processes are actually worth automating, then build and roll out a reusable Claude skill for your team; no technical background required.

Check out our other articles on: ​​​Ruby | Rails | Compatibility | ​​Upgrades​​​​ | ​​​​Tech Debt​​​ | AI

Bookmark, share, or save them for later. We hope these links are helpful. 😉

Best,

The ​​​​​​FastRuby.io​​​​​​ Team

Do you know anyone who would love to receive this newsletter? Tell them to subscribe👇 and catch the latest issue right in their inbox.

Don't wait to bring your Rails application up to date.

We will get on a quick call and recommend a couple of options to start upgrading your Rails app.