{"action":"created","comment":{"url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments/165775475","pull_request_review_id":93763720,"id":165775475,"diff_hunk":"@@ -0,0 +1,302 @@\n+// Distributed under the MIT License.\n+// See LICENSE.txt for details.\n+\n+#include \"ApparentHorizons/FastFlow.hpp\"\n+\n+#include <algorithm>\n+#include <cmath>\n+#include <pup.h>\n+#include <utility>\n+\n+#include \"ApparentHorizons/SpherepackIterator.hpp\"\n+#include \"ApparentHorizons/Strahlkorper.hpp\"\n+#include \"ApparentHorizons/StrahlkorperDataBox.hpp\"\n+#include \"ApparentHorizons/StrahlkorperGr.hpp\"\n+#include \"ApparentHorizons/YlmSpherepack.hpp\"\n+#include \"DataStructures/DataBox/DataBox.hpp\"\n+#include \"DataStructures/DataVector.hpp\"\n+#include \"DataStructures/Tensor/EagerMath/Magnitude.hpp\"\n+#include \"ErrorHandling/Error.hpp\"\n+#include \"Parallel/Abort.hpp\"\n+#include \"PointwiseFunctions/GeneralRelativity/IndexManipulation.hpp\"\n+\n+FastFlow::FastFlow(FastFlow::Flow::type flow, FastFlow::Alpha::type alpha,\n+                   FastFlow::Beta::type beta, FastFlow::AbsTol::type abs_tol,\n+                   FastFlow::TruncationTol::type trunc_tol,\n+                   FastFlow::DivergenceTol::type divergence_tol,\n+                   FastFlow::DivergenceIter::type divergence_iter,\n+                   FastFlow::MaxIts::type max_its, const OptionContext& context)\n+    : alpha_(alpha),\n+      beta_(beta),\n+      abs_tol_(abs_tol),\n+      trunc_tol_(trunc_tol),\n+      divergence_tol_(divergence_tol),\n+      divergence_iter_(divergence_iter),\n+      max_its_(max_its),\n+      // clang-tidy std::move on trivially copyable type\n+      flow_(std::move(flow)),  // NOLINT\n+      current_iter_(0),\n+      previous_residual_mesh_norm_(0.0),\n+      min_residual_mesh_norm_(std::numeric_limits<double>::max()),\n+      iter_at_min_residual_mesh_norm_(0) {\n+  if (divergence_tol_ < 1.0) {\n+    PARSE_ERROR(context, \"DivergenceTol must be > 1, not \" << divergence_tol_);\n+  }\n+}\n+\n+template <typename Frame>\n+size_t FastFlow::current_l_mesh(const Strahlkorper<Frame>& strahlkorper) const\n+    noexcept {\n+  const size_t l_max = strahlkorper.ylm_spherepack().l_max();\n+  // This is the formula used in SpEC. We may want to make this\n+  // formula an option in the future, if we want to experiment with it.\n+  return static_cast<size_t>(std::floor(std::max(1.5 * l_max, l_max + 2.0)));\n+}\n+\n+namespace {\n+template <typename Frame>\n+DataVector fast_flow_weight(\n+    const DataVector& one_form_magnitude,\n+    const db::item_type<StrahlkorperTags::Rhat<Frame>>& r_hat,\n+    const db::item_type<StrahlkorperTags::Radius<Frame>>& radius,\n+    const tnsr::II<DataVector, 3, Frame>& inverse_surface_metric) noexcept {\n+  // Form Euclidean surface metric\n+  auto flat_metric =\n+      make_with_value<tnsr::ii<DataVector, 3, Frame>>(radius, 0.0);\n+  for (size_t i = 0; i < 3; ++i) {\n+    flat_metric.get(i, i) += 1.0;\n+    for (size_t j = i; j < 3; ++j) {\n+      flat_metric.get(i, j) -= r_hat.get(i) * r_hat.get(j);\n+    }\n+  }\n+\n+  auto denominator = make_with_value<DataVector>(radius, 0.0);\n+  for (size_t i = 0; i < 3; ++i) {\n+    for (size_t j = 0; j < 3; ++j) {\n+      denominator += inverse_surface_metric.get(i, j) * flat_metric.get(i, j);\n+    }\n+  }\n+\n+  return one_form_magnitude * 2.0 * square(radius) / denominator;\n+}\n+}  // namespace\n+\n+template <typename Frame>\n+std::pair<FastFlow::Status, FastFlow::IterInfo>\n+FastFlow::iterate_horizon_finder(\n+    const gsl::not_null<Strahlkorper<Frame>*> current_strahlkorper,\n+    const tnsr::II<DataVector, 3, Frame>& upper_spatial_metric,\n+    const tnsr::ii<DataVector, 3, Frame>& extrinsic_curvature,\n+    const tnsr::Ijj<DataVector, 3, Frame>& christoffel_2nd_kind) noexcept {\n+  const size_t l_surface = current_strahlkorper->l_max();\n+  const size_t l_mesh = current_l_mesh(*current_strahlkorper);\n+\n+  // Evaluate the Strahlkorper on a higher resolution mesh\n+  const Strahlkorper<Frame> strahlkorper(l_mesh, l_mesh, *current_strahlkorper);\n+\n+  // Make a DataBox with this strahlkorper.\n+  // Do we want to define ComputeItems for expansion, normalized\n+  // unit norms, etc in this DataBox? So far we do not.\n+  auto box = db::create<\n+      db::AddTags<StrahlkorperTags::items_tags<Frame>>,\n+      db::AddComputeItemsTags<StrahlkorperTags::compute_items_tags<Frame>>>(\n+      strahlkorper);\n+\n+  // Get minimum radius.\n+  const auto& radius = db::get<StrahlkorperTags::Radius<Frame>>(box);\n+  const double r_min = *std::min_element(radius.begin(), radius.end());\n+  const double r_max = *std::max_element(radius.begin(), radius.end());\n+\n+  if (r_min < 0) {","path":"src/ApparentHorizons/FastFlow.cpp","position":110,"original_position":110,"commit_id":"786712d9e5f58a28492e5ea7765b5cfc911077fe","original_commit_id":"786712d9e5f58a28492e5ea7765b5cfc911077fe","user":{"login":"kidder","id":1264082,"avatar_url":"https://avatars3.githubusercontent.com/u/1264082?v=4","gravatar_id":"","url":"https://api.github.com/users/kidder","html_url":"https://github.com/kidder","followers_url":"https://api.github.com/users/kidder/followers","following_url":"https://api.github.com/users/kidder/following{/other_user}","gists_url":"https://api.github.com/users/kidder/gists{/gist_id}","starred_url":"https://api.github.com/users/kidder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kidder/subscriptions","organizations_url":"https://api.github.com/users/kidder/orgs","repos_url":"https://api.github.com/users/kidder/repos","events_url":"https://api.github.com/users/kidder/events{/privacy}","received_events_url":"https://api.github.com/users/kidder/received_events","type":"User","site_admin":false},"body":"0.0","created_at":"2018-02-02T22:19:40Z","updated_at":"2018-02-02T22:59:48Z","html_url":"https://github.com/sxs-collaboration/spectre/pull/503#discussion_r165775475","pull_request_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments/165775475"},"html":{"href":"https://github.com/sxs-collaboration/spectre/pull/503#discussion_r165775475"},"pull_request":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503"}}},"pull_request":{"url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503","id":166597070,"html_url":"https://github.com/sxs-collaboration/spectre/pull/503","diff_url":"https://github.com/sxs-collaboration/spectre/pull/503.diff","patch_url":"https://github.com/sxs-collaboration/spectre/pull/503.patch","issue_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/503","number":503,"state":"open","locked":false,"title":"Add fast flow","user":{"login":"markscheel","id":865400,"avatar_url":"https://avatars2.githubusercontent.com/u/865400?v=4","gravatar_id":"","url":"https://api.github.com/users/markscheel","html_url":"https://github.com/markscheel","followers_url":"https://api.github.com/users/markscheel/followers","following_url":"https://api.github.com/users/markscheel/following{/other_user}","gists_url":"https://api.github.com/users/markscheel/gists{/gist_id}","starred_url":"https://api.github.com/users/markscheel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markscheel/subscriptions","organizations_url":"https://api.github.com/users/markscheel/orgs","repos_url":"https://api.github.com/users/markscheel/repos","events_url":"https://api.github.com/users/markscheel/events{/privacy}","received_events_url":"https://api.github.com/users/markscheel/received_events","type":"User","site_admin":false},"body":"## Proposed changes\r\n\r\nAdds the FastFlow method for finding apparent horizons.\r\n\r\n### Types of changes:\r\n\r\n- [ ] Bugfix\r\n- [x] New feature\r\n\r\n### Component:\r\n\r\n- [x] Code\r\n- [ ] Documentation\r\n- [ ] Build system\r\n- [ ] Continuous integration\r\n\r\n### Code review checklist\r\n\r\n- [ ] Follows [code review guidelines](https://sxs-collaboration.github.io/spectre/code_review_guide.html)\r\n- [ ] Code has documentation and unit tests\r\n- [ ] Private member variables have a trailing underscore\r\n- [ ] Do not use [Hungarian notation](https://en.wikipedia.org/wiki/Hungarian_notation), e.g. `double* pd_blah` is bad\r\n- [ ] Header order:\r\n  1. hpp corresponding to cpp (only in cpp files)\r\n  2. Blank line (only in cpp files)\r\n  3. STL and externals (in alphabetical order)\r\n  4. Blank line\r\n  5. SpECTRE includes (in alphabetical order)\r\n- [ ] File lists in CMake are alphabetical\r\n- [ ] Correct `noexcept` specification for functions (if unsure, mark `noexcept`)\r\n- [ ] Mark objects `const` whenever possible\r\n- [ ] Almost always `auto`, except with expression templates, i.e. `DataVector`\r\n- [ ] All commits for performance changes provide quantitative evidence and the tests used to obtain said evidence.\r\n- [ ] Make sure error messages are helpful, e.g. \"The number of grid points in the matrix 'F' is not the same as the number of grid points in the determinant.\"\r\n- [ ] Prefix commits addressing PR requests with `fixup`\r\n\r\n\r\n### Further comments\r\n\r\n<!--\r\nIf this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...\r\n-->\r\n","created_at":"2018-02-01T17:06:49Z","updated_at":"2018-02-02T22:59:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4e2e83b955f0fc8fe8962c49d6e6a9d6644b187a","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503/commits","review_comments_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503/comments","review_comment_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/503/comments","statuses_url":"https://api.github.com/repos/sxs-collaboration/spectre/statuses/786712d9e5f58a28492e5ea7765b5cfc911077fe","head":{"label":"markscheel:AddFastFlow","ref":"AddFastFlow","sha":"786712d9e5f58a28492e5ea7765b5cfc911077fe","user":{"login":"markscheel","id":865400,"avatar_url":"https://avatars2.githubusercontent.com/u/865400?v=4","gravatar_id":"","url":"https://api.github.com/users/markscheel","html_url":"https://github.com/markscheel","followers_url":"https://api.github.com/users/markscheel/followers","following_url":"https://api.github.com/users/markscheel/following{/other_user}","gists_url":"https://api.github.com/users/markscheel/gists{/gist_id}","starred_url":"https://api.github.com/users/markscheel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markscheel/subscriptions","organizations_url":"https://api.github.com/users/markscheel/orgs","repos_url":"https://api.github.com/users/markscheel/repos","events_url":"https://api.github.com/users/markscheel/events{/privacy}","received_events_url":"https://api.github.com/users/markscheel/received_events","type":"User","site_admin":false},"repo":{"id":102143357,"name":"spectre","full_name":"markscheel/spectre","owner":{"login":"markscheel","id":865400,"avatar_url":"https://avatars2.githubusercontent.com/u/865400?v=4","gravatar_id":"","url":"https://api.github.com/users/markscheel","html_url":"https://github.com/markscheel","followers_url":"https://api.github.com/users/markscheel/followers","following_url":"https://api.github.com/users/markscheel/following{/other_user}","gists_url":"https://api.github.com/users/markscheel/gists{/gist_id}","starred_url":"https://api.github.com/users/markscheel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markscheel/subscriptions","organizations_url":"https://api.github.com/users/markscheel/orgs","repos_url":"https://api.github.com/users/markscheel/repos","events_url":"https://api.github.com/users/markscheel/events{/privacy}","received_events_url":"https://api.github.com/users/markscheel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/markscheel/spectre","description":null,"fork":true,"url":"https://api.github.com/repos/markscheel/spectre","forks_url":"https://api.github.com/repos/markscheel/spectre/forks","keys_url":"https://api.github.com/repos/markscheel/spectre/keys{/key_id}","collaborators_url":"https://api.github.com/repos/markscheel/spectre/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/markscheel/spectre/teams","hooks_url":"https://api.github.com/repos/markscheel/spectre/hooks","issue_events_url":"https://api.github.com/repos/markscheel/spectre/issues/events{/number}","events_url":"https://api.github.com/repos/markscheel/spectre/events","assignees_url":"https://api.github.com/repos/markscheel/spectre/assignees{/user}","branches_url":"https://api.github.com/repos/markscheel/spectre/branches{/branch}","tags_url":"https://api.github.com/repos/markscheel/spectre/tags","blobs_url":"https://api.github.com/repos/markscheel/spectre/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/markscheel/spectre/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/markscheel/spectre/git/refs{/sha}","trees_url":"https://api.github.com/repos/markscheel/spectre/git/trees{/sha}","statuses_url":"https://api.github.com/repos/markscheel/spectre/statuses/{sha}","languages_url":"https://api.github.com/repos/markscheel/spectre/languages","stargazers_url":"https://api.github.com/repos/markscheel/spectre/stargazers","contributors_url":"https://api.github.com/repos/markscheel/spectre/contributors","subscribers_url":"https://api.github.com/repos/markscheel/spectre/subscribers","subscription_url":"https://api.github.com/repos/markscheel/spectre/subscription","commits_url":"https://api.github.com/repos/markscheel/spectre/commits{/sha}","git_commits_url":"https://api.github.com/repos/markscheel/spectre/git/commits{/sha}","comments_url":"https://api.github.com/repos/markscheel/spectre/comments{/number}","issue_comment_url":"https://api.github.com/repos/markscheel/spectre/issues/comments{/number}","contents_url":"https://api.github.com/repos/markscheel/spectre/contents/{+path}","compare_url":"https://api.github.com/repos/markscheel/spectre/compare/{base}...{head}","merges_url":"https://api.github.com/repos/markscheel/spectre/merges","archive_url":"https://api.github.com/repos/markscheel/spectre/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/markscheel/spectre/downloads","issues_url":"https://api.github.com/repos/markscheel/spectre/issues{/number}","pulls_url":"https://api.github.com/repos/markscheel/spectre/pulls{/number}","milestones_url":"https://api.github.com/repos/markscheel/spectre/milestones{/number}","notifications_url":"https://api.github.com/repos/markscheel/spectre/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/markscheel/spectre/labels{/name}","releases_url":"https://api.github.com/repos/markscheel/spectre/releases{/id}","deployments_url":"https://api.github.com/repos/markscheel/spectre/deployments","created_at":"2017-09-01T18:47:59Z","updated_at":"2017-09-01T18:48:01Z","pushed_at":"2018-02-02T20:55:04Z","git_url":"git://github.com/markscheel/spectre.git","ssh_url":"git@github.com:markscheel/spectre.git","clone_url":"https://github.com/markscheel/spectre.git","svn_url":"https://github.com/markscheel/spectre","homepage":null,"size":33093,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"sxs-collaboration:develop","ref":"develop","sha":"2bf99cd71bbc714224b2608e04052c17fdd00763","user":{"login":"sxs-collaboration","id":26882595,"avatar_url":"https://avatars2.githubusercontent.com/u/26882595?v=4","gravatar_id":"","url":"https://api.github.com/users/sxs-collaboration","html_url":"https://github.com/sxs-collaboration","followers_url":"https://api.github.com/users/sxs-collaboration/followers","following_url":"https://api.github.com/users/sxs-collaboration/following{/other_user}","gists_url":"https://api.github.com/users/sxs-collaboration/gists{/gist_id}","starred_url":"https://api.github.com/users/sxs-collaboration/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sxs-collaboration/subscriptions","organizations_url":"https://api.github.com/users/sxs-collaboration/orgs","repos_url":"https://api.github.com/users/sxs-collaboration/repos","events_url":"https://api.github.com/users/sxs-collaboration/events{/privacy}","received_events_url":"https://api.github.com/users/sxs-collaboration/received_events","type":"Organization","site_admin":false},"repo":{"id":87570510,"name":"spectre","full_name":"sxs-collaboration/spectre","owner":{"login":"sxs-collaboration","id":26882595,"avatar_url":"https://avatars2.githubusercontent.com/u/26882595?v=4","gravatar_id":"","url":"https://api.github.com/users/sxs-collaboration","html_url":"https://github.com/sxs-collaboration","followers_url":"https://api.github.com/users/sxs-collaboration/followers","following_url":"https://api.github.com/users/sxs-collaboration/following{/other_user}","gists_url":"https://api.github.com/users/sxs-collaboration/gists{/gist_id}","starred_url":"https://api.github.com/users/sxs-collaboration/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sxs-collaboration/subscriptions","organizations_url":"https://api.github.com/users/sxs-collaboration/orgs","repos_url":"https://api.github.com/users/sxs-collaboration/repos","events_url":"https://api.github.com/users/sxs-collaboration/events{/privacy}","received_events_url":"https://api.github.com/users/sxs-collaboration/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sxs-collaboration/spectre","description":"SpECTRE is a code for multi-scale, multi-physics problems in astrophysics and gravitational physics.","fork":false,"url":"https://api.github.com/repos/sxs-collaboration/spectre","forks_url":"https://api.github.com/repos/sxs-collaboration/spectre/forks","keys_url":"https://api.github.com/repos/sxs-collaboration/spectre/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sxs-collaboration/spectre/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sxs-collaboration/spectre/teams","hooks_url":"https://api.github.com/repos/sxs-collaboration/spectre/hooks","issue_events_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/events{/number}","events_url":"https://api.github.com/repos/sxs-collaboration/spectre/events","assignees_url":"https://api.github.com/repos/sxs-collaboration/spectre/assignees{/user}","branches_url":"https://api.github.com/repos/sxs-collaboration/spectre/branches{/branch}","tags_url":"https://api.github.com/repos/sxs-collaboration/spectre/tags","blobs_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/refs{/sha}","trees_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sxs-collaboration/spectre/statuses/{sha}","languages_url":"https://api.github.com/repos/sxs-collaboration/spectre/languages","stargazers_url":"https://api.github.com/repos/sxs-collaboration/spectre/stargazers","contributors_url":"https://api.github.com/repos/sxs-collaboration/spectre/contributors","subscribers_url":"https://api.github.com/repos/sxs-collaboration/spectre/subscribers","subscription_url":"https://api.github.com/repos/sxs-collaboration/spectre/subscription","commits_url":"https://api.github.com/repos/sxs-collaboration/spectre/commits{/sha}","git_commits_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/commits{/sha}","comments_url":"https://api.github.com/repos/sxs-collaboration/spectre/comments{/number}","issue_comment_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/comments{/number}","contents_url":"https://api.github.com/repos/sxs-collaboration/spectre/contents/{+path}","compare_url":"https://api.github.com/repos/sxs-collaboration/spectre/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sxs-collaboration/spectre/merges","archive_url":"https://api.github.com/repos/sxs-collaboration/spectre/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sxs-collaboration/spectre/downloads","issues_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues{/number}","pulls_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls{/number}","milestones_url":"https://api.github.com/repos/sxs-collaboration/spectre/milestones{/number}","notifications_url":"https://api.github.com/repos/sxs-collaboration/spectre/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sxs-collaboration/spectre/labels{/name}","releases_url":"https://api.github.com/repos/sxs-collaboration/spectre/releases{/id}","deployments_url":"https://api.github.com/repos/sxs-collaboration/spectre/deployments","created_at":"2017-04-07T17:28:20Z","updated_at":"2018-02-02T04:16:24Z","pushed_at":"2018-02-02T20:55:06Z","git_url":"git://github.com/sxs-collaboration/spectre.git","ssh_url":"git@github.com:sxs-collaboration/spectre.git","clone_url":"https://github.com/sxs-collaboration/spectre.git","svn_url":"https://github.com/sxs-collaboration/spectre","homepage":"","size":6950,"stargazers_count":16,"watchers_count":16,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":72,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":14,"open_issues":72,"watchers":16,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503"},"html":{"href":"https://github.com/sxs-collaboration/spectre/pull/503"},"issue":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/issues/503"},"comments":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/issues/503/comments"},"review_comments":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503/comments"},"review_comment":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/503/commits"},"statuses":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/statuses/786712d9e5f58a28492e5ea7765b5cfc911077fe"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"kidder"}}