Erwin Kroon's wroclove.rb 2024 single-speaker talk on introducing Sorbet, Stripe's gradual type checker for Ruby, to GitHub's 10-year-old Issues-platform Ruby codebase. Walks through Sorbet syntax (`# typed:` sigil with false/true/strict, `extend T::Sig`, method signatures, T.unsafe, T.must, T.cast, T.let), explains that RBI sidecar files let you type method signatures without touching implementations (useful for untyped gems), and discusses modules-as-interfaces vs modules-as-dependencies. Highlights the experimental `requires_ancestor` feature (strongly recommended — 'life is so much harder without it') and the T.bind(self, …) workaround for dependency modules. Covers type inference limitations with loops/conditionals, generics with type_parameters, and block type syntax. Introduces Tapioca (Shopify) as a CLI that downloads pre-generated RBIs for popular gems and generates RBI files for metaprogramming-heavy code like ActiveRecord. Shares GitHub's experience: they used `# typed: true` as their lower bound (because they didn't know better), leaned heavily on T.unsafe (6,000×), T.cast (3,000×) and T.must — all runtime-only assertions with no static guarantees and 4× runtime overhead; in hindsight `# typed: strict` as the lower bound would have been better. Notes that signatures can be erased at startup with zero overhead, but T.assert_type / T.let / T.cast stay in the bytecode and can't be optimized by YJIT. Overall overhead measured at ~1.5–2% with Sorbet enabled. Praises: fast LSP, great click-through-to-source navigation, powerful RBI generation. Criticizes: Tapioca gem generation can be slow (10 minutes) and often produces broken RBIs; writing Tapioca compilers is hard; Sorbet itself is written in C++ which limits community contributions; reaching for assertions instead of signatures is too easy. Verdict: Sorbet is good for big codebases wanting safer refactors, but he cannot see anyone starting a new Ruby project with it today. Q&A covers dry-types/input-validation vs full Sorbet typing, whether runtime checks use the TracePoint API (John Hawthorne at GitHub would know; speaker doesn't), and an observation that the speaker would prefer types to live beside code rather than obstruct implementations.