{"action":"created","comment":{"url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/comments/74669083","id":74669083,"diff_hunk":"@@ -3862,6 +3992,48 @@ spec: permissions\n             remove it from both.\n           </li>\n           <li>\n+            Let |invalidatedAttributes| be\n+            the attributes in |removedAttributes| but not |addedAttributes|.\n+          </li>\n+          <li>\n+            For each <a>environment settings object</a> |settings| in the UA,\n+            <a>queue a task</a> on its <a>responsible event loop</a> to\n+            do the following sub-steps:\n+            <ol>\n+              <li>\n+                For each {{BluetoothRemoteGATTService}} |service|\n+                whose <a>relevant settings object</a> is |settings|,\n+                if <code>|service|.{{[[representedService]]}}</code>\n+                is in |invalidatedAttributes|,\n+                set <code>|service|.{{[[representedService]]}}</code> to `null`.\n+              </li>\n+              <li>\n+                For each {{BluetoothRemoteGATTCharacteristic}} |characteristic|\n+                whose <a>relevant settings object</a> is |settings|,\n+                if <code>|characteristic|.{{[[representedCharacteristic]]}}</code>\n+                is in |invalidatedAttributes|,\n+                set <code>|characteristic|.{{[[representedCharacteristic]]}}</code> to `null`.\n+              </li>\n+              <li>\n+                For each {{BluetoothRemoteGATTDescriptor}} |descriptor|\n+                whose <a>relevant settings object</a> is |settings|,\n+                if <code>|descriptor|.{{[[representedDescriptor]]}}</code>\n+                is in |invalidatedAttributes|,\n+                set <code>|descriptor|.{{[[representedDescriptor]]}}</code> to `null`.\n+              </li>\n+              <li>\n+                Let |global| be |settings|'\n+                <a lt=\"the environment settings object's global object\">global object</a>.\n+              </li>\n+              <li>\n+                Remove every entry\n+                from <code>|global|.navigator.bluetooth.{{[[attributeInstanceMap]]}}</code>\n+                that represents an attribute that\n+                is in |invalidatedAttributes|.\n+              </li>\n+            </ol>\n+          </li>\n+          <li>\n             Let <var>changedServices</var> be a set of <a>Service</a>s, initially empty.\n           </li>\n           <li>","path":"index.bs","position":366,"original_position":366,"commit_id":"f6106e919e970a29d0f692b0190bfc6f88ed0def","original_commit_id":"f6106e919e970a29d0f692b0190bfc6f88ed0def","user":{"login":"jyasskin","id":83420,"avatar_url":"https://avatars.githubusercontent.com/u/83420?v=3","gravatar_id":"","url":"https://api.github.com/users/jyasskin","html_url":"https://github.com/jyasskin","followers_url":"https://api.github.com/users/jyasskin/followers","following_url":"https://api.github.com/users/jyasskin/following{/other_user}","gists_url":"https://api.github.com/users/jyasskin/gists{/gist_id}","starred_url":"https://api.github.com/users/jyasskin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyasskin/subscriptions","organizations_url":"https://api.github.com/users/jyasskin/orgs","repos_url":"https://api.github.com/users/jyasskin/repos","events_url":"https://api.github.com/users/jyasskin/events{/privacy}","received_events_url":"https://api.github.com/users/jyasskin/received_events","type":"User","site_admin":false},"body":"Step 4 intends to remove attributes whose only changes are in their values. \"with the same definition\" may not be clear enough about this.","created_at":"2016-08-12T22:23:29Z","updated_at":"2016-08-12T22:23:29Z","html_url":"https://github.com/WebBluetoothCG/web-bluetooth/pull/272#discussion_r74669083","pull_request_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272","_links":{"self":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/comments/74669083"},"html":{"href":"https://github.com/WebBluetoothCG/web-bluetooth/pull/272#discussion_r74669083"},"pull_request":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272"}}},"pull_request":{"url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272","id":80883916,"html_url":"https://github.com/WebBluetoothCG/web-bluetooth/pull/272","diff_url":"https://github.com/WebBluetoothCG/web-bluetooth/pull/272.diff","patch_url":"https://github.com/WebBluetoothCG/web-bluetooth/pull/272.patch","issue_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/issues/272","number":272,"state":"open","locked":false,"title":"Throw an InvalidStateError when an invalid attribute is used.","user":{"login":"jyasskin","id":83420,"avatar_url":"https://avatars.githubusercontent.com/u/83420?v=3","gravatar_id":"","url":"https://api.github.com/users/jyasskin","html_url":"https://github.com/jyasskin","followers_url":"https://api.github.com/users/jyasskin/followers","following_url":"https://api.github.com/users/jyasskin/following{/other_user}","gists_url":"https://api.github.com/users/jyasskin/gists{/gist_id}","starred_url":"https://api.github.com/users/jyasskin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyasskin/subscriptions","organizations_url":"https://api.github.com/users/jyasskin/orgs","repos_url":"https://api.github.com/users/jyasskin/repos","events_url":"https://api.github.com/users/jyasskin/events{/privacy}","received_events_url":"https://api.github.com/users/jyasskin/received_events","type":"User","site_admin":false},"body":"Preview at https://api.csswg.org/bikeshed/?url=https://raw.githubusercontent.com/jyasskin/web-bluetooth-1/invalidated-attributes/index.bs.\r\n\r\nThis fixes #130.","created_at":"2016-08-10T23:16:58Z","updated_at":"2016-08-12T22:23:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fb22e1ec0f1ca0810efc4da488e001b8495addaa","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272/commits","review_comments_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272/comments","review_comment_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/comments{/number}","comments_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/issues/272/comments","statuses_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/statuses/f6106e919e970a29d0f692b0190bfc6f88ed0def","head":{"label":"jyasskin:invalidated-attributes","ref":"invalidated-attributes","sha":"f6106e919e970a29d0f692b0190bfc6f88ed0def","user":{"login":"jyasskin","id":83420,"avatar_url":"https://avatars.githubusercontent.com/u/83420?v=3","gravatar_id":"","url":"https://api.github.com/users/jyasskin","html_url":"https://github.com/jyasskin","followers_url":"https://api.github.com/users/jyasskin/followers","following_url":"https://api.github.com/users/jyasskin/following{/other_user}","gists_url":"https://api.github.com/users/jyasskin/gists{/gist_id}","starred_url":"https://api.github.com/users/jyasskin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyasskin/subscriptions","organizations_url":"https://api.github.com/users/jyasskin/orgs","repos_url":"https://api.github.com/users/jyasskin/repos","events_url":"https://api.github.com/users/jyasskin/events{/privacy}","received_events_url":"https://api.github.com/users/jyasskin/received_events","type":"User","site_admin":false},"repo":{"id":27619379,"name":"web-bluetooth-1","full_name":"jyasskin/web-bluetooth-1","owner":{"login":"jyasskin","id":83420,"avatar_url":"https://avatars.githubusercontent.com/u/83420?v=3","gravatar_id":"","url":"https://api.github.com/users/jyasskin","html_url":"https://github.com/jyasskin","followers_url":"https://api.github.com/users/jyasskin/followers","following_url":"https://api.github.com/users/jyasskin/following{/other_user}","gists_url":"https://api.github.com/users/jyasskin/gists{/gist_id}","starred_url":"https://api.github.com/users/jyasskin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jyasskin/subscriptions","organizations_url":"https://api.github.com/users/jyasskin/orgs","repos_url":"https://api.github.com/users/jyasskin/repos","events_url":"https://api.github.com/users/jyasskin/events{/privacy}","received_events_url":"https://api.github.com/users/jyasskin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jyasskin/web-bluetooth-1","description":"Toward Bluetooth support for the Open Web.","fork":true,"url":"https://api.github.com/repos/jyasskin/web-bluetooth-1","forks_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/forks","keys_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/teams","hooks_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/hooks","issue_events_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/issues/events{/number}","events_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/events","assignees_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/assignees{/user}","branches_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/branches{/branch}","tags_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/tags","blobs_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/statuses/{sha}","languages_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/languages","stargazers_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/stargazers","contributors_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/contributors","subscribers_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/subscribers","subscription_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/subscription","commits_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/contents/{+path}","compare_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/merges","archive_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/downloads","issues_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/issues{/number}","pulls_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/pulls{/number}","milestones_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/milestones{/number}","notifications_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/labels{/name}","releases_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/releases{/id}","deployments_url":"https://api.github.com/repos/jyasskin/web-bluetooth-1/deployments","created_at":"2014-12-06T02:31:50Z","updated_at":"2016-01-28T20:55:31Z","pushed_at":"2016-08-12T21:04:12Z","git_url":"git://github.com/jyasskin/web-bluetooth-1.git","ssh_url":"git@github.com:jyasskin/web-bluetooth-1.git","clone_url":"https://github.com/jyasskin/web-bluetooth-1.git","svn_url":"https://github.com/jyasskin/web-bluetooth-1","homepage":"http://www.w3.org/community/web-bluetooth/","size":2079,"stargazers_count":0,"watchers_count":0,"language":"HTML","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":0,"default_branch":"master"}},"base":{"label":"WebBluetoothCG:master","ref":"master","sha":"d3e9cfdcfc989c9a926e3ec47527b6d212fe8c3e","user":{"login":"WebBluetoothCG","id":8389284,"avatar_url":"https://avatars.githubusercontent.com/u/8389284?v=3","gravatar_id":"","url":"https://api.github.com/users/WebBluetoothCG","html_url":"https://github.com/WebBluetoothCG","followers_url":"https://api.github.com/users/WebBluetoothCG/followers","following_url":"https://api.github.com/users/WebBluetoothCG/following{/other_user}","gists_url":"https://api.github.com/users/WebBluetoothCG/gists{/gist_id}","starred_url":"https://api.github.com/users/WebBluetoothCG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WebBluetoothCG/subscriptions","organizations_url":"https://api.github.com/users/WebBluetoothCG/orgs","repos_url":"https://api.github.com/users/WebBluetoothCG/repos","events_url":"https://api.github.com/users/WebBluetoothCG/events{/privacy}","received_events_url":"https://api.github.com/users/WebBluetoothCG/received_events","type":"Organization","site_admin":false},"repo":{"id":22738546,"name":"web-bluetooth","full_name":"WebBluetoothCG/web-bluetooth","owner":{"login":"WebBluetoothCG","id":8389284,"avatar_url":"https://avatars.githubusercontent.com/u/8389284?v=3","gravatar_id":"","url":"https://api.github.com/users/WebBluetoothCG","html_url":"https://github.com/WebBluetoothCG","followers_url":"https://api.github.com/users/WebBluetoothCG/followers","following_url":"https://api.github.com/users/WebBluetoothCG/following{/other_user}","gists_url":"https://api.github.com/users/WebBluetoothCG/gists{/gist_id}","starred_url":"https://api.github.com/users/WebBluetoothCG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WebBluetoothCG/subscriptions","organizations_url":"https://api.github.com/users/WebBluetoothCG/orgs","repos_url":"https://api.github.com/users/WebBluetoothCG/repos","events_url":"https://api.github.com/users/WebBluetoothCG/events{/privacy}","received_events_url":"https://api.github.com/users/WebBluetoothCG/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/WebBluetoothCG/web-bluetooth","description":"Bluetooth support for the Web.","fork":false,"url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth","forks_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/forks","keys_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/keys{/key_id}","collaborators_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/teams","hooks_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/hooks","issue_events_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/issues/events{/number}","events_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/events","assignees_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/assignees{/user}","branches_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/branches{/branch}","tags_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/tags","blobs_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/git/refs{/sha}","trees_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/git/trees{/sha}","statuses_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/statuses/{sha}","languages_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/languages","stargazers_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/stargazers","contributors_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/contributors","subscribers_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/subscribers","subscription_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/subscription","commits_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/commits{/sha}","git_commits_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/git/commits{/sha}","comments_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/comments{/number}","issue_comment_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/issues/comments{/number}","contents_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/contents/{+path}","compare_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/compare/{base}...{head}","merges_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/merges","archive_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/downloads","issues_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/issues{/number}","pulls_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls{/number}","milestones_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/milestones{/number}","notifications_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/labels{/name}","releases_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/releases{/id}","deployments_url":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/deployments","created_at":"2014-08-07T22:33:52Z","updated_at":"2016-08-11T01:40:17Z","pushed_at":"2016-08-12T21:05:38Z","git_url":"git://github.com/WebBluetoothCG/web-bluetooth.git","ssh_url":"git@github.com:WebBluetoothCG/web-bluetooth.git","clone_url":"https://github.com/WebBluetoothCG/web-bluetooth.git","svn_url":"https://github.com/WebBluetoothCG/web-bluetooth","homepage":"http://www.w3.org/community/web-bluetooth/","size":2317,"stargazers_count":293,"watchers_count":293,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":32,"mirror_url":null,"open_issues_count":43,"forks":32,"open_issues":43,"watchers":293,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272"},"html":{"href":"https://github.com/WebBluetoothCG/web-bluetooth/pull/272"},"issue":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/issues/272"},"comments":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/issues/272/comments"},"review_comments":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272/comments"},"review_comment":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/pulls/272/commits"},"statuses":{"href":"https://api.github.com/repos/WebBluetoothCG/web-bluetooth/statuses/f6106e919e970a29d0f692b0190bfc6f88ed0def"}}}}
{"actor":{"display_login":"jyasskin"}}