{"action":"created","comment":{"url":"https://api.github.com/repos/twosigma/webtau/pulls/comments/220747325","pull_request_review_id":159225507,"id":220747325,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMDc0NzMyNQ==","diff_hunk":"@@ -0,0 +1,278 @@\n+/*\n+ * Copyright 2018 TWO SIGMA OPEN SOURCE, LLC\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ * http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+package com.twosigma.webtau.cli.interactive\n+\n+import com.twosigma.webtau.WebTauGroovyDsl\n+import com.twosigma.webtau.cfg.GroovyRunner\n+import com.twosigma.webtau.console.ConsoleOutputs\n+import com.twosigma.webtau.console.ansi.AutoResetAnsiString\n+import com.twosigma.webtau.console.ansi.Color\n+import com.twosigma.webtau.reporter.ConsoleStepReporter\n+import com.twosigma.webtau.reporter.IntegrationTestsMessageBuilder\n+import com.twosigma.webtau.reporter.StepReporters\n+import com.twosigma.webtau.reporter.stacktrace.StackTraceUtils\n+import com.twosigma.webtau.runner.standalone.StandaloneTest\n+import com.twosigma.webtau.runner.standalone.StandaloneTestListeners\n+import com.twosigma.webtau.runner.standalone.StandaloneTestRunner\n+import com.twosigma.webtau.runner.standalone.report.StandardConsoleTestListener\n+\n+import java.nio.file.Paths\n+\n+import static com.twosigma.webtau.cfg.WebTauConfig.getCfg\n+\n+class WebTauCliInteractive {\n+    enum State {\n+        TestSelection,\n+        ScenarioSelection,\n+        ScenarioActionSelection,\n+        AfterRun,\n+        Done\n+    }\n+\n+    private StandaloneTestRunner runner\n+    private LinkedHashSet<String> testFilePaths\n+    private Map<String, List<StandaloneTest>> testByPath = [:]\n+    private BufferedReader inReader\n+\n+    private State state\n+\n+    private int selectedPathIdx = -1\n+    private int selectedScenarioIdx = -1\n+\n+    WebTauCliInteractive(StandaloneTestRunner runner) {\n+        this.runner = runner\n+        this.testFilePaths = new LinkedHashSet<>(runner.tests.reportTestEntry.filePath*.toString())\n+\n+        testByPath = runner.tests.groupBy { it.filePath.toString() }\n+        inReader = new BufferedReader(new InputStreamReader(System.in))\n+\n+        state = State.TestSelection\n+    }\n+\n+    void start() {\n+        while (true) {\n+            switch (state) {\n+                case State.TestSelection:\n+                    selectTestFile()\n+                    break\n+                case State.ScenarioSelection:\n+                    selectScenario()\n+                    break\n+                case State.ScenarioActionSelection:\n+                    selectScenarioAction()\n+                    break\n+                case State.Done:\n+                    return\n+            }\n+        }\n+    }\n+\n+    void selectTestFile() {\n+        displayTestFiles()\n+\n+        readAndHandleIdxOrCommand { idx ->\n+            if (idx < 0 || idx >= testFilePaths.size()) {\n+                ConsoleOutputs.out(Color.RED, 'enter test index')\n+                return false\n+            } else {\n+                selectedPathIdx = idx\n+                state = State.ScenarioSelection\n+                return true\n+            }\n+        }\n+    }\n+\n+    void selectScenario() {\n+        def scenarios = displayScenarios(selectedPathIdx)\n+\n+        readAndHandleIdxOrCommand { idx ->\n+            if (idx < 0 || idx >= scenarios.size()) {\n+                ConsoleOutputs.out(Color.RED, 'enter scenario index')\n+                return false\n+            } else {\n+                selectedScenarioIdx = idx\n+                state = State.ScenarioActionSelection\n+                return true\n+            }\n+        }\n+    }\n+\n+    void selectScenarioAction() {\n+        def scenarioCommands = commandsForCurrentState()\n+        displaySelectedScenario()\n+        displayCommands(scenarioCommands)\n+\n+        readAndHandleIdxOrCommand { idx -> return false }\n+    }\n+\n+    void displaySelectedScenario() {\n+        def filePath = testFilePaths[selectedPathIdx]\n+        def tests = testByPath[filePath]\n+        def test = tests[selectedScenarioIdx]\n+\n+        ConsoleOutputs.out(Color.PURPLE, filePath, ': ', Color.YELLOW, test.scenario)\n+    }\n+\n+    void runSelectedScenario() {\n+        def filePath = testFilePaths[selectedPathIdx]\n+        def tests = testByPath[filePath]\n+\n+        def test = tests[selectedScenarioIdx]\n+        test.run()\n+\n+        if (test.exception) {\n+            ConsoleOutputs.out(Color.RED, StackTraceUtils.renderStackTraceWithoutLibCalls(test.exception))\n+        }\n+\n+        state = State.ScenarioActionSelection\n+    }\n+\n+    IdxOrCommand readIdxOrCommand() {\n+        def allowedCommands = commandsForCurrentState()\n+\n+        while (true) {\n+            def line = readLine()\n+            def idxOrCommand = new IdxOrCommand(line)\n+\n+            def command = idxOrCommand.command\n+\n+            if ((!command || allowedCommands.find { it.matches() == command }) && idxOrCommand.idx == null) {\n+                ConsoleOutputs.out(Color.RED, 'enter a number or a command')\n+                displayCommands(allowedCommands)\n+            } else {\n+                return idxOrCommand\n+            }\n+        }\n+    }\n+\n+    String readLine() {\n+        print new AutoResetAnsiString(Color.GREEN, 'webtau', Color.YELLOW, ' > ')\n+        return inReader.readLine()\n+    }\n+\n+    void readAndHandleIdxOrCommand(Closure idxHandler) {\n+        while (true) {\n+            def idxOrCommand = readIdxOrCommand()\n+\n+            if (idxOrCommand.command) {\n+                handleCommand(idxOrCommand.command)\n+                return\n+            }\n+\n+            def done = idxHandler(idxOrCommand.idx)\n+            if (done) {\n+                return\n+            }\n+        }\n+    }\n+\n+    private handleCommand(InteractiveCommand command) {\n+        switch (command) {\n+            case InteractiveCommand.Back:\n+                handleBackCommand()\n+                break\n+            case InteractiveCommand.Quit:\n+                state = State.Done\n+                break\n+            case InteractiveCommand.Run:\n+                runSelectedScenario()\n+                break\n+        }\n+    }\n+\n+    void handleBackCommand() {\n+        switch (state) {","path":"webtau-groovy/src/main/groovy/com/twosigma/webtau/cli/interactive/WebTauCliInteractive.groovy","position":198,"original_position":198,"commit_id":"8da4fe34157f1d81164f303fa4edd5214003d07f","original_commit_id":"8da4fe34157f1d81164f303fa4edd5214003d07f","user":{"login":"tsiq-karold","id":33879397,"node_id":"MDQ6VXNlcjMzODc5Mzk3","avatar_url":"https://avatars2.githubusercontent.com/u/33879397?v=4","gravatar_id":"","url":"https://api.github.com/users/tsiq-karold","html_url":"https://github.com/tsiq-karold","followers_url":"https://api.github.com/users/tsiq-karold/followers","following_url":"https://api.github.com/users/tsiq-karold/following{/other_user}","gists_url":"https://api.github.com/users/tsiq-karold/gists{/gist_id}","starred_url":"https://api.github.com/users/tsiq-karold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tsiq-karold/subscriptions","organizations_url":"https://api.github.com/users/tsiq-karold/orgs","repos_url":"https://api.github.com/users/tsiq-karold/repos","events_url":"https://api.github.com/users/tsiq-karold/events{/privacy}","received_events_url":"https://api.github.com/users/tsiq-karold/received_events","type":"User","site_admin":false},"body":"Should we unset relevant idx's or are we ok relying on the state transition machinery to make sure we're not accidentally relying on those?","created_at":"2018-09-26T22:50:51Z","updated_at":"2018-09-26T22:52:39Z","html_url":"https://github.com/twosigma/webtau/pull/169#discussion_r220747325","pull_request_url":"https://api.github.com/repos/twosigma/webtau/pulls/169","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/twosigma/webtau/pulls/comments/220747325"},"html":{"href":"https://github.com/twosigma/webtau/pull/169#discussion_r220747325"},"pull_request":{"href":"https://api.github.com/repos/twosigma/webtau/pulls/169"}}},"pull_request":{"url":"https://api.github.com/repos/twosigma/webtau/pulls/169","id":218154631,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE4MTU0NjMx","html_url":"https://github.com/twosigma/webtau/pull/169","diff_url":"https://github.com/twosigma/webtau/pull/169.diff","patch_url":"https://github.com/twosigma/webtau/pull/169.patch","issue_url":"https://api.github.com/repos/twosigma/webtau/issues/169","number":169,"state":"open","locked":false,"title":"initial basic interactive CLI mode to run selected scenarios","user":{"login":"MykolaGolubyev","id":11657860,"node_id":"MDQ6VXNlcjExNjU3ODYw","avatar_url":"https://avatars0.githubusercontent.com/u/11657860?v=4","gravatar_id":"","url":"https://api.github.com/users/MykolaGolubyev","html_url":"https://github.com/MykolaGolubyev","followers_url":"https://api.github.com/users/MykolaGolubyev/followers","following_url":"https://api.github.com/users/MykolaGolubyev/following{/other_user}","gists_url":"https://api.github.com/users/MykolaGolubyev/gists{/gist_id}","starred_url":"https://api.github.com/users/MykolaGolubyev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MykolaGolubyev/subscriptions","organizations_url":"https://api.github.com/users/MykolaGolubyev/orgs","repos_url":"https://api.github.com/users/MykolaGolubyev/repos","events_url":"https://api.github.com/users/MykolaGolubyev/events{/privacy}","received_events_url":"https://api.github.com/users/MykolaGolubyev/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-09-26T00:09:49Z","updated_at":"2018-09-26T22:52:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fd15a2a502c30e62bf8ec44f768614871590657d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/twosigma/webtau/pulls/169/commits","review_comments_url":"https://api.github.com/repos/twosigma/webtau/pulls/169/comments","review_comment_url":"https://api.github.com/repos/twosigma/webtau/pulls/comments{/number}","comments_url":"https://api.github.com/repos/twosigma/webtau/issues/169/comments","statuses_url":"https://api.github.com/repos/twosigma/webtau/statuses/8da4fe34157f1d81164f303fa4edd5214003d07f","head":{"label":"twosigma:cli/interactive","ref":"cli/interactive","sha":"8da4fe34157f1d81164f303fa4edd5214003d07f","user":{"login":"twosigma","id":4049181,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNDkxODE=","avatar_url":"https://avatars3.githubusercontent.com/u/4049181?v=4","gravatar_id":"","url":"https://api.github.com/users/twosigma","html_url":"https://github.com/twosigma","followers_url":"https://api.github.com/users/twosigma/followers","following_url":"https://api.github.com/users/twosigma/following{/other_user}","gists_url":"https://api.github.com/users/twosigma/gists{/gist_id}","starred_url":"https://api.github.com/users/twosigma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twosigma/subscriptions","organizations_url":"https://api.github.com/users/twosigma/orgs","repos_url":"https://api.github.com/users/twosigma/repos","events_url":"https://api.github.com/users/twosigma/events{/privacy}","received_events_url":"https://api.github.com/users/twosigma/received_events","type":"Organization","site_admin":false},"repo":{"id":131867984,"node_id":"MDEwOlJlcG9zaXRvcnkxMzE4Njc5ODQ=","name":"webtau","full_name":"twosigma/webtau","private":false,"owner":{"login":"twosigma","id":4049181,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNDkxODE=","avatar_url":"https://avatars3.githubusercontent.com/u/4049181?v=4","gravatar_id":"","url":"https://api.github.com/users/twosigma","html_url":"https://github.com/twosigma","followers_url":"https://api.github.com/users/twosigma/followers","following_url":"https://api.github.com/users/twosigma/following{/other_user}","gists_url":"https://api.github.com/users/twosigma/gists{/gist_id}","starred_url":"https://api.github.com/users/twosigma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twosigma/subscriptions","organizations_url":"https://api.github.com/users/twosigma/orgs","repos_url":"https://api.github.com/users/twosigma/repos","events_url":"https://api.github.com/users/twosigma/events{/privacy}","received_events_url":"https://api.github.com/users/twosigma/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/twosigma/webtau","description":"webtau - web test automation. REST and UI testing framework.","fork":false,"url":"https://api.github.com/repos/twosigma/webtau","forks_url":"https://api.github.com/repos/twosigma/webtau/forks","keys_url":"https://api.github.com/repos/twosigma/webtau/keys{/key_id}","collaborators_url":"https://api.github.com/repos/twosigma/webtau/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/twosigma/webtau/teams","hooks_url":"https://api.github.com/repos/twosigma/webtau/hooks","issue_events_url":"https://api.github.com/repos/twosigma/webtau/issues/events{/number}","events_url":"https://api.github.com/repos/twosigma/webtau/events","assignees_url":"https://api.github.com/repos/twosigma/webtau/assignees{/user}","branches_url":"https://api.github.com/repos/twosigma/webtau/branches{/branch}","tags_url":"https://api.github.com/repos/twosigma/webtau/tags","blobs_url":"https://api.github.com/repos/twosigma/webtau/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/twosigma/webtau/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/twosigma/webtau/git/refs{/sha}","trees_url":"https://api.github.com/repos/twosigma/webtau/git/trees{/sha}","statuses_url":"https://api.github.com/repos/twosigma/webtau/statuses/{sha}","languages_url":"https://api.github.com/repos/twosigma/webtau/languages","stargazers_url":"https://api.github.com/repos/twosigma/webtau/stargazers","contributors_url":"https://api.github.com/repos/twosigma/webtau/contributors","subscribers_url":"https://api.github.com/repos/twosigma/webtau/subscribers","subscription_url":"https://api.github.com/repos/twosigma/webtau/subscription","commits_url":"https://api.github.com/repos/twosigma/webtau/commits{/sha}","git_commits_url":"https://api.github.com/repos/twosigma/webtau/git/commits{/sha}","comments_url":"https://api.github.com/repos/twosigma/webtau/comments{/number}","issue_comment_url":"https://api.github.com/repos/twosigma/webtau/issues/comments{/number}","contents_url":"https://api.github.com/repos/twosigma/webtau/contents/{+path}","compare_url":"https://api.github.com/repos/twosigma/webtau/compare/{base}...{head}","merges_url":"https://api.github.com/repos/twosigma/webtau/merges","archive_url":"https://api.github.com/repos/twosigma/webtau/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/twosigma/webtau/downloads","issues_url":"https://api.github.com/repos/twosigma/webtau/issues{/number}","pulls_url":"https://api.github.com/repos/twosigma/webtau/pulls{/number}","milestones_url":"https://api.github.com/repos/twosigma/webtau/milestones{/number}","notifications_url":"https://api.github.com/repos/twosigma/webtau/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/twosigma/webtau/labels{/name}","releases_url":"https://api.github.com/repos/twosigma/webtau/releases{/id}","deployments_url":"https://api.github.com/repos/twosigma/webtau/deployments","created_at":"2018-05-02T15:08:55Z","updated_at":"2018-09-24T23:10:57Z","pushed_at":"2018-09-26T00:09:49Z","git_url":"git://github.com/twosigma/webtau.git","ssh_url":"git@github.com:twosigma/webtau.git","clone_url":"https://github.com/twosigma/webtau.git","svn_url":"https://github.com/twosigma/webtau","homepage":"https://opensource.twosigma.com/webtau/guide","size":6030,"stargazers_count":33,"watchers_count":33,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":17,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":17,"watchers":33,"default_branch":"master"}},"base":{"label":"twosigma:master","ref":"master","sha":"f4799c224125475c33b1ff97ae9f6d5f65027bc2","user":{"login":"twosigma","id":4049181,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNDkxODE=","avatar_url":"https://avatars3.githubusercontent.com/u/4049181?v=4","gravatar_id":"","url":"https://api.github.com/users/twosigma","html_url":"https://github.com/twosigma","followers_url":"https://api.github.com/users/twosigma/followers","following_url":"https://api.github.com/users/twosigma/following{/other_user}","gists_url":"https://api.github.com/users/twosigma/gists{/gist_id}","starred_url":"https://api.github.com/users/twosigma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twosigma/subscriptions","organizations_url":"https://api.github.com/users/twosigma/orgs","repos_url":"https://api.github.com/users/twosigma/repos","events_url":"https://api.github.com/users/twosigma/events{/privacy}","received_events_url":"https://api.github.com/users/twosigma/received_events","type":"Organization","site_admin":false},"repo":{"id":131867984,"node_id":"MDEwOlJlcG9zaXRvcnkxMzE4Njc5ODQ=","name":"webtau","full_name":"twosigma/webtau","private":false,"owner":{"login":"twosigma","id":4049181,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNDkxODE=","avatar_url":"https://avatars3.githubusercontent.com/u/4049181?v=4","gravatar_id":"","url":"https://api.github.com/users/twosigma","html_url":"https://github.com/twosigma","followers_url":"https://api.github.com/users/twosigma/followers","following_url":"https://api.github.com/users/twosigma/following{/other_user}","gists_url":"https://api.github.com/users/twosigma/gists{/gist_id}","starred_url":"https://api.github.com/users/twosigma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twosigma/subscriptions","organizations_url":"https://api.github.com/users/twosigma/orgs","repos_url":"https://api.github.com/users/twosigma/repos","events_url":"https://api.github.com/users/twosigma/events{/privacy}","received_events_url":"https://api.github.com/users/twosigma/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/twosigma/webtau","description":"webtau - web test automation. REST and UI testing framework.","fork":false,"url":"https://api.github.com/repos/twosigma/webtau","forks_url":"https://api.github.com/repos/twosigma/webtau/forks","keys_url":"https://api.github.com/repos/twosigma/webtau/keys{/key_id}","collaborators_url":"https://api.github.com/repos/twosigma/webtau/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/twosigma/webtau/teams","hooks_url":"https://api.github.com/repos/twosigma/webtau/hooks","issue_events_url":"https://api.github.com/repos/twosigma/webtau/issues/events{/number}","events_url":"https://api.github.com/repos/twosigma/webtau/events","assignees_url":"https://api.github.com/repos/twosigma/webtau/assignees{/user}","branches_url":"https://api.github.com/repos/twosigma/webtau/branches{/branch}","tags_url":"https://api.github.com/repos/twosigma/webtau/tags","blobs_url":"https://api.github.com/repos/twosigma/webtau/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/twosigma/webtau/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/twosigma/webtau/git/refs{/sha}","trees_url":"https://api.github.com/repos/twosigma/webtau/git/trees{/sha}","statuses_url":"https://api.github.com/repos/twosigma/webtau/statuses/{sha}","languages_url":"https://api.github.com/repos/twosigma/webtau/languages","stargazers_url":"https://api.github.com/repos/twosigma/webtau/stargazers","contributors_url":"https://api.github.com/repos/twosigma/webtau/contributors","subscribers_url":"https://api.github.com/repos/twosigma/webtau/subscribers","subscription_url":"https://api.github.com/repos/twosigma/webtau/subscription","commits_url":"https://api.github.com/repos/twosigma/webtau/commits{/sha}","git_commits_url":"https://api.github.com/repos/twosigma/webtau/git/commits{/sha}","comments_url":"https://api.github.com/repos/twosigma/webtau/comments{/number}","issue_comment_url":"https://api.github.com/repos/twosigma/webtau/issues/comments{/number}","contents_url":"https://api.github.com/repos/twosigma/webtau/contents/{+path}","compare_url":"https://api.github.com/repos/twosigma/webtau/compare/{base}...{head}","merges_url":"https://api.github.com/repos/twosigma/webtau/merges","archive_url":"https://api.github.com/repos/twosigma/webtau/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/twosigma/webtau/downloads","issues_url":"https://api.github.com/repos/twosigma/webtau/issues{/number}","pulls_url":"https://api.github.com/repos/twosigma/webtau/pulls{/number}","milestones_url":"https://api.github.com/repos/twosigma/webtau/milestones{/number}","notifications_url":"https://api.github.com/repos/twosigma/webtau/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/twosigma/webtau/labels{/name}","releases_url":"https://api.github.com/repos/twosigma/webtau/releases{/id}","deployments_url":"https://api.github.com/repos/twosigma/webtau/deployments","created_at":"2018-05-02T15:08:55Z","updated_at":"2018-09-24T23:10:57Z","pushed_at":"2018-09-26T00:09:49Z","git_url":"git://github.com/twosigma/webtau.git","ssh_url":"git@github.com:twosigma/webtau.git","clone_url":"https://github.com/twosigma/webtau.git","svn_url":"https://github.com/twosigma/webtau","homepage":"https://opensource.twosigma.com/webtau/guide","size":6030,"stargazers_count":33,"watchers_count":33,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":17,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":17,"watchers":33,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/twosigma/webtau/pulls/169"},"html":{"href":"https://github.com/twosigma/webtau/pull/169"},"issue":{"href":"https://api.github.com/repos/twosigma/webtau/issues/169"},"comments":{"href":"https://api.github.com/repos/twosigma/webtau/issues/169/comments"},"review_comments":{"href":"https://api.github.com/repos/twosigma/webtau/pulls/169/comments"},"review_comment":{"href":"https://api.github.com/repos/twosigma/webtau/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/twosigma/webtau/pulls/169/commits"},"statuses":{"href":"https://api.github.com/repos/twosigma/webtau/statuses/8da4fe34157f1d81164f303fa4edd5214003d07f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"tsiq-karold"}}