)]}'
{"specs/mitaka/no-incubator-api-freedom.rst":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"5bdd668114c22e89723e546eca8216c5ef91e06b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"retain the interim version for some time - in line with normal backward"},{"line_number":27,"context_line":"compatibility concerns."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Once projects have finished early evolution and are ready to stabilise their"},{"line_number":30,"context_line":"API, they will release a 1.0.0 version a non-namespaced API."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"API update policy"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_1d9152f1","line":29,"updated":"2015-11-27 05:41:37.000000000","message":"I know it\u0027s hard to define ready here,   A criteria is needed here , some thing like after  2 version or  2 release cycle ?","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ef18f3cd94dce8a98047c8bb0b3d41f8f94aa41a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"compatibility concerns."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Once projects have finished early evolution and are ready to stabilise their"},{"line_number":30,"context_line":"API, they will release a 1.0.0 version a non-namespaced API."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"API update policy"},{"line_number":33,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_34cabaa2","line":30,"updated":"2015-11-24 20:27:57.000000000","message":"Sounds like how normal libraries are made, +1","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ef18f3cd94dce8a98047c8bb0b3d41f8f94aa41a","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Non-breaking changes will proceed as normal. Breaking changes during the early"},{"line_number":36,"context_line":"evolution period will create a new API namespace, using a serial number - 1,"},{"line_number":37,"context_line":"2, 3 etc."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Code structure"},{"line_number":40,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_34415a0c","line":37,"updated":"2015-11-24 20:27:57.000000000","message":"Ok, sounds interesting, seems like stevedore entrypoints should be used instead imho, but I get that this would work to.\n\nFor example here is a taskflow example that alters the behavior to taskflow engines to do something in a backwards compatible manner using entrypoints and options...\n\n    \u003e\u003e\u003e from taskflow import engines\n    \u003e\u003e\u003e from taskflow import task\n    \u003e\u003e\u003e \n    \u003e\u003e\u003e class DummyTask(task.Task):\n    ...    def execute(self):\n    ...      print(\u0027Hello world\u0027)\n    ... \n    \u003e\u003e\u003e t \u003d DummyTask()\n    \u003e\u003e\u003e e \u003d engines.load(t, defer_reverts\u003dTrue)\n    \u003e\u003e\u003e e.run()\n    Hello world\n\nThe `engines.load` returns a engine object, the user does not care about which version is used underneath, as long as the behavior is retained and the options provided are retained and observed. Personally I prefer instead of exposing users to which version is being used to expose a \u0027engines.load\u0027 entrypoint and internally iterate as needed...","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"a672fabebf5af5c762ec8fdd7439def5305be7ff","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Non-breaking changes will proceed as normal. Breaking changes during the early"},{"line_number":36,"context_line":"evolution period will create a new API namespace, using a serial number - 1,"},{"line_number":37,"context_line":"2, 3 etc."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Code structure"},{"line_number":40,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_4a18771e","line":37,"in_reply_to":"9a8ffd7b_34415a0c","updated":"2015-11-26 21:54:34.000000000","message":"But, the contract for engines.load hasn\u0027t been broken here. When you break the API, you\u0027ll have to use a new entry point. I think you\u0027re talking about how you change some internal/plugin bits without making another part of the system break, for which entrypoints are one (but only one) way.","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"454fab4b96cbbf85dbe749536105f23bdf9ec683","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Non-breaking changes will proceed as normal. Breaking changes during the early"},{"line_number":36,"context_line":"evolution period will create a new API namespace, using a serial number - 1,"},{"line_number":37,"context_line":"2, 3 etc."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Code structure"},{"line_number":40,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_65c3058a","line":37,"in_reply_to":"9a8ffd7b_4a18771e","updated":"2015-11-27 18:13:44.000000000","message":"Gotcha, so this really is about full on breaking API(s) that people are directly importing into there code. Jeez, do we really think that will happen, has it happened? If so, who is doing this...","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"5bdd668114c22e89723e546eca8216c5ef91e06b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    fred/v2"},{"line_number":52,"context_line":"    fred/v2/tests"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Where v2 starts as a copy of v1, and v1 is frozen from that point on."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Using a namespaced version"},{"line_number":57,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_1dfab243","line":54,"updated":"2015-11-27 05:41:37.000000000","message":"Does \"v1 is frozen\" means  feature freeze, but can still fix bug, right?","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ef18f3cd94dce8a98047c8bb0b3d41f8f94aa41a","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Alternatives"},{"line_number":72,"context_line":"------------"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Stable-from-start"},{"line_number":75,"context_line":"+++++++++++++++++"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_f4a3d29c","line":73,"updated":"2015-11-24 20:27:57.000000000","message":"See above, imho make a \u0027engines.load\u0027 like API and think very carefully about what that returns...","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"aa352c6a97c9ef449738b1dae0a00df08e04ffc2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"Alternatives"},{"line_number":72,"context_line":"------------"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Stable-from-start"},{"line_number":75,"context_line":"+++++++++++++++++"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"We could just apply semver from the very first commit. Folk have expressed"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_143d362b","line":74,"updated":"2015-11-24 20:30:50.000000000","message":"I\u0027m pretty sure this is also what sqlalchemy does also, the entrypoint to sqlalchemy is similar to taskflow engine.load\n\n    from sqlalchemy.engine import create_engine\n    engine \u003d create_engine(\u0027sqlite:///:memory:\u0027, echo\u003dTrue)\n    connection \u003d engine.connect()\n    connection.execute(...)\n    ...","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"a672fabebf5af5c762ec8fdd7439def5305be7ff","unresolved":false,"context_lines":[{"line_number":71,"context_line":"Alternatives"},{"line_number":72,"context_line":"------------"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Stable-from-start"},{"line_number":75,"context_line":"+++++++++++++++++"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"We could just apply semver from the very first commit. Folk have expressed"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_2adad34c","line":74,"in_reply_to":"9a8ffd7b_143d362b","updated":"2015-11-26 21:54:34.000000000","message":"but again, this is a bit that *isn\u0027t* breaking, whereas this spec is about dealing with things that *are* breaking.","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"454fab4b96cbbf85dbe749536105f23bdf9ec683","unresolved":false,"context_lines":[{"line_number":71,"context_line":"Alternatives"},{"line_number":72,"context_line":"------------"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Stable-from-start"},{"line_number":75,"context_line":"+++++++++++++++++"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"We could just apply semver from the very first commit. Folk have expressed"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a8ffd7b_05beb9fe","line":74,"in_reply_to":"9a8ffd7b_2adad34c","updated":"2015-11-27 18:13:44.000000000","message":"Gotcha","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"026d353139118b57a0e36c4cec052d06f16adc5c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"-----------------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"We\u0027ll want a tool to warn on the use of older-than-latest api versions in oslo"},{"line_number":92,"context_line":"projects: much like the automated update-from-incubator scripts do today."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Security impact"},{"line_number":95,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a740942_14c98e78","line":92,"updated":"2015-12-04 20:55:44.000000000","message":"Is this just emitting deprecation warnings, or do you mean something that runs in CI?","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"026d353139118b57a0e36c4cec052d06f16adc5c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"from the start."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Existing workflows will change, so we need to socialise and communicate"},{"line_number":119,"context_line":"effectively about the change."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Testing Impact"},{"line_number":122,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a740942_f48ba21c","line":119,"updated":"2015-12-04 20:55:44.000000000","message":"One thing in particular that might be an issue is a project mixing the old and new APIs. Create a v1 object in one part of an app and pass it to a v2 function from another part of the app. I don\u0027t know if we want to build in our own runtime safeguards to go into the libraries, or come up with some linter rules to help detect this situation. Or maybe worry about it when we see how prevalent it really is.","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"026d353139118b57a0e36c4cec052d06f16adc5c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"Work Items"},{"line_number":146,"context_line":"----------"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"1. Document this somewhere in olso docs"},{"line_number":149,"context_line":"2. Write the update / lint thing to check for the latest version being used."},{"line_number":150,"context_line":"3. Profit."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a740942_9499fe70","line":148,"updated":"2015-12-04 20:55:44.000000000","message":"We keep policies here in the specs repo, so that seems like a good place for it.","commit_id":"262bf23844e0458b4507b1fbfd2807247fb16c18"}]}
