One IR for every language
A 19-crate Rust workspace, about 17k lines, parses with Tree-sitter and lowers JavaScript, TypeScript and Python into one shared semantic IR. A rule is either language-agnostic or scoped to a language family in one place, never an if-language branch inside a detector. The same large-function rule runs on a Next.js app and on FastAPI.

