Ergonomics release, driven by dogfooding the analytics/enrichment use case — surfacing IP origin next to every IP an admin already looks at — in a production Rails app.
New API
r = OpenASN.try_lookup(user.signup_ip) # nil-safe: nil/blank/garbage in, nil out
r.label # => "Residential ISP" / "VPN" / "Hosting / datacenter" — for admin UIs
r.flag_names # => [:bad_asn, :vpn_provider] — ASN signals, decoded to names
r.bad_asn? # => true — no more FORMAT.md bit arithmetic
r.flag?(:cdn) # named check for any ASN flagResult#to_h now includes flag_names (append-only key — shadow logs stay parseable).
Changed
README reframed analytics-first: enriching admin panels and audit trails is the primary documented use case; acting on the signal (step-up verification, rate limits) is the optional later step.
Full details in CHANGELOG.md.
Full Changelog: v0.2.0...v0.3.0