{"adoption": {"forks": 643, "observed_at": "2026-08-28T04:09:13.448618+00:00", "stars": 5230}, "canonical_url": "https://ross.abutalabs.com/products/aasm", "card": {"archived": false, "artifact_type": "library", "description": "AASM - State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid, NoBrainer, Dynamoid)", "domain": ["web-development", "backend", "developer-tools"], "enriched": true, "function": ["state-management", "orm", "developer-tools"], "health_score": 75, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["aasm/aasm"], "name": "aasm/aasm", "platform": ["ruby", "jvm"], "pushed_at": "2026-07-05T05:51:32+00:00", "repo": "aasm/aasm", "stars": 5230, "tags": ["state-machine", "finite-state-machine", "activerecord", "mongoid", "rails", "transitions", "callbacks", "guards"], "topics": ["state-machine", "ruby", "aasm", "transition", "activerecord", "mongoid", "hacktoberfest", "rails"], "urls": [], "use_cases": ["add a state machine to a Rails ActiveRecord model", "manage order lifecycle states with guarded transitions", "define state machines for plain Ruby classes", "persist state transitions with Mongoid or Dynamoid", "test state machine transitions with RSpec or Minitest", "log and inspect state changes on models"], "what_it_is": "AASM is a Ruby library for adding finite state machines to Ruby classes, with adapters for ActiveRecord, Mongoid, NoBrainer, Dynamoid, Sequel, and Redis. It supports callbacks, guards, transitions, multiple state machines per class, transaction support, and testing helpers.", "when_to_avoid": ["you need state machines in a non-Ruby language", "you only need a simple status enum without transition logic", "you need distributed workflow orchestration rather than in-model state"], "when_to_choose": ["you need finite state machine semantics in Ruby with ORM persistence", "you want callbacks, guards, and transaction support around transitions", "you need multiple named state machines on a single class"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/aasm", "repo": "aasm/aasm", "role": "main", "score": 73}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "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:09:13.448618+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:13.448618+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:59:39.398538+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e6612b9d0fcd0984db3dd061b072b79007f41f9675c5abe7db3cb15bc2213a09", "fetched_at": "2026-08-28T04:09:13.448618+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aasm/aasm"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 91, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 6761, "days_push": 59, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 73, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}