{"adoption": {"forks": 59, "observed_at": "2026-08-28T04:05:51.975229+00:00", "stars": 1906}, "canonical_url": "https://ross.abutalabs.com/products/prosopite", "card": {"archived": false, "artifact_type": "library", "description": "Rails N+1 queries auto-detection with zero false positives / false negatives", "domain": ["performance", "web-development", "developer-tools"], "enriched": true, "function": ["monitoring", "benchmarking", "testing"], "health_score": 90, "homepage": null, "language": "Ruby", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["charkost/prosopite"], "name": "charkost/prosopite", "platform": ["ruby"], "pushed_at": "2026-06-07T15:57:02+00:00", "repo": "charkost/prosopite", "stars": 1906, "tags": ["rails", "n-plus-one-queries", "activerecord", "database-performance", "gem", "web-server"], "topics": ["performance", "rails"], "urls": [], "use_cases": ["detect n+1 queries in rails app", "find slow activerecord queries in tests", "replace bullet gem for n+1 detection", "catch n+1 queries after record creation with factorybot", "raise exceptions on n+1 queries in ci", "detect n+1 queries with mongoid models calling activerecord"], "what_it_is": "Prosopite is a Ruby gem that auto-detects N+1 queries in Rails applications with zero false positives or false negatives. It monitors SQL queries via Active Support instrumentation and detects repeated queries sharing the same call stack and query fingerprint.", "when_to_avoid": ["you are not using Rails or ActiveRecord/Mongoid", "you need general query performance profiling rather than N+1 detection"], "when_to_choose": ["you use Rails/ActiveRecord and want reliable N+1 detection without false positives", "Bullet misses N+1 cases like record creations, #becomes, or pluck on associations", "you want call stack traces pointing to the offending code"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/prosopite", "repo": "charkost/prosopite", "role": "main", "score": 78}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:51.975229+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:11:40.198285+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c730015d0df5ec5ae4126426f0e37523e995301becb279461a41143b29ea5528", "fetched_at": "2026-08-28T04:05:51.975229+00:00", "kind": "readme", "missing": false, "url": "https://github.com/charkost/prosopite"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 86, "longevity": 100, "rhythm": 56}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2023, "days_push": 87, "days_rel": 139, "gap_med": 99.5, "n_releases_24m": 5}, "score": 78, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}