{"action":"created","issue":{"url":"https://api.github.com/repos/Particular/ServiceControl/issues/1354","repository_url":"https://api.github.com/repos/Particular/ServiceControl","labels_url":"https://api.github.com/repos/Particular/ServiceControl/issues/1354/labels{/name}","comments_url":"https://api.github.com/repos/Particular/ServiceControl/issues/1354/comments","events_url":"https://api.github.com/repos/Particular/ServiceControl/issues/1354/events","html_url":"https://github.com/Particular/ServiceControl/issues/1354","id":352059792,"node_id":"MDU6SXNzdWUzNTIwNTk3OTI=","number":1354,"title":"Come up with a way to ensure Web/Message contracts don't change between ServiceControl releases","user":{"login":"WilliamBZA","id":1060960,"node_id":"MDQ6VXNlcjEwNjA5NjA=","avatar_url":"https://avatars3.githubusercontent.com/u/1060960?v=4","gravatar_id":"","url":"https://api.github.com/users/WilliamBZA","html_url":"https://github.com/WilliamBZA","followers_url":"https://api.github.com/users/WilliamBZA/followers","following_url":"https://api.github.com/users/WilliamBZA/following{/other_user}","gists_url":"https://api.github.com/users/WilliamBZA/gists{/gist_id}","starred_url":"https://api.github.com/users/WilliamBZA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WilliamBZA/subscriptions","organizations_url":"https://api.github.com/users/WilliamBZA/orgs","repos_url":"https://api.github.com/users/WilliamBZA/repos","events_url":"https://api.github.com/users/WilliamBZA/events{/privacy}","received_events_url":"https://api.github.com/users/WilliamBZA/received_events","type":"User","site_admin":false},"labels":[{"id":341688221,"node_id":"MDU6TGFiZWwzNDE2ODgyMjE=","url":"https://api.github.com/repos/Particular/ServiceControl/labels/Improvement","name":"Improvement","color":"009800","default":false}],"state":"open","locked":false,"assignee":{"login":"dvdstelt","id":1257410,"node_id":"MDQ6VXNlcjEyNTc0MTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1257410?v=4","gravatar_id":"","url":"https://api.github.com/users/dvdstelt","html_url":"https://github.com/dvdstelt","followers_url":"https://api.github.com/users/dvdstelt/followers","following_url":"https://api.github.com/users/dvdstelt/following{/other_user}","gists_url":"https://api.github.com/users/dvdstelt/gists{/gist_id}","starred_url":"https://api.github.com/users/dvdstelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dvdstelt/subscriptions","organizations_url":"https://api.github.com/users/dvdstelt/orgs","repos_url":"https://api.github.com/users/dvdstelt/repos","events_url":"https://api.github.com/users/dvdstelt/events{/privacy}","received_events_url":"https://api.github.com/users/dvdstelt/received_events","type":"User","site_admin":false},"assignees":[{"login":"dvdstelt","id":1257410,"node_id":"MDQ6VXNlcjEyNTc0MTA=","avatar_url":"https://avatars2.githubusercontent.com/u/1257410?v=4","gravatar_id":"","url":"https://api.github.com/users/dvdstelt","html_url":"https://github.com/dvdstelt","followers_url":"https://api.github.com/users/dvdstelt/followers","following_url":"https://api.github.com/users/dvdstelt/following{/other_user}","gists_url":"https://api.github.com/users/dvdstelt/gists{/gist_id}","starred_url":"https://api.github.com/users/dvdstelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dvdstelt/subscriptions","organizations_url":"https://api.github.com/users/dvdstelt/orgs","repos_url":"https://api.github.com/users/dvdstelt/repos","events_url":"https://api.github.com/users/dvdstelt/events{/privacy}","received_events_url":"https://api.github.com/users/dvdstelt/received_events","type":"User","site_admin":false},{"login":"mauroservienti","id":1325611,"node_id":"MDQ6VXNlcjEzMjU2MTE=","avatar_url":"https://avatars1.githubusercontent.com/u/1325611?v=4","gravatar_id":"","url":"https://api.github.com/users/mauroservienti","html_url":"https://github.com/mauroservienti","followers_url":"https://api.github.com/users/mauroservienti/followers","following_url":"https://api.github.com/users/mauroservienti/following{/other_user}","gists_url":"https://api.github.com/users/mauroservienti/gists{/gist_id}","starred_url":"https://api.github.com/users/mauroservienti/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mauroservienti/subscriptions","organizations_url":"https://api.github.com/users/mauroservienti/orgs","repos_url":"https://api.github.com/users/mauroservienti/repos","events_url":"https://api.github.com/users/mauroservienti/events{/privacy}","received_events_url":"https://api.github.com/users/mauroservienti/received_events","type":"User","site_admin":false},{"login":"boblangley","id":2546913,"node_id":"MDQ6VXNlcjI1NDY5MTM=","avatar_url":"https://avatars3.githubusercontent.com/u/2546913?v=4","gravatar_id":"","url":"https://api.github.com/users/boblangley","html_url":"https://github.com/boblangley","followers_url":"https://api.github.com/users/boblangley/followers","following_url":"https://api.github.com/users/boblangley/following{/other_user}","gists_url":"https://api.github.com/users/boblangley/gists{/gist_id}","starred_url":"https://api.github.com/users/boblangley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boblangley/subscriptions","organizations_url":"https://api.github.com/users/boblangley/orgs","repos_url":"https://api.github.com/users/boblangley/repos","events_url":"https://api.github.com/users/boblangley/events{/privacy}","received_events_url":"https://api.github.com/users/boblangley/received_events","type":"User","site_admin":false}],"milestone":null,"comments":29,"created_at":"2018-08-20T09:45:43Z","updated_at":"2018-09-19T14:31:06Z","closed_at":null,"author_association":"MEMBER","body":"## Overview\r\n\r\n* Facilitator: @mauroservienti\r\n* TF Slack channel: https://particularsoftware.slack.com/messages/CCHB3D2D7\r\n\r\nServiceControl currently exposes functionality via 4 channels:\r\n\r\n* A RESTful api through NancyFx\r\n* A message-based integration through the [ServiceControl.Contracts Package](https://www.nuget.org/packages/ServiceControl.Contracts/)\r\n* Via messaging internally with itself (This is technically not exposed, but anyone with access can put a message on the ServiceControl queue to invoke that functionality)\r\n* Via SignalR to ServicePulse\r\n\r\nCurrently there are no mechanisms in place to ensure that the three API surfaces are not changed in a breaking manner between releases.\r\n\r\nFocus: Internal benefit and quality assurance\r\n\r\n## Proposed PoA\r\n\r\n* [x] Confirm that the ServiceControl.Contracts has Particular Approvals running as part of it's build and test\r\n  _Raised https://github.com/Particular/ServiceControl/pull/1421 to start running approval tests_\r\n* [x] Decide if all the internal message classes need to be moved into an assembly so that it can be run against Particular Approvals or if one of the API Builder overloads can be used to determine if the type is an internal message or simply an internal class\r\n  _API Generator allows to select types to generate public API for, no need for a separate assembly_\r\n* [x] Add a test to ensure the internal messages class API doesn't change between releases\r\n  _https://github.com/Particular/ServiceControl/pull/1421 to start running approval tests_\r\n* [x] Decide on a way to generate a text representation of the RESTful API (Swagger? OpenAPI?)\r\n  _we're using the Nancy test infrastructure in https://github.com/Particular/ServiceControl/pull/1421_\r\n* [x] Add a test that compares the test representation of the RESTful API against an approved one\r\n  _https://github.com/Particular/ServiceControl/pull/1421_\r\n* ~Decide on a way to generate a text representation of the SignalR API~\r\n   _We couldn't find any tool to achieve this. We realized it's not needed as we're using 1 single SignalR method (`Broadcast` on the `IConnection` interface) to route all messages from Control to Pulse_\r\n* ~Add a test that compares the test representation of the SignalR API against an approved one~\r\n  _withdrawn_\r\n* [ ] raise separate issue related to test Nancy headers\r\n* [ ] retrospective \r\n\r\n## What you will learn\r\n\r\nBy joining this taskforce, you will learn:\r\n\r\n* Knowledge of API Approvals\r\n* How NancyFx deals with headers and parameter bindings\r\n* SignalR experience\r\n\r\n## Required specialists\r\n\r\nThis taskforce will probably need to have at least some SP and SI maintainers as specialists/reviewers to ensure the full API surface is covered"},"comment":{"url":"https://api.github.com/repos/Particular/ServiceControl/issues/comments/422826491","html_url":"https://github.com/Particular/ServiceControl/issues/1354#issuecomment-422826491","issue_url":"https://api.github.com/repos/Particular/ServiceControl/issues/1354","id":422826491,"node_id":"MDEyOklzc3VlQ29tbWVudDQyMjgyNjQ5MQ==","user":{"login":"boblangley","id":2546913,"node_id":"MDQ6VXNlcjI1NDY5MTM=","avatar_url":"https://avatars3.githubusercontent.com/u/2546913?v=4","gravatar_id":"","url":"https://api.github.com/users/boblangley","html_url":"https://github.com/boblangley","followers_url":"https://api.github.com/users/boblangley/followers","following_url":"https://api.github.com/users/boblangley/following{/other_user}","gists_url":"https://api.github.com/users/boblangley/gists{/gist_id}","starred_url":"https://api.github.com/users/boblangley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boblangley/subscriptions","organizations_url":"https://api.github.com/users/boblangley/orgs","repos_url":"https://api.github.com/users/boblangley/repos","events_url":"https://api.github.com/users/boblangley/events{/privacy}","received_events_url":"https://api.github.com/users/boblangley/received_events","type":"User","site_admin":false},"created_at":"2018-09-19T14:31:06Z","updated_at":"2018-09-19T14:31:06Z","author_association":"MEMBER","body":"I think so @mauroservienti."}}
{"actor":{"display_login":"boblangley"}}