{"action":"created","comment":{"url":"https://api.github.com/repos/qri-io/qri/pulls/comments/232351348","pull_request_review_id":173536060,"id":232351348,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMjM1MTM0OA==","diff_hunk":"@@ -12,56 +13,74 @@ import (\n \t\"github.com/qri-io/qri/base\"\n \t\"github.com/qri-io/qri/p2p\"\n \t\"github.com/qri-io/qri/repo\"\n+\t\"github.com/qri-io/qri/repo/profile\"\n )\n \n // SaveDataset initializes a dataset from a dataset pointer and data file\n func SaveDataset(node *p2p.QriNode, dsp *dataset.DatasetPod, dryRun, pin bool) (ref repo.DatasetRef, body cafs.File, err error) {\n \tvar (\n-\t\tds       *dataset.Dataset\n-\t\tbodyFile cafs.File\n-\t\tsecrets  map[string]string\n-\t\t// NOTE - struct fields need to be instantiated to make assign set to\n-\t\t// new pointer values\n-\t\tuserSet = &dataset.Dataset{\n-\t\t\tCommit:    &dataset.Commit{},\n-\t\t\tMeta:      &dataset.Meta{},\n-\t\t\tStructure: &dataset.Structure{},\n-\t\t\tTransform: &dataset.Transform{},\n-\t\t\tViz:       &dataset.Viz{},\n-\t\t}\n+\t\tds                       *dataset.Dataset\n+\t\tprevPath                 string\n+\t\tbodyFile, changeBodyFile cafs.File\n+\t\tsecrets                  map[string]string\n+\t\tpro                      *profile.Profile\n+\t\tchanges                  = &dataset.Dataset{}\n+\t\tr                        = node.Repo\n \t)\n \n+\t// set ds to dataset head, or empty dataset if no history\n+\tds, bodyFile, prevPath, err = base.PrepareDatasetSave(r, dsp.Peername, dsp.Name)\n+\tif err != nil {\n+\t\treturn\n+\t}\n+\n \tif dryRun {\n \t\tnode.LocalStreams.Print(\"🏃🏽‍♀️ dry run\\n\")\n-\t}\n \n-\t// Determine if the save is creating a new dataset or updating an existing dataset by\n-\t// seeing if the name can canonicalize to a repo that we know about\n-\tlookup := &repo.DatasetRef{Name: dsp.Name, Peername: dsp.Peername}\n-\terr = repo.CanonicalizeDatasetRef(node.Repo, lookup)\n-\tif err == repo.ErrNotFound {\n-\t\tds, bodyFile, secrets, err = base.PrepareDatasetNew(dsp)\n+\t\tpro, err = r.Profile()\n \t\tif err != nil {\n \t\t\treturn\n \t\t}\n-\t} else {\n-\t\tds, bodyFile, secrets, err = base.PrepareDatasetSave(node.Repo, dsp)\n+\n+\t\t// dry-runs store to an in-memory repo\n+\t\tr, err = repo.NewMemRepo(pro, cafs.NewMapstore(), profile.NewMemStore(), nil)\n \t\tif err != nil {\n \t\t\treturn\n \t\t}\n \t}\n \n-\tmutateCheck := mutatedComponentsFunc(dsp)\n-\tuserSet.Assign(ds)\n+\tif changeBodyFile, err = base.DatasetPodBodyFile(node.Repo.Store(), dsp); err == nil && changeBodyFile != nil {\n+\t\tdsp.BodyPath = \"\"\n+\t\tbodyFile = changeBodyFile\n+\t} else if err != nil {\n+\t\treturn\n+\t}\n+\n+\tif err = changes.Decode(dsp); err != nil {\n+\t\treturn\n+\t}\n+\tds.Assign(changes)\n+\tclearPaths(ds)\n \n \tif ds.Transform != nil {\n+\t\tmutateCheck := mutatedComponentsFunc(dsp)","path":"actions/dataset.go","position":84,"original_position":85,"commit_id":"083331d8304189abdbdcf31f1e0ebc9c41b362bc","original_commit_id":"8ed4979ed4608c124f5c828b36301a84271cea52","user":{"login":"ramfox","id":17440142,"node_id":"MDQ6VXNlcjE3NDQwMTQy","avatar_url":"https://avatars0.githubusercontent.com/u/17440142?v=4","gravatar_id":"","url":"https://api.github.com/users/ramfox","html_url":"https://github.com/ramfox","followers_url":"https://api.github.com/users/ramfox/followers","following_url":"https://api.github.com/users/ramfox/following{/other_user}","gists_url":"https://api.github.com/users/ramfox/gists{/gist_id}","starred_url":"https://api.github.com/users/ramfox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ramfox/subscriptions","organizations_url":"https://api.github.com/users/ramfox/orgs","repos_url":"https://api.github.com/users/ramfox/repos","events_url":"https://api.github.com/users/ramfox/events{/privacy}","received_events_url":"https://api.github.com/users/ramfox/received_events","type":"User","site_admin":false},"body":"Would be great to have a note here what exactly we are doing: making a record of all the parts that the datasetPod is changing, that way we can make sure the transform is not also changing them.\r\n\r\nPart of the confusion, is that it isn't totally clear that `dsp` is a dataset made up of only the changes. `changes` makes sense, but maybe calling dsp `changesPod` might make this more clear?","created_at":"2018-11-09T18:37:09Z","updated_at":"2018-11-09T18:45:01Z","html_url":"https://github.com/qri-io/qri/pull/603#discussion_r232351348","pull_request_url":"https://api.github.com/repos/qri-io/qri/pulls/603","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/qri-io/qri/pulls/comments/232351348"},"html":{"href":"https://github.com/qri-io/qri/pull/603#discussion_r232351348"},"pull_request":{"href":"https://api.github.com/repos/qri-io/qri/pulls/603"}}},"pull_request":{"url":"https://api.github.com/repos/qri-io/qri/pulls/603","id":229371957,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI5MzcxOTU3","html_url":"https://github.com/qri-io/qri/pull/603","diff_url":"https://github.com/qri-io/qri/pull/603.diff","patch_url":"https://github.com/qri-io/qri/pull/603.patch","issue_url":"https://api.github.com/repos/qri-io/qri/issues/603","number":603,"state":"open","locked":false,"title":"refactor: Mutually Exclusive Manual & Scripted Tranforms","user":{"login":"b5","id":1154390,"node_id":"MDQ6VXNlcjExNTQzOTA=","avatar_url":"https://avatars1.githubusercontent.com/u/1154390?v=4","gravatar_id":"","url":"https://api.github.com/users/b5","html_url":"https://github.com/b5","followers_url":"https://api.github.com/users/b5/followers","following_url":"https://api.github.com/users/b5/following{/other_user}","gists_url":"https://api.github.com/users/b5/gists{/gist_id}","starred_url":"https://api.github.com/users/b5/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/b5/subscriptions","organizations_url":"https://api.github.com/users/b5/orgs","repos_url":"https://api.github.com/users/b5/repos","events_url":"https://api.github.com/users/b5/events{/privacy}","received_events_url":"https://api.github.com/users/b5/received_events","type":"User","site_admin":false},"body":"When finished, this PR should implement the bulk of [RFC0020](https://github.com/qri-io/rfcs/blob/master/text/0020-distingush_manual_vs_scripted_transforms.md), excluding field-level exclusion checks\r\n\r\n### TODOS:\r\n* ~~[ ] lib:~~\r\n  * ~~[ ] an integration test on lib that runs the tutorial from RFC 0020~~ _(this is better covered as a unit test on `actions.SaveDataset`)_\r\n* [ ] cmd: \r\n  * [x] update: add `--recall-tf` flag\r\n  * [x] save\r\n    * [x] add `--recall tf` flag\r\n    * [ ] add command documentation explaining transforms run only the first time they're provided\r\n* [ ] startf\r\n  * [x] adjust startf/dataset to accept a MutationCheckFunc\r\n  * [ ] lib version needs to to go 0.1.0\r\n  * [ ] startf/dataset infile -> bodyFile\r\n* [ ] actions:\r\n  * [x] adjust logic of `SaveDataset` and `UpdateDataset` transform exec to match RFC\r\n  * [x] test to ensure previous dataset is provided to transform\r\n  * [x] confirm manual transforms run before scripted transforms\r\n  * [x] generate a MutationCheckFunc from the result of user-provided values, pass to transform\r\n  * [x] test to ensure tf is removed by save that doesn't run\r\n  * [ ] update: add no-transform error that uses history check, reports actionable message\r\n* [x] base:\r\n  * [x] add capacity to recall components from history","created_at":"2018-11-08T13:54:25Z","updated_at":"2018-11-09T18:45:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"14ddb3734e9f825e767c1d173f18272a405fd089","assignee":{"login":"b5","id":1154390,"node_id":"MDQ6VXNlcjExNTQzOTA=","avatar_url":"https://avatars1.githubusercontent.com/u/1154390?v=4","gravatar_id":"","url":"https://api.github.com/users/b5","html_url":"https://github.com/b5","followers_url":"https://api.github.com/users/b5/followers","following_url":"https://api.github.com/users/b5/following{/other_user}","gists_url":"https://api.github.com/users/b5/gists{/gist_id}","starred_url":"https://api.github.com/users/b5/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/b5/subscriptions","organizations_url":"https://api.github.com/users/b5/orgs","repos_url":"https://api.github.com/users/b5/repos","events_url":"https://api.github.com/users/b5/events{/privacy}","received_events_url":"https://api.github.com/users/b5/received_events","type":"User","site_admin":false},"assignees":[{"login":"b5","id":1154390,"node_id":"MDQ6VXNlcjExNTQzOTA=","avatar_url":"https://avatars1.githubusercontent.com/u/1154390?v=4","gravatar_id":"","url":"https://api.github.com/users/b5","html_url":"https://github.com/b5","followers_url":"https://api.github.com/users/b5/followers","following_url":"https://api.github.com/users/b5/following{/other_user}","gists_url":"https://api.github.com/users/b5/gists{/gist_id}","starred_url":"https://api.github.com/users/b5/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/b5/subscriptions","organizations_url":"https://api.github.com/users/b5/orgs","repos_url":"https://api.github.com/users/b5/repos","events_url":"https://api.github.com/users/b5/events{/privacy}","received_events_url":"https://api.github.com/users/b5/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":466448780,"node_id":"MDU6TGFiZWw0NjY0NDg3ODA=","url":"https://api.github.com/repos/qri-io/qri/labels/feat","name":"feat","color":"50C9F4","default":false},{"id":673327179,"node_id":"MDU6TGFiZWw2NzMzMjcxNzk=","url":"https://api.github.com/repos/qri-io/qri/labels/in%20progress","name":"in progress","color":"ededed","default":false},{"id":745581893,"node_id":"MDU6TGFiZWw3NDU1ODE4OTM=","url":"https://api.github.com/repos/qri-io/qri/labels/refactor","name":"refactor","color":"B0D248","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/qri-io/qri/pulls/603/commits","review_comments_url":"https://api.github.com/repos/qri-io/qri/pulls/603/comments","review_comment_url":"https://api.github.com/repos/qri-io/qri/pulls/comments{/number}","comments_url":"https://api.github.com/repos/qri-io/qri/issues/603/comments","statuses_url":"https://api.github.com/repos/qri-io/qri/statuses/083331d8304189abdbdcf31f1e0ebc9c41b362bc","head":{"label":"qri-io:exclusive_transforms","ref":"exclusive_transforms","sha":"083331d8304189abdbdcf31f1e0ebc9c41b362bc","user":{"login":"qri-io","id":19268065,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MjY4MDY1","avatar_url":"https://avatars1.githubusercontent.com/u/19268065?v=4","gravatar_id":"","url":"https://api.github.com/users/qri-io","html_url":"https://github.com/qri-io","followers_url":"https://api.github.com/users/qri-io/followers","following_url":"https://api.github.com/users/qri-io/following{/other_user}","gists_url":"https://api.github.com/users/qri-io/gists{/gist_id}","starred_url":"https://api.github.com/users/qri-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qri-io/subscriptions","organizations_url":"https://api.github.com/users/qri-io/orgs","repos_url":"https://api.github.com/users/qri-io/repos","events_url":"https://api.github.com/users/qri-io/events{/privacy}","received_events_url":"https://api.github.com/users/qri-io/received_events","type":"Organization","site_admin":false},"repo":{"id":71603023,"node_id":"MDEwOlJlcG9zaXRvcnk3MTYwMzAyMw==","name":"qri","full_name":"qri-io/qri","private":false,"owner":{"login":"qri-io","id":19268065,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MjY4MDY1","avatar_url":"https://avatars1.githubusercontent.com/u/19268065?v=4","gravatar_id":"","url":"https://api.github.com/users/qri-io","html_url":"https://github.com/qri-io","followers_url":"https://api.github.com/users/qri-io/followers","following_url":"https://api.github.com/users/qri-io/following{/other_user}","gists_url":"https://api.github.com/users/qri-io/gists{/gist_id}","starred_url":"https://api.github.com/users/qri-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qri-io/subscriptions","organizations_url":"https://api.github.com/users/qri-io/orgs","repos_url":"https://api.github.com/users/qri-io/repos","events_url":"https://api.github.com/users/qri-io/events{/privacy}","received_events_url":"https://api.github.com/users/qri-io/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/qri-io/qri","description":"you're invited to a data party!","fork":false,"url":"https://api.github.com/repos/qri-io/qri","forks_url":"https://api.github.com/repos/qri-io/qri/forks","keys_url":"https://api.github.com/repos/qri-io/qri/keys{/key_id}","collaborators_url":"https://api.github.com/repos/qri-io/qri/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/qri-io/qri/teams","hooks_url":"https://api.github.com/repos/qri-io/qri/hooks","issue_events_url":"https://api.github.com/repos/qri-io/qri/issues/events{/number}","events_url":"https://api.github.com/repos/qri-io/qri/events","assignees_url":"https://api.github.com/repos/qri-io/qri/assignees{/user}","branches_url":"https://api.github.com/repos/qri-io/qri/branches{/branch}","tags_url":"https://api.github.com/repos/qri-io/qri/tags","blobs_url":"https://api.github.com/repos/qri-io/qri/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/qri-io/qri/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/qri-io/qri/git/refs{/sha}","trees_url":"https://api.github.com/repos/qri-io/qri/git/trees{/sha}","statuses_url":"https://api.github.com/repos/qri-io/qri/statuses/{sha}","languages_url":"https://api.github.com/repos/qri-io/qri/languages","stargazers_url":"https://api.github.com/repos/qri-io/qri/stargazers","contributors_url":"https://api.github.com/repos/qri-io/qri/contributors","subscribers_url":"https://api.github.com/repos/qri-io/qri/subscribers","subscription_url":"https://api.github.com/repos/qri-io/qri/subscription","commits_url":"https://api.github.com/repos/qri-io/qri/commits{/sha}","git_commits_url":"https://api.github.com/repos/qri-io/qri/git/commits{/sha}","comments_url":"https://api.github.com/repos/qri-io/qri/comments{/number}","issue_comment_url":"https://api.github.com/repos/qri-io/qri/issues/comments{/number}","contents_url":"https://api.github.com/repos/qri-io/qri/contents/{+path}","compare_url":"https://api.github.com/repos/qri-io/qri/compare/{base}...{head}","merges_url":"https://api.github.com/repos/qri-io/qri/merges","archive_url":"https://api.github.com/repos/qri-io/qri/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/qri-io/qri/downloads","issues_url":"https://api.github.com/repos/qri-io/qri/issues{/number}","pulls_url":"https://api.github.com/repos/qri-io/qri/pulls{/number}","milestones_url":"https://api.github.com/repos/qri-io/qri/milestones{/number}","notifications_url":"https://api.github.com/repos/qri-io/qri/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/qri-io/qri/labels{/name}","releases_url":"https://api.github.com/repos/qri-io/qri/releases{/id}","deployments_url":"https://api.github.com/repos/qri-io/qri/deployments","created_at":"2016-10-21T22:58:23Z","updated_at":"2018-11-09T14:54:39Z","pushed_at":"2018-11-09T17:14:14Z","git_url":"git://github.com/qri-io/qri.git","ssh_url":"git@github.com:qri-io/qri.git","clone_url":"https://github.com/qri-io/qri.git","svn_url":"https://github.com/qri-io/qri","homepage":"https://qri.io","size":29771,"stargazers_count":84,"watchers_count":84,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":49,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":14,"open_issues":49,"watchers":84,"default_branch":"master"}},"base":{"label":"qri-io:master","ref":"master","sha":"d480b636a3021d825fe22526eb66e53803f6f3e4","user":{"login":"qri-io","id":19268065,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MjY4MDY1","avatar_url":"https://avatars1.githubusercontent.com/u/19268065?v=4","gravatar_id":"","url":"https://api.github.com/users/qri-io","html_url":"https://github.com/qri-io","followers_url":"https://api.github.com/users/qri-io/followers","following_url":"https://api.github.com/users/qri-io/following{/other_user}","gists_url":"https://api.github.com/users/qri-io/gists{/gist_id}","starred_url":"https://api.github.com/users/qri-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qri-io/subscriptions","organizations_url":"https://api.github.com/users/qri-io/orgs","repos_url":"https://api.github.com/users/qri-io/repos","events_url":"https://api.github.com/users/qri-io/events{/privacy}","received_events_url":"https://api.github.com/users/qri-io/received_events","type":"Organization","site_admin":false},"repo":{"id":71603023,"node_id":"MDEwOlJlcG9zaXRvcnk3MTYwMzAyMw==","name":"qri","full_name":"qri-io/qri","private":false,"owner":{"login":"qri-io","id":19268065,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE5MjY4MDY1","avatar_url":"https://avatars1.githubusercontent.com/u/19268065?v=4","gravatar_id":"","url":"https://api.github.com/users/qri-io","html_url":"https://github.com/qri-io","followers_url":"https://api.github.com/users/qri-io/followers","following_url":"https://api.github.com/users/qri-io/following{/other_user}","gists_url":"https://api.github.com/users/qri-io/gists{/gist_id}","starred_url":"https://api.github.com/users/qri-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qri-io/subscriptions","organizations_url":"https://api.github.com/users/qri-io/orgs","repos_url":"https://api.github.com/users/qri-io/repos","events_url":"https://api.github.com/users/qri-io/events{/privacy}","received_events_url":"https://api.github.com/users/qri-io/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/qri-io/qri","description":"you're invited to a data party!","fork":false,"url":"https://api.github.com/repos/qri-io/qri","forks_url":"https://api.github.com/repos/qri-io/qri/forks","keys_url":"https://api.github.com/repos/qri-io/qri/keys{/key_id}","collaborators_url":"https://api.github.com/repos/qri-io/qri/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/qri-io/qri/teams","hooks_url":"https://api.github.com/repos/qri-io/qri/hooks","issue_events_url":"https://api.github.com/repos/qri-io/qri/issues/events{/number}","events_url":"https://api.github.com/repos/qri-io/qri/events","assignees_url":"https://api.github.com/repos/qri-io/qri/assignees{/user}","branches_url":"https://api.github.com/repos/qri-io/qri/branches{/branch}","tags_url":"https://api.github.com/repos/qri-io/qri/tags","blobs_url":"https://api.github.com/repos/qri-io/qri/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/qri-io/qri/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/qri-io/qri/git/refs{/sha}","trees_url":"https://api.github.com/repos/qri-io/qri/git/trees{/sha}","statuses_url":"https://api.github.com/repos/qri-io/qri/statuses/{sha}","languages_url":"https://api.github.com/repos/qri-io/qri/languages","stargazers_url":"https://api.github.com/repos/qri-io/qri/stargazers","contributors_url":"https://api.github.com/repos/qri-io/qri/contributors","subscribers_url":"https://api.github.com/repos/qri-io/qri/subscribers","subscription_url":"https://api.github.com/repos/qri-io/qri/subscription","commits_url":"https://api.github.com/repos/qri-io/qri/commits{/sha}","git_commits_url":"https://api.github.com/repos/qri-io/qri/git/commits{/sha}","comments_url":"https://api.github.com/repos/qri-io/qri/comments{/number}","issue_comment_url":"https://api.github.com/repos/qri-io/qri/issues/comments{/number}","contents_url":"https://api.github.com/repos/qri-io/qri/contents/{+path}","compare_url":"https://api.github.com/repos/qri-io/qri/compare/{base}...{head}","merges_url":"https://api.github.com/repos/qri-io/qri/merges","archive_url":"https://api.github.com/repos/qri-io/qri/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/qri-io/qri/downloads","issues_url":"https://api.github.com/repos/qri-io/qri/issues{/number}","pulls_url":"https://api.github.com/repos/qri-io/qri/pulls{/number}","milestones_url":"https://api.github.com/repos/qri-io/qri/milestones{/number}","notifications_url":"https://api.github.com/repos/qri-io/qri/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/qri-io/qri/labels{/name}","releases_url":"https://api.github.com/repos/qri-io/qri/releases{/id}","deployments_url":"https://api.github.com/repos/qri-io/qri/deployments","created_at":"2016-10-21T22:58:23Z","updated_at":"2018-11-09T14:54:39Z","pushed_at":"2018-11-09T17:14:14Z","git_url":"git://github.com/qri-io/qri.git","ssh_url":"git@github.com:qri-io/qri.git","clone_url":"https://github.com/qri-io/qri.git","svn_url":"https://github.com/qri-io/qri","homepage":"https://qri.io","size":29771,"stargazers_count":84,"watchers_count":84,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":49,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":14,"open_issues":49,"watchers":84,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/qri-io/qri/pulls/603"},"html":{"href":"https://github.com/qri-io/qri/pull/603"},"issue":{"href":"https://api.github.com/repos/qri-io/qri/issues/603"},"comments":{"href":"https://api.github.com/repos/qri-io/qri/issues/603/comments"},"review_comments":{"href":"https://api.github.com/repos/qri-io/qri/pulls/603/comments"},"review_comment":{"href":"https://api.github.com/repos/qri-io/qri/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/qri-io/qri/pulls/603/commits"},"statuses":{"href":"https://api.github.com/repos/qri-io/qri/statuses/083331d8304189abdbdcf31f1e0ebc9c41b362bc"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"ramfox"}}