{"action":"created","comment":{"url":"https://api.github.com/repos/emberjs/rfcs/pulls/comments/38720183","id":38720183,"diff_hunk":"@@ -0,0 +1,411 @@\n+- Start Date: 2014-10-24\n+- RFC PR:\n+- Ember Issue:\n+\n+# Summary\n+\n+Engines allow multiple logical applications to be composed together into a\n+single application from the user's perspective.\n+\n+# Motivation\n+\n+Large companies are increasingly adopting Ember.js to power their entire\n+product lines. Often this means separate teams (sometimes distributed\n+around the world) working on the same app. Typically, responsibility is\n+shared by dividing the application into one or more \"sections\". How this\n+division is actually implemented varies from team to team.\n+\n+Sometimes, each \"section\" will be a completely separate Ember app, with\n+a shared navigation bar allowing users to switch between each app. This\n+allows teams to work quickly without stepping on each others' toes, but\n+switching apps feels slow (especially compared to the normally speedy\n+route transitions in Ember) because the entire page must be thrown out,\n+then an entirely new set of the same assets downloaded and parsed.\n+Additionally, code sharing is largely accomplished via copy-and-paste.\n+\n+Other times, the separation is enforced socially, with each team\n+claiming a section of the same app in the same repository.\n+Unfortunately, this approach leads to frequent conflicts around shared\n+resources, and feedback from tests gets slower and slower as test suites\n+grow in size.\n+\n+A more modular approach is to break off elements of a single application into\n+separate [addons](http://www.ember-cli.com/user-guide/#addons). Addons are\n+essentially mixins for [ember-cli](http://www.ember-cli.com/) applications. In\n+other words, the elements of an addon are merged with those of the application\n+that includes them. While addons allow for distributed development, testing, and\n+packaging, they do not provide the logical run-time separation required for\n+developing completely independent \"sections\" of an application. Addons must\n+function within the namespace, registry, and router of the application in which\n+they are included.\n+\n+Engines provide an alternative to these approaches that allows for distributed\n+development, testing, and packaging, _as well as_ logical run-time separation.\n+Because engines are derived from applications, they can be just as\n+full-featured. Each has its own namespace and registry. Even though engines are\n+isolated from the applications that contain them, the boundaries between them\n+allow for controlled sharing of resources.\n+\n+Engines can be either \"routable\" or \"route-less\":\n+\n+* Routable engines provide a routing map which can be integrated with the\n+  routing maps of parent applications or engines. Routing maps are alway eager\n+  loaded, which allows for deep linking into an engine's routes regardless of\n+  whether the engine itself has been instantiated.\n+\n+* Route-less engines can isolate complex functionality that is not related to\n+  routing (e.g. a chat engine in a sidebar). Route-less engines can be rendered\n+  into outlets ad hoc as routes are loaded.\n+\n+The potential scope of engines is large enough that this feature merits\n+development and delivery in multiple phases. A minimum viable version could be\n+released sooner, which could be augmented with more advanced features later.\n+\n+An initial release of engines could provide the following benefits:\n+\n+* Distributed development - Engines can be developed and tested in isolation\n+  within their own Ember CLI projects and included by applications or other\n+  engines. Engines can be packaged and released as addons themselves.\n+\n+* Integrated routing - Support for mounting routable engines in the routing maps\n+  of applications or other engines.\n+\n+* Ad hoc embedding - Support for embedding route-less engines in outlets as\n+  needed.\n+\n+* Clean boundaries - An engine can cooperate with its parents through a few\n+  explicit interfaces. Beyond these interfaces, engines and applications are\n+  isolated.\n+\n+Subsequent releases of engines could allow for the following:\n+\n+* Lazy loading - An engine could allow its parent to boot with only its routing\n+  map loaded. The rest of the engine could be loaded only as required (i.e.\n+  when a route in an engine is visited). This would allow applications to boot\n+  faster and limit their memory consumption.\n+\n+* Namespaced access to engine resources from applications - This could open up\n+  the potential for applications to use, and extend, an engine's resources much\n+  like resources in other addons, but without the possibility of namespace\n+  collisions.\n+\n+## Detailed design\n+\n+Engines are very similar to regular applications: they can be developed in\n+isolation in Ember CLI, include addons, and contain all the same elements,\n+including routes, components, initializers, etc. The primary differences are\n+that an engine does not boot itself and an engine does not control the router.\n+\n+### Engine internals\n+\n+New `Engine` and `EngineInstance` classes will be introduced.\n+\n+Applications and engines will share ancestry. It remains TBD whether\n+applications will subclass engines, or whether a common ancestor will be\n+introduced.\n+\n+Engines and applications will share the same pattern for registry / container\n+ownership and encapsulation. Both will also have initializers and instance\n+initializers.\n+\n+Engine instances will have access to their parent instances. An engine's parent\n+could be either an application or engine.\n+\n+#### Routable vs. route-less engines\n+\n+Routable engines will define their routes in a new `Ember.Routes` class. This\n+class will encapsulate the functionality provided by `Router#map`, and will be\n+used internally by `Ember.Router` as well (with no public interface changes of\n+course).\n+\n+Route-less engines do not define routing maps nor can they contain routes.\n+\n+### Developing engines\n+\n+Engines can be developed in isolation as Ember CLI addon projects or as part of\n+a parent application.\n+\n+#### Engines as addons\n+\n+Engines can be created as separate addon projects with:\n+\n+```\n+ember engine <engine-name>\n+```\n+\n+This will create a special form of an ember addon. The file structure will match\n+that of a standard addon, but will have an `engine` directory instead of an\n+`addon` directory.\n+\n+Engines can be unit tested and can also be integration tested within a dummy\n+app, just like standard addons.\n+\n+#### In-repo engines\n+\n+An engine can be created within an existing application's project using a\n+special `in-repo-engine` generator (similar to the `in-repo-addon` generator):\n+\n+```\n+ember g in-repo-engine <engine-name>\n+```\n+\n+In-repo engines can be unit tested in isolation or integration testing with the\n+main application (instead of a dummy application).\n+\n+> Note: In-repo addons currently are created in the `/lib` directory (e.g.\n+`/lib/my-addon`). Unit tests and integration tests are currently co-mingled with\n+tests for the main application. It's recommended that in-repo engines provide\n+better test separation than is provided for regular addons, and perhaps the\n+whole in-repo addon directory structure should be re-examined at the same time\n+in-repo engines are introduced.\n+\n+#### Engine directory structure\n+\n+An engine's directory will contain a file structure identical to the `app`\n+directory in a standard ember-cli application, with the following exceptions:\n+\n+* `engine.js` instead of `app.js` - defines the `Engine` class and\n+  loads its initializers.\n+\n+* `routes.js` instead of `router.js` - defines an engine's routing map in a\n+  `Routes` class. This file should be deleted entirely for route-less engines.\n+\n+### Installing engines\n+\n+Engines developed as addons can be installed in an application just like any\n+other addon:\n+\n+```\n+ember install <engine-name>\n+```\n+\n+During development, you can use `npm link` to make your engine available in\n+another parent engine or application.\n+\n+### Mounting routable engines\n+\n+The new `mount()` router DSL method is used to mount an engine at a particular\n+\"mount-point\" in a route map.\n+\n+For example, the following route map mounts the `discourse` engine at the\n+`/forum` path:\n+\n+```\n+Router.map(function() {\n+  this.mount('discourse', {path: '/forum'});\n+});\n+```\n+\n+> Note: If unspecified, `path` will match the name of the engine.\n+\n+Calls to `mount` can be nested within routes. An engine can be mounted at\n+multiple routes, and each will represent a new instance of the engine to be\n+created.\n+\n+### Mounting route-less engines\n+\n+A `mount()` DSL will also be added to routes, which will enable embedding of\n+route-less engines in outlets. This can be called from `renderTemplate` (or\n+`renderComponents` once routable components are introduced).\n+\n+`mount` has a similar signature to `render`, although it is obviously\n+engine-specific instead of template-specific. `mount` can be used to specify\n+a target template and outlet as follows:\n+\n+```\n+renderTemplate: function() {\n+  // Mount the chat engine in the sidebar\n+  this.mount('chat', {\n+    into: 'main',\n+    outlet: 'sidebar'\n+  });\n+}\n+```\n+\n+As a result, the engine's `application` template will be rendered into the\n+`sidebar` outlet in the application's `main` template.\n+\n+### Loading phases\n+\n+Engines can exist in several phases:\n+\n+* Booted - an engine that's been installed in a parent application will have\n+  its dependencies loaded and its (non-instance) initializers invoked when the\n+  parent application boots.\n+\n+* Mounted - Routable and route-less engines have slightly different concepts of\n+  \"mounting\". A routable engine is considered mounted when it has been included\n+  by a router at one or more mount-points. A route-less engine is considered\n+  mounted as soon as a route's `mount` call resolves.\n+\n+* Instantiated - When an engine is instantiated, an `EngineInstance` is created\n+  and an engine's instance initializers are invoked. A routable engine is\n+  instantiated when a route is visited at or beyond its mount-point. A\n+  route-less engine is instantiated as soon as it is mounted.\n+\n+Special `before` and `after` hooks could be added to application instance\n+initializers that allow them to be ordered relative to engine instance\n+initializers.\n+\n+### Engine boundaries\n+\n+Besides its routing map, an engine does not share any other resources with its\n+parent by default. Engines maintain their own registries and containers, which\n+ensure that they stay isolated. However, some explicit sharing of resources\n+between engines and parents is allowed.","path":"active/0000-engines.md","position":255,"original_position":255,"commit_id":"dce7c0649cb69e4686db0c285bde770d1a16bbc7","original_commit_id":"dce7c0649cb69e4686db0c285bde770d1a16bbc7","user":{"login":"stefanpenner","id":1377,"avatar_url":"https://avatars.githubusercontent.com/u/1377?v=3","gravatar_id":"","url":"https://api.github.com/users/stefanpenner","html_url":"https://github.com/stefanpenner","followers_url":"https://api.github.com/users/stefanpenner/followers","following_url":"https://api.github.com/users/stefanpenner/following{/other_user}","gists_url":"https://api.github.com/users/stefanpenner/gists{/gist_id}","starred_url":"https://api.github.com/users/stefanpenner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefanpenner/subscriptions","organizations_url":"https://api.github.com/users/stefanpenner/orgs","repos_url":"https://api.github.com/users/stefanpenner/repos","events_url":"https://api.github.com/users/stefanpenner/events{/privacy}","received_events_url":"https://api.github.com/users/stefanpenner/received_events","type":"User","site_admin":false},"body":"we should find some time soon (lets set a meeting next week if that works)","created_at":"2015-09-04T04:05:46Z","updated_at":"2015-09-04T04:05:46Z","html_url":"https://github.com/emberjs/rfcs/pull/10#discussion_r38720183","pull_request_url":"https://api.github.com/repos/emberjs/rfcs/pulls/10","_links":{"self":{"href":"https://api.github.com/repos/emberjs/rfcs/pulls/comments/38720183"},"html":{"href":"https://github.com/emberjs/rfcs/pull/10#discussion_r38720183"},"pull_request":{"href":"https://api.github.com/repos/emberjs/rfcs/pulls/10"}}},"pull_request":{"url":"https://api.github.com/repos/emberjs/rfcs/pulls/10","id":23332786,"html_url":"https://github.com/emberjs/rfcs/pull/10","diff_url":"https://github.com/emberjs/rfcs/pull/10.diff","patch_url":"https://github.com/emberjs/rfcs/pull/10.patch","issue_url":"https://api.github.com/repos/emberjs/rfcs/issues/10","number":10,"state":"open","locked":false,"title":"RFC: Engines","user":{"login":"tomdale","id":90888,"avatar_url":"https://avatars.githubusercontent.com/u/90888?v=3","gravatar_id":"","url":"https://api.github.com/users/tomdale","html_url":"https://github.com/tomdale","followers_url":"https://api.github.com/users/tomdale/followers","following_url":"https://api.github.com/users/tomdale/following{/other_user}","gists_url":"https://api.github.com/users/tomdale/gists{/gist_id}","starred_url":"https://api.github.com/users/tomdale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomdale/subscriptions","organizations_url":"https://api.github.com/users/tomdale/orgs","repos_url":"https://api.github.com/users/tomdale/repos","events_url":"https://api.github.com/users/tomdale/events{/privacy}","received_events_url":"https://api.github.com/users/tomdale/received_events","type":"User","site_admin":false},"body":"[RFC](https://github.com/tomdale/rfcs/blob/master/active/0000-engines.md)","created_at":"2014-10-25T00:32:05Z","updated_at":"2015-09-04T04:05:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fccc03375649e13bc5f439c41fa71eebb766365b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/emberjs/rfcs/pulls/10/commits","review_comments_url":"https://api.github.com/repos/emberjs/rfcs/pulls/10/comments","review_comment_url":"https://api.github.com/repos/emberjs/rfcs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/emberjs/rfcs/issues/10/comments","statuses_url":"https://api.github.com/repos/emberjs/rfcs/statuses/dce7c0649cb69e4686db0c285bde770d1a16bbc7","head":{"label":"tomdale:master","ref":"master","sha":"dce7c0649cb69e4686db0c285bde770d1a16bbc7","user":{"login":"tomdale","id":90888,"avatar_url":"https://avatars.githubusercontent.com/u/90888?v=3","gravatar_id":"","url":"https://api.github.com/users/tomdale","html_url":"https://github.com/tomdale","followers_url":"https://api.github.com/users/tomdale/followers","following_url":"https://api.github.com/users/tomdale/following{/other_user}","gists_url":"https://api.github.com/users/tomdale/gists{/gist_id}","starred_url":"https://api.github.com/users/tomdale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomdale/subscriptions","organizations_url":"https://api.github.com/users/tomdale/orgs","repos_url":"https://api.github.com/users/tomdale/repos","events_url":"https://api.github.com/users/tomdale/events{/privacy}","received_events_url":"https://api.github.com/users/tomdale/received_events","type":"User","site_admin":false},"repo":{"id":25714304,"name":"rfcs","full_name":"tomdale/rfcs","owner":{"login":"tomdale","id":90888,"avatar_url":"https://avatars.githubusercontent.com/u/90888?v=3","gravatar_id":"","url":"https://api.github.com/users/tomdale","html_url":"https://github.com/tomdale","followers_url":"https://api.github.com/users/tomdale/followers","following_url":"https://api.github.com/users/tomdale/following{/other_user}","gists_url":"https://api.github.com/users/tomdale/gists{/gist_id}","starred_url":"https://api.github.com/users/tomdale/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomdale/subscriptions","organizations_url":"https://api.github.com/users/tomdale/orgs","repos_url":"https://api.github.com/users/tomdale/repos","events_url":"https://api.github.com/users/tomdale/events{/privacy}","received_events_url":"https://api.github.com/users/tomdale/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tomdale/rfcs","description":"RFCs for changes to Ember","fork":true,"url":"https://api.github.com/repos/tomdale/rfcs","forks_url":"https://api.github.com/repos/tomdale/rfcs/forks","keys_url":"https://api.github.com/repos/tomdale/rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tomdale/rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tomdale/rfcs/teams","hooks_url":"https://api.github.com/repos/tomdale/rfcs/hooks","issue_events_url":"https://api.github.com/repos/tomdale/rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/tomdale/rfcs/events","assignees_url":"https://api.github.com/repos/tomdale/rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/tomdale/rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/tomdale/rfcs/tags","blobs_url":"https://api.github.com/repos/tomdale/rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tomdale/rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tomdale/rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/tomdale/rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tomdale/rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/tomdale/rfcs/languages","stargazers_url":"https://api.github.com/repos/tomdale/rfcs/stargazers","contributors_url":"https://api.github.com/repos/tomdale/rfcs/contributors","subscribers_url":"https://api.github.com/repos/tomdale/rfcs/subscribers","subscription_url":"https://api.github.com/repos/tomdale/rfcs/subscription","commits_url":"https://api.github.com/repos/tomdale/rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/tomdale/rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/tomdale/rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/tomdale/rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/tomdale/rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/tomdale/rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tomdale/rfcs/merges","archive_url":"https://api.github.com/repos/tomdale/rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tomdale/rfcs/downloads","issues_url":"https://api.github.com/repos/tomdale/rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/tomdale/rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/tomdale/rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/tomdale/rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tomdale/rfcs/labels{/name}","releases_url":"https://api.github.com/repos/tomdale/rfcs/releases{/id}","created_at":"2014-10-25T00:27:31Z","updated_at":"2015-08-26T00:21:16Z","pushed_at":"2015-09-03T13:57:37Z","git_url":"git://github.com/tomdale/rfcs.git","ssh_url":"git@github.com:tomdale/rfcs.git","clone_url":"https://github.com/tomdale/rfcs.git","svn_url":"https://github.com/tomdale/rfcs","homepage":null,"size":130,"stargazers_count":9,"watchers_count":9,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":9,"default_branch":"master"}},"base":{"label":"emberjs:master","ref":"master","sha":"cf9b42338be20fdd617eacfe0746064c3f3faaa5","user":{"login":"emberjs","id":1253363,"avatar_url":"https://avatars.githubusercontent.com/u/1253363?v=3","gravatar_id":"","url":"https://api.github.com/users/emberjs","html_url":"https://github.com/emberjs","followers_url":"https://api.github.com/users/emberjs/followers","following_url":"https://api.github.com/users/emberjs/following{/other_user}","gists_url":"https://api.github.com/users/emberjs/gists{/gist_id}","starred_url":"https://api.github.com/users/emberjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emberjs/subscriptions","organizations_url":"https://api.github.com/users/emberjs/orgs","repos_url":"https://api.github.com/users/emberjs/repos","events_url":"https://api.github.com/users/emberjs/events{/privacy}","received_events_url":"https://api.github.com/users/emberjs/received_events","type":"Organization","site_admin":false},"repo":{"id":22664562,"name":"rfcs","full_name":"emberjs/rfcs","owner":{"login":"emberjs","id":1253363,"avatar_url":"https://avatars.githubusercontent.com/u/1253363?v=3","gravatar_id":"","url":"https://api.github.com/users/emberjs","html_url":"https://github.com/emberjs","followers_url":"https://api.github.com/users/emberjs/followers","following_url":"https://api.github.com/users/emberjs/following{/other_user}","gists_url":"https://api.github.com/users/emberjs/gists{/gist_id}","starred_url":"https://api.github.com/users/emberjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emberjs/subscriptions","organizations_url":"https://api.github.com/users/emberjs/orgs","repos_url":"https://api.github.com/users/emberjs/repos","events_url":"https://api.github.com/users/emberjs/events{/privacy}","received_events_url":"https://api.github.com/users/emberjs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/emberjs/rfcs","description":"RFCs for changes to Ember","fork":false,"url":"https://api.github.com/repos/emberjs/rfcs","forks_url":"https://api.github.com/repos/emberjs/rfcs/forks","keys_url":"https://api.github.com/repos/emberjs/rfcs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/emberjs/rfcs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/emberjs/rfcs/teams","hooks_url":"https://api.github.com/repos/emberjs/rfcs/hooks","issue_events_url":"https://api.github.com/repos/emberjs/rfcs/issues/events{/number}","events_url":"https://api.github.com/repos/emberjs/rfcs/events","assignees_url":"https://api.github.com/repos/emberjs/rfcs/assignees{/user}","branches_url":"https://api.github.com/repos/emberjs/rfcs/branches{/branch}","tags_url":"https://api.github.com/repos/emberjs/rfcs/tags","blobs_url":"https://api.github.com/repos/emberjs/rfcs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/emberjs/rfcs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/emberjs/rfcs/git/refs{/sha}","trees_url":"https://api.github.com/repos/emberjs/rfcs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/emberjs/rfcs/statuses/{sha}","languages_url":"https://api.github.com/repos/emberjs/rfcs/languages","stargazers_url":"https://api.github.com/repos/emberjs/rfcs/stargazers","contributors_url":"https://api.github.com/repos/emberjs/rfcs/contributors","subscribers_url":"https://api.github.com/repos/emberjs/rfcs/subscribers","subscription_url":"https://api.github.com/repos/emberjs/rfcs/subscription","commits_url":"https://api.github.com/repos/emberjs/rfcs/commits{/sha}","git_commits_url":"https://api.github.com/repos/emberjs/rfcs/git/commits{/sha}","comments_url":"https://api.github.com/repos/emberjs/rfcs/comments{/number}","issue_comment_url":"https://api.github.com/repos/emberjs/rfcs/issues/comments{/number}","contents_url":"https://api.github.com/repos/emberjs/rfcs/contents/{+path}","compare_url":"https://api.github.com/repos/emberjs/rfcs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/emberjs/rfcs/merges","archive_url":"https://api.github.com/repos/emberjs/rfcs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/emberjs/rfcs/downloads","issues_url":"https://api.github.com/repos/emberjs/rfcs/issues{/number}","pulls_url":"https://api.github.com/repos/emberjs/rfcs/pulls{/number}","milestones_url":"https://api.github.com/repos/emberjs/rfcs/milestones{/number}","notifications_url":"https://api.github.com/repos/emberjs/rfcs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/emberjs/rfcs/labels{/name}","releases_url":"https://api.github.com/repos/emberjs/rfcs/releases{/id}","created_at":"2014-08-06T00:49:22Z","updated_at":"2015-08-27T10:53:10Z","pushed_at":"2015-09-03T13:57:38Z","git_url":"git://github.com/emberjs/rfcs.git","ssh_url":"git@github.com:emberjs/rfcs.git","clone_url":"https://github.com/emberjs/rfcs.git","svn_url":"https://github.com/emberjs/rfcs","homepage":null,"size":1206,"stargazers_count":333,"watchers_count":333,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":82,"mirror_url":null,"open_issues_count":36,"forks":82,"open_issues":36,"watchers":333,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/emberjs/rfcs/pulls/10"},"html":{"href":"https://github.com/emberjs/rfcs/pull/10"},"issue":{"href":"https://api.github.com/repos/emberjs/rfcs/issues/10"},"comments":{"href":"https://api.github.com/repos/emberjs/rfcs/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/emberjs/rfcs/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/emberjs/rfcs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/emberjs/rfcs/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/emberjs/rfcs/statuses/dce7c0649cb69e4686db0c285bde770d1a16bbc7"}}}}