Repository: DefinitelyTyped/dt-mergebot
Pull request #425 (2021-09-09 18:52:53)

Improve `RemindPeopleTheyCanUnblockPR`
When the CI is not passing, it seems weird to tell people that they can
short-circuit waiting for a maintainer.  But it'll be bad to drop the
comment altogether in this case: this will let people fix the CI and
only then bug them about adding a test, so they'll be much less
inclinded to do so.

Instead, have a different phrasing for the failing CI case.

elibarzilay: Two comments:
* also changed "waiting on a maintainer" to "for a"
* not sure about "short-circuit the future maintainer approval"...


Patch:
diff --git a/src/comments.ts b/src/comments.ts
index 6509cf9..7959c80 100644
--- a/src/comments.ts
+++ b/src/comments.ts
@@ -121,18 +121,21 @@ export const WaitUntilMergeIsOK = (user: string, abbrOid: string, uri: string, m
         |Thanks, and happy typing!`
 });
 
-export const RemindPeopleTheyCanUnblockPR = (user: string, approvalUsers: string[], abbrOid: string) => ({
+export const RemindPeopleTheyCanUnblockPR = (user: string, approvalUsers: string[], ciPassing: boolean, abbrOid: string) => ({
     // at most one reminder per update
     tag: `wait-for-merge-offer-${abbrOid}`,
     status: txt`
         |:hourglass_flowing_sand: Hi @${user},
         |
-        |It's been a few days since this PR was approved by ${approvalUsers.join(", ")}
-         and we're waiting on a DT maintainer to give a review.
+        |It's been a few days since this PR was approved by ${approvalUsers.join(", ")} and we're waiting for
+         ${ciPassing ? `a DT maintainer to give a review`
+                     : `you to fix the test failures and then for a maintainer approval`}.
         |
-        |If you would like to short-circuit this wait, you can edit some of the [test files](${urls.testsTs})
-         in the package which verify how the \`.d.ts\` files work. This would allow the PR to be
-         merged by you or the DT module owners after a re-review.`
+        |If you would like to short-circuit
+         ${ciPassing ? `this wait`
+                     : `another wait for a maintainer`},
+         you can edit some of the [test files](${urls.testsTs}) in the package which verify how the \`.d.ts\` files
+         work. This would allow the PR to be merged by you or the DT module owners after a re-review.`
 });
 
 // Explanation for the stalness count in the welcome message
diff --git a/src/compute-pr-actions.ts b/src/compute-pr-actions.ts
index 220a060..bc10d95 100644
--- a/src/compute-pr-actions.ts
+++ b/src/compute-pr-actions.ts
@@ -332,8 +332,10 @@ export function process(prInfo: BotResult,
 
     // Has it: got no DT tests but is approved by DT modules and basically blocked by the DT maintainers - and it has been over 3 days?
     // Send a message reminding them that they can un-block themselves by adding tests.
-    if (!info.hasTests && !info.hasMultiplePackages && info.approvedBy.includes("owner") && !info.editsInfra  && info.approverKind === "maintainer" && info.staleness && info.staleness.days > 3) {
-        post(Comments.RemindPeopleTheyCanUnblockPR(info.author, info.approvedReviews.map(r => r.reviewer), headCommitAbbrOid));
+    if (!info.hasTests && !info.hasMultiplePackages && info.approvedBy.includes("owner") && !info.editsInfra
+        && info.approverKind === "maintainer" && (info.staleness?.days ?? 0) > 3) {
+        post(Comments.RemindPeopleTheyCanUnblockPR(info.author, info.approvedReviews.map(r => r.reviewer),
+                                                   info.ciResult === "pass", headCommitAbbrOid));
     }
 
     // Timeline-related actions


Test patch:
diff --git a/src/_tests/fixtures/51338/mutations.json b/src/_tests/fixtures/51338/mutations.json
index 70cd8e9..2639f50 100644
--- a/src/_tests/fixtures/51338/mutations.json
+++ b/src/_tests/fixtures/51338/mutations.json
@@ -24,7 +24,7 @@
     "variables": {
       "input": {
         "subjectId": "MDExOlB1bGxSZXF1ZXN0NTc2NTk4OTQ2",
-        "body": ":hourglass_flowing_sand: Hi @pkuczynski,\n\nIt's been a few days since this PR was approved by tellnes and we're waiting on a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n<!--typescript_bot_wait-for-merge-offer-4a7712f-->"
+        "body": ":hourglass_flowing_sand: Hi @pkuczynski,\n\nIt's been a few days since this PR was approved by tellnes and we're waiting for a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n<!--typescript_bot_wait-for-merge-offer-4a7712f-->"
       }
     }
   },
diff --git a/src/_tests/fixtures/51338/result.json b/src/_tests/fixtures/51338/result.json
index 2ab5a3d..00a3763 100644
--- a/src/_tests/fixtures/51338/result.json
+++ b/src/_tests/fixtures/51338/result.json
@@ -19,7 +19,7 @@
     },
     {
       "tag": "wait-for-merge-offer-4a7712f",
-      "status": ":hourglass_flowing_sand: Hi @pkuczynski,\n\nIt's been a few days since this PR was approved by tellnes and we're waiting on a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review."
+      "status": ":hourglass_flowing_sand: Hi @pkuczynski,\n\nIt's been a few days since this PR was approved by tellnes and we're waiting for a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review."
     },
     {
       "tag": "Unreviewed:nearly:2021-02-19",
diff --git a/src/_tests/fixtures/55035/_downloads.json b/src/_tests/fixtures/55035/_downloads.json
new file mode 100644
index 0000000..8a36add
--- /dev/null
+++ b/src/_tests/fixtures/55035/_downloads.json
@@ -0,0 +1,3 @@
+{
+  "jsreport-core": 5044
+}
diff --git a/src/_tests/fixtures/55035/_files.json b/src/_tests/fixtures/55035/_files.json
new file mode 100644
index 0000000..8dddcf0
--- /dev/null
+++ b/src/_tests/fixtures/55035/_files.json
@@ -0,0 +1,4 @@
+{
+  "master:types/jsreport-core/index.d.ts": "// Type definitions for jsreport-core 2.0\n// Project: http://jsreport.net\n// Definitions by: taoqf <https://github.com/taoqf>\n//                 pofider <https://github.com/pofider>\n//                 Keith Kikta <https://github.com/newbish>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// <reference types=\"node\" />\n\nimport * as fs from 'fs';\n\ndeclare namespace JsReport {\n    type Helpers = string | { [fun: string]: (...args: any[]) => any };\n\n    type Engine = \"none\";\n\n    type Recipe = \"html\";\n\n    interface TemplateBase {\n        /** template for the engine */\n        content?: string | undefined;\n        /** templating engine used to assemble document */\n        engine: Engine | string;\n        /** javascript helper functions used by templating engines */\n        helpers?: Helpers | undefined;\n        /** recipe used for printing previously assembled document */\n        recipe: Recipe | string;\n        pathToEngine?: string | undefined;\n    }\n\n    interface Template extends TemplateBase {\n        /** template for the engine */\n        content: string;\n    }\n\n    interface TemplateRegistry {\n        Template: Template;\n    }\n\n    type TemplateLike = TemplateRegistry[keyof TemplateRegistry]; // Template | NamedTemplate\n\n    interface RequestOptions {\n        preview?: boolean | undefined;\n        /** sets the request timeout in milliseconds */\n        timeout?: number | undefined;\n        /** defines the name of the report being to be generated */\n        reportName?: string | undefined;\n    }\n\n    interface Request {\n        /** @default true */\n        value?: boolean | undefined;\n        /** @default false */\n        writable?: boolean | undefined;\n        /** @default false */\n        configurable?: boolean | undefined;\n        /** @default false */\n        enumerable?: boolean | undefined;\n        /** defines the template of used for report generation */\n        template: TemplateLike;\n        /** defines options such as report name and request timeout */\n        options?: Partial<RequestOptions> | undefined;\n        context?: Context | undefined;\n        data?: any;\n    }\n\n    interface Context {\n        shared?: any;\n        originalInputDataIsEmpty?: boolean | undefined;\n        isChildRequest?: boolean | undefined;\n        logs: any;\n        timeoutLimit: number;\n    }\n\n    interface Response {\n        content: Buffer;\n        stream: NodeJS.ReadableStream;\n        headers: {\n            [header: string]: string | number | boolean;\n        };\n    }\n\n    interface ListenerCollection {\n        add(\n            type: string,\n            callback: (req: Request, res: Response, err?: any) => Promise<any> | void\n        ): void;\n    }\n\n    interface Collection {\n        find(query: { [field: string]: any }): Promise<object[]>;\n        update(query: { [field: string]: any }, update: object, options?: object): Promise<any>;\n        remove(query: { [field: string]: any }): Promise<any>;\n        insert(obj: object): Promise<object>;\n    }\n\n    interface DocumentStore {\n        collection(name: string): Collection;\n    }\n\n    type Extension = (reporter: Reporter, definition: object) => void;\n\n    interface ExtensionDefinition {\n        options: any;\n        main: any;\n        directory: string;\n    }\n\n    interface ReporterInstance {\n        defaults?: Defaults | undefined;\n        options?: Configuration | undefined;\n        afterRenderListeners: ListenerCollection;\n        afterTemplatingEnginesExecutedListeners: ListenerCollection;\n        beforeRenderListeners: ListenerCollection;\n        closeListeners: ListenerCollection;\n        documentStore: DocumentStore;\n        blobStorage: BlobStorage;\n        initializeListeners: ListenerCollection;\n        renderErrorListeners: ListenerCollection;\n        // it would be nice to add winston.LoggerInstance here\n        // however adding import winston = require('winston') breaks exported enums\n        logger?: any;\n        validateRenderListeners: ListenerCollection;\n        version?: string | undefined;\n        settings: Settings;\n        optionsValidator: SchemaValidator;\n        entityTypeValidator: SchemaValidator;\n    }\n\n    interface Reporter extends ReporterInstance {\n        use(extension: Extension | ExtensionDefinition): Reporter;\n        init(): Promise<Reporter>;\n        render(request: Request, parent?: Request): Promise<Response>;\n        discover(): Reporter;\n        createListenerCollection(): ListenerCollection;\n        close(): Promise<void>;\n        extensionsLoad(opts: any): Promise<Reporter>;\n        checkValidEntityName(c: string, doc: any, req: Request): Promise<void>;\n        createError(message: string, options?: any): any;\n        getAvailableRenderTimeout(req: Request, defaultValue: number): number;\n        executeScript(inputs: any, options: any, req: Request): Promise<any>;\n        afterConfigLoaded(cb: () => void): Reporter;\n        addRequestContextMetaConfig(property: any, options: any): void;\n        getRequestContextMetaConfig(property: any): any;\n        addPathToWatchForAutoCleanup(customPath: string): void;\n        getPathsToWatchForAutoCleanup(): string[];\n        ensureTempDirectoryExists(): Promise<TempDirectoryResult>;\n        readTempFile(filename: string, opts: any): Promise<ReadTempFileResult>;\n        writeTempFile(filenameFn: () => string, content: any, opts: any): Promise<WriteFileResult>;\n        readTempFileStream(filename: string, opts: any): Promise<ReadTempFileStreamResult>;\n        writeTempFileStream(filenameFn: () => string, opts: any): Promise<WriteFileStreamResult>;\n        silentLogs(logger: any): void;\n    }\n\n    interface Defaults {\n        loadConfig?: boolean | undefined;\n        rootDirectory?: string | undefined;\n    }\n\n    type ReporterOptionsStoreProvider = 'memory';\n    type ReporterOptionsBlobStorageProvider = 'memory' | 'fs';\n    type EngineStrategy = 'dedicated-process' | 'http-server' | 'in-process';\n\n    interface Configuration {\n        mode?: any;\n        /** specifies where is the application root and where jsreport searches for extensions */\n        rootDirectory?: string | undefined;\n        /** specifies directory of the script that was used to start node.js, this value is mostly metadata that is useful for your own code inside jsreport scripts */\n        appDirectory?: string | undefined;\n        /**\n         * specifies where jsreport stores temporary files used by the conversion pipelineDef\n         * @default getDefaultTempDirectory()\n         */\n        tempDirectory?: string | undefined;\n        /**\n         * specifies if jsreport should load configuration values from external sources (cli args, env vars, configuration files) or not\n         * @default getDefaultLoadConfig()\n         */\n        loadConfig?: boolean | undefined;\n        /** specifies if after some interval jsreport should automatically clean up temporary files generated while rendering reports */\n        autoTempCleanup?: boolean | undefined;\n        /** specifies if jsreport should discover/search installed extensions in project and use them automatically */\n        discover?: boolean | undefined;\n        /**\n         * wheter if jsreport should read list of extensions from a previous generated cache or if it should crawl and try to search extensions again, set it to false when you want to always\n         * force crawling node_modules when searching for extensions while starting jsreport\n         * @default true\n         */\n        useExtensionsLocationCache?: boolean | undefined;\n        logger?: {\n            silent?: boolean | undefined;\n        } | undefined;\n        /** global single timeout that controls how much a report generation should wait before it times out */\n        reportTimeout?: number | undefined;\n        /**\n         * option that enables passing a custom report timeout per request using req.options.timeout. this enables that the caller of the report generation control the report timeout so enable it\n         * only when you trust the caller\n         * @default false\n         */\n        enableRequestReportTimeout?: boolean | undefined;\n        /** @default false */\n        allowLocalFilesAccess?: boolean | undefined;\n        encryption?: {\n            /** lenght must be 16 characters */\n            secretKey: string;\n            /** @default true */\n            enabled?: boolean | undefined;\n        } | undefined;\n        templatingEngines?: {\n            /** @default 'dedicated-process' */\n            strategy?: EngineStrategy | undefined;\n            /**\n             * defines the number of worker processes used for generating reports\n             * @default 1\n             */\n            numberOfWorkers?: number | undefined;\n            forkOptions?: {\n                execArgv?: string | string[] | undefined;\n            } | undefined;\n            allowedModules?: string | string[] | undefined;\n            /** sets the reporter timeout in milliseconds */\n            timeout?: number | undefined;\n            templateCache?: {\n                max: number;\n                enabled: boolean;\n            } | undefined;\n        } | undefined;\n        store?: {\n            provider?: ReporterOptionsStoreProvider | undefined;\n        } | undefined;\n        blobStorge?: {\n            provider?: ReporterOptionsBlobStorageProvider | undefined;\n        } | undefined;\n        extensions?: any;\n        extensionsList?: string[] | undefined;\n        /** @default true */\n        migrateEntitySetsToFolders?: boolean | undefined;\n        connectionString?: string | undefined;\n    }\n\n    interface Settings {\n        add(key: string, value: any, req: Request): any;\n        get(key: string): [SettingItem];\n        findValue(key: string, req: Request): any;\n        set(key: string, avalue: any, req: Request): any;\n        addOrSet(key: string, avalue: any, req: Request): number | null;\n        init(documentStore: any, authorization: any): any;\n        _collection: SettingItem[];\n        documentStore: any;\n        registerEntity(documentStore: any): void;\n    }\n\n    interface SettingItem {\n        key: string;\n        value: any;\n    }\n\n    interface SchemaValidator {\n        schemaVersion: string;\n ",
+  "7eca0aa421c535497e59aa231b955ea2b47712e4:types/jsreport-core/index.d.ts": "// Type definitions for jsreport-core 2.0\n// Project: http://jsreport.net\n// Definitions by: taoqf <https://github.com/taoqf>\n//                 pofider <https://github.com/pofider>\n//                 Keith Kikta <https://github.com/newbish>\n// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped\n// TypeScript Version: 2.3\n\n/// <reference types=\"node\" />\n\nimport * as fs from 'fs';\n\ndeclare namespace JsReport {\n    type Helpers = string | { [fun: string]: (...args: any[]) => any };\n\n    type Engine = \"none\";\n\n    type Recipe = \"html\";\n\n    interface TemplateBase {\n        /** template for the engine */\n        content?: string | undefined;\n        /** templating engine used to assemble document */\n        engine: Engine | string;\n        /** javascript helper functions used by templating engines */\n        helpers?: Helpers | undefined;\n        /** recipe used for printing previously assembled document */\n        recipe: Recipe | string;\n        pathToEngine?: string | undefined;\n    }\n\n    interface Template extends TemplateBase {\n        /** template for the engine */\n        content: string;\n    }\n\n    interface TemplateRegistry {\n        Template: Template;\n    }\n\n    type TemplateLike = TemplateRegistry[keyof TemplateRegistry]; // Template | NamedTemplate\n\n    interface RequestOptions {\n        preview?: boolean | undefined;\n        /** sets the request timeout in milliseconds */\n        timeout?: number | undefined;\n        /** defines the name of the report being to be generated */\n        reportName?: string | undefined;\n    }\n\n    interface Request {\n        /** @default true */\n        value?: boolean | undefined;\n        /** @default false */\n        writable?: boolean | undefined;\n        /** @default false */\n        configurable?: boolean | undefined;\n        /** @default false */\n        enumerable?: boolean | undefined;\n        /** defines the template of used for report generation */\n        template: TemplateLike;\n        /** defines options such as report name and request timeout */\n        options?: Partial<RequestOptions> | undefined;\n        context?: Context | undefined;\n        data?: any;\n    }\n\n    interface Context {\n        shared?: any;\n        originalInputDataIsEmpty?: boolean | undefined;\n        isChildRequest?: boolean | undefined;\n        logs: any;\n        timeoutLimit: number;\n    }\n\n    interface Response {\n        content: Buffer;\n        stream: NodeJS.ReadableStream;\n        headers: {\n            [header: string]: string | number | boolean;\n        };\n    }\n\n    interface ListenerCollection {\n        add(\n            type: string,\n            callback: (req: Request, res: Response, err?: any) => Promise<any> | void\n        ): void;\n    }\n\n    interface Collection {\n        find(query: { [field: string]: any }): Promise<object[]>;\n        update(query: { [field: string]: any }, update: object, options?: object): Promise<any>;\n        remove(query: { [field: string]: any }): Promise<any>;\n        insert(obj: object): Promise<object>;\n    }\n\n    interface DocumentStore {\n        collection(name: string): Collection;\n        registerEntityType(name:string, options:any): void;\n        registerEntitySet(name:string, options:any): void;\n    }\n\n    type Extension = (reporter: Reporter, definition: object) => void;\n\n    interface ExtensionDefinition {\n        options: any;\n        main: any;\n        directory: string;\n    }\n\n    interface ReporterInstance {\n        defaults?: Defaults | undefined;\n        options?: Configuration | undefined;\n        afterRenderListeners: ListenerCollection;\n        afterTemplatingEnginesExecutedListeners: ListenerCollection;\n        beforeRenderListeners: ListenerCollection;\n        closeListeners: ListenerCollection;\n        documentStore: DocumentStore;\n        blobStorage: BlobStorage;\n        initializeListeners: ListenerCollection;\n        renderErrorListeners: ListenerCollection;\n        // it would be nice to add winston.LoggerInstance here\n        // however adding import winston = require('winston') breaks exported enums\n        logger?: any;\n        validateRenderListeners: ListenerCollection;\n        version?: string | undefined;\n        settings: Settings;\n        optionsValidator: SchemaValidator;\n        entityTypeValidator: SchemaValidator;\n    }\n\n    interface Reporter extends ReporterInstance {\n        use(extension: Extension | ExtensionDefinition): Reporter;\n        init(): Promise<Reporter>;\n        render(request: Request, parent?: Request): Promise<Response>;\n        discover(): Reporter;\n        createListenerCollection(): ListenerCollection;\n        close(): Promise<void>;\n        extensionsLoad(opts: any): Promise<Reporter>;\n        checkValidEntityName(c: string, doc: any, req: Request): Promise<void>;\n        createError(message: string, options?: any): any;\n        getAvailableRenderTimeout(req: Request, defaultValue: number): number;\n        executeScript(inputs: any, options: any, req: Request): Promise<any>;\n        afterConfigLoaded(cb: () => void): Reporter;\n        addRequestContextMetaConfig(property: any, options: any): void;\n        getRequestContextMetaConfig(property: any): any;\n        addPathToWatchForAutoCleanup(customPath: string): void;\n        getPathsToWatchForAutoCleanup(): string[];\n        ensureTempDirectoryExists(): Promise<TempDirectoryResult>;\n        readTempFile(filename: string, opts: any): Promise<ReadTempFileResult>;\n        writeTempFile(filenameFn: () => string, content: any, opts: any): Promise<WriteFileResult>;\n        readTempFileStream(filename: string, opts: any): Promise<ReadTempFileStreamResult>;\n        writeTempFileStream(filenameFn: () => string, opts: any): Promise<WriteFileStreamResult>;\n        silentLogs(logger: any): void;\n    }\n\n    interface Defaults {\n        loadConfig?: boolean | undefined;\n        rootDirectory?: string | undefined;\n    }\n\n    type ReporterOptionsStoreProvider = 'memory';\n    type ReporterOptionsBlobStorageProvider = 'memory' | 'fs';\n    type EngineStrategy = 'dedicated-process' | 'http-server' | 'in-process';\n\n    interface Configuration {\n        mode?: any;\n        /** specifies where is the application root and where jsreport searches for extensions */\n        rootDirectory?: string | undefined;\n        /** specifies directory of the script that was used to start node.js, this value is mostly metadata that is useful for your own code inside jsreport scripts */\n        appDirectory?: string | undefined;\n        /**\n         * specifies where jsreport stores temporary files used by the conversion pipelineDef\n         * @default getDefaultTempDirectory()\n         */\n        tempDirectory?: string | undefined;\n        /**\n         * specifies if jsreport should load configuration values from external sources (cli args, env vars, configuration files) or not\n         * @default getDefaultLoadConfig()\n         */\n        loadConfig?: boolean | undefined;\n        /** specifies if after some interval jsreport should automatically clean up temporary files generated while rendering reports */\n        autoTempCleanup?: boolean | undefined;\n        /** specifies if jsreport should discover/search installed extensions in project and use them automatically */\n        discover?: boolean | undefined;\n        /**\n         * wheter if jsreport should read list of extensions from a previous generated cache or if it should crawl and try to search extensions again, set it to false when you want to always\n         * force crawling node_modules when searching for extensions while starting jsreport\n         * @default true\n         */\n        useExtensionsLocationCache?: boolean | undefined;\n        logger?: {\n            silent?: boolean | undefined;\n        } | undefined;\n        /** global single timeout that controls how much a report generation should wait before it times out */\n        reportTimeout?: number | undefined;\n        /**\n         * option that enables passing a custom report timeout per request using req.options.timeout. this enables that the caller of the report generation control the report timeout so enable it\n         * only when you trust the caller\n         * @default false\n         */\n        enableRequestReportTimeout?: boolean | undefined;\n        /** @default false */\n        allowLocalFilesAccess?: boolean | undefined;\n        encryption?: {\n            /** lenght must be 16 characters */\n            secretKey: string;\n            /** @default true */\n            enabled?: boolean | undefined;\n        } | undefined;\n        templatingEngines?: {\n            /** @default 'dedicated-process' */\n            strategy?: EngineStrategy | undefined;\n            /**\n             * defines the number of worker processes used for generating reports\n             * @default 1\n             */\n            numberOfWorkers?: number | undefined;\n            forkOptions?: {\n                execArgv?: string | string[] | undefined;\n            } | undefined;\n            allowedModules?: string | string[] | undefined;\n            /** sets the reporter timeout in milliseconds */\n            timeout?: number | undefined;\n            templateCache?: {\n                max: number;\n                enabled: boolean;\n            } | undefined;\n        } | undefined;\n        store?: {\n            provider?: ReporterOptionsStoreProvider | undefined;\n        } | undefined;\n        blobStorge?: {\n            provider?: ReporterOptionsBlobStorageProvider | undefined;\n        } | undefined;\n        extensions?: any;\n        extensionsList?: string[] | undefined;\n        /** @default true */\n        migrateEntitySetsToFolders?: boolean | undefined;\n        connectionString?: string | undefined;\n    }\n\n    interface Settings {\n        add(key: string, value: any, req: Request): any;\n        get(key: string): [SettingItem];\n        findValue(key: string, req: Request): any;\n        set(key: string, avalue: any, req: Request): any;\n        addOrSet(key: string, avalue: any, req: Request): number | null;\n        init(documentStore: any, authorization: any): any;\n        _collection: SettingItem[];\n        documentStore: any;\n        registerEntity(documentStore: any): void;\n    }\n\n    interface Setting"
+}
diff --git a/src/_tests/fixtures/55035/_response.json b/src/_tests/fixtures/55035/_response.json
new file mode 100644
index 0000000..33ead53
--- /dev/null
+++ b/src/_tests/fixtures/55035/_response.json
@@ -0,0 +1,347 @@
+{
+  "data": {
+    "repository": {
+      "id": "MDEwOlJlcG9zaXRvcnk2MDkzMzE2",
+      "pullRequest": {
+        "id": "MDExOlB1bGxSZXF1ZXN0NzA2NjY4NDgw",
+        "title": "Add missing document store functions",
+        "createdAt": "2021-08-09T16:31:15Z",
+        "author": {
+          "login": "shoopapa",
+          "__typename": "User"
+        },
+        "authorAssociation": "FIRST_TIME_CONTRIBUTOR",
+        "baseRef": {
+          "name": "master",
+          "__typename": "Ref"
+        },
+        "labels": {
+          "nodes": [
+            {
+              "name": "Other Approved",
+              "__typename": "Label"
+            },
+            {
+              "name": "Abandoned",
+              "__typename": "Label"
+            },
+            {
+              "name": "Owner Approved",
+              "__typename": "Label"
+            },
+            {
+              "name": "The CI failed",
+              "__typename": "Label"
+            },
+            {
+              "name": "Untested Change",
+              "__typename": "Label"
+            }
+          ],
+          "__typename": "LabelConnection"
+        },
+        "isDraft": false,
+        "mergeable": "MERGEABLE",
+        "number": 55035,
+        "state": "OPEN",
+        "headRefOid": "7eca0aa421c535497e59aa231b955ea2b47712e4",
+        "changedFiles": 1,
+        "timelineItems": {
+          "nodes": [
+            {
+              "actor": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "createdAt": "2021-08-09T16:36:55Z",
+              "projectColumnName": "Needs Author Action",
+              "__typename": "MovedColumnsInProjectEvent"
+            },
+            {
+              "actor": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "createdAt": "2021-08-10T17:10:55Z",
+              "projectColumnName": "Waiting for Code Reviews",
+              "__typename": "MovedColumnsInProjectEvent"
+            },
+            {
+              "actor": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "createdAt": "2021-08-10T17:15:39Z",
+              "projectColumnName": "Needs Author Action",
+              "__typename": "MovedColumnsInProjectEvent"
+            }
+          ],
+          "__typename": "PullRequestTimelineItemsConnection"
+        },
+        "reviews": {
+          "nodes": [
+            {
+              "author": {
+                "login": "kkikta-bcg",
+                "__typename": "User"
+              },
+              "commit": {
+                "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4",
+                "__typename": "Commit"
+              },
+              "comments": {
+                "nodes": [],
+                "__typename": "PullRequestReviewCommentConnection"
+              },
+              "authorAssociation": "NONE",
+              "state": "APPROVED",
+              "submittedAt": "2021-08-13T18:37:59Z",
+              "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035#pullrequestreview-729879946",
+              "__typename": "PullRequestReview"
+            },
+            {
+              "author": {
+                "login": "newbish",
+                "__typename": "User"
+              },
+              "commit": {
+                "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4",
+                "__typename": "Commit"
+              },
+              "comments": {
+                "nodes": [],
+                "__typename": "PullRequestReviewCommentConnection"
+              },
+              "authorAssociation": "CONTRIBUTOR",
+              "state": "APPROVED",
+              "submittedAt": "2021-08-13T18:40:30Z",
+              "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035#pullrequestreview-729881642",
+              "__typename": "PullRequestReview"
+            },
+            {
+              "author": {
+                "login": "pofider",
+                "__typename": "User"
+              },
+              "commit": {
+                "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4",
+                "__typename": "Commit"
+              },
+              "comments": {
+                "nodes": [],
+                "__typename": "PullRequestReviewCommentConnection"
+              },
+              "authorAssociation": "CONTRIBUTOR",
+              "state": "APPROVED",
+              "submittedAt": "2021-08-16T10:04:47Z",
+              "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035#pullrequestreview-730538734",
+              "__typename": "PullRequestReview"
+            }
+          ],
+          "__typename": "PullRequestReviewConnection"
+        },
+        "commits": {
+          "totalCount": 2,
+          "nodes": [
+            {
+              "commit": {
+                "checkSuites": {
+                  "nodes": [
+                    {
+                      "databaseId": 3460073804,
+                      "app": {
+                        "name": "GitHub Actions",
+                        "__typename": "App"
+                      },
+                      "conclusion": "FAILURE",
+                      "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804",
+                      "status": "COMPLETED",
+                      "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804",
+                      "checkRuns": {
+                        "nodes": [
+                          {
+                            "title": "test",
+                            "__typename": "CheckRun"
+                          }
+                        ],
+                        "__typename": "CheckRunConnection"
+                      },
+                      "__typename": "CheckSuite"
+                    },
+                    {
+                      "databaseId": 3460076596,
+                      "app": {
+                        "name": "Azure Pipelines",
+                        "__typename": "App"
+                      },
+                      "conclusion": "FAILURE",
+                      "resourcePath": "/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460076596",
+                      "status": "COMPLETED",
+                      "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460076596",
+                      "checkRuns": {
+                        "nodes": [
+                          {
+                            "title": "Build #20210810.42 failed",
+                            "__typename": "CheckRun"
+                          }
+                        ],
+                        "__typename": "CheckRunConnection"
+                      },
+                      "__typename": "CheckSuite"
+                    }
+                  ],
+                  "__typename": "CheckSuiteConnection"
+                },
+                "status": null,
+                "authoredDate": "2021-08-10T17:10:10Z",
+                "committedDate": "2021-08-10T17:10:10Z",
+                "pushedDate": "2021-08-10T17:10:15Z",
+                "oid": "7eca0aa421c535497e59aa231b955ea2b47712e4",
+                "__typename": "Commit"
+              },
+              "__typename": "PullRequestCommit"
+            }
+          ],
+          "__typename": "PullRequestCommitConnection"
+        },
+        "comments": {
+          "totalCount": 6,
+          "nodes": [
+            {
+              "id": "IC_kwDOAFz6BM41Xjgt",
+              "author": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "databaseId": 895367213,
+              "body": "@shoopapa Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — I'm the local bot who will help you through the process of getting things through.\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n* `jsreport-core` — [on npm](https://www.npmjs.com/package/jsreport-core), [on unpkg](https://unpkg.com/browse/jsreport-core@latest/)\n  - owner-approval: @pofider, @newbish\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55035&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes [without tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package)\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 24 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n<!--typescript_bot_welcome-->",
+              "createdAt": "2021-08-09T16:31:54Z",
+              "reactions": {
+                "nodes": [],
+                "__typename": "ReactionConnection"
+              },
+              "__typename": "IssueComment"
+            },
+            {
+              "id": "IC_kwDOAFz6BM41XjhS",
+              "author": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "databaseId": 895367250,
+              "body": "Hey @shoopapa,\n\n:unamused: Your PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Please consider [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package) to cover the change you're making. Including tests allows this PR to be merged by yourself and the owners of this module.\n\n***This can potentially save days of time for you!***\n<!--typescript_bot_suggest-testing-->",
+              "createdAt": "2021-08-09T16:31:56Z",
+              "reactions": {
+                "nodes": [],
+                "__typename": "ReactionConnection"
+              },
+              "__typename": "IssueComment"
+            },
+            {
+              "id": "IC_kwDOAFz6BM41XjhY",
+              "author": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "databaseId": 895367256,
+              "body": "🔔 @taoqf @pofider @newbish — please [review this PR](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55035/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<!--typescript_bot_pinging-reviewers-->",
+              "createdAt": "2021-08-09T16:31:57Z",
+              "reactions": {
+                "nodes": [],
+                "__typename": "ReactionConnection"
+              },
+              "__typename": "IssueComment"
+            },
+            {
+              "id": "IC_kwDOAFz6BM41XkVT",
+              "author": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "databaseId": 895370579,
+              "body": "@shoopapa The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/d05a3553812b8bbddc4d3ad3aab8933df5b011a3/checks?check_suite_id=3449794103).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n<!--typescript_bot_gh-actions-complaint-d05a355-->",
+              "createdAt": "2021-08-09T16:36:56Z",
+              "reactions": {
+                "nodes": [],
+                "__typename": "ReactionConnection"
+              },
+              "__typename": "IssueComment"
+            },
+            {
+              "id": "IC_kwDOAFz6BM41amij",
+              "author": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "databaseId": 896166051,
+              "body": "@shoopapa The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**\n<!--typescript_bot_gh-actions-complaint-7eca0aa-->",
+              "createdAt": "2021-08-10T17:15:40Z",
+              "reactions": {
+                "nodes": [],
+                "__typename": "ReactionConnection"
+              },
+              "__typename": "IssueComment"
+            },
+            {
+              "id": "IC_kwDOAFz6BM42jTf-",
+              "author": {
+                "login": "typescript-bot",
+                "__typename": "User"
+              },
+              "databaseId": 915224574,
+              "body": "@shoopapa I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Sep 15th (in a week) if the issues aren't addressed.\n<!--typescript_bot_Abandoned:nearly:2021-08-16-->",
+              "createdAt": "2021-09-08T13:09:18Z",
+              "reactions": {
+                "nodes": [],
+                "__typename": "ReactionConnection"
+              },
+              "__typename": "IssueComment"
+            }
+          ],
+          "__typename": "IssueCommentConnection"
+        },
+        "files": {
+          "totalCount": 1,
+          "nodes": [
+            {
+              "path": "types/jsreport-core/index.d.ts",
+              "additions": 2,
+              "deletions": 0,
+              "__typename": "PullRequestChangedFile"
+            }
+          ],
+          "pageInfo": {
+            "hasNextPage": false,
+            "endCursor": "MQ",
+            "__typename": "PageInfo"
+          },
+          "__typename": "PullRequestChangedFileConnection"
+        },
+        "projectCards": {
+          "nodes": [
+            {
+              "id": "PRC_lALOAFz6BM4AORWwzgP24_0",
+              "project": {
+                "id": "MDc6UHJvamVjdDM3NDExMDQ=",
+                "number": 5,
+                "name": "New Pull Request Status Board",
+                "__typename": "Project"
+              },
+              "column": {
+                "id": "MDEzOlByb2plY3RDb2x1bW43NTUyOTI0",
+                "name": "Needs Author Action",
+                "__typename": "ProjectColumn"
+              },
+              "__typename": "ProjectCard"
+            }
+          ],
+          "__typename": "ProjectCardConnection"
+        },
+        "__typename": "PullRequest"
+      },
+      "__typename": "Repository"
+    }
+  },
+  "loading": false,
+  "networkStatus": 7
+}
diff --git a/src/_tests/fixtures/55035/derived.json b/src/_tests/fixtures/55035/derived.json
new file mode 100644
index 0000000..cc87afc
--- /dev/null
+++ b/src/_tests/fixtures/55035/derived.json
@@ -0,0 +1,56 @@
+{
+  "type": "info",
+  "now": "2021-09-09T18:47:06.228Z",
+  "pr_number": 55035,
+  "author": "shoopapa",
+  "headCommitOid": "7eca0aa421c535497e59aa231b955ea2b47712e4",
+  "lastPushDate": "2021-08-10T17:10:15.000Z",
+  "lastActivityDate": "2021-08-16T10:04:47.000Z",
+  "hasMergeConflict": false,
+  "isFirstContribution": true,
+  "tooManyFiles": false,
+  "popularityLevel": "Well-liked by everyone",
+  "pkgInfo": [
+    {
+      "name": "jsreport-core",
+      "kind": "edit",
+      "files": [
+        {
+          "path": "types/jsreport-core/index.d.ts",
+          "kind": "definition"
+        }
+      ],
+      "owners": [
+        "taoqf",
+        "pofider",
+        "newbish"
+      ],
+      "addedOwners": [],
+      "deletedOwners": [],
+      "popularityLevel": "Well-liked by everyone"
+    }
+  ],
+  "reviews": [
+    {
+      "type": "approved",
+      "reviewer": "pofider",
+      "date": "2021-08-16T10:04:47.000Z",
+      "isMaintainer": false
+    },
+    {
+      "type": "approved",
+      "reviewer": "newbish",
+      "date": "2021-08-13T18:40:30.000Z",
+      "isMaintainer": false
+    },
+    {
+      "type": "approved",
+      "reviewer": "kkikta-bcg",
+      "date": "2021-08-13T18:37:59.000Z",
+      "isMaintainer": false
+    }
+  ],
+  "mainBotCommentID": 895367213,
+  "ciResult": "fail",
+  "ciUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804"
+}
diff --git a/src/_tests/fixtures/55035/mutations.json b/src/_tests/fixtures/55035/mutations.json
new file mode 100644
index 0000000..d152acc
--- /dev/null
+++ b/src/_tests/fixtures/55035/mutations.json
@@ -0,0 +1,20 @@
+[
+  {
+    "mutation": "mutation ($input: UpdateIssueCommentInput!) {\n  updateIssueComment(input: $input) {\n    __typename\n  }\n}\n",
+    "variables": {
+      "input": {
+        "id": "IC_kwDOAFz6BM41Xjgt",
+        "body": "@shoopapa Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — I'm the local bot who will help you through the process of getting things through.\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n* `jsreport-core` — [on npm](https://www.npmjs.com/package/jsreport-core), [on unpkg](https://unpkg.com/browse/jsreport-core@latest/)\n  - owner-approval: @pofider, @newbish\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55035&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes [without tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package)\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 24 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ...\n<!--typescript_bot_welcome-->"
+      }
+    }
+  },
+  {
+    "mutation": "mutation ($input: AddCommentInput!) {\n  addComment(input: $input) {\n    __typename\n  }\n}\n",
+    "variables": {
+      "input": {
+        "subjectId": "MDExOlB1bGxSZXF1ZXN0NzA2NjY4NDgw",
+        "body": ":hourglass_flowing_sand: Hi @shoopapa,\n\nIt's been a few days since this PR was approved by pofider, newbish, kkikta-bcg and we're waiting for you to fix the test failures and then for a maintainer approval.\n\nIf you would like to short-circuit another wait for a maintainer, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n<!--typescript_bot_wait-for-merge-offer-7eca0aa-->"
+      }
+    }
+  }
+]
diff --git a/src/_tests/fixtures/55035/result.json b/src/_tests/fixtures/55035/result.json
new file mode 100644
index 0000000..13fa3f8
--- /dev/null
+++ b/src/_tests/fixtures/55035/result.json
@@ -0,0 +1,35 @@
+{
+  "projectColumn": "Needs Author Action",
+  "labels": [
+    "The CI failed",
+    "Other Approved",
+    "Owner Approved",
+    "Untested Change",
+    "Abandoned"
+  ],
+  "responseComments": [
+    {
+      "tag": "suggest-testing",
+      "status": "Hey @shoopapa,\n\n:unamused: Your PR doesn't modify any tests, so it's hard to know what's being fixed, and your changes might regress in the future. Please consider [adding tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package) to cover the change you're making. Including tests allows this PR to be merged by yourself and the owners of this module.\n\n***This can potentially save days of time for you!***"
+    },
+    {
+      "tag": "welcome",
+      "status": "@shoopapa Thank you for submitting this PR! I see this is your first time submitting to DefinitelyTyped 👋 — I'm the local bot who will help you through the process of getting things through.\n\n***This is a live comment which I will keep updated.***\n\n## 1 package in this PR\n\n* `jsreport-core` — [on npm](https://www.npmjs.com/package/jsreport-core), [on unpkg](https://unpkg.com/browse/jsreport-core@latest/)\n  - owner-approval: @pofider, @newbish\n\n## Code Reviews\n\nThis PR can be merged once it's reviewed by a DT maintainer.\n\nYou can test the changes of this PR [in the Playground](https://www.typescriptlang.org/play/?dtPR=55035&install-plugin=playground-dt-review).\n\n## Status\n\n * ✅ No merge conflicts\n * ❌ Continuous integration tests have failed\n * 🕐 Only a DT maintainer can approve changes [without tests](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-test-editing-an-existing-package)\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 24 days — it is considered nearly abandoned!\n\n----------------------\n... diagnostics scrubbed ..."
+    },
+    {
+      "tag": "gh-actions-complaint-7eca0aa",
+      "status": "@shoopapa The CI build failed! Please [review the logs for more information](https://github.com/DefinitelyTyped/DefinitelyTyped/commit/7eca0aa421c535497e59aa231b955ea2b47712e4/checks?check_suite_id=3460073804).\n\nOnce you've pushed the fixes, the build will automatically re-run. Thanks!\n\n**Note: builds which are failing do not end up on the list of PRs for the DT maintainers to review.**"
+    },
+    {
+      "tag": "wait-for-merge-offer-7eca0aa",
+      "status": ":hourglass_flowing_sand: Hi @shoopapa,\n\nIt's been a few days since this PR was approved by pofider, newbish, kkikta-bcg and we're waiting for you to fix the test failures and then for a maintainer approval.\n\nIf you would like to short-circuit another wait for a maintainer, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review."
+    },
+    {
+      "tag": "Abandoned:nearly:2021-08-16",
+      "status": "@shoopapa I haven't seen any activity on this PR in more than three weeks, and it still has problems that prevent it from being merged. The PR will be closed on Sep 15th (in a week) if the issues aren't addressed."
+    }
+  ],
+  "shouldClose": false,
+  "shouldMerge": false,
+  "shouldUpdateLabels": true
+}
diff --git a/src/_tests/fixtures/55508/mutations.json b/src/_tests/fixtures/55508/mutations.json
index 14ba513..370c0df 100644
--- a/src/_tests/fixtures/55508/mutations.json
+++ b/src/_tests/fixtures/55508/mutations.json
@@ -13,7 +13,7 @@
     "variables": {
       "input": {
         "subjectId": "MDExOlB1bGxSZXF1ZXN0NzIzMzAzODAx",
-        "body": ":hourglass_flowing_sand: Hi @avi12,\n\nIt's been a few days since this PR was approved by userTim, nicolas377 and we're waiting on a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n<!--typescript_bot_wait-for-merge-offer-7288ad2-->"
+        "body": ":hourglass_flowing_sand: Hi @avi12,\n\nIt's been a few days since this PR was approved by userTim, nicolas377 and we're waiting for a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n<!--typescript_bot_wait-for-merge-offer-7288ad2-->"
       }
     }
   }
diff --git a/src/_tests/fixtures/55508/result.json b/src/_tests/fixtures/55508/result.json
index 75fc19f..f83cdfa 100644
--- a/src/_tests/fixtures/55508/result.json
+++ b/src/_tests/fixtures/55508/result.json
@@ -16,7 +16,7 @@
     },
     {
       "tag": "wait-for-merge-offer-7288ad2",
-      "status": ":hourglass_flowing_sand: Hi @avi12,\n\nIt's been a few days since this PR was approved by userTim, nicolas377 and we're waiting on a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review."
+      "status": ":hourglass_flowing_sand: Hi @avi12,\n\nIt's been a few days since this PR was approved by userTim, nicolas377 and we're waiting for a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review."
     }
   ],
   "shouldClose": false,
diff --git a/src/_tests/fixtures/55512/mutations.json b/src/_tests/fixtures/55512/mutations.json
index 0141b2b..9e5f899 100644
--- a/src/_tests/fixtures/55512/mutations.json
+++ b/src/_tests/fixtures/55512/mutations.json
@@ -13,7 +13,7 @@
     "variables": {
       "input": {
         "subjectId": "MDExOlB1bGxSZXF1ZXN0NzIzNDc0ODMy",
-        "body": ":hourglass_flowing_sand: Hi @philibea,\n\nIt's been a few days since this PR was approved by Ky6uk and we're waiting on a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n<!--typescript_bot_wait-for-merge-offer-e90d61b-->"
+        "body": ":hourglass_flowing_sand: Hi @philibea,\n\nIt's been a few days since this PR was approved by Ky6uk and we're waiting for a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review.\n<!--typescript_bot_wait-for-merge-offer-e90d61b-->"
       }
     }
   }
diff --git a/src/_tests/fixtures/55512/result.json b/src/_tests/fixtures/55512/result.json
index 11e114d..3c43bdc 100644
--- a/src/_tests/fixtures/55512/result.json
+++ b/src/_tests/fixtures/55512/result.json
@@ -16,7 +16,7 @@
     },
     {
       "tag": "wait-for-merge-offer-e90d61b",
-      "status": ":hourglass_flowing_sand: Hi @philibea,\n\nIt's been a few days since this PR was approved by Ky6uk and we're waiting on a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review."
+      "status": ":hourglass_flowing_sand: Hi @philibea,\n\nIt's been a few days since this PR was approved by Ky6uk and we're waiting for a DT maintainer to give a review.\n\nIf you would like to short-circuit this wait, you can edit some of the [test files](https://github.com/DefinitelyTyped/DefinitelyTyped#user-content-my-package-teststs) in the package which verify how the `.d.ts` files work. This would allow the PR to be merged by you or the DT module owners after a re-review."
     }
   ],
   "shouldClose": false,