{"adoption": {"forks": 191, "observed_at": "2026-08-28T04:06:31.836750+00:00", "stars": 2262}, "canonical_url": "https://ross.abutalabs.com/products/gomonkey", "card": {"archived": false, "artifact_type": "library", "description": "gomonkey is a library to make monkey patching in unit tests easy", "domain": ["testing", "developer-tools"], "enriched": true, "function": ["testing", "mocking"], "health_score": 97, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["agiledragon/gomonkey"], "name": "agiledragon/gomonkey", "platform": ["windows", "go"], "pushed_at": "2026-08-02T14:29:50+00:00", "repo": "agiledragon/gomonkey", "stars": 2262, "tags": ["monkey-patching", "unit-testing", "go", "test-doubles", "runtime-patching", "linux", "macos"], "topics": ["gomonkey", "patch", "function", "member-method", "global-variable", "function-variable", "sequence", "interface", "private-method"], "urls": [], "use_cases": ["mock functions in go unit tests", "patch private methods during testing", "stub interface method calls in tests", "replace global variables in test code", "mock a function to return different values on successive calls", "patch member methods without dependency injection"], "what_it_is": "gomonkey is a Go library that makes monkey patching in unit tests easy, allowing functions, member methods, interfaces, function variables, and global variables to be replaced at runtime. It supports sequential patches for repeated calls and works across amd64, arm64, 386, loong64, and riscv64 architectures.", "when_to_avoid": ["you need thread-safe patching while other goroutines call the patched function", "you cannot disable compiler inlining with -gcflags=all=-l", "you want portable, idiomatic mocking via interfaces instead of runtime patching", "your target platform or architecture is unsupported"], "when_to_choose": ["you need to patch unexported/private functions or methods in Go tests", "you cannot refactor code to use interfaces or dependency injection", "you need a function to return different values on successive calls", "you want to stub external dependencies without changing production code"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/gomonkey", "repo": "agiledragon/gomonkey", "role": "main", "score": 85}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "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:31.836750+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:31.836750+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:42:30.998720+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3088c10091be50c169ff1e55dfc6394c53b73e4ec4aec4f631e068421e2eb39", "fetched_at": "2026-08-28T04:06:31.836750+00:00", "kind": "readme", "missing": false, "url": "https://github.com/agiledragon/gomonkey"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 64}, "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": 2940, "days_push": 31, "days_rel": 31, "gap_med": 202, "n_releases_24m": 4}, "score": 85, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}