diff --git a/packages/mergebot/src/_tests/fixtures/75014/_downloads.json b/packages/mergebot/src/_tests/fixtures/75014/_downloads.json new file mode 100644 index 0000000000..7722e2280f --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75014/_downloads.json @@ -0,0 +1,3 @@ +{ + "safie-sdk": 0 +} diff --git a/packages/mergebot/src/_tests/fixtures/75014/_files.json b/packages/mergebot/src/_tests/fixtures/75014/_files.json new file mode 100644 index 0000000000..8541bb64af --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75014/_files.json @@ -0,0 +1,5 @@ +{ + "ed4473032f08df609bbfd2a0ee8a4a78f74393c2:types/safie-sdk/.npmignore": "*\n!**/*.d.ts\n!**/*.d.cts\n!**/*.d.mts\n!**/*.d.*.ts\n", + "ed4473032f08df609bbfd2a0ee8a4a78f74393c2:types/safie-sdk/package.json": "{\n \"private\": true,\n \"name\": \"@types/safie-sdk\",\n \"version\": \"1.8.9999\",\n \"projects\": [\n \"https://developers.safie.link/\"\n ],\n \"devDependencies\": {\n \"@types/safie-sdk\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Safie Inc.\",\n \"githubUsername\": \"SafieDev\"\n }\n ],\n \"nonNpm\": true,\n \"nonNpmDescription\": \"Safie Developers JavaScript SDK\"\n}\n", + "ed4473032f08df609bbfd2a0ee8a4a78f74393c2:types/safie-sdk/tsconfig.json": "{\n \"compilerOptions\": {\n \"module\": \"node16\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"noImplicitAny\": true,\n \"noImplicitThis\": true,\n \"strictFunctionTypes\": true,\n \"strictNullChecks\": true,\n \"types\": [],\n \"noEmit\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"files\": [\n \"index.d.ts\",\n \"safie-sdk-tests.ts\"\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/75014/_response.json b/packages/mergebot/src/_tests/fixtures/75014/_response.json new file mode 100644 index 0000000000..cd3edf9c8a --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75014/_response.json @@ -0,0 +1,349 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM7ceHRM", + "title": "[safie-sdk] Add type definitions", + "createdAt": "2026-05-18T01:00:25Z", + "author": { + "login": "yusuke-oba1", + "__typename": "User" + }, + "authorAssociation": "NONE", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Other Approved", + "__typename": "Label" + }, + { + "name": "New Definition", + "__typename": "Label" + }, + { + "name": "Unreviewed", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 75014, + "state": "OPEN", + "headRefOid": "ed4473032f08df609bbfd2a0ee8a4a78f74393c2", + "baseRefOid": "c6fb7d2e0e833931ac92da131709d2c6178ce3d8", + "changedFiles": 5, + "additions": 1525, + "deletions": 0, + "commitIds": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "oid": "23fcb374983281cf0900a967493733d932d7318b", + "parents": { + "nodes": [ + { + "oid": "2266eb2a0857dabc525d50a13801a0473d7a7338", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "84d893eab091fe78c932364875074403655adcbc", + "parents": { + "nodes": [ + { + "oid": "23fcb374983281cf0900a967493733d932d7318b", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + }, + { + "commit": { + "oid": "ed4473032f08df609bbfd2a0ee8a4a78f74393c2", + "parents": { + "nodes": [ + { + "oid": "84d893eab091fe78c932364875074403655adcbc", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "totalCount": 2, + "nodes": [ + { + "author": { + "login": "RyanCavanaugh", + "__typename": "User" + }, + "commit": { + "oid": "84d893eab091fe78c932364875074403655adcbc", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "CHANGES_REQUESTED", + "submittedAt": "2026-06-05T17:58:45Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/75014#pullrequestreview-4438476440", + "__typename": "PullRequestReview" + }, + { + "author": { + "login": "gabritto", + "__typename": "User" + }, + "commit": { + "oid": "ed4473032f08df609bbfd2a0ee8a4a78f74393c2", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "MEMBER", + "state": "APPROVED", + "submittedAt": "2026-06-09T15:32:02Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/75014#pullrequestreview-4460141418", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 3, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 72923031230, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/ed4473032f08df609bbfd2a0ee8a4a78f74393c2/checks?check_suite_id=72923031230", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/ed4473032f08df609bbfd2a0ee8a4a78f74393c2/checks?check_suite_id=72923031230", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2026-06-08T14:53:09Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2026-06-08T14:52:54Z", + "committedDate": "2026-06-08T14:52:54Z", + "pushedDate": null, + "oid": "ed4473032f08df609bbfd2a0ee8a4a78f74393c2", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 6, + "nodes": [ + { + "id": "IC_kwDOAFz6BM8AAAABCqDVRA", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "databaseId": 4473279812, + "body": "@yusuke-oba1 Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `safie-sdk` (*new!*) β€” [on npm](https://www.npmjs.com/package/safie-sdk), [on unpkg](https://unpkg.com/browse/safie-sdk@latest/)\n - 1 added owner: @SafieDev\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75014&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * πŸ• Only a DT maintainer can approve changes when there are new packages added\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n## Inactive\n\nThis PR has been inactive for 22 days β€” it is *still* unreviewed!\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-05-18T01:01:05Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABCqDWiw", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "databaseId": 4473280139, + "body": "πŸ”” @yusuke-oba1 β€” there are no owners, but it would still be good if you find someone to [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/75014/files) in the next few days, otherwise a maintainer will look at it. (And if you do find someone, maybe even recruit them to be a second owner to make future changes easier...)\n", + "createdAt": "2026-05-18T01:01:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABEGAMsg", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "databaseId": 4569697458, + "body": "Re-ping @Β«anyone?Β»:\n\nThis PR has been out for over a week, yet I haven't seen any reviews.\n\nCould someone please give it some attention? Thanks!\n", + "createdAt": "2026-05-29T01:29:57Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABE8_nHQ", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "databaseId": 4627359517, + "body": "It has been more than two weeks and this PR still has no reviews.\n\nI'll bump it to the DT maintainer queue. Thank you for your patience, @yusuke-oba1.\n\n(Ping @Β«anyone?Β».)\n", + "createdAt": "2026-06-05T01:31:28Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFDdjCQ", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "databaseId": 4634141449, + "body": "@yusuke-oba1 One or more reviewers has requested changes. Please address their comments. I'll be back once they sign off or you've pushed new commits. Thank you!\n", + "createdAt": "2026-06-05T17:59:27Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFS34JA", + "author": { + "login": "typescript-bot", + "__typename": "User" + }, + "authorAssociation": "MEMBER", + "databaseId": 4650301476, + "body": "@RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?\n", + "createdAt": "2026-06-08T14:59:07Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 5, + "nodes": [ + { + "path": "types/safie-sdk/.npmignore", + "additions": 5, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/safie-sdk/index.d.ts", + "additions": 1184, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/safie-sdk/package.json", + "additions": 19, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/safie-sdk/safie-sdk-tests.ts", + "additions": 297, + "deletions": 0, + "__typename": "PullRequestChangedFile" + }, + { + "path": "types/safie-sdk/tsconfig.json", + "additions": 20, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "NQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectItems": { + "nodes": [], + "__typename": "ProjectV2ItemConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + } +} diff --git a/packages/mergebot/src/_tests/fixtures/75014/derived.json b/packages/mergebot/src/_tests/fixtures/75014/derived.json new file mode 100644 index 0000000000..08d6ad1673 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75014/derived.json @@ -0,0 +1,67 @@ +{ + "type": "info", + "now": "2026-06-09T17:22:31.814Z", + "pr_number": 75014, + "author": "yusuke-oba1", + "headCommitOid": "ed4473032f08df609bbfd2a0ee8a4a78f74393c2", + "mergeBaseOid": "c6fb7d2e0e833931ac92da131709d2c6178ce3d8", + "lastPushDate": "2026-05-18T01:00:25.000Z", + "lastActivityDate": "2026-06-09T15:32:02.000Z", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "tooManyCommits": false, + "tooManyReviews": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "safie-sdk", + "kind": "add", + "files": [ + { + "path": "types/safie-sdk/.npmignore", + "kind": "package-meta-ok" + }, + { + "path": "types/safie-sdk/index.d.ts", + "kind": "definition" + }, + { + "path": "types/safie-sdk/package.json", + "kind": "package-meta-ok" + }, + { + "path": "types/safie-sdk/safie-sdk-tests.ts", + "kind": "test" + }, + { + "path": "types/safie-sdk/tsconfig.json", + "kind": "package-meta-ok" + } + ], + "owners": [], + "addedOwners": [ + "SafieDev" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "gabritto", + "date": "2026-06-09T15:32:02.000Z", + "isMaintainer": true + }, + { + "type": "stale", + "reviewer": "RyanCavanaugh", + "date": "2026-06-05T17:58:45.000Z", + "abbrOid": "84d893e" + } + ], + "mainBotCommentID": 4473279812, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/75014/mutations.json b/packages/mergebot/src/_tests/fixtures/75014/mutations.json new file mode 100644 index 0000000000..ae671c96b0 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75014/mutations.json @@ -0,0 +1,66 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABCqDVRA", + "body": "@yusuke-oba1 Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `safie-sdk` (*new!*) β€” [on npm](https://www.npmjs.com/package/safie-sdk), [on unpkg](https://unpkg.com/browse/safie-sdk@latest/)\n - 1 added owner: @SafieDev\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75014&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Only a DT maintainer can approve changes when there are new packages added\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: AddLabelsToLabelableInput!) {\n addLabelsToLabelable(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWwxNjA4NTUyNDEw", + "MDU6TGFiZWw2OTcwMTg5NzI=" + ], + "labelableId": "PR_kwDOAFz6BM7ceHRM" + } + } + }, + { + "mutation": "mutation ($input: RemoveLabelsFromLabelableInput!) {\n removeLabelsFromLabelable(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "labelIds": [ + "MDU6TGFiZWw1ODYxNzcwNjM=", + "MDU6TGFiZWwyNDYyODA0MzE1" + ], + "labelableId": "PR_kwDOAFz6BM7ceHRM" + } + } + }, + { + "mutation": "mutation ($input: AddProjectV2ItemByIdInput!) {\n addProjectV2ItemById(input: $input) {\n __typename\n item {\n id\n }\n }\n}", + "variables": { + "input": { + "contentId": "PR_kwDOAFz6BM7ceHRM", + "projectId": "PVT_kwDOADeBNM4AkH1q" + } + } + }, + { + "mutation": "mutation ($input: UpdateProjectV2ItemFieldValueInput!) {\n updateProjectV2ItemFieldValue(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "itemId": "TEST", + "projectId": "PVT_kwDOADeBNM4AkH1q", + "fieldId": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", + "value": { + "singleSelectOptionId": "7da042bf" + } + } + } + }, + { + "mutation": "mutation ($input: AddCommentInput!) {\n addComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "subjectId": "PR_kwDOAFz6BM7ceHRM", + "body": "@yusuke-oba1: Everything looks good here. I am ready to merge this PR (at ed44730) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/75014/result.json b/packages/mergebot/src/_tests/fixtures/75014/result.json new file mode 100644 index 0000000000..f8d52de78b --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75014/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Maintainer Approved", + "New Definition", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@yusuke-oba1 Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `safie-sdk` (*new!*) β€” [on npm](https://www.npmjs.com/package/safie-sdk), [on unpkg](https://unpkg.com/browse/safie-sdk@latest/)\n - 1 added owner: @SafieDev\n\n## Code Reviews\n\nThis PR adds a new definition, so it needs to be reviewed by a DT maintainer before it can be merged.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75014&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Only a DT maintainer can approve changes when there are new packages added\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@yusuke-oba1: Everything looks good here. I am ready to merge this PR (at ed44730) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n" + }, + { + "tag": "stale-ping-fbf110-84d893e", + "status": "@RyanCavanaugh Thank you for reviewing this PR! The author has pushed new commits since your last review. Could you take another look and submit a fresh review?" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/_tests/fixtures/75097/_downloads.json b/packages/mergebot/src/_tests/fixtures/75097/_downloads.json new file mode 100644 index 0000000000..71cc04411d --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75097/_downloads.json @@ -0,0 +1,3 @@ +{ + "discord-rpc": 15452 +} diff --git a/packages/mergebot/src/_tests/fixtures/75097/_files.json b/packages/mergebot/src/_tests/fixtures/75097/_files.json new file mode 100644 index 0000000000..d9b034b8bd --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75097/_files.json @@ -0,0 +1,4 @@ +{ + "4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce:types/discord-rpc/package.json": "{\n \"private\": true,\n \"name\": \"@types/discord-rpc\",\n \"version\": \"4.0.9999\",\n \"projects\": [\n \"https://github.com/discordjs/RPC#readme\"\n ],\n \"dependencies\": {\n \"@types/events\": \"*\"\n },\n \"devDependencies\": {\n \"@types/discord-rpc\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Brandon Bothell\",\n \"githubUsername\": \"brandonbothell\"\n },\n {\n \"name\": \"Dylan Hackworth\",\n \"githubUsername\": \"dylhack\"\n },\n {\n \"name\": \"Sankarsan Kampa\",\n \"githubUsername\": \"k3rn31p4nic\"\n },\n {\n \"name\": \"HanchaiN\",\n \"githubUsername\": \"HanchaiN\"\n }\n ]\n}\n", + "c441c5b5d837b2f3dfdf95b0afcd1f05baf40b98:types/discord-rpc/package.json": "{\n \"private\": true,\n \"name\": \"@types/discord-rpc\",\n \"version\": \"4.0.9999\",\n \"projects\": [\n \"https://github.com/discordjs/RPC#readme\"\n ],\n \"dependencies\": {\n \"@types/events\": \"*\"\n },\n \"devDependencies\": {\n \"@types/discord-rpc\": \"workspace:.\"\n },\n \"owners\": [\n {\n \"name\": \"Dylan Hackworth\",\n \"githubUsername\": \"dylhack\"\n },\n {\n \"name\": \"Sankarsan Kampa\",\n \"githubUsername\": \"k3rn31p4nic\"\n },\n {\n \"name\": \"HanchaiN\",\n \"githubUsername\": \"HanchaiN\"\n }\n ]\n}\n" +} diff --git a/packages/mergebot/src/_tests/fixtures/75097/_response.json b/packages/mergebot/src/_tests/fixtures/75097/_response.json new file mode 100644 index 0000000000..5d899f01e5 --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75097/_response.json @@ -0,0 +1,613 @@ +{ + "data": { + "repository": { + "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2", + "pullRequest": { + "id": "PR_kwDOAFz6BM7kS7xO", + "title": "[discord-rpc] Add myself back", + "createdAt": "2026-06-09T08:53:58Z", + "author": { + "login": "brandonbothell", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "baseRef": { + "name": "master", + "__typename": "Ref" + }, + "labels": { + "nodes": [ + { + "name": "Self Merge", + "__typename": "Label" + }, + { + "name": "Owner Approved", + "__typename": "Label" + }, + { + "name": "Edits Owners", + "__typename": "Label" + } + ], + "__typename": "LabelConnection" + }, + "isDraft": false, + "mergeable": "MERGEABLE", + "number": 75097, + "state": "OPEN", + "headRefOid": "4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce", + "baseRefOid": "c441c5b5d837b2f3dfdf95b0afcd1f05baf40b98", + "changedFiles": 1, + "additions": 4, + "deletions": 0, + "commitIds": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "oid": "4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce", + "parents": { + "nodes": [ + { + "oid": "c441c5b5d837b2f3dfdf95b0afcd1f05baf40b98", + "__typename": "Commit" + } + ], + "__typename": "CommitConnection" + }, + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "timelineItems": { + "nodes": [], + "__typename": "PullRequestTimelineItemsConnection" + }, + "reviews": { + "totalCount": 1, + "nodes": [ + { + "author": { + "login": "dylhack", + "__typename": "User" + }, + "commit": { + "oid": "4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce", + "__typename": "Commit" + }, + "comments": { + "nodes": [], + "__typename": "PullRequestReviewCommentConnection" + }, + "authorAssociation": "CONTRIBUTOR", + "state": "APPROVED", + "submittedAt": "2026-06-09T14:59:48Z", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/75097#pullrequestreview-4459865072", + "__typename": "PullRequestReview" + } + ], + "__typename": "PullRequestReviewConnection" + }, + "commits": { + "totalCount": 1, + "nodes": [ + { + "commit": { + "checkSuites": { + "nodes": [ + { + "databaseId": 73067100919, + "app": { + "name": "GitHub Actions", + "__typename": "App" + }, + "conclusion": "SUCCESS", + "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce/checks?check_suite_id=73067100919", + "status": "COMPLETED", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce/checks?check_suite_id=73067100919", + "checkRuns": { + "nodes": [ + { + "title": null, + "__typename": "CheckRun" + } + ], + "__typename": "CheckRunConnection" + }, + "createdAt": "2026-06-09T08:54:05Z", + "workflowRun": { + "file": { + "path": ".github/workflows/CI.yml", + "__typename": "WorkflowRunFile" + }, + "__typename": "WorkflowRun" + }, + "__typename": "CheckSuite" + } + ], + "__typename": "CheckSuiteConnection" + }, + "status": null, + "authoredDate": "2026-06-09T08:36:03Z", + "committedDate": "2026-06-09T08:36:03Z", + "pushedDate": null, + "oid": "4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce", + "__typename": "Commit" + }, + "__typename": "PullRequestCommit" + } + ], + "__typename": "PullRequestCommitConnection" + }, + "comments": { + "totalCount": 26, + "nodes": [ + { + "id": "IC_kwDOAFz6BM8AAAABFaTesw", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4658093747, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * πŸ• Continuous integration tests are still running\n * πŸ• Most recent commit is approved by type definition owners, DT maintainers or others\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T08:54:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFaTgFQ", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4658094101, + "body": "πŸ”” @dylhack @k3rn31p4nic @HanchaiN β€” please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/75097/files) in the next few days. Be sure to explicitly select **`Approve`** or **`Request Changes`** in the GitHub UI so I know what's going on.\n", + "createdAt": "2026-06-09T08:54:40Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFaWfUw", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4658143059, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * πŸ• Most recent commit is approved by type definition owners, DT maintainers or others\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T09:00:25Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFaWf1g", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4658143190, + "body": "πŸ”” @dylhack @k3rn31p4nic @HanchaiN β€” please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/75097/files) in the next few days. Be sure to explicitly select **`Approve`** or **`Request Changes`** in the GitHub UI so I know what's going on.\n", + "createdAt": "2026-06-09T09:00:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFcZ62Q", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4660296409, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * πŸ• Most recent commit is approved by type definition owners, DT maintainers or others\n\nOnce every item on this list is checked, I'll ask you for permission to merge and publish the changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T13:35:23Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFcZ7gQ", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4660296577, + "body": "πŸ”” @dylhack @k3rn31p4nic @HanchaiN β€” please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/75097/files) in the next few days. Be sure to explicitly select **`Approve`** or **`Request Changes`** in the GitHub UI so I know what's going on.\n", + "createdAt": "2026-06-09T13:35:24Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdKI9g", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661086454, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T15:00:29Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdKLFA", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661086996, + "body": "@brandonbothell: Everything looks good here. I am ready to merge this PR (at 4e58a58) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@dylhack, @k3rn31p4nic, @HanchaiN: you can do this too.)\n", + "createdAt": "2026-06-09T15:00:33Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdrYpw", + "author": { + "login": "brandonbothell", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "databaseId": 4661631143, + "body": "Ready to merge", + "createdAt": "2026-06-09T16:03:37Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdrrBA", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661635844, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T16:04:11Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdrreg", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661635962, + "body": "@brandonbothell: Everything looks good here. I am ready to merge this PR (at 4e58a58) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@dylhack, @k3rn31p4nic, @HanchaiN: you can do this too.)\n", + "createdAt": "2026-06-09T16:04:12Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdrr5w", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661636071, + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n", + "createdAt": "2026-06-09T16:04:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdtvQQ", + "author": { + "login": "brandonbothell", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "databaseId": 4661669697, + "body": "Ready to merge", + "createdAt": "2026-06-09T16:08:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFduAfA", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661674108, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T16:08:59Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFduA7A", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661674220, + "body": "@brandonbothell: Everything looks good here. I am ready to merge this PR (at 4e58a58) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@dylhack, @k3rn31p4nic, @HanchaiN: you can do this too.)\n", + "createdAt": "2026-06-09T16:09:00Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFduBSg", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661674314, + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n", + "createdAt": "2026-06-09T16:09:01Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdv1JQ", + "author": { + "login": "brandonbothell", + "__typename": "User" + }, + "authorAssociation": "CONTRIBUTOR", + "databaseId": 4661703973, + "body": "@jakebailey I'm not sure, but I think the bot is supposed to be editing the initial message instead of sending new ones, correct? Also, I can't merge this PR myself since the bot can't tell that it's ready to merge, if you or someone would take a look at it for me (just updated owners) that would be much appreciated.\r\n\r\nSome highly unintended behavior is afoot, it doesn't seem to be editing comments at all and instead just posts a new one very time. Reference: #75096 ", + "createdAt": "2026-06-09T16:12:51Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdwGNw", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661708343, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T16:13:25Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdwGlg", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661708438, + "body": "@brandonbothell: Everything looks good here. I am ready to merge this PR (at 4e58a58) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@dylhack, @k3rn31p4nic, @HanchaiN: you can do this too.)\n", + "createdAt": "2026-06-09T16:13:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdwG-w", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661708539, + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n", + "createdAt": "2026-06-09T16:13:26Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdxekw", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661730963, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T16:16:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdxe6A", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661731048, + "body": "@brandonbothell: Everything looks good here. I am ready to merge this PR (at 4e58a58) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@dylhack, @k3rn31p4nic, @HanchaiN: you can do this too.)\n", + "createdAt": "2026-06-09T16:16:18Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFdxfSg", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4661731146, + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n", + "createdAt": "2026-06-09T16:16:19Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFeCnHw", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4662011679, + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n", + "createdAt": "2026-06-09T16:54:11Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFeCnjQ", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4662011789, + "body": "@brandonbothell: Everything looks good here. I am ready to merge this PR (at 4e58a58) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@dylhack, @k3rn31p4nic, @HanchaiN: you can do this too.)\n", + "createdAt": "2026-06-09T16:54:12Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + }, + { + "id": "IC_kwDOAFz6BM8AAAABFeCn7w", + "author": { + "login": "typescript-automation", + "__typename": "Bot" + }, + "authorAssociation": "NONE", + "databaseId": 4662011887, + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-???) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n", + "createdAt": "2026-06-09T16:54:13Z", + "reactions": { + "nodes": [], + "__typename": "ReactionConnection" + }, + "__typename": "IssueComment" + } + ], + "__typename": "IssueCommentConnection" + }, + "files": { + "totalCount": 1, + "nodes": [ + { + "path": "types/discord-rpc/package.json", + "additions": 4, + "deletions": 0, + "__typename": "PullRequestChangedFile" + } + ], + "pageInfo": { + "hasNextPage": false, + "endCursor": "MQ", + "__typename": "PageInfo" + }, + "__typename": "PullRequestChangedFileConnection" + }, + "projectItems": { + "nodes": [ + { + "id": "PVTI_lADOADeBNM4AkH1qzgvKG9I", + "project": { + "id": "PVT_kwDOADeBNM4AkH1q", + "number": 1, + "__typename": "ProjectV2" + }, + "fieldValueByName": { + "name": "Waiting for Author to Merge", + "field": { + "id": "PVTSSF_lADOADeBNM4AkH1qzgcYOEM", + "__typename": "ProjectV2SingleSelectField" + }, + "__typename": "ProjectV2ItemFieldSingleSelectValue" + }, + "updatedAt": "2026-06-09T16:53:41Z", + "__typename": "ProjectV2Item" + } + ], + "__typename": "ProjectV2ItemConnection" + }, + "__typename": "PullRequest" + }, + "__typename": "Repository" + } + } +} diff --git a/packages/mergebot/src/_tests/fixtures/75097/derived.json b/packages/mergebot/src/_tests/fixtures/75097/derived.json new file mode 100644 index 0000000000..b4b548d2ba --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75097/derived.json @@ -0,0 +1,52 @@ +{ + "type": "info", + "now": "2026-06-09T17:21:26.238Z", + "pr_number": 75097, + "author": "brandonbothell", + "headCommitOid": "4e58a58cbb6be4fd709a19bef50e7cbbc66c6cce", + "mergeBaseOid": "c441c5b5d837b2f3dfdf95b0afcd1f05baf40b98", + "lastPushDate": "2026-06-09T08:53:58.000Z", + "lastActivityDate": "2026-06-09T16:12:51.000Z", + "mergeOfferDate": "2026-06-09T16:54:12.000Z", + "mergeRequestDate": "2026-06-09T16:08:26.000Z", + "mergeRequestUser": "brandonbothell", + "hasMergeConflict": false, + "isFirstContribution": false, + "tooManyFiles": false, + "hugeChange": false, + "tooManyCommits": false, + "tooManyReviews": false, + "popularityLevel": "Well-liked by everyone", + "pkgInfo": [ + { + "name": "discord-rpc", + "kind": "edit", + "files": [ + { + "path": "types/discord-rpc/package.json", + "kind": "package-meta-ok" + } + ], + "owners": [ + "dylhack", + "k3rn31p4nic", + "HanchaiN" + ], + "addedOwners": [ + "brandonbothell" + ], + "deletedOwners": [], + "popularityLevel": "Well-liked by everyone" + } + ], + "reviews": [ + { + "type": "approved", + "reviewer": "dylhack", + "date": "2026-06-09T14:59:48.000Z", + "isMaintainer": false + } + ], + "mainBotCommentID": 4658093747, + "ciResult": "pass" +} diff --git a/packages/mergebot/src/_tests/fixtures/75097/mutations.json b/packages/mergebot/src/_tests/fixtures/75097/mutations.json new file mode 100644 index 0000000000..305e2897af --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75097/mutations.json @@ -0,0 +1,120 @@ +[ + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFaTesw", + "body": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ...\n" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFaWfUw" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFcZ62Q" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFdKI9g" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFdrrBA" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFduAfA" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFdwGNw" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFdxekw" + } + } + }, + { + "mutation": "mutation ($input: DeleteIssueCommentInput!) {\n deleteIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFeCnHw" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFdrr5w", + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-4658093747) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFduBSg", + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-4658093747) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFdwG-w", + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-4658093747) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFdxfSg", + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-4658093747) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + }, + { + "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n updateIssueComment(input: $input) {\n __typename\n }\n}", + "variables": { + "input": { + "id": "IC_kwDOAFz6BM8AAAABFeCn7w", + "body": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-4658093747) are green. I will let you know once that happens.\n\nThanks, and happy typing!\n" + } + } + } +] diff --git a/packages/mergebot/src/_tests/fixtures/75097/result.json b/packages/mergebot/src/_tests/fixtures/75097/result.json new file mode 100644 index 0000000000..9cce6e0adf --- /dev/null +++ b/packages/mergebot/src/_tests/fixtures/75097/result.json @@ -0,0 +1,25 @@ +{ + "projectColumn": "Waiting for Author to Merge", + "labels": [ + "Owner Approved", + "Edits Owners", + "Self Merge" + ], + "responseComments": [ + { + "tag": "welcome", + "status": "@brandonbothell Thank you for submitting this PR!\n\n***This is a live comment that I will keep updated.***\n\n## 1 package in this PR\n\n* `discord-rpc` β€” [on npm](https://www.npmjs.com/package/discord-rpc), [on unpkg](https://unpkg.com/browse/discord-rpc@latest/)\n - owner-approval: @dylhack\n - 1 added owner: ✎@brandonbothell\n\n## Code Reviews\n\nBecause you edited one package and there were no type definition changes, I can help you merge this PR once someone else signs off on it.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=75097&install-plugin=playground-dt-review).\n\n## Status\n\n * βœ… No merge conflicts\n * βœ… Continuous integration tests have passed\n * βœ… Most recent commit is approved by type definition owners, DT maintainers or others\n\nAll of the items on the list are green. **To merge, you need to post a comment including the string \"Ready to merge\"** to bring in your changes.\n\n----------------------\n... diagnostics scrubbed ..." + }, + { + "tag": "merge-offer", + "status": "@brandonbothell: Everything looks good here. I am ready to merge this PR (at 4e58a58) on your behalf whenever you think it's ready.\n\nIf you'd like that to happen, please post a comment saying:\n\n> Ready to merge\n\nand I'll merge this PR almost instantly. Thanks for helping out! :heart:\n\n(@dylhack, @k3rn31p4nic, @HanchaiN: you can do this too.)" + }, + { + "tag": "wait-for-merge-offer-4e58a58", + "status": ":passport_control: Hi @brandonbothell,\n\nI can't [accept a pull request](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-make-a-pull-request) until all of the checks in the \"Status\" section of [this comment](#issuecomment-4658093747) are green. I will let you know once that happens.\n\nThanks, and happy typing!" + } + ], + "shouldClose": false, + "shouldMerge": false, + "shouldUpdateLabels": true +} diff --git a/packages/mergebot/src/execute-pr-actions.ts b/packages/mergebot/src/execute-pr-actions.ts index 4a954d9066..4914448290 100644 --- a/packages/mergebot/src/execute-pr-actions.ts +++ b/packages/mergebot/src/execute-pr-actions.ts @@ -167,21 +167,41 @@ function getMutationsForComments(actions: Actions, prId: string, botComments: Pa actions.responseComments.map((wantedComment) => { if ((wantedComment.tag === "welcome") !== onlyWelcome) return []; const sameTagComments = botComments.filter((comment) => comment.tag === wantedComment.tag); - return sameTagComments.length === 0 - ? [ - createMutation("addComment", { - subjectId: prId, + if (sameTagComments.length === 0) { + return [ + createMutation("addComment", { + subjectId: prId, + body: comment.make(wantedComment), + }), + ]; + } + // The "welcome" comment is the single live overview/state comment that the bot keeps updated. + // If duplicates exist (e.g. because a previous bug caused the bot to not recognize its own + // comments and post new ones), keep the first and delete the rest. Other comment types (e.g. + // pings) are left alone. + if (wantedComment.tag === "welcome") { + const keep = sameTagComments[0]!; + const duplicates = sameTagComments.slice(1); + return [ + keep.status === wantedComment.status + ? null // Comment is up-to-date; skip + : createMutation("updateIssueComment", { + id: keep.id, + body: comment.make(wantedComment), + }), + ...duplicates.map((duplicate) => + createMutation("deleteIssueComment", { id: duplicate.id }), + ), + ]; + } + return sameTagComments.map((actualComment) => + actualComment.status === wantedComment.status + ? null // Comment is up-to-date; skip + : createMutation("updateIssueComment", { + id: actualComment.id, body: comment.make(wantedComment), }), - ] - : sameTagComments.map((actualComment) => - actualComment.status === wantedComment.status - ? null // Comment is up-to-date; skip - : createMutation("updateIssueComment", { - id: actualComment.id, - body: comment.make(wantedComment), - }), - ); + ); }), ); } diff --git a/packages/mergebot/src/github-auth.ts b/packages/mergebot/src/github-auth.ts index 07972a48a7..ca6082c7f0 100644 --- a/packages/mergebot/src/github-auth.ts +++ b/packages/mergebot/src/github-auth.ts @@ -70,6 +70,7 @@ export async function getGitHubAuthToken() { contents: "read", discussions: "write", issues: "write", + members: "read", organization_projects: "write", pull_requests: "write", }, diff --git a/packages/mergebot/src/util/util.ts b/packages/mergebot/src/util/util.ts index 1f03a8a736..ffbd95642c 100644 --- a/packages/mergebot/src/util/util.ts +++ b/packages/mergebot/src/util/util.ts @@ -42,7 +42,12 @@ export function sameUser(u1: string, u2: string) { return u1.toLowerCase() === u2.toLowerCase(); } -const typeScriptBotLogins = new Set(["typescript-bot", "typescript-automation[bot]"]); +// GitHub reports the app bot's login differently depending on the API: the GraphQL +// `author.login`/`actor.login` of a comment, review, or event made by the app is +// `typescript-automation` (no suffix), while REST webhook `sender.login` payloads use +// `typescript-automation[bot]`. Include both so the bot recognizes its own activity in +// either context (and keep the legacy `typescript-bot` user for historical PRs). +const typeScriptBotLogins = new Set(["typescript-bot", "typescript-automation", "typescript-automation[bot]"]); const knownBots = new Set([...typeScriptBotLogins, "copilot-pull-request-reviewer"]); export function isTypeScriptBot(login: string | null | undefined) {