{"adoption": {"forks": 791, "observed_at": "2026-08-28T04:09:56.576161+00:00", "stars": 7200}, "canonical_url": "https://ross.abutalabs.com/products/pull", "card": {"archived": false, "artifact_type": "service", "description": "🤖 Keep your forks up-to-date via automated PRs", "domain": ["developer-tools", "version-control"], "enriched": true, "function": ["workflow-automation", "version-control", "scheduling", "developer-tools"], "health_score": 81, "homepage": "https://github.com/apps/pull", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["wei/pull"], "name": "wei/pull", "platform": ["cloud"], "pushed_at": "2026-04-13T23:43:55+00:00", "repo": "wei/pull", "stars": 7200, "tags": ["github-app", "probot", "fork-sync", "upstream-sync", "automated-pull-requests", "hacktoberfest", "automation", "web-server", "nodejs"], "topics": ["probot", "sync", "fork", "upstream", "repository-management", "pull", "forks-insight", "upstreams", "reviewer", "reviewers", "trigger", "probot-app", "probot-apps", "hacktoberfest"], "urls": [], "use_cases": ["keep my fork up to date with upstream automatically", "automatically sync forked repository with original repo", "create automated pull requests when upstream changes", "schedule periodic fork synchronization on GitHub", "hard reset my fork's branch to match upstream", "sync forks across an organization with reviewers assigned"], "what_it_is": "Pull is a GitHub App (built with Probot) that keeps GitHub forks up-to-date with their upstream repositories by automatically creating pull requests. It supports scheduled syncs, configurable merge strategies (merge, squash, rebase, hard reset) via a .github/pull.yml file, and GitHub Enterprise Server.", "when_to_avoid": ["you need to sync repositories that are not in the same fork network", "you have local modifications you cannot risk being overwritten by hard resets", "you prefer self-hosted sync tooling rather than a third-party GitHub App", "you need syncing for non-Git platforms like GitLab or Bitbucket"], "when_to_choose": ["you maintain forks that drift behind their upstream repositories", "you want zero-config automated fork syncing by just installing a GitHub App", "you need configurable merge strategies like rebase or hard reset via pull.yml", "you want scheduled upstream checks with manual trigger support", "you need fork syncing on GitHub Enterprise Server"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pull", "repo": "wei/pull", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "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:56.576161+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.576161+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:39:52.190951+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "74ce49e6e2a26532edacb365296ae60374c31eecb033f7e456b12c798ea97e47", "fetched_at": "2026-08-28T04:09:56.576161+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wei/pull"}, {"content_hash": "3d04dc53102af886df3232645c20f174d2d0dee1819e916ab22bb9ccd0a04296", "fetched_at": "2026-08-29T08:35:14.445661+00:00", "kind": "homepage", "missing": false, "url": "https://github.com/apps/pull"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 77, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["prerelease_only"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3021, "days_push": 142, "days_rel": 354, "gap_med": 60, "n_releases_24m": 4}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}