Skip to content

bug: PR can be added back to 'open PRs' after close event #688

Description

@mcdurdin

The log shows how first the help.keyman.com#2588 entry is removed from the cache (verified by next debug line showing -1 when trying to find it in the cache). Then shortly after that, we see a message refreshGitHubPullRequestData: Adding help.keyman.com#2588 to cache and announcing refresh.

I think this is happening because the PR close event does not incur an async step, and there is a previous async lookup for the PR still running, so the close event finishes first.

2026-06-22T16:51:43.0321977Z 2026-06-22T16:51:43.031Z   main[github]                                     POST webhook pull_request.closed : keymanapp/help.keyman.com#2588
2026-06-22T16:51:43.0322012Z refreshGitHubPullRequestData: Removing help.keyman.com#2588 (index #7) from cache and announcing refresh
2026-06-22T16:51:43.0322036Z refreshGitHubPullRequestData: -1
2026-06-22T16:51:43.0322059Z undefined
2026-06-22T16:51:43.0409172Z 2026-06-22T16:51:43.040Z   test-bot                                         Request received [object Object]
2026-06-22T16:51:43.0445804Z 2026-06-22T16:51:43.042Z   performance                                      1          <<< POST / >>> 200
2026-06-22T16:51:43.0491866Z 2026-06-22T16:51:43.048Z   test-bot                                         Request received [object Object]
2026-06-22T16:51:43.0502630Z 2026-06-22T16:51:43.050Z   performance                                      1          <<< POST / >>> 200
2026-06-22T16:51:43.2537721Z 2026-06-22T16:51:43.253Z   services[sentry-issues]                          sentry rate limit: remaining: 39 limit: 40   reset: 1782147104   concurrent-remaining: 24   concurrent-limit: 25
2026-06-22T16:51:43.2714817Z 2026-06-22T16:51:43.269Z   performance                                      199        <<< GET /status/github >>> 200
2026-06-22T16:51:43.4278799Z 2026-06-22T16:51:43.427Z   performance                                      346        <<< GET /status/teamcity >>> 200
2026-06-22T16:51:43.4390152Z 2026-06-22T16:51:43.438Z   services[sentry-issues]                          sentry rate limit: remaining: 34 limit: 40   reset: 1782147104   concurrent-remaining: 19   concurrent-limit: 25
2026-06-22T16:51:43.4676783Z 2026-06-22T16:51:43.466Z   performance                                      292        <<< GET /status/teamcity >>> 200
2026-06-22T16:51:43.4732069Z 2026-06-22T16:51:43.467Z   performance                                      284        <<< GET /status/teamcity >>> 200
2026-06-22T16:51:43.4732368Z 2026-06-22T16:51:43.469Z   performance                                      207        <<< GET /status/sentry-issues >>> 200
2026-06-22T16:51:43.5075208Z 2026-06-22T16:51:43.507Z   services[sentry-issues]                          sentry rate limit: remaining: 38 limit: 40   reset: 1782147104   concurrent-remaining: 23   concurrent-limit: 25
2026-06-22T16:51:43.5096261Z 2026-06-22T16:51:43.508Z   performance                                      82         <<< GET /status/github >>> 200
2026-06-22T16:51:43.6110663Z 2026-06-22T16:51:43.610Z   services[sentry-issues]                          sentry rate limit: remaining: 33 limit: 40   reset: 1782147104   concurrent-remaining: 18   concurrent-limit: 25
2026-06-22T16:51:43.6374419Z 2026-06-22T16:51:43.637Z   rate-limit[github-pull-request]                  cost=1 remaining=4985
2026-06-22T16:51:43.6405193Z 2026-06-22T16:51:43.637Z   performance                                      705        refreshGitHubPullRequestData(help.keyman.com, 2588)
2026-06-22T16:51:43.6405332Z refreshGitHubPullRequestData: Adding help.keyman.com#2588 to cache and announcing refresh
2026-06-22T16:51:43.6405369Z 2026-06-22T16:51:43.638Z   timing[github]                                   finished in 608 msec at 2026-06-22T16:51:43.638Z; started at 2026-06-22T16:51:43.030Z
2026-06-22T16:51:43.6607167Z 2026-06-22T16:51:43.650Z   rate-limit[github-pull-request]                  cost=1 remaining=4984
2026-06-22T16:51:43.6609047Z 2026-06-22T16:51:43.650Z   performance                                      744        refreshGitHubPullRequestData(help.keyman.com, 2588)
2026-06-22T16:51:43.6730999Z refreshGitHubPullRequestData: No relevant changes to help.keyman.com#2588 (already in cache)
2026-06-22T16:51:43.6731701Z 2026-06-22T16:51:43.673Z   timing[github]                                   finished in ?? msec at 2026-06-22T16:51:43.672Z; started at unknown
2026-06-22T16:51:43.9612652Z 2026-06-22T16:51:43.960Z   performance                                      12         <<< GET /status/github >>> 200

From the Webhook looks, I can see only one event:

{
  "action": "closed",
  "number": 2588,
  "pull_request": {
    "url": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/2588",
    "id": 3913354174,
    "node_id": "PR_kwDOChepRM7pQQu-",
    "html_url": "https://github.com/keymanapp/help.keyman.com/pull/2588",
    "diff_url": "https://github.com/keymanapp/help.keyman.com/pull/2588.diff",
    "patch_url": "https://github.com/keymanapp/help.keyman.com/pull/2588.patch",
    "issue_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/2588",
    "number": 2588,
    "state": "closed",
    "locked": false,
    "title": "auto: A19S32 merge master into staging",
    "user": {
      "login": "keyman-server",
      "id": 7018967,
      "node_id": "MDQ6VXNlcjcwMTg5Njc=",
      "avatar_url": "https://avatars.githubusercontent.com/u/7018967?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/keyman-server",
      "html_url": "https://github.com/keyman-server",
      "followers_url": "https://api.github.com/users/keyman-server/followers",
      "following_url": "https://api.github.com/users/keyman-server/following{/other_user}",
      "gists_url": "https://api.github.com/users/keyman-server/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/keyman-server/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/keyman-server/subscriptions",
      "organizations_url": "https://api.github.com/users/keyman-server/orgs",
      "repos_url": "https://api.github.com/users/keyman-server/repos",
      "events_url": "https://api.github.com/users/keyman-server/events{/privacy}",
      "received_events_url": "https://api.github.com/users/keyman-server/received_events",
      "type": "User",
      "user_view_type": "public",
      "site_admin": false
    },
    "body": "Test-bot: skip",
    "created_at": "2026-06-22T15:49:45Z",
    "updated_at": "2026-06-22T16:51:32Z",
    "closed_at": "2026-06-22T16:51:32Z",
    "merged_at": "2026-06-22T16:51:32Z",
    "merge_commit_sha": "f274c9c9745d49d464c99803bd180feafd9e823d",
    "assignees": [

    ],
    "requested_reviewers": [

    ],
    "requested_teams": [

    ],
    "labels": [
      {
        "id": 2562189524,
        "node_id": "MDU6TGFiZWwyNTYyMTg5NTI0",
        "url": "https://api.github.com/repos/keymanapp/help.keyman.com/labels/auto",
        "name": "auto",
        "color": "ededed",
        "default": false,
        "description": "For PRs only: automatically-opened PRs, e.g. opened by CI"
      }
    ],
    "milestone": null,
    "draft": false,
    "commits_url": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/2588/commits",
    "review_comments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/2588/comments",
    "review_comment_url": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/comments{/number}",
    "comments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/2588/comments",
    "statuses_url": "https://api.github.com/repos/keymanapp/help.keyman.com/statuses/7ffb0477f4240521be68fff2de0eb7e561a85ec8",
    "head": {
      "label": "keymanapp:auto/A19S32-merge-master-into-staging",
      "ref": "auto/A19S32-merge-master-into-staging",
      "sha": "7ffb0477f4240521be68fff2de0eb7e561a85ec8",
      "user": {
        "login": "keymanapp",
        "id": 12402926,
        "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNDAyOTI2",
        "avatar_url": "https://avatars.githubusercontent.com/u/12402926?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/keymanapp",
        "html_url": "https://github.com/keymanapp",
        "followers_url": "https://api.github.com/users/keymanapp/followers",
        "following_url": "https://api.github.com/users/keymanapp/following{/other_user}",
        "gists_url": "https://api.github.com/users/keymanapp/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/keymanapp/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/keymanapp/subscriptions",
        "organizations_url": "https://api.github.com/users/keymanapp/orgs",
        "repos_url": "https://api.github.com/users/keymanapp/repos",
        "events_url": "https://api.github.com/users/keymanapp/events{/privacy}",
        "received_events_url": "https://api.github.com/users/keymanapp/received_events",
        "type": "Organization",
        "user_view_type": "public",
        "site_admin": false
      },
      "repo": {
        "id": 169322820,
        "node_id": "MDEwOlJlcG9zaXRvcnkxNjkzMjI4MjA=",
        "name": "help.keyman.com",
        "full_name": "keymanapp/help.keyman.com",
        "private": false,
        "owner": {
          "login": "keymanapp",
          "id": 12402926,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNDAyOTI2",
          "avatar_url": "https://avatars.githubusercontent.com/u/12402926?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/keymanapp",
          "html_url": "https://github.com/keymanapp",
          "followers_url": "https://api.github.com/users/keymanapp/followers",
          "following_url": "https://api.github.com/users/keymanapp/following{/other_user}",
          "gists_url": "https://api.github.com/users/keymanapp/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/keymanapp/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/keymanapp/subscriptions",
          "organizations_url": "https://api.github.com/users/keymanapp/orgs",
          "repos_url": "https://api.github.com/users/keymanapp/repos",
          "events_url": "https://api.github.com/users/keymanapp/events{/privacy}",
          "received_events_url": "https://api.github.com/users/keymanapp/received_events",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "html_url": "https://github.com/keymanapp/help.keyman.com",
        "description": "https://help.keyman.com/ source",
        "fork": false,
        "url": "https://api.github.com/repos/keymanapp/help.keyman.com",
        "forks_url": "https://api.github.com/repos/keymanapp/help.keyman.com/forks",
        "keys_url": "https://api.github.com/repos/keymanapp/help.keyman.com/keys{/key_id}",
        "collaborators_url": "https://api.github.com/repos/keymanapp/help.keyman.com/collaborators{/collaborator}",
        "teams_url": "https://api.github.com/repos/keymanapp/help.keyman.com/teams",
        "hooks_url": "https://api.github.com/repos/keymanapp/help.keyman.com/hooks",
        "issue_events_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/events{/number}",
        "events_url": "https://api.github.com/repos/keymanapp/help.keyman.com/events",
        "assignees_url": "https://api.github.com/repos/keymanapp/help.keyman.com/assignees{/user}",
        "branches_url": "https://api.github.com/repos/keymanapp/help.keyman.com/branches{/branch}",
        "tags_url": "https://api.github.com/repos/keymanapp/help.keyman.com/tags",
        "blobs_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/blobs{/sha}",
        "git_tags_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/tags{/sha}",
        "git_refs_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/refs{/sha}",
        "trees_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/trees{/sha}",
        "statuses_url": "https://api.github.com/repos/keymanapp/help.keyman.com/statuses/{sha}",
        "languages_url": "https://api.github.com/repos/keymanapp/help.keyman.com/languages",
        "stargazers_url": "https://api.github.com/repos/keymanapp/help.keyman.com/stargazers",
        "contributors_url": "https://api.github.com/repos/keymanapp/help.keyman.com/contributors",
        "subscribers_url": "https://api.github.com/repos/keymanapp/help.keyman.com/subscribers",
        "subscription_url": "https://api.github.com/repos/keymanapp/help.keyman.com/subscription",
        "commits_url": "https://api.github.com/repos/keymanapp/help.keyman.com/commits{/sha}",
        "git_commits_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/commits{/sha}",
        "comments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/comments{/number}",
        "issue_comment_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/comments{/number}",
        "contents_url": "https://api.github.com/repos/keymanapp/help.keyman.com/contents/{+path}",
        "compare_url": "https://api.github.com/repos/keymanapp/help.keyman.com/compare/{base}...{head}",
        "merges_url": "https://api.github.com/repos/keymanapp/help.keyman.com/merges",
        "archive_url": "https://api.github.com/repos/keymanapp/help.keyman.com/{archive_format}{/ref}",
        "downloads_url": "https://api.github.com/repos/keymanapp/help.keyman.com/downloads",
        "issues_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues{/number}",
        "pulls_url": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls{/number}",
        "milestones_url": "https://api.github.com/repos/keymanapp/help.keyman.com/milestones{/number}",
        "notifications_url": "https://api.github.com/repos/keymanapp/help.keyman.com/notifications{?since,all,participating}",
        "labels_url": "https://api.github.com/repos/keymanapp/help.keyman.com/labels{/name}",
        "releases_url": "https://api.github.com/repos/keymanapp/help.keyman.com/releases{/id}",
        "deployments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/deployments",
        "created_at": "2019-02-05T22:24:52Z",
        "updated_at": "2026-06-22T15:40:45Z",
        "pushed_at": "2026-06-22T16:51:32Z",
        "git_url": "git://github.com/keymanapp/help.keyman.com.git",
        "ssh_url": "git@github.com:keymanapp/help.keyman.com.git",
        "clone_url": "https://github.com/keymanapp/help.keyman.com.git",
        "svn_url": "https://github.com/keymanapp/help.keyman.com",
        "homepage": null,
        "size": 301695,
        "stargazers_count": 9,
        "watchers_count": 9,
        "language": "PHP",
        "has_issues": true,
        "has_projects": true,
        "has_downloads": true,
        "has_wiki": false,
        "has_pages": false,
        "has_discussions": false,
        "forks_count": 44,
        "mirror_url": null,
        "archived": false,
        "disabled": false,
        "open_issues_count": 41,
        "license": null,
        "allow_forking": true,
        "is_template": false,
        "web_commit_signoff_required": false,
        "has_pull_requests": true,
        "pull_request_creation_policy": "all",
        "topics": [

        ],
        "visibility": "public",
        "forks": 44,
        "open_issues": 41,
        "watchers": 9,
        "default_branch": "master",
        "allow_squash_merge": true,
        "allow_merge_commit": true,
        "allow_rebase_merge": true,
        "allow_auto_merge": true,
        "delete_branch_on_merge": true,
        "allow_update_branch": true,
        "use_squash_pr_title_as_default": false,
        "squash_merge_commit_message": "COMMIT_MESSAGES",
        "squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
        "merge_commit_message": "PR_TITLE",
        "merge_commit_title": "MERGE_MESSAGE"
      }
    },
    "base": {
      "label": "keymanapp:staging",
      "ref": "staging",
      "sha": "003ef9111d2e42c60b3c01c89543c6f0b9a62eef",
      "user": {
        "login": "keymanapp",
        "id": 12402926,
        "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNDAyOTI2",
        "avatar_url": "https://avatars.githubusercontent.com/u/12402926?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/keymanapp",
        "html_url": "https://github.com/keymanapp",
        "followers_url": "https://api.github.com/users/keymanapp/followers",
        "following_url": "https://api.github.com/users/keymanapp/following{/other_user}",
        "gists_url": "https://api.github.com/users/keymanapp/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/keymanapp/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/keymanapp/subscriptions",
        "organizations_url": "https://api.github.com/users/keymanapp/orgs",
        "repos_url": "https://api.github.com/users/keymanapp/repos",
        "events_url": "https://api.github.com/users/keymanapp/events{/privacy}",
        "received_events_url": "https://api.github.com/users/keymanapp/received_events",
        "type": "Organization",
        "user_view_type": "public",
        "site_admin": false
      },
      "repo": {
        "id": 169322820,
        "node_id": "MDEwOlJlcG9zaXRvcnkxNjkzMjI4MjA=",
        "name": "help.keyman.com",
        "full_name": "keymanapp/help.keyman.com",
        "private": false,
        "owner": {
          "login": "keymanapp",
          "id": 12402926,
          "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNDAyOTI2",
          "avatar_url": "https://avatars.githubusercontent.com/u/12402926?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/keymanapp",
          "html_url": "https://github.com/keymanapp",
          "followers_url": "https://api.github.com/users/keymanapp/followers",
          "following_url": "https://api.github.com/users/keymanapp/following{/other_user}",
          "gists_url": "https://api.github.com/users/keymanapp/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/keymanapp/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/keymanapp/subscriptions",
          "organizations_url": "https://api.github.com/users/keymanapp/orgs",
          "repos_url": "https://api.github.com/users/keymanapp/repos",
          "events_url": "https://api.github.com/users/keymanapp/events{/privacy}",
          "received_events_url": "https://api.github.com/users/keymanapp/received_events",
          "type": "Organization",
          "user_view_type": "public",
          "site_admin": false
        },
        "html_url": "https://github.com/keymanapp/help.keyman.com",
        "description": "https://help.keyman.com/ source",
        "fork": false,
        "url": "https://api.github.com/repos/keymanapp/help.keyman.com",
        "forks_url": "https://api.github.com/repos/keymanapp/help.keyman.com/forks",
        "keys_url": "https://api.github.com/repos/keymanapp/help.keyman.com/keys{/key_id}",
        "collaborators_url": "https://api.github.com/repos/keymanapp/help.keyman.com/collaborators{/collaborator}",
        "teams_url": "https://api.github.com/repos/keymanapp/help.keyman.com/teams",
        "hooks_url": "https://api.github.com/repos/keymanapp/help.keyman.com/hooks",
        "issue_events_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/events{/number}",
        "events_url": "https://api.github.com/repos/keymanapp/help.keyman.com/events",
        "assignees_url": "https://api.github.com/repos/keymanapp/help.keyman.com/assignees{/user}",
        "branches_url": "https://api.github.com/repos/keymanapp/help.keyman.com/branches{/branch}",
        "tags_url": "https://api.github.com/repos/keymanapp/help.keyman.com/tags",
        "blobs_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/blobs{/sha}",
        "git_tags_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/tags{/sha}",
        "git_refs_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/refs{/sha}",
        "trees_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/trees{/sha}",
        "statuses_url": "https://api.github.com/repos/keymanapp/help.keyman.com/statuses/{sha}",
        "languages_url": "https://api.github.com/repos/keymanapp/help.keyman.com/languages",
        "stargazers_url": "https://api.github.com/repos/keymanapp/help.keyman.com/stargazers",
        "contributors_url": "https://api.github.com/repos/keymanapp/help.keyman.com/contributors",
        "subscribers_url": "https://api.github.com/repos/keymanapp/help.keyman.com/subscribers",
        "subscription_url": "https://api.github.com/repos/keymanapp/help.keyman.com/subscription",
        "commits_url": "https://api.github.com/repos/keymanapp/help.keyman.com/commits{/sha}",
        "git_commits_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/commits{/sha}",
        "comments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/comments{/number}",
        "issue_comment_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/comments{/number}",
        "contents_url": "https://api.github.com/repos/keymanapp/help.keyman.com/contents/{+path}",
        "compare_url": "https://api.github.com/repos/keymanapp/help.keyman.com/compare/{base}...{head}",
        "merges_url": "https://api.github.com/repos/keymanapp/help.keyman.com/merges",
        "archive_url": "https://api.github.com/repos/keymanapp/help.keyman.com/{archive_format}{/ref}",
        "downloads_url": "https://api.github.com/repos/keymanapp/help.keyman.com/downloads",
        "issues_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues{/number}",
        "pulls_url": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls{/number}",
        "milestones_url": "https://api.github.com/repos/keymanapp/help.keyman.com/milestones{/number}",
        "notifications_url": "https://api.github.com/repos/keymanapp/help.keyman.com/notifications{?since,all,participating}",
        "labels_url": "https://api.github.com/repos/keymanapp/help.keyman.com/labels{/name}",
        "releases_url": "https://api.github.com/repos/keymanapp/help.keyman.com/releases{/id}",
        "deployments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/deployments",
        "created_at": "2019-02-05T22:24:52Z",
        "updated_at": "2026-06-22T15:40:45Z",
        "pushed_at": "2026-06-22T16:51:32Z",
        "git_url": "git://github.com/keymanapp/help.keyman.com.git",
        "ssh_url": "git@github.com:keymanapp/help.keyman.com.git",
        "clone_url": "https://github.com/keymanapp/help.keyman.com.git",
        "svn_url": "https://github.com/keymanapp/help.keyman.com",
        "homepage": null,
        "size": 301695,
        "stargazers_count": 9,
        "watchers_count": 9,
        "language": "PHP",
        "has_issues": true,
        "has_projects": true,
        "has_downloads": true,
        "has_wiki": false,
        "has_pages": false,
        "has_discussions": false,
        "forks_count": 44,
        "mirror_url": null,
        "archived": false,
        "disabled": false,
        "open_issues_count": 41,
        "license": null,
        "allow_forking": true,
        "is_template": false,
        "web_commit_signoff_required": false,
        "has_pull_requests": true,
        "pull_request_creation_policy": "all",
        "topics": [

        ],
        "visibility": "public",
        "forks": 44,
        "open_issues": 41,
        "watchers": 9,
        "default_branch": "master",
        "allow_squash_merge": true,
        "allow_merge_commit": true,
        "allow_rebase_merge": true,
        "allow_auto_merge": true,
        "delete_branch_on_merge": true,
        "allow_update_branch": true,
        "use_squash_pr_title_as_default": false,
        "squash_merge_commit_message": "COMMIT_MESSAGES",
        "squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
        "merge_commit_message": "PR_TITLE",
        "merge_commit_title": "MERGE_MESSAGE"
      }
    },
    "_links": {
      "self": {
        "href": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/2588"
      },
      "html": {
        "href": "https://github.com/keymanapp/help.keyman.com/pull/2588"
      },
      "issue": {
        "href": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/2588"
      },
      "comments": {
        "href": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/2588/comments"
      },
      "review_comments": {
        "href": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/2588/comments"
      },
      "review_comment": {
        "href": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/comments{/number}"
      },
      "commits": {
        "href": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls/2588/commits"
      },
      "statuses": {
        "href": "https://api.github.com/repos/keymanapp/help.keyman.com/statuses/7ffb0477f4240521be68fff2de0eb7e561a85ec8"
      }
    },
    "author_association": "CONTRIBUTOR",
    "auto_merge": {
      "enabled_by": {
        "login": "keyman-status",
        "id": 75399505,
        "node_id": "MDQ6VXNlcjc1Mzk5NTA1",
        "avatar_url": "https://avatars.githubusercontent.com/u/75399505?v=4",
        "gravatar_id": "",
        "url": "https://api.github.com/users/keyman-status",
        "html_url": "https://github.com/keyman-status",
        "followers_url": "https://api.github.com/users/keyman-status/followers",
        "following_url": "https://api.github.com/users/keyman-status/following{/other_user}",
        "gists_url": "https://api.github.com/users/keyman-status/gists{/gist_id}",
        "starred_url": "https://api.github.com/users/keyman-status/starred{/owner}{/repo}",
        "subscriptions_url": "https://api.github.com/users/keyman-status/subscriptions",
        "organizations_url": "https://api.github.com/users/keyman-status/orgs",
        "repos_url": "https://api.github.com/users/keyman-status/repos",
        "events_url": "https://api.github.com/users/keyman-status/events{/privacy}",
        "received_events_url": "https://api.github.com/users/keyman-status/received_events",
        "type": "User",
        "user_view_type": "public",
        "site_admin": false
      },
      "merge_method": "merge",
      "commit_title": null,
      "commit_message": null
    },
    "assignee": null,
    "active_lock_reason": null,
    "merged": true,
    "mergeable": null,
    "rebaseable": null,
    "mergeable_state": "unknown",
    "merged_by": {
      "login": "keyman-status",
      "id": 75399505,
      "node_id": "MDQ6VXNlcjc1Mzk5NTA1",
      "avatar_url": "https://avatars.githubusercontent.com/u/75399505?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/keyman-status",
      "html_url": "https://github.com/keyman-status",
      "followers_url": "https://api.github.com/users/keyman-status/followers",
      "following_url": "https://api.github.com/users/keyman-status/following{/other_user}",
      "gists_url": "https://api.github.com/users/keyman-status/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/keyman-status/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/keyman-status/subscriptions",
      "organizations_url": "https://api.github.com/users/keyman-status/orgs",
      "repos_url": "https://api.github.com/users/keyman-status/repos",
      "events_url": "https://api.github.com/users/keyman-status/events{/privacy}",
      "received_events_url": "https://api.github.com/users/keyman-status/received_events",
      "type": "User",
      "user_view_type": "public",
      "site_admin": false
    },
    "comments": 0,
    "review_comments": 0,
    "maintainer_can_modify": false,
    "commits": 102,
    "additions": 20004,
    "deletions": 611,
    "changed_files": 228
  },
  "repository": {
    "id": 169322820,
    "node_id": "MDEwOlJlcG9zaXRvcnkxNjkzMjI4MjA=",
    "name": "help.keyman.com",
    "full_name": "keymanapp/help.keyman.com",
    "private": false,
    "owner": {
      "login": "keymanapp",
      "id": 12402926,
      "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNDAyOTI2",
      "avatar_url": "https://avatars.githubusercontent.com/u/12402926?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/keymanapp",
      "html_url": "https://github.com/keymanapp",
      "followers_url": "https://api.github.com/users/keymanapp/followers",
      "following_url": "https://api.github.com/users/keymanapp/following{/other_user}",
      "gists_url": "https://api.github.com/users/keymanapp/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/keymanapp/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/keymanapp/subscriptions",
      "organizations_url": "https://api.github.com/users/keymanapp/orgs",
      "repos_url": "https://api.github.com/users/keymanapp/repos",
      "events_url": "https://api.github.com/users/keymanapp/events{/privacy}",
      "received_events_url": "https://api.github.com/users/keymanapp/received_events",
      "type": "Organization",
      "user_view_type": "public",
      "site_admin": false
    },
    "html_url": "https://github.com/keymanapp/help.keyman.com",
    "description": "https://help.keyman.com/ source",
    "fork": false,
    "url": "https://api.github.com/repos/keymanapp/help.keyman.com",
    "forks_url": "https://api.github.com/repos/keymanapp/help.keyman.com/forks",
    "keys_url": "https://api.github.com/repos/keymanapp/help.keyman.com/keys{/key_id}",
    "collaborators_url": "https://api.github.com/repos/keymanapp/help.keyman.com/collaborators{/collaborator}",
    "teams_url": "https://api.github.com/repos/keymanapp/help.keyman.com/teams",
    "hooks_url": "https://api.github.com/repos/keymanapp/help.keyman.com/hooks",
    "issue_events_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/events{/number}",
    "events_url": "https://api.github.com/repos/keymanapp/help.keyman.com/events",
    "assignees_url": "https://api.github.com/repos/keymanapp/help.keyman.com/assignees{/user}",
    "branches_url": "https://api.github.com/repos/keymanapp/help.keyman.com/branches{/branch}",
    "tags_url": "https://api.github.com/repos/keymanapp/help.keyman.com/tags",
    "blobs_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/blobs{/sha}",
    "git_tags_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/tags{/sha}",
    "git_refs_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/refs{/sha}",
    "trees_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/trees{/sha}",
    "statuses_url": "https://api.github.com/repos/keymanapp/help.keyman.com/statuses/{sha}",
    "languages_url": "https://api.github.com/repos/keymanapp/help.keyman.com/languages",
    "stargazers_url": "https://api.github.com/repos/keymanapp/help.keyman.com/stargazers",
    "contributors_url": "https://api.github.com/repos/keymanapp/help.keyman.com/contributors",
    "subscribers_url": "https://api.github.com/repos/keymanapp/help.keyman.com/subscribers",
    "subscription_url": "https://api.github.com/repos/keymanapp/help.keyman.com/subscription",
    "commits_url": "https://api.github.com/repos/keymanapp/help.keyman.com/commits{/sha}",
    "git_commits_url": "https://api.github.com/repos/keymanapp/help.keyman.com/git/commits{/sha}",
    "comments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/comments{/number}",
    "issue_comment_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues/comments{/number}",
    "contents_url": "https://api.github.com/repos/keymanapp/help.keyman.com/contents/{+path}",
    "compare_url": "https://api.github.com/repos/keymanapp/help.keyman.com/compare/{base}...{head}",
    "merges_url": "https://api.github.com/repos/keymanapp/help.keyman.com/merges",
    "archive_url": "https://api.github.com/repos/keymanapp/help.keyman.com/{archive_format}{/ref}",
    "downloads_url": "https://api.github.com/repos/keymanapp/help.keyman.com/downloads",
    "issues_url": "https://api.github.com/repos/keymanapp/help.keyman.com/issues{/number}",
    "pulls_url": "https://api.github.com/repos/keymanapp/help.keyman.com/pulls{/number}",
    "milestones_url": "https://api.github.com/repos/keymanapp/help.keyman.com/milestones{/number}",
    "notifications_url": "https://api.github.com/repos/keymanapp/help.keyman.com/notifications{?since,all,participating}",
    "labels_url": "https://api.github.com/repos/keymanapp/help.keyman.com/labels{/name}",
    "releases_url": "https://api.github.com/repos/keymanapp/help.keyman.com/releases{/id}",
    "deployments_url": "https://api.github.com/repos/keymanapp/help.keyman.com/deployments",
    "created_at": "2019-02-05T22:24:52Z",
    "updated_at": "2026-06-22T15:40:45Z",
    "pushed_at": "2026-06-22T16:51:32Z",
    "git_url": "git://github.com/keymanapp/help.keyman.com.git",
    "ssh_url": "git@github.com:keymanapp/help.keyman.com.git",
    "clone_url": "https://github.com/keymanapp/help.keyman.com.git",
    "svn_url": "https://github.com/keymanapp/help.keyman.com",
    "homepage": null,
    "size": 301695,
    "stargazers_count": 9,
    "watchers_count": 9,
    "language": "PHP",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": false,
    "has_pages": false,
    "has_discussions": false,
    "forks_count": 44,
    "mirror_url": null,
    "archived": false,
    "disabled": false,
    "open_issues_count": 41,
    "license": null,
    "allow_forking": true,
    "is_template": false,
    "web_commit_signoff_required": false,
    "has_pull_requests": true,
    "pull_request_creation_policy": "all",
    "topics": [

    ],
    "visibility": "public",
    "forks": 44,
    "open_issues": 41,
    "watchers": 9,
    "default_branch": "master",
    "custom_properties": {

    }
  },
  "organization": {
    "login": "keymanapp",
    "id": 12402926,
    "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNDAyOTI2",
    "url": "https://api.github.com/orgs/keymanapp",
    "repos_url": "https://api.github.com/orgs/keymanapp/repos",
    "events_url": "https://api.github.com/orgs/keymanapp/events",
    "hooks_url": "https://api.github.com/orgs/keymanapp/hooks",
    "issues_url": "https://api.github.com/orgs/keymanapp/issues",
    "members_url": "https://api.github.com/orgs/keymanapp/members{/member}",
    "public_members_url": "https://api.github.com/orgs/keymanapp/public_members{/member}",
    "avatar_url": "https://avatars.githubusercontent.com/u/12402926?v=4",
    "description": "Home of the Keyman open source keyboarding system"
  },
  "sender": {
    "login": "keyman-status",
    "id": 75399505,
    "node_id": "MDQ6VXNlcjc1Mzk5NTA1",
    "avatar_url": "https://avatars.githubusercontent.com/u/75399505?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/keyman-status",
    "html_url": "https://github.com/keyman-status",
    "followers_url": "https://api.github.com/users/keyman-status/followers",
    "following_url": "https://api.github.com/users/keyman-status/following{/other_user}",
    "gists_url": "https://api.github.com/users/keyman-status/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/keyman-status/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/keyman-status/subscriptions",
    "organizations_url": "https://api.github.com/users/keyman-status/orgs",
    "repos_url": "https://api.github.com/users/keyman-status/repos",
    "events_url": "https://api.github.com/users/keyman-status/events{/privacy}",
    "received_events_url": "https://api.github.com/users/keyman-status/received_events",
    "type": "User",
    "user_view_type": "public",
    "site_admin": false
  }
}

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingcommon/

Type

Fields

No fields configured for Bug.

Projects

Status
Todo

Relationships

None yet

Development

No branches or pull requests

Issue actions