{"action":"created","comment":{"url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments/198648614","pull_request_review_id":132617790,"id":198648614,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5ODY0ODYxNA==","diff_hunk":"@@ -786,15 +791,18 @@ def files_put_file(encrypted_channel_id, filename, body)\n     s3_prefix = \"#{METADATA_PATH}/#{filename}\"\n     if THUMBNAIL_FILENAME == filename\n       begin\n-        temp_url = FileBucket.new.make_temporary_public_url(encrypted_channel_id, s3_prefix)\n-        rating = ImageModeration.rate_image(temp_url)\n-        if %i(adult racy).include? rating\n-          # Incrementing abuse score by 15 to differentiate from manually reported projects\n-          new_score = StorageApps.new(storage_id('user')).increment_abuse(encrypted_channel_id, 15)\n-          FileBucket.new.replace_abuse_score(encrypted_channel_id, s3_prefix, new_score)\n-          response.headers['x-cdo-content-rating'] = rating.to_s\n-          cache_for 1.hour\n-          not_found\n+        storage_apps = StorageApps.new(storage_id('user'))\n+        if MODERATE_THUMBNAILS_FOR_PROJECT_TYPES.include? project_type(encrypted_channel_id, storage_apps)\n+          temp_url = FileBucket.new.make_temporary_public_url(encrypted_channel_id, s3_prefix)\n+          rating = ImageModeration.rate_image(temp_url)\n+          if %i(adult racy).include? rating\n+            # Incrementing abuse score by 15 to differentiate from manually reported projects\n+            new_score = storage_apps.increment_abuse(encrypted_channel_id, 15)\n+            FileBucket.new.replace_abuse_score(encrypted_channel_id, s3_prefix, new_score)\n+            response.headers['x-cdo-content-rating'] = rating.to_s\n+            cache_for 1.hour\n+            not_found\n+          end","path":"shared/middleware/files_api.rb","position":37,"original_position":36,"commit_id":"be719b5afd760f819ed6f691d8cf9bf5294cea08","original_commit_id":"7e6d5724f4bb5def8881047d49c02d2b6825e242","user":{"login":"islemaster","id":1615761,"node_id":"MDQ6VXNlcjE2MTU3NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1615761?v=4","gravatar_id":"","url":"https://api.github.com/users/islemaster","html_url":"https://github.com/islemaster","followers_url":"https://api.github.com/users/islemaster/followers","following_url":"https://api.github.com/users/islemaster/following{/other_user}","gists_url":"https://api.github.com/users/islemaster/gists{/gist_id}","starred_url":"https://api.github.com/users/islemaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/islemaster/subscriptions","organizations_url":"https://api.github.com/users/islemaster/orgs","repos_url":"https://api.github.com/users/islemaster/repos","events_url":"https://api.github.com/users/islemaster/events{/privacy}","received_events_url":"https://api.github.com/users/islemaster/received_events","type":"User","site_admin":false},"body":"This did happen - if you check out the latest `ImageModeration` code you'll see that it now sends binary image data to the moderation provider instead of just sending them a temporary public URL.","created_at":"2018-06-27T21:34:36Z","updated_at":"2018-06-27T21:34:36Z","html_url":"https://github.com/code-dot-org/code-dot-org/pull/21900#discussion_r198648614","pull_request_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments/198648614"},"html":{"href":"https://github.com/code-dot-org/code-dot-org/pull/21900#discussion_r198648614"},"pull_request":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900"}},"in_reply_to_id":182234229},"pull_request":{"url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900","id":182297761,"node_id":"MDExOlB1bGxSZXF1ZXN0MTgyMjk3NzYx","html_url":"https://github.com/code-dot-org/code-dot-org/pull/21900","diff_url":"https://github.com/code-dot-org/code-dot-org/pull/21900.diff","patch_url":"https://github.com/code-dot-org/code-dot-org/pull/21900.patch","issue_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/21900","number":21900,"state":"closed","locked":false,"title":"Image moderation: Only moderate App Lab and Game Lab thumbnails","user":{"login":"islemaster","id":1615761,"node_id":"MDQ6VXNlcjE2MTU3NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1615761?v=4","gravatar_id":"","url":"https://api.github.com/users/islemaster","html_url":"https://github.com/islemaster","followers_url":"https://api.github.com/users/islemaster/followers","following_url":"https://api.github.com/users/islemaster/following{/other_user}","gists_url":"https://api.github.com/users/islemaster/gists{/gist_id}","starred_url":"https://api.github.com/users/islemaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/islemaster/subscriptions","organizations_url":"https://api.github.com/users/islemaster/orgs","repos_url":"https://api.github.com/users/islemaster/repos","events_url":"https://api.github.com/users/islemaster/events{/privacy}","received_events_url":"https://api.github.com/users/islemaster/received_events","type":"User","site_admin":false},"body":"Only apply automated image moderation to App Lab and Game Lab thumbnails in the public gallery. ([Tech spec](https://docs.google.com/document/d/1HmRKDAAXGpPBpgjUw1DgohgknXbiOoSYBMmNha6KeIg/edit))\r\n\r\n## Related work\r\n* Feature introduced in https://github.com/code-dot-org/code-dot-org/pull/21812\r\n* Fix unhandled exception in https://github.com/code-dot-org/code-dot-org/pull/21884\r\n* Tests moved to their own file in https://github.com/code-dot-org/code-dot-org/pull/21894\r\n\r\n## Description\r\nIn the original implementation I skipped this feature, citing the following reasons:\r\n\r\n1. Adds complexity - this actually requires hitting the Pegasus DB where no DB access is needed right now.\r\n2. Since we found a more affordable AIM provider I'm less worried about volume.\r\n3. I'd rather keep it open, so as we add project types in the future we don't have to keep adding to the list of filtered types.\r\n\r\nSince enabling image moderation on our staging and test environments though, we've found Azure can return some surprising false positives on Artist projects, like this simple line drawing that got categorized as \"racy:\"\r\n\r\n![screenshot from 2018-04-16 13-30-01](https://user-images.githubusercontent.com/1615761/38896455-9cc1c43c-4247-11e8-9f7d-76f790c92b5e.png)\r\n\r\nI've [posted on the Microsoft Cognitive Services forum](https://cognitive.uservoice.com/forums/559960-content-moderator/suggestions/33971830-surprising-false-positive) to see if I can get any help with this, but in the meantime this is a pretty good reason to not run most of our project types through moderation at all.\r\n\r\n## Review tips\r\nI've completely restructured the related tests here because they demand more custom setup/teardown since we're checking channels with different project types now.  It may be easier to read as a split diff, or just to [read the new version](https://github.com/code-dot-org/code-dot-org/blob/moderate-certain-project-types/shared/test/middleware/files_api/test_public_thumbnails.rb) by itself - I think it reads much nicer now either way.","created_at":"2018-04-17T21:02:04Z","updated_at":"2018-06-27T21:34:36Z","closed_at":"2018-04-18T19:47:57Z","merged_at":"2018-04-18T19:47:57Z","merge_commit_sha":"a9dbe32d2890ba801e8082f665173e701fb22d2a","assignee":null,"assignees":[],"requested_reviewers":[{"login":"ewjordan","id":70630,"node_id":"MDQ6VXNlcjcwNjMw","avatar_url":"https://avatars3.githubusercontent.com/u/70630?v=4","gravatar_id":"","url":"https://api.github.com/users/ewjordan","html_url":"https://github.com/ewjordan","followers_url":"https://api.github.com/users/ewjordan/followers","following_url":"https://api.github.com/users/ewjordan/following{/other_user}","gists_url":"https://api.github.com/users/ewjordan/gists{/gist_id}","starred_url":"https://api.github.com/users/ewjordan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ewjordan/subscriptions","organizations_url":"https://api.github.com/users/ewjordan/orgs","repos_url":"https://api.github.com/users/ewjordan/repos","events_url":"https://api.github.com/users/ewjordan/events{/privacy}","received_events_url":"https://api.github.com/users/ewjordan/received_events","type":"User","site_admin":false},{"login":"epeach","id":2959170,"node_id":"MDQ6VXNlcjI5NTkxNzA=","avatar_url":"https://avatars0.githubusercontent.com/u/2959170?v=4","gravatar_id":"","url":"https://api.github.com/users/epeach","html_url":"https://github.com/epeach","followers_url":"https://api.github.com/users/epeach/followers","following_url":"https://api.github.com/users/epeach/following{/other_user}","gists_url":"https://api.github.com/users/epeach/gists{/gist_id}","starred_url":"https://api.github.com/users/epeach/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/epeach/subscriptions","organizations_url":"https://api.github.com/users/epeach/orgs","repos_url":"https://api.github.com/users/epeach/repos","events_url":"https://api.github.com/users/epeach/events{/privacy}","received_events_url":"https://api.github.com/users/epeach/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900/commits","review_comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900/comments","review_comment_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments{/number}","comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/21900/comments","statuses_url":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/be719b5afd760f819ed6f691d8cf9bf5294cea08","head":{"label":"code-dot-org:moderate-certain-project-types","ref":"moderate-certain-project-types","sha":"be719b5afd760f819ed6f691d8cf9bf5294cea08","user":{"login":"code-dot-org","id":5124627,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUxMjQ2Mjc=","avatar_url":"https://avatars2.githubusercontent.com/u/5124627?v=4","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"repo":{"id":24250009,"node_id":"MDEwOlJlcG9zaXRvcnkyNDI1MDAwOQ==","name":"code-dot-org","full_name":"code-dot-org/code-dot-org","owner":{"login":"code-dot-org","id":5124627,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUxMjQ2Mjc=","avatar_url":"https://avatars2.githubusercontent.com/u/5124627?v=4","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/code-dot-org/code-dot-org","description":"The code powering code.org and studio.code.org","fork":false,"url":"https://api.github.com/repos/code-dot-org/code-dot-org","forks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/forks","keys_url":"https://api.github.com/repos/code-dot-org/code-dot-org/keys{/key_id}","collaborators_url":"https://api.github.com/repos/code-dot-org/code-dot-org/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/code-dot-org/code-dot-org/teams","hooks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/hooks","issue_events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/events{/number}","events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/events","assignees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/assignees{/user}","branches_url":"https://api.github.com/repos/code-dot-org/code-dot-org/branches{/branch}","tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/tags","blobs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/refs{/sha}","trees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/trees{/sha}","statuses_url":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/{sha}","languages_url":"https://api.github.com/repos/code-dot-org/code-dot-org/languages","stargazers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/stargazers","contributors_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contributors","subscribers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscribers","subscription_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscription","commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/commits{/sha}","git_commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/commits{/sha}","comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/comments{/number}","issue_comment_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/comments{/number}","contents_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contents/{+path}","compare_url":"https://api.github.com/repos/code-dot-org/code-dot-org/compare/{base}...{head}","merges_url":"https://api.github.com/repos/code-dot-org/code-dot-org/merges","archive_url":"https://api.github.com/repos/code-dot-org/code-dot-org/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/code-dot-org/code-dot-org/downloads","issues_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues{/number}","pulls_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls{/number}","milestones_url":"https://api.github.com/repos/code-dot-org/code-dot-org/milestones{/number}","notifications_url":"https://api.github.com/repos/code-dot-org/code-dot-org/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/code-dot-org/code-dot-org/labels{/name}","releases_url":"https://api.github.com/repos/code-dot-org/code-dot-org/releases{/id}","deployments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/deployments","created_at":"2014-09-20T00:46:11Z","updated_at":"2018-06-27T21:33:30Z","pushed_at":"2018-06-27T21:34:33Z","git_url":"git://github.com/code-dot-org/code-dot-org.git","ssh_url":"git@github.com:code-dot-org/code-dot-org.git","clone_url":"https://github.com/code-dot-org/code-dot-org.git","svn_url":"https://github.com/code-dot-org/code-dot-org","homepage":"http://code.org","size":7772080,"stargazers_count":325,"watchers_count":325,"language":"JavaScript","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":188,"mirror_url":null,"archived":false,"open_issues_count":131,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":188,"open_issues":131,"watchers":325,"default_branch":"staging"}},"base":{"label":"code-dot-org:staging","ref":"staging","sha":"8f89e1e3f2edc5d2e41510b445ff6f3f59f2429c","user":{"login":"code-dot-org","id":5124627,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUxMjQ2Mjc=","avatar_url":"https://avatars2.githubusercontent.com/u/5124627?v=4","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"repo":{"id":24250009,"node_id":"MDEwOlJlcG9zaXRvcnkyNDI1MDAwOQ==","name":"code-dot-org","full_name":"code-dot-org/code-dot-org","owner":{"login":"code-dot-org","id":5124627,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUxMjQ2Mjc=","avatar_url":"https://avatars2.githubusercontent.com/u/5124627?v=4","gravatar_id":"","url":"https://api.github.com/users/code-dot-org","html_url":"https://github.com/code-dot-org","followers_url":"https://api.github.com/users/code-dot-org/followers","following_url":"https://api.github.com/users/code-dot-org/following{/other_user}","gists_url":"https://api.github.com/users/code-dot-org/gists{/gist_id}","starred_url":"https://api.github.com/users/code-dot-org/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/code-dot-org/subscriptions","organizations_url":"https://api.github.com/users/code-dot-org/orgs","repos_url":"https://api.github.com/users/code-dot-org/repos","events_url":"https://api.github.com/users/code-dot-org/events{/privacy}","received_events_url":"https://api.github.com/users/code-dot-org/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/code-dot-org/code-dot-org","description":"The code powering code.org and studio.code.org","fork":false,"url":"https://api.github.com/repos/code-dot-org/code-dot-org","forks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/forks","keys_url":"https://api.github.com/repos/code-dot-org/code-dot-org/keys{/key_id}","collaborators_url":"https://api.github.com/repos/code-dot-org/code-dot-org/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/code-dot-org/code-dot-org/teams","hooks_url":"https://api.github.com/repos/code-dot-org/code-dot-org/hooks","issue_events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/events{/number}","events_url":"https://api.github.com/repos/code-dot-org/code-dot-org/events","assignees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/assignees{/user}","branches_url":"https://api.github.com/repos/code-dot-org/code-dot-org/branches{/branch}","tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/tags","blobs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/refs{/sha}","trees_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/trees{/sha}","statuses_url":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/{sha}","languages_url":"https://api.github.com/repos/code-dot-org/code-dot-org/languages","stargazers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/stargazers","contributors_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contributors","subscribers_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscribers","subscription_url":"https://api.github.com/repos/code-dot-org/code-dot-org/subscription","commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/commits{/sha}","git_commits_url":"https://api.github.com/repos/code-dot-org/code-dot-org/git/commits{/sha}","comments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/comments{/number}","issue_comment_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/comments{/number}","contents_url":"https://api.github.com/repos/code-dot-org/code-dot-org/contents/{+path}","compare_url":"https://api.github.com/repos/code-dot-org/code-dot-org/compare/{base}...{head}","merges_url":"https://api.github.com/repos/code-dot-org/code-dot-org/merges","archive_url":"https://api.github.com/repos/code-dot-org/code-dot-org/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/code-dot-org/code-dot-org/downloads","issues_url":"https://api.github.com/repos/code-dot-org/code-dot-org/issues{/number}","pulls_url":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls{/number}","milestones_url":"https://api.github.com/repos/code-dot-org/code-dot-org/milestones{/number}","notifications_url":"https://api.github.com/repos/code-dot-org/code-dot-org/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/code-dot-org/code-dot-org/labels{/name}","releases_url":"https://api.github.com/repos/code-dot-org/code-dot-org/releases{/id}","deployments_url":"https://api.github.com/repos/code-dot-org/code-dot-org/deployments","created_at":"2014-09-20T00:46:11Z","updated_at":"2018-06-27T21:33:30Z","pushed_at":"2018-06-27T21:34:33Z","git_url":"git://github.com/code-dot-org/code-dot-org.git","ssh_url":"git@github.com:code-dot-org/code-dot-org.git","clone_url":"https://github.com/code-dot-org/code-dot-org.git","svn_url":"https://github.com/code-dot-org/code-dot-org","homepage":"http://code.org","size":7772080,"stargazers_count":325,"watchers_count":325,"language":"JavaScript","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":188,"mirror_url":null,"archived":false,"open_issues_count":131,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":188,"open_issues":131,"watchers":325,"default_branch":"staging"}},"_links":{"self":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900"},"html":{"href":"https://github.com/code-dot-org/code-dot-org/pull/21900"},"issue":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/21900"},"comments":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/issues/21900/comments"},"review_comments":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900/comments"},"review_comment":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/pulls/21900/commits"},"statuses":{"href":"https://api.github.com/repos/code-dot-org/code-dot-org/statuses/be719b5afd760f819ed6f691d8cf9bf5294cea08"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"islemaster"}}