{"action":"created","comment":{"url":"https://api.github.com/repos/immersive-web/editor-collab/pulls/comments/245143144","pull_request_review_id":189195573,"id":245143144,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NTE0MzE0NA==","diff_hunk":"@@ -25,33 +25,35 @@ The properties of an XRInputSource object are immutable. If a device can be mani\n \n ### Input poses\n \n-Each input source can query a `XRInputPose` using the `getInputPose()` function of any `XRFrame`. Getting the pose requires passing in the `XRInputSource` you want the pose for, as well as the `XRReferenceSpace` the pose values should be given in, just like `getViewerPose()`. `getInputPose()` may return `null` in cases where tracking has been lost (similar to `getViewerPose()`), or the given `XRInputSource` instance is no longer connected or available.\n+Each input source provides two `XRSpace`s, which can be used to query an `XRPose` using the `getPose()` function of any `XRFrame`. Getting the pose requires passing in the `XRSpace` you want the pose for, as well as the `XRSpace` the returned pose should be relative to (which may be an `XRReferenceSpace`). Just like `getViewerPose()`, `getPose()` may return `null` in cases where tracking has been lost, or the `XRSpace`'s `XRInputSource` instance is no longer connected or available.\n \n-The `gripTransform` is an `XRRigidTransform` into a space where if the user was holding a straight rod in their hand it would be aligned with the negative Z axis (forward) and the origin rests at their palm. This enables developers to properly render a virtual object held in the user's hand. For example, a sword would be positioned so that the blade points directly down the negative Z axis and the center of the handle is at the origin.\n+The `gripSpace` represents a space where if the user was holding a straight rod in their hand it would be aligned with the negative Z axis (forward) and the origin rests at their palm. This enables developers to properly render a virtual object held in the user's hand. For example, a sword would be positioned so that the blade points directly down the negative Z axis and the center of the handle is at the origin.\n \n-If the input source has only 3DOF, the `gripTransform` may represent only a translation or rotation based on tracking capability. An example of this case is for physical hands on some AR devices which only have a tracked position. The `gripTransform` will be `null` if the input source isn't trackable. \n+If the input source has only 3DOF, the grip pose may represent only a translation or rotation based on tracking capability. An example of this case is for physical hands on some AR devices which only have a tracked position. The `gripSpace` will be `null` if the input source isn't trackable.\n \n-An input source will also provide its preferred pointing ray, given by the `XRInputPose`'s `targetRay`. The ray, which is an `XRRay` object, includes both an `origin` and `direction`, both given as `DOMPointReadOnly`s. The `origin` represents a 3D coordinate in space with a `w` component that must be 1, and the `direction` represents a normalized 3D directional vector with a `w` component that must be 0. A matrix can also be queried from the `XRRay` with the `matrix` attribute which represents the transform from a ray originating at `[0, 0, 0]` and extending down the negative Z axis to the ray described by the `XRRay`'s `origin` and `direction`. This is useful for positioning graphical representations of the ray.\n+An input source will also provide its preferred pointing ray, given by the `XRInputSource`'s `targetRaySpace`. This can be used to get the `XRPose` for the input's target rays.\n \n-The `targetRay` will never be `null`. It's value will differ based on the type of input source that produces it, which is represented by the `targetRayMode` attribute:\n+An `XRRay` can be constructed from the `XRPose`'s `transform`. Rays includes both an `origin` and `direction`, both given as `DOMPointReadOnly`s. The `origin` represents a 3D coordinate in space with a `w` component that must be 1, and the `direction` represents a normalized 3D directional vector with a `w` component that must be 0. The `XRRay`'s `matrix` represents the transform from a ray originating at `[0, 0, 0]` and extending down the negative Z axis to the ray described by the `XRRay`'s `origin` and `direction`. This is useful for positioning graphical representations of the ray.\n \n-  * `'gaze'` indicates the target ray will originate at the user's head and follow the direction they are looking (this is commonly referred to as a \"gaze input\" device). While it may be possible for these devices to be tracked (and have a `gripTransform`), the head gaze is used for targeting. Example devices: 0DOF clicker, regular gamepad, voice command, tracked hands.\n+The `targetRaySpace` will never be `null`. It's value will differ based on the type of input source that produces it, which is represented by the `targetRayMode` attribute:\n+\n+  * `'gaze'` indicates the target ray will originate at the user's head and follow the direction they are looking (this is commonly referred to as a \"gaze input\" device). While it may be possible for these devices to be tracked (and have a `gripSpace`), the head gaze is used for targeting. Example devices: 0DOF clicker, regular gamepad, voice command, tracked hands.\n   * `'tracked-pointer'` indicates that the target ray originates from either a handheld device or other hand-tracking mechanism and represents that the user is using their hands or the held device for pointing. The exact orientation of the ray relative to a given device should follow platform-specific guidelines if there are any. In the absence of platform-specific guidance or a physical device, the target ray should most likely point in the same direction as the user's index finger if it was outstretched.\n   * `'screen'` indicates that the input source was an interaction with a session's output context canvas element, such as a mouse click or touch event. Only applicable for inline sessions or an immersive AR session being displayed on a 2D screen. See [Screen Input](#screen_input) for more details.\n \n ```js\n // Loop over every input source and get their pose for the current frame.\n for (let inputSource of xrInputSources) {\n-  let inputPose = xrFrame.getInputPose(inputSource, xrReferenceSpace);\n+  let targetRayPose = xrFrame.getPose(inputSource.targetRaySpace, xrReferenceSpace);\n \n   // Check to see if the pose is valid\n-  if (inputPose) {\n+  if (targetRayPose) {\n+    let gripPose = xrFrame.getPose(inputSource.gripSpace, xrFrameOfRef);","path":"input-explainer.md","position":35,"original_position":35,"commit_id":"f3ad3f86f5c8fd9d51246d97a1587e25e5e1a5d9","original_commit_id":"f3ad3f86f5c8fd9d51246d97a1587e25e5e1a5d9","user":{"login":"toji","id":805273,"node_id":"MDQ6VXNlcjgwNTI3Mw==","avatar_url":"https://avatars2.githubusercontent.com/u/805273?v=4","gravatar_id":"","url":"https://api.github.com/users/toji","html_url":"https://github.com/toji","followers_url":"https://api.github.com/users/toji/followers","following_url":"https://api.github.com/users/toji/following{/other_user}","gists_url":"https://api.github.com/users/toji/gists{/gist_id}","starred_url":"https://api.github.com/users/toji/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/toji/subscriptions","organizations_url":"https://api.github.com/users/toji/orgs","repos_url":"https://api.github.com/users/toji/repos","events_url":"https://api.github.com/users/toji/events{/privacy}","received_events_url":"https://api.github.com/users/toji/received_events","type":"User","site_admin":false},"body":"Good catch, though I wonder if that's a bit of developer ergonomics that we should add? If we allow the first `XRSpace` argument of `getPose()` to be nullable if could potentially cut down on some redundant checks? Specifically, since `getPose()` can return `null`, we could simply have it do the error check for you and return `null` immediately if null is passed to allow a level of if statements to be stripped away. You'd see some code that could go from:\r\n\r\n```js\r\nif (inputSource.gripSpace) {\r\n  let gripPose = xrFrame.getPose(inputSource.gripSpace, xrFrameOfRef);\r\n  if (gripPose) {\r\n    /* Do a thing. */\r\n  }\r\n}\r\n```\r\nto simply\r\n```js\r\nlet gripPose = xrFrame.getPose(inputSource.gripSpace, xrFrameOfRef);\r\nif (gripPose) {\r\n  /* Do a thing. */\r\n}\r\n```\r\n\r\nThere's gonna be *some* cost to making the native call, though, so the most performance sensitive apps would still want to do a separate check. Hm...","created_at":"2019-01-03T21:45:39Z","updated_at":"2019-01-03T21:45:40Z","html_url":"https://github.com/immersive-web/editor-collab/pull/9#discussion_r245143144","pull_request_url":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/immersive-web/editor-collab/pulls/comments/245143144"},"html":{"href":"https://github.com/immersive-web/editor-collab/pull/9#discussion_r245143144"},"pull_request":{"href":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9"}},"in_reply_to_id":244866860},"pull_request":{"url":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9","id":227746424,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI3NzQ2NDI0","html_url":"https://github.com/immersive-web/editor-collab/pull/9","diff_url":"https://github.com/immersive-web/editor-collab/pull/9.diff","patch_url":"https://github.com/immersive-web/editor-collab/pull/9.patch","issue_url":"https://api.github.com/repos/immersive-web/editor-collab/issues/9","number":9,"state":"open","locked":false,"title":"More generic use of Coordinate Systems","user":{"login":"toji","id":805273,"node_id":"MDQ6VXNlcjgwNTI3Mw==","avatar_url":"https://avatars2.githubusercontent.com/u/805273?v=4","gravatar_id":"","url":"https://api.github.com/users/toji","html_url":"https://github.com/toji","followers_url":"https://api.github.com/users/toji/followers","following_url":"https://api.github.com/users/toji/following{/other_user}","gists_url":"https://api.github.com/users/toji/gists{/gist_id}","starred_url":"https://api.github.com/users/toji/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/toji/subscriptions","organizations_url":"https://api.github.com/users/toji/orgs","repos_url":"https://api.github.com/users/toji/repos","events_url":"https://api.github.com/users/toji/events{/privacy}","received_events_url":"https://api.github.com/users/toji/received_events","type":"User","site_admin":false},"body":"A few different things have gotten my thinking about how to make the concept of \"tracking stuff\" in WebXR more generic/extensible. Some examples:\r\n\r\n- Verbiage weirdness when talking about querying viewers/views\r\n- The conversation about the body locked frame of reference and how it felt like an unfortunate one-off\r\n- Reviewing some input concepts\r\n- Thinking about Anchors\r\n- Thinking about Hit testing reticles\r\n- Name bikeshedding\r\n- Not wanting to have the number of ways we exposed tracked objects explode (because it IS a core part of the API)\r\n- How we integrate better with various native libraries\r\n\r\nSo the idea that came out of all of that that I wanted to feel out is simply pushing `XRCoordinateSystem` to a more visible, central place in the API (which probably further justifies the spatial systems bikeshedding, FWIW). Basically making it so that ANYTHING that is tracked spatially is represented as a coordinate system and all of them use a single function to get it's spatial state. (Querying the views array is still a special case because it needs to be.) Some highlights:\r\n\r\n - XRFrame is two functions: `getViewer()` for the views array and `getPose()` for all coordinate systems.\r\n - Input devices are represented as two coordinate systems: target and grip.\r\n - The grip coordinate system being nullable nicely allows us to communicate \"I don't have a grip pose\" vs \"I don't have a grip pose _right now_\"\r\n - You can construct an `XRRay` from any `XRPose`. Useful for things like forcing gaze cursors in all cases.\r\n\r\nThis WIP patch is more focused on IDL and sample code changes than explainer text changes at the moment, but I don't want to invest a lot of time into the text until I've sanity checked it with you. It builds off of a prior but not yet merged PR I've got up on the main repo because the changes it introduced nicely support this change.","created_at":"2018-11-01T20:19:25Z","updated_at":"2019-01-03T21:45:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f7cd32a1bdce5905debbc49292333e94deb202d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9/commits","review_comments_url":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9/comments","review_comment_url":"https://api.github.com/repos/immersive-web/editor-collab/pulls/comments{/number}","comments_url":"https://api.github.com/repos/immersive-web/editor-collab/issues/9/comments","statuses_url":"https://api.github.com/repos/immersive-web/editor-collab/statuses/f3ad3f86f5c8fd9d51246d97a1587e25e5e1a5d9","head":{"label":"immersive-web:trackables","ref":"trackables","sha":"f3ad3f86f5c8fd9d51246d97a1587e25e5e1a5d9","user":{"login":"immersive-web","id":34385910,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0Mzg1OTEw","avatar_url":"https://avatars3.githubusercontent.com/u/34385910?v=4","gravatar_id":"","url":"https://api.github.com/users/immersive-web","html_url":"https://github.com/immersive-web","followers_url":"https://api.github.com/users/immersive-web/followers","following_url":"https://api.github.com/users/immersive-web/following{/other_user}","gists_url":"https://api.github.com/users/immersive-web/gists{/gist_id}","starred_url":"https://api.github.com/users/immersive-web/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/immersive-web/subscriptions","organizations_url":"https://api.github.com/users/immersive-web/orgs","repos_url":"https://api.github.com/users/immersive-web/repos","events_url":"https://api.github.com/users/immersive-web/events{/privacy}","received_events_url":"https://api.github.com/users/immersive-web/received_events","type":"Organization","site_admin":false},"repo":{"id":149317405,"node_id":"MDEwOlJlcG9zaXRvcnkxNDkzMTc0MDU=","name":"editor-collab","full_name":"immersive-web/editor-collab","private":false,"owner":{"login":"immersive-web","id":34385910,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0Mzg1OTEw","avatar_url":"https://avatars3.githubusercontent.com/u/34385910?v=4","gravatar_id":"","url":"https://api.github.com/users/immersive-web","html_url":"https://github.com/immersive-web","followers_url":"https://api.github.com/users/immersive-web/followers","following_url":"https://api.github.com/users/immersive-web/following{/other_user}","gists_url":"https://api.github.com/users/immersive-web/gists{/gist_id}","starred_url":"https://api.github.com/users/immersive-web/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/immersive-web/subscriptions","organizations_url":"https://api.github.com/users/immersive-web/orgs","repos_url":"https://api.github.com/users/immersive-web/repos","events_url":"https://api.github.com/users/immersive-web/events{/privacy}","received_events_url":"https://api.github.com/users/immersive-web/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/immersive-web/editor-collab","description":"Scratchpad for WebXR spec editor collaboration. Contents of this repo are not to be taken as spec proposals.","fork":false,"url":"https://api.github.com/repos/immersive-web/editor-collab","forks_url":"https://api.github.com/repos/immersive-web/editor-collab/forks","keys_url":"https://api.github.com/repos/immersive-web/editor-collab/keys{/key_id}","collaborators_url":"https://api.github.com/repos/immersive-web/editor-collab/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/immersive-web/editor-collab/teams","hooks_url":"https://api.github.com/repos/immersive-web/editor-collab/hooks","issue_events_url":"https://api.github.com/repos/immersive-web/editor-collab/issues/events{/number}","events_url":"https://api.github.com/repos/immersive-web/editor-collab/events","assignees_url":"https://api.github.com/repos/immersive-web/editor-collab/assignees{/user}","branches_url":"https://api.github.com/repos/immersive-web/editor-collab/branches{/branch}","tags_url":"https://api.github.com/repos/immersive-web/editor-collab/tags","blobs_url":"https://api.github.com/repos/immersive-web/editor-collab/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/immersive-web/editor-collab/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/immersive-web/editor-collab/git/refs{/sha}","trees_url":"https://api.github.com/repos/immersive-web/editor-collab/git/trees{/sha}","statuses_url":"https://api.github.com/repos/immersive-web/editor-collab/statuses/{sha}","languages_url":"https://api.github.com/repos/immersive-web/editor-collab/languages","stargazers_url":"https://api.github.com/repos/immersive-web/editor-collab/stargazers","contributors_url":"https://api.github.com/repos/immersive-web/editor-collab/contributors","subscribers_url":"https://api.github.com/repos/immersive-web/editor-collab/subscribers","subscription_url":"https://api.github.com/repos/immersive-web/editor-collab/subscription","commits_url":"https://api.github.com/repos/immersive-web/editor-collab/commits{/sha}","git_commits_url":"https://api.github.com/repos/immersive-web/editor-collab/git/commits{/sha}","comments_url":"https://api.github.com/repos/immersive-web/editor-collab/comments{/number}","issue_comment_url":"https://api.github.com/repos/immersive-web/editor-collab/issues/comments{/number}","contents_url":"https://api.github.com/repos/immersive-web/editor-collab/contents/{+path}","compare_url":"https://api.github.com/repos/immersive-web/editor-collab/compare/{base}...{head}","merges_url":"https://api.github.com/repos/immersive-web/editor-collab/merges","archive_url":"https://api.github.com/repos/immersive-web/editor-collab/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/immersive-web/editor-collab/downloads","issues_url":"https://api.github.com/repos/immersive-web/editor-collab/issues{/number}","pulls_url":"https://api.github.com/repos/immersive-web/editor-collab/pulls{/number}","milestones_url":"https://api.github.com/repos/immersive-web/editor-collab/milestones{/number}","notifications_url":"https://api.github.com/repos/immersive-web/editor-collab/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/immersive-web/editor-collab/labels{/name}","releases_url":"https://api.github.com/repos/immersive-web/editor-collab/releases{/id}","deployments_url":"https://api.github.com/repos/immersive-web/editor-collab/deployments","created_at":"2018-09-18T16:14:33Z","updated_at":"2018-12-22T06:09:35Z","pushed_at":"2019-01-03T20:15:37Z","git_url":"git://github.com/immersive-web/editor-collab.git","ssh_url":"git@github.com:immersive-web/editor-collab.git","clone_url":"https://github.com/immersive-web/editor-collab.git","svn_url":"https://github.com/immersive-web/editor-collab","homepage":null,"size":3521,"stargazers_count":7,"watchers_count":7,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":6,"watchers":7,"default_branch":"master"}},"base":{"label":"immersive-web:master","ref":"master","sha":"a5cb9d9d51aef0ac5f4dae52e1ff483cb9bc3e21","user":{"login":"immersive-web","id":34385910,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0Mzg1OTEw","avatar_url":"https://avatars3.githubusercontent.com/u/34385910?v=4","gravatar_id":"","url":"https://api.github.com/users/immersive-web","html_url":"https://github.com/immersive-web","followers_url":"https://api.github.com/users/immersive-web/followers","following_url":"https://api.github.com/users/immersive-web/following{/other_user}","gists_url":"https://api.github.com/users/immersive-web/gists{/gist_id}","starred_url":"https://api.github.com/users/immersive-web/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/immersive-web/subscriptions","organizations_url":"https://api.github.com/users/immersive-web/orgs","repos_url":"https://api.github.com/users/immersive-web/repos","events_url":"https://api.github.com/users/immersive-web/events{/privacy}","received_events_url":"https://api.github.com/users/immersive-web/received_events","type":"Organization","site_admin":false},"repo":{"id":149317405,"node_id":"MDEwOlJlcG9zaXRvcnkxNDkzMTc0MDU=","name":"editor-collab","full_name":"immersive-web/editor-collab","private":false,"owner":{"login":"immersive-web","id":34385910,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0Mzg1OTEw","avatar_url":"https://avatars3.githubusercontent.com/u/34385910?v=4","gravatar_id":"","url":"https://api.github.com/users/immersive-web","html_url":"https://github.com/immersive-web","followers_url":"https://api.github.com/users/immersive-web/followers","following_url":"https://api.github.com/users/immersive-web/following{/other_user}","gists_url":"https://api.github.com/users/immersive-web/gists{/gist_id}","starred_url":"https://api.github.com/users/immersive-web/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/immersive-web/subscriptions","organizations_url":"https://api.github.com/users/immersive-web/orgs","repos_url":"https://api.github.com/users/immersive-web/repos","events_url":"https://api.github.com/users/immersive-web/events{/privacy}","received_events_url":"https://api.github.com/users/immersive-web/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/immersive-web/editor-collab","description":"Scratchpad for WebXR spec editor collaboration. Contents of this repo are not to be taken as spec proposals.","fork":false,"url":"https://api.github.com/repos/immersive-web/editor-collab","forks_url":"https://api.github.com/repos/immersive-web/editor-collab/forks","keys_url":"https://api.github.com/repos/immersive-web/editor-collab/keys{/key_id}","collaborators_url":"https://api.github.com/repos/immersive-web/editor-collab/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/immersive-web/editor-collab/teams","hooks_url":"https://api.github.com/repos/immersive-web/editor-collab/hooks","issue_events_url":"https://api.github.com/repos/immersive-web/editor-collab/issues/events{/number}","events_url":"https://api.github.com/repos/immersive-web/editor-collab/events","assignees_url":"https://api.github.com/repos/immersive-web/editor-collab/assignees{/user}","branches_url":"https://api.github.com/repos/immersive-web/editor-collab/branches{/branch}","tags_url":"https://api.github.com/repos/immersive-web/editor-collab/tags","blobs_url":"https://api.github.com/repos/immersive-web/editor-collab/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/immersive-web/editor-collab/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/immersive-web/editor-collab/git/refs{/sha}","trees_url":"https://api.github.com/repos/immersive-web/editor-collab/git/trees{/sha}","statuses_url":"https://api.github.com/repos/immersive-web/editor-collab/statuses/{sha}","languages_url":"https://api.github.com/repos/immersive-web/editor-collab/languages","stargazers_url":"https://api.github.com/repos/immersive-web/editor-collab/stargazers","contributors_url":"https://api.github.com/repos/immersive-web/editor-collab/contributors","subscribers_url":"https://api.github.com/repos/immersive-web/editor-collab/subscribers","subscription_url":"https://api.github.com/repos/immersive-web/editor-collab/subscription","commits_url":"https://api.github.com/repos/immersive-web/editor-collab/commits{/sha}","git_commits_url":"https://api.github.com/repos/immersive-web/editor-collab/git/commits{/sha}","comments_url":"https://api.github.com/repos/immersive-web/editor-collab/comments{/number}","issue_comment_url":"https://api.github.com/repos/immersive-web/editor-collab/issues/comments{/number}","contents_url":"https://api.github.com/repos/immersive-web/editor-collab/contents/{+path}","compare_url":"https://api.github.com/repos/immersive-web/editor-collab/compare/{base}...{head}","merges_url":"https://api.github.com/repos/immersive-web/editor-collab/merges","archive_url":"https://api.github.com/repos/immersive-web/editor-collab/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/immersive-web/editor-collab/downloads","issues_url":"https://api.github.com/repos/immersive-web/editor-collab/issues{/number}","pulls_url":"https://api.github.com/repos/immersive-web/editor-collab/pulls{/number}","milestones_url":"https://api.github.com/repos/immersive-web/editor-collab/milestones{/number}","notifications_url":"https://api.github.com/repos/immersive-web/editor-collab/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/immersive-web/editor-collab/labels{/name}","releases_url":"https://api.github.com/repos/immersive-web/editor-collab/releases{/id}","deployments_url":"https://api.github.com/repos/immersive-web/editor-collab/deployments","created_at":"2018-09-18T16:14:33Z","updated_at":"2018-12-22T06:09:35Z","pushed_at":"2019-01-03T20:15:37Z","git_url":"git://github.com/immersive-web/editor-collab.git","ssh_url":"git@github.com:immersive-web/editor-collab.git","clone_url":"https://github.com/immersive-web/editor-collab.git","svn_url":"https://github.com/immersive-web/editor-collab","homepage":null,"size":3521,"stargazers_count":7,"watchers_count":7,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":6,"watchers":7,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9"},"html":{"href":"https://github.com/immersive-web/editor-collab/pull/9"},"issue":{"href":"https://api.github.com/repos/immersive-web/editor-collab/issues/9"},"comments":{"href":"https://api.github.com/repos/immersive-web/editor-collab/issues/9/comments"},"review_comments":{"href":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9/comments"},"review_comment":{"href":"https://api.github.com/repos/immersive-web/editor-collab/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/immersive-web/editor-collab/pulls/9/commits"},"statuses":{"href":"https://api.github.com/repos/immersive-web/editor-collab/statuses/f3ad3f86f5c8fd9d51246d97a1587e25e5e1a5d9"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"toji"}}