{"action":"created","comment":{"url":"https://api.github.com/repos/chef/chef-rfc/pulls/comments/91666658","pull_request_review_id":12176905,"id":91666658,"diff_hunk":"@@ -0,0 +1,252 @@\n+---\n+RFC: unassigned\n+Title: Attributes v.Next\n+Author: Lamont Granquist <lamont@chef.io>\n+Status: Draft\n+Type: <Standards Track>\n+---\n+\n+# Attributes v.Next\n+\n+Overhauling Attributes to be simpler.\n+\n+## Motivation\n+\n+    As a Chef User,\n+    I want Attributes to be Less Confusing.\n+\n+    As a Chef User,\n+    I dislike NoMethodError for NilClass Errors.\n+\n+    As a Chef Developer,\n+    The monolithic Node attributes API tries to do too much with a shared namespace.\n+\n+    As a Maintainer of Existing Cookbooks,\n+    I need a slow and backwards compatibile transition to any new API.\n+\n+    As a Ohai Plugin Developer,\n+    I want to be able to add ohai attributes without clobbering someone's cookbook attributes.\n+\n+    As a Chef Support Person,\n+    We see normal attribute persistence cause consistent user confusion.\n+\n+    As a Chef Support Person,\n+    We see array merging (sometimes) to cause consistent user confusion, with most users being surprised by merging behavior.\n+\n+    As a Chef Support Person,\n+    We see consistent user confusion over what the point of force_default is.\n+\n+    As a Chef Developer,\n+    I've never seen anyone use or understand the role/environment precedence order swap between default and override.\n+\n+## Overall Design\n+\n+Migration Strategy:\n+\n+- Existing APIs remain unchanged\n+- Deprecation warnings will be emitted for edge cases where the APIs differ\n+- Ater fixing the deprecation warnings, autofixing from the old APIs to the new APIs should be possible\n+\n+Three Separated Namespaces:\n+\n+- Ohai attributes\n+- Default and override attributes\n+- Normal/storage attributes\n+\n+Deprecated Behavior:\n+\n+- Array deep merging is removed (must be manually replaced with hash-key merging)","path":"attributes-next.md","position":58,"original_position":58,"commit_id":"7eb1880bc4301963dba38b20ebcccbd58e5c368a","original_commit_id":"7eb1880bc4301963dba38b20ebcccbd58e5c368a","user":{"login":"jaymzh","id":938467,"avatar_url":"https://avatars.githubusercontent.com/u/938467?v=3","gravatar_id":"","url":"https://api.github.com/users/jaymzh","html_url":"https://github.com/jaymzh","followers_url":"https://api.github.com/users/jaymzh/followers","following_url":"https://api.github.com/users/jaymzh/following{/other_user}","gists_url":"https://api.github.com/users/jaymzh/gists{/gist_id}","starred_url":"https://api.github.com/users/jaymzh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jaymzh/subscriptions","organizations_url":"https://api.github.com/users/jaymzh/orgs","repos_url":"https://api.github.com/users/jaymzh/repos","events_url":"https://api.github.com/users/jaymzh/events{/privacy}","received_events_url":"https://api.github.com/users/jaymzh/received_events","type":"User","site_admin":false},"body":"Can you expand on what this means? with the change to force-by-default, I THINK this means:\r\n\r\n```\r\ndefault_set('foo', 'bar').to(['baz', 'tree'])\r\noverride_set('foo', 'bar').to(['thing', 'thong'])\r\nattr('foo', 'bar')\r\n```\r\n\r\nwould result in `['thing', 'thong']` ?\r\n\r\n","created_at":"2016-12-09T06:52:33Z","updated_at":"2016-12-09T06:52:33Z","html_url":"https://github.com/chef/chef-rfc/pull/238#discussion_r91666658","pull_request_url":"https://api.github.com/repos/chef/chef-rfc/pulls/238","_links":{"self":{"href":"https://api.github.com/repos/chef/chef-rfc/pulls/comments/91666658"},"html":{"href":"https://github.com/chef/chef-rfc/pull/238#discussion_r91666658"},"pull_request":{"href":"https://api.github.com/repos/chef/chef-rfc/pulls/238"}}},"pull_request":{"url":"https://api.github.com/repos/chef/chef-rfc/pulls/238","id":93825417,"html_url":"https://github.com/chef/chef-rfc/pull/238","diff_url":"https://github.com/chef/chef-rfc/pull/238.diff","patch_url":"https://github.com/chef/chef-rfc/pull/238.patch","issue_url":"https://api.github.com/repos/chef/chef-rfc/issues/238","number":238,"state":"open","locked":false,"title":"Attributes dot Next","user":{"login":"lamont-granquist","id":454857,"avatar_url":"https://avatars.githubusercontent.com/u/454857?v=3","gravatar_id":"","url":"https://api.github.com/users/lamont-granquist","html_url":"https://github.com/lamont-granquist","followers_url":"https://api.github.com/users/lamont-granquist/followers","following_url":"https://api.github.com/users/lamont-granquist/following{/other_user}","gists_url":"https://api.github.com/users/lamont-granquist/gists{/gist_id}","starred_url":"https://api.github.com/users/lamont-granquist/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lamont-granquist/subscriptions","organizations_url":"https://api.github.com/users/lamont-granquist/orgs","repos_url":"https://api.github.com/users/lamont-granquist/repos","events_url":"https://api.github.com/users/lamont-granquist/events{/privacy}","received_events_url":"https://api.github.com/users/lamont-granquist/received_events","type":"User","site_admin":false},"body":"This builds out a new API in parallel with the old API, with slightly different simplified semantics, emits deprecation warnings for cases where the semantics differ, and then gradually deprecates the old API.  I expect this is a 3+ year project at least, so the timing of when we actually deprecate the old APIs is not specified, and we should only pull the trigger there once the impact will be minimal.\r\n\r\nThis Expands/Replaces #77 ","created_at":"2016-11-15T18:53:09Z","updated_at":"2016-12-09T06:52:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8b8760c2f7854aa1718574f8bd52df70a7abf34c","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/chef/chef-rfc/pulls/238/commits","review_comments_url":"https://api.github.com/repos/chef/chef-rfc/pulls/238/comments","review_comment_url":"https://api.github.com/repos/chef/chef-rfc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/chef/chef-rfc/issues/238/comments","statuses_url":"https://api.github.com/repos/chef/chef-rfc/statuses/7eb1880bc4301963dba38b20ebcccbd58e5c368a","head":{"label":"chef:lcg/attributes-next","ref":"lcg/attributes-next","sha":"7eb1880bc4301963dba38b20ebcccbd58e5c368a","user":{"login":"chef","id":29740,"avatar_url":"https://avatars.githubusercontent.com/u/29740?v=3","gravatar_id":"","url":"https://api.github.com/users/chef","html_url":"https://github.com/chef","followers_url":"https://api.github.com/users/chef/followers","following_url":"https://api.github.com/users/chef/following{/other_user}","gists_url":"https://api.github.com/users/chef/gists{/gist_id}","starred_url":"https://api.github.com/users/chef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chef/subscriptions","organizations_url":"https://api.github.com/users/chef/orgs","repos_url":"https://api.github.com/users/chef/repos","events_url":"https://api.github.com/users/chef/events{/privacy}","received_events_url":"https://api.github.com/users/chef/received_events","type":"Organization","site_admin":false},"repo":{"id":15090814,"name":"chef-rfc","full_name":"chef/chef-rfc","owner":{"login":"chef","id":29740,"avatar_url":"https://avatars.githubusercontent.com/u/29740?v=3","gravatar_id":"","url":"https://api.github.com/users/chef","html_url":"https://github.com/chef","followers_url":"https://api.github.com/users/chef/followers","following_url":"https://api.github.com/users/chef/following{/other_user}","gists_url":"https://api.github.com/users/chef/gists{/gist_id}","starred_url":"https://api.github.com/users/chef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chef/subscriptions","organizations_url":"https://api.github.com/users/chef/orgs","repos_url":"https://api.github.com/users/chef/repos","events_url":"https://api.github.com/users/chef/events{/privacy}","received_events_url":"https://api.github.com/users/chef/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/chef/chef-rfc","description":"Public RFCs for Chef and related projects","fork":false,"url":"https://api.github.com/repos/chef/chef-rfc","forks_url":"https://api.github.com/repos/chef/chef-rfc/forks","keys_url":"https://api.github.com/repos/chef/chef-rfc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chef/chef-rfc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chef/chef-rfc/teams","hooks_url":"https://api.github.com/repos/chef/chef-rfc/hooks","issue_events_url":"https://api.github.com/repos/chef/chef-rfc/issues/events{/number}","events_url":"https://api.github.com/repos/chef/chef-rfc/events","assignees_url":"https://api.github.com/repos/chef/chef-rfc/assignees{/user}","branches_url":"https://api.github.com/repos/chef/chef-rfc/branches{/branch}","tags_url":"https://api.github.com/repos/chef/chef-rfc/tags","blobs_url":"https://api.github.com/repos/chef/chef-rfc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chef/chef-rfc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chef/chef-rfc/git/refs{/sha}","trees_url":"https://api.github.com/repos/chef/chef-rfc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chef/chef-rfc/statuses/{sha}","languages_url":"https://api.github.com/repos/chef/chef-rfc/languages","stargazers_url":"https://api.github.com/repos/chef/chef-rfc/stargazers","contributors_url":"https://api.github.com/repos/chef/chef-rfc/contributors","subscribers_url":"https://api.github.com/repos/chef/chef-rfc/subscribers","subscription_url":"https://api.github.com/repos/chef/chef-rfc/subscription","commits_url":"https://api.github.com/repos/chef/chef-rfc/commits{/sha}","git_commits_url":"https://api.github.com/repos/chef/chef-rfc/git/commits{/sha}","comments_url":"https://api.github.com/repos/chef/chef-rfc/comments{/number}","issue_comment_url":"https://api.github.com/repos/chef/chef-rfc/issues/comments{/number}","contents_url":"https://api.github.com/repos/chef/chef-rfc/contents/{+path}","compare_url":"https://api.github.com/repos/chef/chef-rfc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chef/chef-rfc/merges","archive_url":"https://api.github.com/repos/chef/chef-rfc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chef/chef-rfc/downloads","issues_url":"https://api.github.com/repos/chef/chef-rfc/issues{/number}","pulls_url":"https://api.github.com/repos/chef/chef-rfc/pulls{/number}","milestones_url":"https://api.github.com/repos/chef/chef-rfc/milestones{/number}","notifications_url":"https://api.github.com/repos/chef/chef-rfc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chef/chef-rfc/labels{/name}","releases_url":"https://api.github.com/repos/chef/chef-rfc/releases{/id}","deployments_url":"https://api.github.com/repos/chef/chef-rfc/deployments","created_at":"2013-12-10T22:10:56Z","updated_at":"2016-11-23T12:39:43Z","pushed_at":"2016-12-06T16:53:53Z","git_url":"git://github.com/chef/chef-rfc.git","ssh_url":"git@github.com:chef/chef-rfc.git","clone_url":"https://github.com/chef/chef-rfc.git","svn_url":"https://github.com/chef/chef-rfc","homepage":null,"size":2081,"stargazers_count":122,"watchers_count":122,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":63,"mirror_url":null,"open_issues_count":15,"forks":63,"open_issues":15,"watchers":122,"default_branch":"master"}},"base":{"label":"chef:master","ref":"master","sha":"55ddc1162288ec4114a2ea8a247ef9bccbe5e676","user":{"login":"chef","id":29740,"avatar_url":"https://avatars.githubusercontent.com/u/29740?v=3","gravatar_id":"","url":"https://api.github.com/users/chef","html_url":"https://github.com/chef","followers_url":"https://api.github.com/users/chef/followers","following_url":"https://api.github.com/users/chef/following{/other_user}","gists_url":"https://api.github.com/users/chef/gists{/gist_id}","starred_url":"https://api.github.com/users/chef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chef/subscriptions","organizations_url":"https://api.github.com/users/chef/orgs","repos_url":"https://api.github.com/users/chef/repos","events_url":"https://api.github.com/users/chef/events{/privacy}","received_events_url":"https://api.github.com/users/chef/received_events","type":"Organization","site_admin":false},"repo":{"id":15090814,"name":"chef-rfc","full_name":"chef/chef-rfc","owner":{"login":"chef","id":29740,"avatar_url":"https://avatars.githubusercontent.com/u/29740?v=3","gravatar_id":"","url":"https://api.github.com/users/chef","html_url":"https://github.com/chef","followers_url":"https://api.github.com/users/chef/followers","following_url":"https://api.github.com/users/chef/following{/other_user}","gists_url":"https://api.github.com/users/chef/gists{/gist_id}","starred_url":"https://api.github.com/users/chef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chef/subscriptions","organizations_url":"https://api.github.com/users/chef/orgs","repos_url":"https://api.github.com/users/chef/repos","events_url":"https://api.github.com/users/chef/events{/privacy}","received_events_url":"https://api.github.com/users/chef/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/chef/chef-rfc","description":"Public RFCs for Chef and related projects","fork":false,"url":"https://api.github.com/repos/chef/chef-rfc","forks_url":"https://api.github.com/repos/chef/chef-rfc/forks","keys_url":"https://api.github.com/repos/chef/chef-rfc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chef/chef-rfc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chef/chef-rfc/teams","hooks_url":"https://api.github.com/repos/chef/chef-rfc/hooks","issue_events_url":"https://api.github.com/repos/chef/chef-rfc/issues/events{/number}","events_url":"https://api.github.com/repos/chef/chef-rfc/events","assignees_url":"https://api.github.com/repos/chef/chef-rfc/assignees{/user}","branches_url":"https://api.github.com/repos/chef/chef-rfc/branches{/branch}","tags_url":"https://api.github.com/repos/chef/chef-rfc/tags","blobs_url":"https://api.github.com/repos/chef/chef-rfc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chef/chef-rfc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chef/chef-rfc/git/refs{/sha}","trees_url":"https://api.github.com/repos/chef/chef-rfc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chef/chef-rfc/statuses/{sha}","languages_url":"https://api.github.com/repos/chef/chef-rfc/languages","stargazers_url":"https://api.github.com/repos/chef/chef-rfc/stargazers","contributors_url":"https://api.github.com/repos/chef/chef-rfc/contributors","subscribers_url":"https://api.github.com/repos/chef/chef-rfc/subscribers","subscription_url":"https://api.github.com/repos/chef/chef-rfc/subscription","commits_url":"https://api.github.com/repos/chef/chef-rfc/commits{/sha}","git_commits_url":"https://api.github.com/repos/chef/chef-rfc/git/commits{/sha}","comments_url":"https://api.github.com/repos/chef/chef-rfc/comments{/number}","issue_comment_url":"https://api.github.com/repos/chef/chef-rfc/issues/comments{/number}","contents_url":"https://api.github.com/repos/chef/chef-rfc/contents/{+path}","compare_url":"https://api.github.com/repos/chef/chef-rfc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chef/chef-rfc/merges","archive_url":"https://api.github.com/repos/chef/chef-rfc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chef/chef-rfc/downloads","issues_url":"https://api.github.com/repos/chef/chef-rfc/issues{/number}","pulls_url":"https://api.github.com/repos/chef/chef-rfc/pulls{/number}","milestones_url":"https://api.github.com/repos/chef/chef-rfc/milestones{/number}","notifications_url":"https://api.github.com/repos/chef/chef-rfc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chef/chef-rfc/labels{/name}","releases_url":"https://api.github.com/repos/chef/chef-rfc/releases{/id}","deployments_url":"https://api.github.com/repos/chef/chef-rfc/deployments","created_at":"2013-12-10T22:10:56Z","updated_at":"2016-11-23T12:39:43Z","pushed_at":"2016-12-06T16:53:53Z","git_url":"git://github.com/chef/chef-rfc.git","ssh_url":"git@github.com:chef/chef-rfc.git","clone_url":"https://github.com/chef/chef-rfc.git","svn_url":"https://github.com/chef/chef-rfc","homepage":null,"size":2081,"stargazers_count":122,"watchers_count":122,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":63,"mirror_url":null,"open_issues_count":15,"forks":63,"open_issues":15,"watchers":122,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/chef/chef-rfc/pulls/238"},"html":{"href":"https://github.com/chef/chef-rfc/pull/238"},"issue":{"href":"https://api.github.com/repos/chef/chef-rfc/issues/238"},"comments":{"href":"https://api.github.com/repos/chef/chef-rfc/issues/238/comments"},"review_comments":{"href":"https://api.github.com/repos/chef/chef-rfc/pulls/238/comments"},"review_comment":{"href":"https://api.github.com/repos/chef/chef-rfc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/chef/chef-rfc/pulls/238/commits"},"statuses":{"href":"https://api.github.com/repos/chef/chef-rfc/statuses/7eb1880bc4301963dba38b20ebcccbd58e5c368a"}}}}
{"actor":{"display_login":"jaymzh"}}