{"adoption": {"forks": 180, "observed_at": "2026-08-28T04:06:55.719024+00:00", "stars": 2488}, "canonical_url": "https://ross.abutalabs.com/products/reform", "card": {"archived": false, "artifact_type": "library", "description": "Form objects decoupled from models.", "domain": ["web-development", "backend", "developer-tools"], "enriched": true, "function": ["form-handling", "serialization", "middleware"], "health_score": 43, "homepage": "https://trailblazer.to/2.1/docs/reform.html", "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["trailblazer/reform"], "name": "trailblazer/reform", "platform": ["ruby", "jvm"], "pushed_at": "2025-08-25T12:50:07+00:00", "repo": "trailblazer/reform", "stars": 2488, "tags": ["form-objects", "trailblazer", "dry-validation", "rails", "coercion", "nested-forms"], "topics": [], "urls": [], "use_cases": ["validate incoming params in API apps without touching models", "move validations out of fat ActiveRecord models into form objects", "build nested forms for has_many and has_one relationships", "compose a form from multiple model objects", "coerce and deserialize JSON input before persisting", "prepopulate form fields before rendering an edit page"], "what_it_is": "Reform is a Ruby library providing form objects decoupled from models, with validations, coercion, and nested model setup. It is framework-agnostic, integrates with Rails and simple_form, and is part of the Trailblazer architecture suite.", "when_to_avoid": ["you want simple built-in Rails strong parameters and model validations", "your project avoids additional abstraction layers", "you need a frontend form UI library rather than server-side form objects"], "when_to_choose": ["you want validation logic separated from persistence models", "you use Rails, Hanami, or any Ruby framework and need framework-agnostic forms", "you need nested or composed forms mapping to object graphs", "you are adopting the Trailblazer architecture"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/reform", "repo": "trailblazer/reform", "role": "main", "score": 40}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "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:06:55.719024+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:55.719024+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:27:52.642947+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e787191d109c05f64568edfef0540f5b722e90207c8292f85a55c7301813f44e", "fetched_at": "2026-08-28T04:06:55.719024+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailblazer/reform"}, {"content_hash": "d83e657cd4b79eacd77e3132764fd37c306e9fd2bdc453e3feb7bd8d74e85081", "fetched_at": "2026-08-29T10:09:56.866539+00:00", "kind": "homepage", "missing": false, "url": "https://trailblazer.to/2.1/docs/reform.html"}, {"content_hash": "0d8721ca2266d7988fefede63fac1f207e9d664812ccaccbce1c713d099c07fe", "fetched_at": "2026-08-29T10:09:56.877337+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/trailblazer"}, {"content_hash": "978259f029a88d52e4057317e3036f318794010ba5fcd08367f8675dc2e02e02", "fetched_at": "2026-08-29T10:09:56.880118+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/about"}, {"content_hash": "b73ae1d528a422d9ed2a2d8a81bacdc1ec6c4956e7474079f6055ac3fcc4a50c", "fetched_at": "2026-08-29T10:09:56.882042+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/operation"}, {"content_hash": "4d98f56be12baf29690eaf2e204442e4ed3e5ae2325edc9b1f1cbb1e1a85ae73", "fetched_at": "2026-08-29T10:09:56.887217+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/activity/deprecated"}, {"content_hash": "0dee9e4f1cd0c2c9ff0f906258773d6ccf2285a68b5c754d1e463838e10be4ee", "fetched_at": "2026-08-29T10:09:56.889082+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/rails_integration"}, {"content_hash": "a406f4c9605e9e5bdf2ea31dfc8e63b651efb6a081a0274a3f4bd8185e1deca7", "fetched_at": "2026-08-29T10:09:56.891120+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/test"}, {"content_hash": "d647a910bf24edf25c022768a663482207004190d96a9bad64b196a5780dfb64", "fetched_at": "2026-08-29T10:09:56.893526+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/macro"}, {"content_hash": "ac86a27b46fe41bd45387f6202de852e3603bd0efef6d9e2d997ede36980b6ef", "fetched_at": "2026-08-29T10:09:56.896454+00:00", "kind": "site_page", "missing": false, "url": "https://trailblazer.to/2.1/docs/workflow"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 38, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4873, "days_push": 373, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 40, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}