{"action":"created","comment":{"url":"https://api.github.com/repos/xodio/xod-docs/pulls/comments/243805065","pull_request_review_id":187665949,"id":243805065,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MzgwNTA2NQ==","diff_hunk":"@@ -0,0 +1,330 @@\n+---\n+title: Testing Patches\n+version: 0.0.1\n+---\n+\n+# Testing Patches\n+\n+Writing tests for the code is a good practice in any programming language. It allows to write and debug code quickly with covering many possible cases ranging from the most common and ending with edge cases. Moreover, code covered by tests can be modified without worrying that broke something in other places where it used.\n+\n+Also, tests often serve as excellent documentation of what is expected at outputs with specific parameters at inputs.\n+\n+Testing nodes in XOD implemented as tabular tests (tabtests for short). That means a test suite looks like a table. The first row contains pin labels of a tested node. All the next rows are test cases, one row is the one test case and one [transaction](/docs/guide/execution-model/) of the XOD program. In columns, input values and expected outputs for corresponding pin labels.\n+\n+<div class=\"ui segment\">\n+<span class=\"ui ribbon label\">Input values and expected outputs</span>\n+Input values and expected outputs defined by tabtest literals, which generally is the same as literals in Inspector, but have some special literals.\n+See the full list of tabtest literals in the <a href=\"/docs/reference/tabtests/\">reference</a>.\n+</div>\n+\n+When you run tests, they either pass or fail with an error describing the difference between actual and expected outputs.\n+\n+However, there is one limitation, you cannot test nodes, that work with hardware modules.\n+\n+\n+## Testing nodes with primitive types\n+\n+Nodes with such primitive types as Strings, Numbers, Booleans are simplest to test. Let's imagine that there is no `xod/core/to-percent` node in the XOD standard library, and we implement it by ourselves.\n+\n+![to-percent patch contents](./to-percent.patch.png)\n+\n+It's a simple node that converts some number into a string with the concatenated percent character. However, what's in the output if it takes a `NaN` on the input, or `-Inf`?\n+\n+First of all, place the new marker node: `xod/patch-nodes/tabtest`.\n+\n+Now you can double-click on `tabtest` node, and an embedded tabtest editor opens up. It looks like a table, let's write test cases:\n+\n+<table class=\"ui table compact\">\n+  <thead>\n+    <tr>\n+      <th>NUM</th>\n+      <th>PERC</th>\n+    </tr>\n+  </thead>\n+  <tbody>\n+    <tr>\n+      <td>0</td>\n+      <td>\"0%\"</td>\n+    </tr>\n+    <tr>\n+      <td>1</td>\n+      <td>\"100%\"</td>\n+    </tr>\n+    <tr>\n+      <td>25.5</td>\n+      <td>\"2550%\"</td>\n+    </tr>\n+    <tr>\n+      <td colspan=\"2\">// Test rounding</td>\n+    </tr>\n+    <tr>\n+      <td>0.735</td>\n+      <td>\"74%\"</td>\n+    </tr>\n+    <tr>\n+      <td>0.734</td>\n+      <td>\"73%\"</td>\n+    </tr>\n+    <tr>\n+      <td colspan=\"2\">// Negative values</td>\n+    </tr>\n+    <tr>\n+      <td>-0.6</td>\n+      <td>\"-60%\"</td>\n+    </tr>\n+    <tr>\n+      <td colspan=\"2\">// Special values</td>\n+    </tr>\n+    <tr>\n+      <td>NaN</td>\n+      <td>\"NaN\"</td>\n+    </tr>\n+    <tr>\n+      <td>Inf</td>\n+      <td>\"Inf\"</td>\n+    </tr>\n+    <tr>\n+      <td>-Inf</td>\n+      <td>\"-Inf\"</td>\n+    </tr>\n+    <tr>\n+      <td>9999999999999</td>\n+      <td>\"OVF\"</td>\n+    </tr>\n+  </tbody>\n+</table>\n+\n+<div class=\"ui segment\">\n+<span class=\"ui ribbon label\">Note</span>\n+If you save the project as a multi-file project, you can find out `patch.test.tsv` file in the directory of your patch. So you can write it manually if you like. Pay attention that columns are separated by tabs (`\\t`).\n+</div>\n+\n+All right, we just wrote tests. It's time to run them.\n+\n+Press the \"Run tests\" button in the panel above and wait for a little. It can take some time because these tests are transpiling to the C++ code, then compile in the cloud and then it executes. You can watch for the progress in the Deployment pane below: you'll see a progress bar, and you can show a pane to see details.\n+\n+Tests failed! Let's inspect details in the \"Tests\" tab in deployment pane. Here is the lines that makes sense to us:\n+\n+```\n+    ./to-percent.catch.inl:36: FAILED:\n+      REQUIRE( probe_PERC.state.lastValue == xod::XStringCString(\"NaN\") )\n+    with expansion:\n+      \"NaN%\" == \"NaN\"\n+```\n+\n+It tells us that we get value `\"NaN%\"` in the output instead of expected `\"NaN\"`. We just caught a bug! Let's fix it and rerun tests:\n+\n+![Fixed to-percent patch contents](./to-percent-fixed.patch.png)\n+\n+Now you see a green notification message about passed tests.\n+\n+You just wrote tests, found a bug and fixed it. Congratulations!\n+\n+<div class=\"ui segment\">\n+<span class=\"ui ribbon label\">Note</span>\n+You can write tabtests for the nodes with C++ implementation in the same way, just place `xod/patch-nodes/tabtest` marker node and fulfill the table.\n+</div>\n+\n+\n+<a name=\"impureness\"></a>\n+## Impure tests for impure nodes\n+\n+We just tested the pure node. But how to deal with impure, like `xod/core/count`?\n+\n+![count patch contents](./count.patch.png)\n+\n+All right, we did not tighten the nuts so that we can test these nodes too, but we have to keep it in mind when we are writing tests for them. Each next test case did not reset the state of the previous test cases, so if you send pulse twice in the `INC` pin of the `count` node, it outputs `2` in the second case. If you want to start over — add a new test case and send `pulse` to the `RST` pin.\n+\n+<table class=\"ui table compact\">\n+  <thead>\n+    <tr>\n+      <th>STEP</th>\n+      <th>INC</th>\n+      <th>RST</th>\n+      <th>OUT</th>\n+    </tr>\n+  </thead>\n+  <tbody>\n+    <tr>\n+      <td>1</td>\n+      <td>no-pulse</td>\n+      <td>no-pulse</td>\n+      <td>0</td>\n+    </tr>\n+    <tr>\n+      <td>1</td>\n+      <td>pulse</td>\n+      <td>no-pulse</td>\n+      <td>1</td>\n+    </tr>\n+    <tr>\n+      <td>1</td>\n+      <td>pulse</td>\n+      <td>no-pulse</td>\n+      <td>2</td>\n+    </tr>\n+    <tr>\n+      <td>1</td>\n+      <td>no-pulse</td>\n+      <td>pulse</td>\n+      <td>0</td>\n+    </tr>\n+    <tr>\n+      <td colspan=\"4\">// And so on...</td>\n+    </tr>\n+  </tbody>\n+</table>\n+\n+<div class=\"ui segment\">\n+<span class=\"ui ribbon label\">Note</span>\n+Do not forget to test edge cases like pulses in both pulse pins `INC` and `RST`, inject `NaN` or `Inf` as steps in counter and so on. It helps to catch bugs, make the behavior of the node more obvious, and provide better documentation.\n+</div>\n+\n+\n+## Time flow\n+\n+Some impure nodes are dependent on a time flow, like `xod/core/fade` or `xod/core/delay` and etc. To test it we can mock the time.\n+\n+Just specify the column with unique magic name `__time(ms)` and specify the time in milliseconds in this column. It supports integers only. So you can travel through time and even go back in time.\n+\n+However, also you have to know two things:\n+\n+- Nodes that use `isTimedout` function inside or contains nodes like `xod/core/delay`, `xod/core/clock`, are marked as timed out only at the next millisecond. For example, if we set a delay for 500ms, it pulses `DONE` on the 501ms.\n+- When you do not use this special column, we automatically increment time flow in the tests by one millisecond before running each test case. It provides correct working of `defer` nodes inside. However, when you use `__time(ms)` column you have to update it manually. So if you want to test something with the same time at each row, you probably do not need this column at all.\n+\n+You can checkout tabtests in these nodes to understand how it looks and works: `xod/core/delay`, `xod/core/clock`, `xod/core/fade`, `xod/core/system-time`.\n+\n+<div class=\"ui segment\">\n+<span class=\"ui ribbon label\">Note</span>\n+We recommend placing `__time(ms)` column at first place to keep it clear and see what time is it. However, you can place it in any place of the table.\n+</div>\n+\n+\n+## Variadics, generics, custom types\n+\n+To test nodes with variadics, generics or custom types do the next:","path":"docs/guide/testing-patches/README.md","position":205,"original_position":205,"commit_id":"4b1e89da04e1f5f87b4296be784d94a28e5a1c17","original_commit_id":"4b1e89da04e1f5f87b4296be784d94a28e5a1c17","user":{"login":"nkrkv","id":146383,"node_id":"MDQ6VXNlcjE0NjM4Mw==","avatar_url":"https://avatars2.githubusercontent.com/u/146383?v=4","gravatar_id":"","url":"https://api.github.com/users/nkrkv","html_url":"https://github.com/nkrkv","followers_url":"https://api.github.com/users/nkrkv/followers","following_url":"https://api.github.com/users/nkrkv/following{/other_user}","gists_url":"https://api.github.com/users/nkrkv/gists{/gist_id}","starred_url":"https://api.github.com/users/nkrkv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nkrkv/subscriptions","organizations_url":"https://api.github.com/users/nkrkv/orgs","repos_url":"https://api.github.com/users/nkrkv/repos","events_url":"https://api.github.com/users/nkrkv/events{/privacy}","received_events_url":"https://api.github.com/users/nkrkv/received_events","type":"User","site_admin":false},"body":"```suggestion\r\nTo test nodes with variadics, generics or custom types do the following:\r\n```\r\n\r\nHyperlinks to variadics and generics would be nice","created_at":"2018-12-24T09:31:57Z","updated_at":"2018-12-24T09:39:33Z","html_url":"https://github.com/xodio/xod-docs/pull/106#discussion_r243805065","pull_request_url":"https://api.github.com/repos/xodio/xod-docs/pulls/106","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/xodio/xod-docs/pulls/comments/243805065"},"html":{"href":"https://github.com/xodio/xod-docs/pull/106#discussion_r243805065"},"pull_request":{"href":"https://api.github.com/repos/xodio/xod-docs/pulls/106"}}},"pull_request":{"url":"https://api.github.com/repos/xodio/xod-docs/pulls/106","id":240529155,"node_id":"MDExOlB1bGxSZXF1ZXN0MjQwNTI5MTU1","html_url":"https://github.com/xodio/xod-docs/pull/106","diff_url":"https://github.com/xodio/xod-docs/pull/106.diff","patch_url":"https://github.com/xodio/xod-docs/pull/106.patch","issue_url":"https://api.github.com/repos/xodio/xod-docs/issues/106","number":106,"state":"open","locked":false,"title":"Add documentation about tabtests","user":{"login":"brusherru","id":1897530,"node_id":"MDQ6VXNlcjE4OTc1MzA=","avatar_url":"https://avatars0.githubusercontent.com/u/1897530?v=4","gravatar_id":"","url":"https://api.github.com/users/brusherru","html_url":"https://github.com/brusherru","followers_url":"https://api.github.com/users/brusherru/followers","following_url":"https://api.github.com/users/brusherru/following{/other_user}","gists_url":"https://api.github.com/users/brusherru/gists{/gist_id}","starred_url":"https://api.github.com/users/brusherru/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brusherru/subscriptions","organizations_url":"https://api.github.com/users/brusherru/orgs","repos_url":"https://api.github.com/users/brusherru/repos","events_url":"https://api.github.com/users/brusherru/events{/privacy}","received_events_url":"https://api.github.com/users/brusherru/received_events","type":"User","site_admin":false},"body":"Added one guide and one reference.","created_at":"2018-12-21T17:07:37Z","updated_at":"2018-12-24T09:39:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"369833475a1093fa03a414058444268efcd10296","assignee":{"login":"brusherru","id":1897530,"node_id":"MDQ6VXNlcjE4OTc1MzA=","avatar_url":"https://avatars0.githubusercontent.com/u/1897530?v=4","gravatar_id":"","url":"https://api.github.com/users/brusherru","html_url":"https://github.com/brusherru","followers_url":"https://api.github.com/users/brusherru/followers","following_url":"https://api.github.com/users/brusherru/following{/other_user}","gists_url":"https://api.github.com/users/brusherru/gists{/gist_id}","starred_url":"https://api.github.com/users/brusherru/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brusherru/subscriptions","organizations_url":"https://api.github.com/users/brusherru/orgs","repos_url":"https://api.github.com/users/brusherru/repos","events_url":"https://api.github.com/users/brusherru/events{/privacy}","received_events_url":"https://api.github.com/users/brusherru/received_events","type":"User","site_admin":false},"assignees":[{"login":"brusherru","id":1897530,"node_id":"MDQ6VXNlcjE4OTc1MzA=","avatar_url":"https://avatars0.githubusercontent.com/u/1897530?v=4","gravatar_id":"","url":"https://api.github.com/users/brusherru","html_url":"https://github.com/brusherru","followers_url":"https://api.github.com/users/brusherru/followers","following_url":"https://api.github.com/users/brusherru/following{/other_user}","gists_url":"https://api.github.com/users/brusherru/gists{/gist_id}","starred_url":"https://api.github.com/users/brusherru/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brusherru/subscriptions","organizations_url":"https://api.github.com/users/brusherru/orgs","repos_url":"https://api.github.com/users/brusherru/repos","events_url":"https://api.github.com/users/brusherru/events{/privacy}","received_events_url":"https://api.github.com/users/brusherru/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"evgenykochetkov","id":2527093,"node_id":"MDQ6VXNlcjI1MjcwOTM=","avatar_url":"https://avatars1.githubusercontent.com/u/2527093?v=4","gravatar_id":"","url":"https://api.github.com/users/evgenykochetkov","html_url":"https://github.com/evgenykochetkov","followers_url":"https://api.github.com/users/evgenykochetkov/followers","following_url":"https://api.github.com/users/evgenykochetkov/following{/other_user}","gists_url":"https://api.github.com/users/evgenykochetkov/gists{/gist_id}","starred_url":"https://api.github.com/users/evgenykochetkov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evgenykochetkov/subscriptions","organizations_url":"https://api.github.com/users/evgenykochetkov/orgs","repos_url":"https://api.github.com/users/evgenykochetkov/repos","events_url":"https://api.github.com/users/evgenykochetkov/events{/privacy}","received_events_url":"https://api.github.com/users/evgenykochetkov/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/xodio/xod-docs/pulls/106/commits","review_comments_url":"https://api.github.com/repos/xodio/xod-docs/pulls/106/comments","review_comment_url":"https://api.github.com/repos/xodio/xod-docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/xodio/xod-docs/issues/106/comments","statuses_url":"https://api.github.com/repos/xodio/xod-docs/statuses/4b1e89da04e1f5f87b4296be784d94a28e5a1c17","head":{"label":"xodio:feat-tabtest-docs","ref":"feat-tabtest-docs","sha":"4b1e89da04e1f5f87b4296be784d94a28e5a1c17","user":{"login":"xodio","id":22938266,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyOTM4MjY2","avatar_url":"https://avatars0.githubusercontent.com/u/22938266?v=4","gravatar_id":"","url":"https://api.github.com/users/xodio","html_url":"https://github.com/xodio","followers_url":"https://api.github.com/users/xodio/followers","following_url":"https://api.github.com/users/xodio/following{/other_user}","gists_url":"https://api.github.com/users/xodio/gists{/gist_id}","starred_url":"https://api.github.com/users/xodio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xodio/subscriptions","organizations_url":"https://api.github.com/users/xodio/orgs","repos_url":"https://api.github.com/users/xodio/repos","events_url":"https://api.github.com/users/xodio/events{/privacy}","received_events_url":"https://api.github.com/users/xodio/received_events","type":"Organization","site_admin":false},"repo":{"id":141443841,"node_id":"MDEwOlJlcG9zaXRvcnkxNDE0NDM4NDE=","name":"xod-docs","full_name":"xodio/xod-docs","private":false,"owner":{"login":"xodio","id":22938266,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyOTM4MjY2","avatar_url":"https://avatars0.githubusercontent.com/u/22938266?v=4","gravatar_id":"","url":"https://api.github.com/users/xodio","html_url":"https://github.com/xodio","followers_url":"https://api.github.com/users/xodio/followers","following_url":"https://api.github.com/users/xodio/following{/other_user}","gists_url":"https://api.github.com/users/xodio/gists{/gist_id}","starred_url":"https://api.github.com/users/xodio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xodio/subscriptions","organizations_url":"https://api.github.com/users/xodio/orgs","repos_url":"https://api.github.com/users/xodio/repos","events_url":"https://api.github.com/users/xodio/events{/privacy}","received_events_url":"https://api.github.com/users/xodio/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/xodio/xod-docs","description":"XOD Documentation","fork":false,"url":"https://api.github.com/repos/xodio/xod-docs","forks_url":"https://api.github.com/repos/xodio/xod-docs/forks","keys_url":"https://api.github.com/repos/xodio/xod-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xodio/xod-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xodio/xod-docs/teams","hooks_url":"https://api.github.com/repos/xodio/xod-docs/hooks","issue_events_url":"https://api.github.com/repos/xodio/xod-docs/issues/events{/number}","events_url":"https://api.github.com/repos/xodio/xod-docs/events","assignees_url":"https://api.github.com/repos/xodio/xod-docs/assignees{/user}","branches_url":"https://api.github.com/repos/xodio/xod-docs/branches{/branch}","tags_url":"https://api.github.com/repos/xodio/xod-docs/tags","blobs_url":"https://api.github.com/repos/xodio/xod-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xodio/xod-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xodio/xod-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/xodio/xod-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xodio/xod-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/xodio/xod-docs/languages","stargazers_url":"https://api.github.com/repos/xodio/xod-docs/stargazers","contributors_url":"https://api.github.com/repos/xodio/xod-docs/contributors","subscribers_url":"https://api.github.com/repos/xodio/xod-docs/subscribers","subscription_url":"https://api.github.com/repos/xodio/xod-docs/subscription","commits_url":"https://api.github.com/repos/xodio/xod-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/xodio/xod-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/xodio/xod-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/xodio/xod-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/xodio/xod-docs/contents/{+path}","compare_url":"https://api.github.com/repos/xodio/xod-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xodio/xod-docs/merges","archive_url":"https://api.github.com/repos/xodio/xod-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xodio/xod-docs/downloads","issues_url":"https://api.github.com/repos/xodio/xod-docs/issues{/number}","pulls_url":"https://api.github.com/repos/xodio/xod-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/xodio/xod-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/xodio/xod-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xodio/xod-docs/labels{/name}","releases_url":"https://api.github.com/repos/xodio/xod-docs/releases{/id}","deployments_url":"https://api.github.com/repos/xodio/xod-docs/deployments","created_at":"2018-07-18T14:11:33Z","updated_at":"2018-12-21T11:54:38Z","pushed_at":"2018-12-21T17:11:57Z","git_url":"git://github.com/xodio/xod-docs.git","ssh_url":"git@github.com:xodio/xod-docs.git","clone_url":"https://github.com/xodio/xod-docs.git","svn_url":"https://github.com/xodio/xod-docs","homepage":null,"size":41588,"stargazers_count":4,"watchers_count":4,"language":null,"has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":21,"mirror_url":null,"archived":false,"open_issues_count":14,"license":{"key":"cc-by-sa-4.0","name":"Creative Commons Attribution Share Alike 4.0 International","spdx_id":"CC-BY-SA-4.0","url":"https://api.github.com/licenses/cc-by-sa-4.0","node_id":"MDc6TGljZW5zZTI2"},"forks":21,"open_issues":14,"watchers":4,"default_branch":"master"}},"base":{"label":"xodio:next","ref":"next","sha":"95035d6fbd8d3d19a257b9b223bf20212ea19756","user":{"login":"xodio","id":22938266,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyOTM4MjY2","avatar_url":"https://avatars0.githubusercontent.com/u/22938266?v=4","gravatar_id":"","url":"https://api.github.com/users/xodio","html_url":"https://github.com/xodio","followers_url":"https://api.github.com/users/xodio/followers","following_url":"https://api.github.com/users/xodio/following{/other_user}","gists_url":"https://api.github.com/users/xodio/gists{/gist_id}","starred_url":"https://api.github.com/users/xodio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xodio/subscriptions","organizations_url":"https://api.github.com/users/xodio/orgs","repos_url":"https://api.github.com/users/xodio/repos","events_url":"https://api.github.com/users/xodio/events{/privacy}","received_events_url":"https://api.github.com/users/xodio/received_events","type":"Organization","site_admin":false},"repo":{"id":141443841,"node_id":"MDEwOlJlcG9zaXRvcnkxNDE0NDM4NDE=","name":"xod-docs","full_name":"xodio/xod-docs","private":false,"owner":{"login":"xodio","id":22938266,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyOTM4MjY2","avatar_url":"https://avatars0.githubusercontent.com/u/22938266?v=4","gravatar_id":"","url":"https://api.github.com/users/xodio","html_url":"https://github.com/xodio","followers_url":"https://api.github.com/users/xodio/followers","following_url":"https://api.github.com/users/xodio/following{/other_user}","gists_url":"https://api.github.com/users/xodio/gists{/gist_id}","starred_url":"https://api.github.com/users/xodio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xodio/subscriptions","organizations_url":"https://api.github.com/users/xodio/orgs","repos_url":"https://api.github.com/users/xodio/repos","events_url":"https://api.github.com/users/xodio/events{/privacy}","received_events_url":"https://api.github.com/users/xodio/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/xodio/xod-docs","description":"XOD Documentation","fork":false,"url":"https://api.github.com/repos/xodio/xod-docs","forks_url":"https://api.github.com/repos/xodio/xod-docs/forks","keys_url":"https://api.github.com/repos/xodio/xod-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xodio/xod-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xodio/xod-docs/teams","hooks_url":"https://api.github.com/repos/xodio/xod-docs/hooks","issue_events_url":"https://api.github.com/repos/xodio/xod-docs/issues/events{/number}","events_url":"https://api.github.com/repos/xodio/xod-docs/events","assignees_url":"https://api.github.com/repos/xodio/xod-docs/assignees{/user}","branches_url":"https://api.github.com/repos/xodio/xod-docs/branches{/branch}","tags_url":"https://api.github.com/repos/xodio/xod-docs/tags","blobs_url":"https://api.github.com/repos/xodio/xod-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xodio/xod-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xodio/xod-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/xodio/xod-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xodio/xod-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/xodio/xod-docs/languages","stargazers_url":"https://api.github.com/repos/xodio/xod-docs/stargazers","contributors_url":"https://api.github.com/repos/xodio/xod-docs/contributors","subscribers_url":"https://api.github.com/repos/xodio/xod-docs/subscribers","subscription_url":"https://api.github.com/repos/xodio/xod-docs/subscription","commits_url":"https://api.github.com/repos/xodio/xod-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/xodio/xod-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/xodio/xod-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/xodio/xod-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/xodio/xod-docs/contents/{+path}","compare_url":"https://api.github.com/repos/xodio/xod-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xodio/xod-docs/merges","archive_url":"https://api.github.com/repos/xodio/xod-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xodio/xod-docs/downloads","issues_url":"https://api.github.com/repos/xodio/xod-docs/issues{/number}","pulls_url":"https://api.github.com/repos/xodio/xod-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/xodio/xod-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/xodio/xod-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xodio/xod-docs/labels{/name}","releases_url":"https://api.github.com/repos/xodio/xod-docs/releases{/id}","deployments_url":"https://api.github.com/repos/xodio/xod-docs/deployments","created_at":"2018-07-18T14:11:33Z","updated_at":"2018-12-21T11:54:38Z","pushed_at":"2018-12-21T17:11:57Z","git_url":"git://github.com/xodio/xod-docs.git","ssh_url":"git@github.com:xodio/xod-docs.git","clone_url":"https://github.com/xodio/xod-docs.git","svn_url":"https://github.com/xodio/xod-docs","homepage":null,"size":41588,"stargazers_count":4,"watchers_count":4,"language":null,"has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":21,"mirror_url":null,"archived":false,"open_issues_count":14,"license":{"key":"cc-by-sa-4.0","name":"Creative Commons Attribution Share Alike 4.0 International","spdx_id":"CC-BY-SA-4.0","url":"https://api.github.com/licenses/cc-by-sa-4.0","node_id":"MDc6TGljZW5zZTI2"},"forks":21,"open_issues":14,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/xodio/xod-docs/pulls/106"},"html":{"href":"https://github.com/xodio/xod-docs/pull/106"},"issue":{"href":"https://api.github.com/repos/xodio/xod-docs/issues/106"},"comments":{"href":"https://api.github.com/repos/xodio/xod-docs/issues/106/comments"},"review_comments":{"href":"https://api.github.com/repos/xodio/xod-docs/pulls/106/comments"},"review_comment":{"href":"https://api.github.com/repos/xodio/xod-docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/xodio/xod-docs/pulls/106/commits"},"statuses":{"href":"https://api.github.com/repos/xodio/xod-docs/statuses/4b1e89da04e1f5f87b4296be784d94a28e5a1c17"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"nkrkv"}}