)]}'
{"specs/newton/approved/validation-tool.rst":[{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":33,"context_line":"errors in code, typos, etc.) can be detected and solved by using"},{"line_number":34,"context_line":"static validation tool."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"### Static validation works both for Murano engine and a developer."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Proposed change"},{"line_number":39,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_4faf867d","line":36,"range":{"start_line":36,"start_character":33,"end_line":36,"end_character":50},"updated":"2016-07-22 16:27:54.000000000","message":"how does it work for Murano engine? Probably you meant API","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ccaef4dd1892156f206c5074997aae66a7456962","unresolved":false,"context_lines":[{"line_number":33,"context_line":"errors in code, typos, etc.) can be detected and solved by using"},{"line_number":34,"context_line":"static validation tool."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"### Static validation works both for Murano engine and a developer."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Proposed change"},{"line_number":39,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_b0c8ab23","line":36,"range":{"start_line":36,"start_character":33,"end_line":36,"end_character":50},"in_reply_to":"dada55a8_4faf867d","updated":"2016-07-26 13:36:19.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  subdirectory validation error should be reported."},{"line_number":70,"context_line":"* Warning should be reported in case when additional files exist in ``Classes``"},{"line_number":71,"context_line":"  subdirectory but not referenced in the manifest file."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Class structure validation"},{"line_number":75,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_05fc4e3d","line":72,"updated":"2016-07-22 16:27:54.000000000","message":"Other possible errors: UI definition file is declared but not present, the same for logo files, requirement section has incorrect format or version specs are invalid. Also there should be warning if the VersionFormat is higher than that supported by the tool. Version and FormatVersion attributes (if present) must be a valid version string.\n\nAnother thing that need to be taken in account is that MuranoPL packages are not the only type of packages supported by Murano. So please make sure you do check the Format attribute (which is also optional)","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ccaef4dd1892156f206c5074997aae66a7456962","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  subdirectory validation error should be reported."},{"line_number":70,"context_line":"* Warning should be reported in case when additional files exist in ``Classes``"},{"line_number":71,"context_line":"  subdirectory but not referenced in the manifest file."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Class structure validation"},{"line_number":75,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_90cda733","line":72,"in_reply_to":"dada55a8_05fc4e3d","updated":"2016-07-26 13:36:19.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":77,"context_line":"* Valid classes and methods should check if properties are defined correctly and"},{"line_number":78,"context_line":"  there are no extra keys that are not supported."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"  - Name: string that is a valid Python class name."},{"line_number":81,"context_line":"  - Properties supports:"},{"line_number":82,"context_line":"        - Contract: YAQL expression"},{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_cac7e462","line":80,"updated":"2016-07-22 16:27:54.000000000","message":"Except that it cannot start with __\nAlso Name is optional if the file contains only single class\nbtw, should we do some style checks as well? For example classes should be in PascalCase and namespaces in camelCase","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ccaef4dd1892156f206c5074997aae66a7456962","unresolved":false,"context_lines":[{"line_number":77,"context_line":"* Valid classes and methods should check if properties are defined correctly and"},{"line_number":78,"context_line":"  there are no extra keys that are not supported."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"  - Name: string that is a valid Python class name."},{"line_number":81,"context_line":"  - Properties supports:"},{"line_number":82,"context_line":"        - Contract: YAQL expression"},{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_33b16548","line":80,"in_reply_to":"dada55a8_cac7e462","updated":"2016-07-26 13:36:19.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":80,"context_line":"  - Name: string that is a valid Python class name."},{"line_number":81,"context_line":"  - Properties supports:"},{"line_number":82,"context_line":"        - Contract: YAQL expression"},{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"},{"line_number":84,"context_line":"        - Default: YAQL expression"},{"line_number":85,"context_line":"  - Method supports:"},{"line_number":86,"context_line":"        - Scope: enum(Public, Session)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_2f021270","line":83,"updated":"2016-07-22 16:27:54.000000000","message":", Config or missing","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"5e90ce43db6110d38e75e057c6229c197792bae8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"  - Name: string that is a valid Python class name."},{"line_number":81,"context_line":"  - Properties supports:"},{"line_number":82,"context_line":"        - Contract: YAQL expression"},{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"},{"line_number":84,"context_line":"        - Default: YAQL expression"},{"line_number":85,"context_line":"  - Method supports:"},{"line_number":86,"context_line":"        - Scope: enum(Public, Session)"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_e8a6da51","line":83,"in_reply_to":"dada55a8_2f021270","updated":"2016-07-29 13:32:11.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  - Properties supports:"},{"line_number":82,"context_line":"        - Contract: YAQL expression"},{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"},{"line_number":84,"context_line":"        - Default: YAQL expression"},{"line_number":85,"context_line":"  - Method supports:"},{"line_number":86,"context_line":"        - Scope: enum(Public, Session)"},{"line_number":87,"context_line":"        - Arguments: YAML List of dicts with name as a key"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_6fd7eabf","line":84,"updated":"2016-07-22 16:27:54.000000000","message":"just to note, that scalar values and regular data is also acceptable here (and this is the most usual case). From the user\u0027s perspective there is no difference because in \"Default: 123\" 123 is a valid yaql expression but for the DSL parser it returned as an integer rather than yaql","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ccaef4dd1892156f206c5074997aae66a7456962","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  - Properties supports:"},{"line_number":82,"context_line":"        - Contract: YAQL expression"},{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"},{"line_number":84,"context_line":"        - Default: YAQL expression"},{"line_number":85,"context_line":"  - Method supports:"},{"line_number":86,"context_line":"        - Scope: enum(Public, Session)"},{"line_number":87,"context_line":"        - Arguments: YAML List of dicts with name as a key"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_f354edfe","line":84,"in_reply_to":"dada55a8_6fd7eabf","updated":"2016-07-26 13:36:19.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"},{"line_number":84,"context_line":"        - Default: YAQL expression"},{"line_number":85,"context_line":"  - Method supports:"},{"line_number":86,"context_line":"        - Scope: enum(Public, Session)"},{"line_number":87,"context_line":"        - Arguments: YAML List of dicts with name as a key"},{"line_number":88,"context_line":"                - Contract: YAQL expression"},{"line_number":89,"context_line":"        - Body: YAML list of YAQL expressions"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_6a0fd82e","line":86,"updated":"2016-07-22 16:27:54.000000000","message":"or missing","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ccaef4dd1892156f206c5074997aae66a7456962","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        - Usage: enum(In, Out, InOut, Const, Static, Runtime)"},{"line_number":84,"context_line":"        - Default: YAQL expression"},{"line_number":85,"context_line":"  - Method supports:"},{"line_number":86,"context_line":"        - Scope: enum(Public, Session)"},{"line_number":87,"context_line":"        - Arguments: YAML List of dicts with name as a key"},{"line_number":88,"context_line":"                - Contract: YAQL expression"},{"line_number":89,"context_line":"        - Body: YAML list of YAQL expressions"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_7332bdf3","line":86,"in_reply_to":"dada55a8_6a0fd82e","updated":"2016-07-26 13:36:19.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        - Arguments: YAML List of dicts with name as a key"},{"line_number":88,"context_line":"                - Contract: YAQL expression"},{"line_number":89,"context_line":"        - Body: YAML list of YAQL expressions"},{"line_number":90,"context_line":"  - Extends supports: YAML list of Classes"},{"line_number":91,"context_line":"  - Namespaces:  YAML dict with namespaces."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Check if class is in correct namespaces according to manifest and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_4ac934ac","line":90,"updated":"2016-07-22 16:27:54.000000000","message":"or a scalar. There is no need to say Extends: [SingleClass]. It can be just Extends: SingleClass","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ccaef4dd1892156f206c5074997aae66a7456962","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        - Arguments: YAML List of dicts with name as a key"},{"line_number":88,"context_line":"                - Contract: YAQL expression"},{"line_number":89,"context_line":"        - Body: YAML list of YAQL expressions"},{"line_number":90,"context_line":"  - Extends supports: YAML list of Classes"},{"line_number":91,"context_line":"  - Namespaces:  YAML dict with namespaces."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Check if class is in correct namespaces according to manifest and"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_f31d0d63","line":90,"in_reply_to":"dada55a8_4ac934ac","updated":"2016-07-26 13:36:19.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":98,"context_line":"Code validation"},{"line_number":99,"context_line":"---------------"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"* Methods body should be a list type and contain valid YAQL expressions."},{"line_number":102,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is considered"},{"line_number":103,"context_line":"  to be an invalid expression."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_e5bada09","line":101,"updated":"2016-07-22 16:27:54.000000000","message":"Single statement methods can be of a dict type:\nBody:\n  Return: 123","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"5e90ce43db6110d38e75e057c6229c197792bae8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"Code validation"},{"line_number":99,"context_line":"---------------"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"* Methods body should be a list type and contain valid YAQL expressions."},{"line_number":102,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is considered"},{"line_number":103,"context_line":"  to be an invalid expression."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_c85f963f","line":101,"in_reply_to":"dada55a8_e5bada09","updated":"2016-07-29 13:32:11.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"* Methods body should be a list type and contain valid YAQL expressions."},{"line_number":102,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is considered"},{"line_number":103,"context_line":"  to be an invalid expression."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Missing examples how to execute if rom cli and API for external usage"},{"line_number":106,"context_line":"# Also I think we need more details how structure of tool will be build."}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_a547421c","line":103,"updated":"2016-07-22 16:27:54.000000000","message":"valid","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"5e90ce43db6110d38e75e057c6229c197792bae8","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"* Methods body should be a list type and contain valid YAQL expressions."},{"line_number":102,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is considered"},{"line_number":103,"context_line":"  to be an invalid expression."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Missing examples how to execute if rom cli and API for external usage"},{"line_number":106,"context_line":"# Also I think we need more details how structure of tool will be build."}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_c87836c7","line":103,"in_reply_to":"dada55a8_a547421c","updated":"2016-07-29 13:32:11.000000000","message":"Done","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"3e808fcb418abca189bad081688ed65ec0515b69","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"``W***`` and ``E***`` codes are reserved for builtin warnings and errors."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* E001: Invalid YAML document."},{"line_number":117,"context_line":"* E002: Missing manifest file."},{"line_number":118,"context_line":"* E003: Missing class file."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_0503aeb9","line":116,"updated":"2016-07-22 16:27:54.000000000","message":"I suggest to leave space for feature errors and count in tens or similar","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"a875a83050cb2846563ad8b2699e81c0b73b6cd2","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"``W***`` and ``E***`` codes are reserved for builtin warnings and errors."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* E001: Invalid YAML document."},{"line_number":117,"context_line":"* E002: Missing manifest file."},{"line_number":118,"context_line":"* E003: Missing class file."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_86be42d2","line":116,"in_reply_to":"bacf61ea_6872114b","updated":"2016-07-29 06:04:54.000000000","message":"But error codes are not human readable. Who remembers them? So why there is need for similar error codes? Strings are human readable.","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"5e90ce43db6110d38e75e057c6229c197792bae8","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"``W***`` and ``E***`` codes are reserved for builtin warnings and errors."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* E001: Invalid YAML document."},{"line_number":117,"context_line":"* E002: Missing manifest file."},{"line_number":118,"context_line":"* E003: Missing class file."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_a808622e","line":116,"in_reply_to":"bacf61ea_86be42d2","updated":"2016-07-29 13:32:11.000000000","message":"Agree with Krzysztof. Also list of errors will be updated for sure. Let\u0027s just use increments, so we don\u0027t need to search for empty gaps to put new error code later.","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ccaef4dd1892156f206c5074997aae66a7456962","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"``W***`` and ``E***`` codes are reserved for builtin warnings and errors."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* E001: Invalid YAML document."},{"line_number":117,"context_line":"* E002: Missing manifest file."},{"line_number":118,"context_line":"* E003: Missing class file."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_535df913","line":116,"in_reply_to":"dada55a8_0503aeb9","updated":"2016-07-26 13:36:19.000000000","message":"You can always increment counter.","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"f36446915c14cd5090f5dbbf14635146a08ad7a5","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"``W***`` and ``E***`` codes are reserved for builtin warnings and errors."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"* E001: Invalid YAML document."},{"line_number":117,"context_line":"* E002: Missing manifest file."},{"line_number":118,"context_line":"* E003: Missing class file."},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_6872114b","line":116,"in_reply_to":"dada55a8_535df913","updated":"2016-07-28 20:00:04.000000000","message":"Yes, but then you have no way to make similar error have similar error codes","commit_id":"9b8b40bd171b9da877998c44c933fb259984a9a8"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"be divided into several groups:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Manifest - File in package root directory named ``manifest.yaml``."},{"line_number":68,"context_line":"* UI - YAML file ``UI/ui.yaml``."},{"line_number":69,"context_line":"* MuranoPL class - YAML files located in ``Classes`` directory or its"},{"line_number":70,"context_line":"  subdirectories."},{"line_number":71,"context_line":"* Other - All other files."}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_c8797dfe","line":68,"updated":"2016-07-28 19:59:55.000000000","message":"This is just the default that might be overridden in the manifest","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"be divided into several groups:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Manifest - File in package root directory named ``manifest.yaml``."},{"line_number":68,"context_line":"* UI - YAML file ``UI/ui.yaml``."},{"line_number":69,"context_line":"* MuranoPL class - YAML files located in ``Classes`` directory or its"},{"line_number":70,"context_line":"  subdirectories."},{"line_number":71,"context_line":"* Other - All other files."}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_2178162a","line":68,"in_reply_to":"bacf61ea_c8797dfe","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Class structure"},{"line_number":141,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"**Name**"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Required: no"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_abe083cd","line":142,"updated":"2016-07-28 19:59:55.000000000","message":"One big thing that is missing is a version conformance. Not all MuranoPL features are available in all FormatVersions. For example if there is a static method in the package with FormatVersion 1.2 there should be a warning because such package could be imported into Murano Liberty without any warnings but will not work there","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Class structure"},{"line_number":141,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"**Name**"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Required: no"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_e469ecbf","line":142,"in_reply_to":"bacf61ea_abe083cd","updated":"2016-07-29 13:32:17.000000000","message":"Fixed for UsageField. Is there a document that describes format changes from version to version?","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"**Name**"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Required: no"},{"line_number":146,"context_line":"* Type: String"},{"line_number":147,"context_line":"* Format:"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_e8d441be","line":145,"updated":"2016-07-28 19:59:55.000000000","message":"required if more than one class is present in the file. When specified must match that from the manifest","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"**Name**"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"* Required: no"},{"line_number":146,"context_line":"* Type: String"},{"line_number":147,"context_line":"* Format:"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_c464a8e6","line":145,"in_reply_to":"bacf61ea_e8d441be","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"* Required: no"},{"line_number":166,"context_line":"* Type: Enum"},{"line_number":167,"context_line":"* Values: In, Out, InOut, Const, Static, Runtime"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"**Properties.Default**"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_48558d4e","line":167,"updated":"2016-07-28 19:59:55.000000000","message":", Config","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"* Required: no"},{"line_number":166,"context_line":"* Type: Enum"},{"line_number":167,"context_line":"* Values: In, Out, InOut, Const, Static, Runtime"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"**Properties.Default**"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_64897c26","line":167,"in_reply_to":"bacf61ea_48558d4e","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"* Required: no"},{"line_number":182,"context_line":"* Type: Enum"},{"line_number":183,"context_line":"* Values: Public, Session"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"**Methods.Arguments**"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_8b565fd0","line":183,"updated":"2016-07-28 19:59:55.000000000","message":"Available for FormatVersion \u003e\u003d 1.4","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"* Required: no"},{"line_number":182,"context_line":"* Type: Enum"},{"line_number":183,"context_line":"* Values: Public, Session"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"**Methods.Arguments**"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_38be83d4","line":183,"in_reply_to":"bacf61ea_8b565fd0","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"* Values:"},{"line_number":190,"context_line":"    - Keys: String, Argument name"},{"line_number":191,"context_line":"    - Values: Dict"},{"line_number":192,"context_line":"      - Contract: YAQL Expression"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Methods.Body**"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_2b3653e7","line":192,"updated":"2016-07-28 19:59:55.000000000","message":"Arguments may also have Usage: Standard (default), VarArgs, KwArgs\nAnd they also may have Default value","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":189,"context_line":"* Values:"},{"line_number":190,"context_line":"    - Keys: String, Argument name"},{"line_number":191,"context_line":"    - Values: Dict"},{"line_number":192,"context_line":"      - Contract: YAQL Expression"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Methods.Body**"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_448c3835","line":192,"in_reply_to":"bacf61ea_2b3653e7","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    - Keys: String, Argument name"},{"line_number":191,"context_line":"    - Values: Dict"},{"line_number":192,"context_line":"      - Contract: YAQL Expression"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Methods.Body**"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Required: yes"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_08139567","line":193,"updated":"2016-07-28 19:59:55.000000000","message":"Methods have Usage: one of Action, Runtime, Static, Extension. Runtime is the default. \"Usage: Action\" is deprecated for FormatVerion \u003e\u003d 1.4 (should be a warning) and replaced with Scope: Public. There should be an error if both Usage: Action and Scope: Session are specified","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    - Keys: String, Argument name"},{"line_number":191,"context_line":"    - Values: Dict"},{"line_number":192,"context_line":"      - Contract: YAQL Expression"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"**Methods.Body**"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Required: yes"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_c84036a8","line":193,"in_reply_to":"bacf61ea_08139567","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"**Methods.Body**"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Required: yes"},{"line_number":197,"context_line":"* Type: List(YAQL Expression)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"**Extends**"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_a8636940","line":197,"updated":"2016-07-28 19:59:55.000000000","message":"or a single expression","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":194,"context_line":"**Methods.Body**"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"* Required: yes"},{"line_number":197,"context_line":"* Type: List(YAQL Expression)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"**Extends**"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_a591ab54","line":197,"in_reply_to":"bacf61ea_a8636940","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"**Extends**"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Single or multiple class names."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"* Required: no"},{"line_number":204,"context_line":"* Type: String | YAML List"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_ab3a4396","line":201,"updated":"2016-07-28 19:59:55.000000000","message":"if \":\" is present in the type name the alias must be declared in the Namespaces (except for the empty string)","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"**Extends**"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Single or multiple class names."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"* Required: no"},{"line_number":204,"context_line":"* Type: String | YAML List"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_b878b32c","line":201,"in_reply_to":"bacf61ea_ab3a4396","updated":"2016-07-29 13:32:17.000000000","message":"Please clarify","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"**Namespaces**"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Required: yes"},{"line_number":209,"context_line":"* Type: Dict"},{"line_number":210,"context_line":"* Keys: String; Namespace alias"},{"line_number":211,"context_line":"* Values: String; Namespace full qualified name"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_e88601da","line":208,"updated":"2016-07-28 19:59:55.000000000","message":"not required","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"**Namespaces**"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Required: yes"},{"line_number":209,"context_line":"* Type: Dict"},{"line_number":210,"context_line":"* Keys: String; Namespace alias"},{"line_number":211,"context_line":"* Values: String; Namespace full qualified name"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_88cbdea4","line":208,"in_reply_to":"bacf61ea_e88601da","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Required: yes"},{"line_number":209,"context_line":"* Type: Dict"},{"line_number":210,"context_line":"* Keys: String; Namespace alias"},{"line_number":211,"context_line":"* Values: String; Namespace full qualified name"},{"line_number":212,"context_line":"* Format:"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_eba8bbdd","line":210,"updated":"2016-07-28 19:59:55.000000000","message":"aliases must be a valid yaql identifiers","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"* Required: yes"},{"line_number":209,"context_line":"* Type: Dict"},{"line_number":210,"context_line":"* Keys: String; Namespace alias"},{"line_number":211,"context_line":"* Values: String; Namespace full qualified name"},{"line_number":212,"context_line":"* Format:"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_68ce6ab5","line":210,"in_reply_to":"bacf61ea_eba8bbdd","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":211,"context_line":"* Values: String; Namespace full qualified name"},{"line_number":212,"context_line":"* Format:"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"  - Matches string in lowerCamelCase divided by dots `.`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Package structure validation"},{"line_number":217,"context_line":"----------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_8be81f12","line":214,"updated":"2016-07-28 19:59:55.000000000","message":"camelCase is a recommended style, not requirements. Dots are also not mandatory","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"* Values: String; Namespace full qualified name"},{"line_number":212,"context_line":"* Format:"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"  - Matches string in lowerCamelCase divided by dots `.`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Package structure validation"},{"line_number":217,"context_line":"----------------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_b8cd535f","line":214,"in_reply_to":"bacf61ea_8be81f12","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"be8e16e6052cf88ea37163c1c6fcf703eb7d619a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"* Format:"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"  - Matches string in lowerCamelCase divided by dots `.`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Package structure validation"},{"line_number":217,"context_line":"----------------------------"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_8ba01fa1","line":215,"updated":"2016-07-28 19:59:55.000000000","message":"There are several things that are forgotten:\n1) Imports that are used in extension methods: https://github.com/openstack/murano/blob/master/murano/tests/unit/dsl/meta/TestExtensionMethods.yaml#L62\n\n2) Meta-classes and everything that is related to it. See https://github.com/openstack/murano/blob/master/murano/tests/unit/dsl/meta/TestMeta.yaml. Meta classes have additional keywords that need to be validated","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":212,"context_line":"* Format:"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"  - Matches string in lowerCamelCase divided by dots `.`."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Package structure validation"},{"line_number":217,"context_line":"----------------------------"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_f8e18b9b","line":215,"in_reply_to":"bacf61ea_8ba01fa1","updated":"2016-07-29 13:32:17.000000000","message":"Imports - Done.\nMeta-classes require additional investigation and seem not to be a widely used feature, so  it can be done as an extension of this spec later.","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"74df6c3e5f1ca27d61cadebc70b5a47815836b49","unresolved":false,"context_lines":[{"line_number":415,"context_line":"**Methods**"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* __init__(self, filename, context\u003dNone, loader\u003dNone)"},{"line_number":418,"context_line":"* add_check(self, function) - Registers check function"},{"line_number":419,"context_line":"* run(self) - Loads file, runs registered checks. Should raise an error"},{"line_number":420,"context_line":"  or return a generator with error instances."},{"line_number":421,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_042d4e46","line":418,"range":{"start_line":418,"start_character":2,"end_line":418,"end_character":27},"updated":"2016-07-28 15:23:21.000000000","message":"We can have here extra arguments, Like keyword for which it should be executed. It may depend on implementation of single validator so may **kwargs may work here.","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":415,"context_line":"**Methods**"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* __init__(self, filename, context\u003dNone, loader\u003dNone)"},{"line_number":418,"context_line":"* add_check(self, function) - Registers check function"},{"line_number":419,"context_line":"* run(self) - Loads file, runs registered checks. Should raise an error"},{"line_number":420,"context_line":"  or return a generator with error instances."},{"line_number":421,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_68a30a50","line":418,"range":{"start_line":418,"start_character":2,"end_line":418,"end_character":27},"in_reply_to":"bacf61ea_042d4e46","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"74df6c3e5f1ca27d61cadebc70b5a47815836b49","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"::"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"  BaseLoader"},{"line_number":449,"context_line":"   +-- DirectoryLoader"},{"line_number":450,"context_line":"   +-- ZipLoader"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_84213e50","line":448,"updated":"2016-07-28 15:23:21.000000000","message":"FileLoader? To check just mpl file or manifest based on name. if matches \"manifest.yaml\" then validate as manifest if not then validate against muranoPL","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":11898,"name":"Alexander Saprykin","email":"cutwatercore@gmail.com","username":"asaprykin"},"change_message_id":"ee3e7a282ab0b7b5d8df85b7997131fc8a4ace8e","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"::"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"  BaseLoader"},{"line_number":449,"context_line":"   +-- DirectoryLoader"},{"line_number":450,"context_line":"   +-- ZipLoader"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_45a26faf","line":448,"in_reply_to":"bacf61ea_84213e50","updated":"2016-07-29 13:32:17.000000000","message":"Done","commit_id":"6c54d0188d27ffff63d9ebaa2e9e185734f3a6a6"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"44cb7d7ef700b75276d23fc53de9f76b66531f1f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"* During murano package import process only minimal set of inspections"},{"line_number":53,"context_line":"  should be performed to reduce execution time."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Toolkit should implement the following validation suites:"},{"line_number":56,"context_line":"* Package structure validation"},{"line_number":57,"context_line":"* Class structure validation"},{"line_number":58,"context_line":"* Code validation"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_175cb07b","line":55,"updated":"2016-08-02 12:53:13.000000000","message":"What about integration with some existing tools, like shellcheck, yamllint:\nhttps://review.openstack.org/#/c/344922/","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"25a85094a4c1cbb62167e26008da8e68b16ee8f2","unresolved":false,"context_lines":[{"line_number":52,"context_line":"* During murano package import process only minimal set of inspections"},{"line_number":53,"context_line":"  should be performed to reduce execution time."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Toolkit should implement the following validation suites:"},{"line_number":56,"context_line":"* Package structure validation"},{"line_number":57,"context_line":"* Class structure validation"},{"line_number":58,"context_line":"* Code validation"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_a5b919ce","line":55,"in_reply_to":"bacf61ea_175cb07b","updated":"2016-08-02 14:31:55.000000000","message":"That should be done by extensions.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"44cb7d7ef700b75276d23fc53de9f76b66531f1f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* MuranoPL class - YAML files located in ``Classes`` directory or its"},{"line_number":70,"context_line":"  subdirectories."},{"line_number":71,"context_line":"* Other - All other files."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Manifest structure"},{"line_number":75,"context_line":"^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_dd2eb941","line":72,"updated":"2016-08-02 12:53:13.000000000","message":"How about follow structure, where key is path in package:\n(PackageName root directory is equal empty string)\n         \u0027\u0027: {\n            \u0027files\u0027: [],                 \u003c----- allowed files in this path\n            \u0027dirs\u0027: [\u0027package\u0027]},        \u003c----- allowed dirs in this path\n        \u0027package\u0027: {\n            \u0027files\u0027: [\u0027manifest.yaml\u0027, \u0027logo.png\u0027, \u0027LICENSE\u0027,\n                      re.compile(\u0027\\w*.lst\u0027)],        \n            \u0027dirs\u0027: [\u0027Classes\u0027, \u0027Resources\u0027, \u0027UI\u0027]},\n        \u0027package/Classes\u0027: {\n            \u0027files\u0027: [re.compile(\u0027\\w*.yaml\u0027)],\n            \u0027dirs\u0027: []},\n        \u0027package/Resources\u0027: {\n            \u0027files\u0027: [re.compile(\u0027\\w*.template\u0027)],\n            \u0027dirs\u0027: [\u0027scripts\u0027]},\n        \u0027package/Resources/scripts\u0027: {\n            # None means, that there are no any requirements for this value\n            \u0027files\u0027: None,\n            \u0027dirs\u0027: None},\n        \u0027package/UI\u0027: {\n            \u0027files\u0027: [\u0027ui.yaml\u0027],\n            \u0027dirs\u0027: []},\n\n\nThis dict can be changed, but IMO it\u0027s good representation for package structure.\nOtherwise you will get several files in several dirs.\nAlso current representation allow easy implement check: look here:  https://review.openstack.org/#/c/345421/8/unittests/test_packages.py\n\nP.s. It\u0027s not final solution and it\u0027s possible to change some expectations.\nP.s.s Current structure does not mean, that all mentioned value should be presented, so some files or directories can be missed in real package.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"1e6a41e7b9a2b5c031ae8a18086c230f3a4a82ec","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* MuranoPL class - YAML files located in ``Classes`` directory or its"},{"line_number":70,"context_line":"  subdirectories."},{"line_number":71,"context_line":"* Other - All other files."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Manifest structure"},{"line_number":75,"context_line":"^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_08591c8f","line":72,"in_reply_to":"bacf61ea_45c93d5a","updated":"2016-08-02 14:51:22.000000000","message":"it is good idea to have a schema for file structure. May be not exactly like it is done in suggestion, but it needs to be formalized. \nI\u0027m thinking just about of list of regexps for required and optional files:\n{\u0027required\u0027: \n   [\u0027manifest.yaml\u0027, \u0027UI/ui.yaml\u0027, \u0027Classes/\\w*.yaml\u0027,...],\n \u0027optional\u0027:\n   [\u0027logo.png\u0027, \u0027Resources/\\w*.template\u0027, ...]\n}","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"25a85094a4c1cbb62167e26008da8e68b16ee8f2","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* MuranoPL class - YAML files located in ``Classes`` directory or its"},{"line_number":70,"context_line":"  subdirectories."},{"line_number":71,"context_line":"* Other - All other files."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Manifest structure"},{"line_number":75,"context_line":"^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_45c93d5a","line":72,"in_reply_to":"bacf61ea_dd2eb941","updated":"2016-08-02 14:31:55.000000000","message":"I think we can update it with it.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":69,"context_line":"* MuranoPL class - YAML files located in ``Classes`` directory or its"},{"line_number":70,"context_line":"  subdirectories."},{"line_number":71,"context_line":"* Other - All other files."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Manifest structure"},{"line_number":75,"context_line":"^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_7d5df147","line":72,"in_reply_to":"bacf61ea_dd2eb941","updated":"2016-08-02 16:23:04.000000000","message":"Just note that most of the file names are customizable. For example ui.yaml is just the default name and can differ. Classes don\u0027t have to be *.yaml, Resources doesn\u0027t have to be present and may contain arbitrary subfolders","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"44cb7d7ef700b75276d23fc53de9f76b66531f1f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"**Name**"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Package human readable name"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* Required: yes, if more than one class defined in the file"},{"line_number":97,"context_line":"* Type: String"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_3df6f58e","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":27},"updated":"2016-08-02 12:53:13.000000000","message":"Do we need to have some requirements, like only alphabetic symbols can be used in name?","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"1e6a41e7b9a2b5c031ae8a18086c230f3a4a82ec","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"**Name**"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Package human readable name"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* Required: yes, if more than one class defined in the file"},{"line_number":97,"context_line":"* Type: String"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_e8d488be","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":27},"in_reply_to":"bacf61ea_2591a953","updated":"2016-08-02 14:51:22.000000000","message":"Can be implemented later as extension with custom warning","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"25a85094a4c1cbb62167e26008da8e68b16ee8f2","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"**Name**"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Package human readable name"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* Required: yes, if more than one class defined in the file"},{"line_number":97,"context_line":"* Type: String"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_2591a953","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":27},"in_reply_to":"bacf61ea_3df6f58e","updated":"2016-08-02 14:31:55.000000000","message":"No we don\u0027t have.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Package human readable name"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* Required: yes, if more than one class defined in the file"},{"line_number":97,"context_line":"* Type: String"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"**FullName**"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_0081ec4d","line":96,"range":{"start_line":96,"start_character":12,"end_line":96,"end_character":59},"updated":"2016-08-02 16:23:04.000000000","message":"This is for the class name, not the package name","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"493e263143cc590b49280081df880592448361eb","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Package human readable name"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"* Required: yes, if more than one class defined in the file"},{"line_number":97,"context_line":"* Type: String"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"**FullName**"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_c5d062cc","line":96,"range":{"start_line":96,"start_character":12,"end_line":96,"end_character":59},"in_reply_to":"bacf61ea_0081ec4d","updated":"2016-08-03 09:12:30.000000000","message":"Done","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"44cb7d7ef700b75276d23fc53de9f76b66531f1f","unresolved":false,"context_lines":[{"line_number":171,"context_line":"* Required: no"},{"line_number":172,"context_line":"* Type: String | YAML List"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"**Namespaces**"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* Required: no"},{"line_number":177,"context_line":"* Type: Dict"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_fde9fd7f","line":174,"range":{"start_line":174,"start_character":0,"end_line":174,"end_character":14},"updated":"2016-08-02 12:53:13.000000000","message":"How about check, that imported names space really used in the file?\nIn CI/CD app we have some test for it, and it allows to remove some trash after copy-paste from other package/class","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"56c28b059e26dd61f20ba2030492375e9701a3ea","unresolved":false,"context_lines":[{"line_number":171,"context_line":"* Required: no"},{"line_number":172,"context_line":"* Type: String | YAML List"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"**Namespaces**"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* Required: no"},{"line_number":177,"context_line":"* Type: Dict"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_5e946a43","line":174,"range":{"start_line":174,"start_character":0,"end_line":174,"end_character":14},"in_reply_to":"bacf61ea_4812f459","updated":"2016-08-02 15:10:33.000000000","message":"MuranoPL is specific yaml with yaql parsing. Is it so bad it depends, but as I said it may be tricky. As \n\nIn [6]: e(\u0027new res:Instance()\u0027)\nYaqlGrammarException: Parse error: unexpected \u0027res\u0027 at position 4 of expression \u0027new res:Instance()\u0027\n\nSo we would have to check how it is done in Murano then figure how can we done for us.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"e9d8e5303df7224d1e7319335a56770a4a36c107","unresolved":false,"context_lines":[{"line_number":171,"context_line":"* Required: no"},{"line_number":172,"context_line":"* Type: String | YAML List"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"**Namespaces**"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* Required: no"},{"line_number":177,"context_line":"* Type: Dict"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_23451a17","line":174,"range":{"start_line":174,"start_character":0,"end_line":174,"end_character":14},"in_reply_to":"bacf61ea_5e946a43","updated":"2016-08-02 16:26:14.000000000","message":"yaql is extremely customizable. One point of extension is ability to introduce custom operators. In this case Murano introduces \u0027:\u0027 operator (both binary and unary) which is not available in yaql out of the box. That\u0027s why you get this exception when parsing with default yaql parser.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"7d0c836df7b908bbed2f49d88d745764cd3ee42e","unresolved":false,"context_lines":[{"line_number":171,"context_line":"* Required: no"},{"line_number":172,"context_line":"* Type: String | YAML List"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"**Namespaces**"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* Required: no"},{"line_number":177,"context_line":"* Type: Dict"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_4812f459","line":174,"range":{"start_line":174,"start_character":0,"end_line":174,"end_character":14},"in_reply_to":"bacf61ea_e501516c","updated":"2016-08-02 14:37:36.000000000","message":"We do it exactly in the same way - by parsing whole file by yaql... Is it really so bad ?","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"25a85094a4c1cbb62167e26008da8e68b16ee8f2","unresolved":false,"context_lines":[{"line_number":171,"context_line":"* Required: no"},{"line_number":172,"context_line":"* Type: String | YAML List"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"**Namespaces**"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"* Required: no"},{"line_number":177,"context_line":"* Type: Dict"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_e501516c","line":174,"range":{"start_line":174,"start_character":0,"end_line":174,"end_character":14},"in_reply_to":"bacf61ea_fde9fd7f","updated":"2016-08-02 14:31:55.000000000","message":"Can be done, but it may be tricky as we don\u0027t want to have full yaql parser there.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":186,"context_line":"**Import**"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* Required: no"},{"line_number":189,"context_line":"* Type: String, Class name"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":".. _class-properties-section:"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_c00234b4","line":189,"updated":"2016-08-02 16:23:04.000000000","message":"or a list of class names","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"493e263143cc590b49280081df880592448361eb","unresolved":false,"context_lines":[{"line_number":186,"context_line":"**Import**"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"* Required: no"},{"line_number":189,"context_line":"* Type: String, Class name"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":".. _class-properties-section:"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_e5d766bd","line":189,"in_reply_to":"bacf61ea_c00234b4","updated":"2016-08-03 09:12:30.000000000","message":"Done","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":211,"context_line":"InOut"},{"line_number":212,"context_line":"Const"},{"line_number":213,"context_line":"Runtime"},{"line_number":214,"context_line":"Config"},{"line_number":215,"context_line":"Static    Since version 1.2"},{"line_number":216,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_60ca6870","line":214,"range":{"start_line":214,"start_character":0,"end_line":214,"end_character":6},"updated":"2016-08-02 16:23:04.000000000","message":"Since 1.1","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"493e263143cc590b49280081df880592448361eb","unresolved":false,"context_lines":[{"line_number":211,"context_line":"InOut"},{"line_number":212,"context_line":"Const"},{"line_number":213,"context_line":"Runtime"},{"line_number":214,"context_line":"Config"},{"line_number":215,"context_line":"Static    Since version 1.2"},{"line_number":216,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_ea91f553","line":214,"range":{"start_line":214,"start_character":0,"end_line":214,"end_character":6},"in_reply_to":"bacf61ea_60ca6870","updated":"2016-08-03 09:12:30.000000000","message":"Done","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":218,"context_line":"**Default**"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"* Required: no"},{"line_number":221,"context_line":"* Type: YAML Scalar | YAQL Expression"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. _class-methods-section:"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_20afd095","line":221,"updated":"2016-08-02 16:23:04.000000000","message":"Any value. It can be a list, for example","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"493e263143cc590b49280081df880592448361eb","unresolved":false,"context_lines":[{"line_number":218,"context_line":"**Default**"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"* Required: no"},{"line_number":221,"context_line":"* Type: YAML Scalar | YAQL Expression"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. _class-methods-section:"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_ea78d52d","line":221,"in_reply_to":"bacf61ea_20afd095","updated":"2016-08-03 09:12:30.000000000","message":"Done","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"* Required: no"},{"line_number":221,"context_line":"* Type: YAML Scalar | YAQL Expression"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. _class-methods-section:"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Class methods"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_00ed6c8e","line":222,"updated":"2016-08-02 16:23:04.000000000","message":"What about meta-classes and their keywords?","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"493e263143cc590b49280081df880592448361eb","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"* Required: no"},{"line_number":221,"context_line":"* Type: YAML Scalar | YAQL Expression"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. _class-methods-section:"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Class methods"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_2ac14d2f","line":222,"in_reply_to":"bacf61ea_00ed6c8e","updated":"2016-08-03 09:12:30.000000000","message":"We said that we will add them in extension to it spec. I will try to add them anyway today.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":254,"context_line":"Usage"},{"line_number":255,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":256,"context_line":"Runtime   Default"},{"line_number":257,"context_line":"Static"},{"line_number":258,"context_line":"Extension"},{"line_number":259,"context_line":"Action    Deprecated since 1.4"},{"line_number":260,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_c0c35437","line":258,"range":{"start_line":257,"start_character":1,"end_line":258,"end_character":9},"updated":"2016-08-02 16:23:04.000000000","message":"Since 1.3","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":273,"context_line":"* Default: YAQL Expression"},{"line_number":274,"context_line":"* Usage: Enum"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":277,"context_line":"Usage"},{"line_number":278,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":279,"context_line":"Standard  Default"},{"line_number":280,"context_line":"VarArgs"},{"line_number":281,"context_line":"KwArgs"},{"line_number":282,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Package structure validation"},{"line_number":285,"context_line":"----------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_0078ccf7","line":282,"range":{"start_line":276,"start_character":0,"end_line":282,"end_character":30},"updated":"2016-08-02 16:23:04.000000000","message":"Since 1.4","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"493e263143cc590b49280081df880592448361eb","unresolved":false,"context_lines":[{"line_number":273,"context_line":"* Default: YAQL Expression"},{"line_number":274,"context_line":"* Usage: Enum"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":277,"context_line":"Usage"},{"line_number":278,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":279,"context_line":"Standard  Default"},{"line_number":280,"context_line":"VarArgs"},{"line_number":281,"context_line":"KwArgs"},{"line_number":282,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"Package structure validation"},{"line_number":285,"context_line":"----------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_45fc723e","line":282,"range":{"start_line":276,"start_character":0,"end_line":282,"end_character":30},"in_reply_to":"bacf61ea_0078ccf7","updated":"2016-08-03 09:12:30.000000000","message":"Done","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"44cb7d7ef700b75276d23fc53de9f76b66531f1f","unresolved":false,"context_lines":[{"line_number":299,"context_line":"Class structure validation"},{"line_number":300,"context_line":"--------------------------"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":303,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":304,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":305,"context_line":"  classname matches."}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_51190679","line":302,"range":{"start_line":302,"start_character":2,"end_line":302,"end_character":66},"updated":"2016-08-02 12:53:13.000000000","message":"AFAIK, there is check in muranoclient or in Murano itself for situation, when  UI and Class for application are not compatiable, how about adding this check to this validator too?","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"493e263143cc590b49280081df880592448361eb","unresolved":false,"context_lines":[{"line_number":299,"context_line":"Class structure validation"},{"line_number":300,"context_line":"--------------------------"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":303,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":304,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":305,"context_line":"  classname matches."}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_a5872ed6","line":302,"range":{"start_line":302,"start_character":2,"end_line":302,"end_character":66},"in_reply_to":"bacf61ea_034c5675","updated":"2016-08-03 09:12:30.000000000","message":"Thanks Stan. Probably they where thinking about just class and ui file from present catalog, but true it may be too big and if needed done by extension to this validator.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"d26c9c266f2bdf566ab53af624d4218ac9ea1e16","unresolved":false,"context_lines":[{"line_number":299,"context_line":"Class structure validation"},{"line_number":300,"context_line":"--------------------------"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":303,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":304,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":305,"context_line":"  classname matches."}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_034c5675","line":302,"range":{"start_line":302,"start_character":2,"end_line":302,"end_character":66},"in_reply_to":"bacf61ea_08b59c7d","updated":"2016-08-02 16:23:04.000000000","message":"How are you going to do that? For the start you will need to have all the class definitions from the catalog to get the properties that were inherited by the class. This validation could take more development efforts that everything else from this spec combined","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"25a85094a4c1cbb62167e26008da8e68b16ee8f2","unresolved":false,"context_lines":[{"line_number":299,"context_line":"Class structure validation"},{"line_number":300,"context_line":"--------------------------"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":303,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":304,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":305,"context_line":"  classname matches."}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_e50f9186","line":302,"range":{"start_line":302,"start_character":2,"end_line":302,"end_character":66},"in_reply_to":"bacf61ea_51190679","updated":"2016-08-02 14:31:55.000000000","message":"Hm I will check it tomorrow","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"1e6a41e7b9a2b5c031ae8a18086c230f3a4a82ec","unresolved":false,"context_lines":[{"line_number":299,"context_line":"Class structure validation"},{"line_number":300,"context_line":"--------------------------"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":303,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":304,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":305,"context_line":"  classname matches."}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_08b59c7d","line":302,"range":{"start_line":302,"start_character":2,"end_line":302,"end_character":66},"in_reply_to":"bacf61ea_e50f9186","updated":"2016-08-02 14:51:22.000000000","message":"Good catch, we need a check for UI definition compatible with Class interface","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"44cb7d7ef700b75276d23fc53de9f76b66531f1f","unresolved":false,"context_lines":[{"line_number":317,"context_line":"# Missing examples how to execute if rom cli and API for external usage"},{"line_number":318,"context_line":"# Also I think we need more details how structure of tool will be build."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"Error codes"},{"line_number":321,"context_line":"-----------"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Error code is an upper case alphanumerical sequence. The recommentdation"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_714a4a57","line":320,"range":{"start_line":320,"start_character":0,"end_line":320,"end_character":11},"updated":"2016-08-02 12:53:13.000000000","message":"this sections should be updated, according changes suggested above.","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"25a85094a4c1cbb62167e26008da8e68b16ee8f2","unresolved":false,"context_lines":[{"line_number":317,"context_line":"# Missing examples how to execute if rom cli and API for external usage"},{"line_number":318,"context_line":"# Also I think we need more details how structure of tool will be build."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"Error codes"},{"line_number":321,"context_line":"-----------"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"Error code is an upper case alphanumerical sequence. The recommentdation"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_0559058f","line":320,"range":{"start_line":320,"start_character":0,"end_line":320,"end_character":11},"in_reply_to":"bacf61ea_714a4a57","updated":"2016-08-02 14:31:55.000000000","message":"This are just examples, so there\u0027s no need to update here with more codes  or anything. I have already like 60 different errors in prototypes","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"7d0c836df7b908bbed2f49d88d745764cd3ee42e","unresolved":false,"context_lines":[{"line_number":362,"context_line":"Extensions are loaded using"},{"line_number":363,"context_line":"`stevedore \u003chttp://docs.openstack.org/developer/stevedore/\u003e`_ library."},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"CLI Usage"},{"line_number":366,"context_line":"---------"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_2864e0e3","line":365,"range":{"start_line":365,"start_character":0,"end_line":365,"end_character":9},"updated":"2016-08-02 14:37:36.000000000","message":"P.s. I forgot to mentioned, that will be good to provide list of validations, which will be used during loading package (according some words above, it will be short list for fast validation)","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"44cb7d7ef700b75276d23fc53de9f76b66531f1f","unresolved":false,"context_lines":[{"line_number":379,"context_line":"  --select\u003derrors    Check only for selected errors and warnings."},{"line_number":380,"context_line":"  --strict           Consider warnings as an errros."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"Alternatives"},{"line_number":383,"context_line":"------------"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Implement valitation as part of Murano and validate the package"},{"line_number":386,"context_line":"when it is uploaded to Murano."}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_d1a856de","line":383,"range":{"start_line":382,"start_character":0,"end_line":383,"end_character":12},"updated":"2016-08-02 12:53:13.000000000","message":"please do not do it :)","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"25a85094a4c1cbb62167e26008da8e68b16ee8f2","unresolved":false,"context_lines":[{"line_number":379,"context_line":"  --select\u003derrors    Check only for selected errors and warnings."},{"line_number":380,"context_line":"  --strict           Consider warnings as an errros."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"Alternatives"},{"line_number":383,"context_line":"------------"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Implement valitation as part of Murano and validate the package"},{"line_number":386,"context_line":"when it is uploaded to Murano."}],"source_content_type":"text/x-rst","patch_set":6,"id":"bacf61ea_854df5c6","line":383,"range":{"start_line":382,"start_character":0,"end_line":383,"end_character":12},"in_reply_to":"bacf61ea_d1a856de","updated":"2016-08-02 14:31:55.000000000","message":"ok","commit_id":"5887538962705fe2c08d76bfb70a97376f013488"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"fa534ced4dce7d335263f3148ebbf2fbf5d79310","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  subdirectory and should be valid YAML documents."},{"line_number":68,"context_line":"* Warning should be reported in case when additional files exist in ``Classes``"},{"line_number":69,"context_line":"  subdirectory but not referenced in the manifest file."},{"line_number":70,"context_line":"* UI definition file should exist."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Class validation"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bacf61ea_e7fceab6","line":70,"updated":"2016-08-05 22:31:20.000000000","message":"UI file should exist for Application packages only and even there it is optional. Also we are going to deprecate them in the next version","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"68c255fdd1aedaf07b370f756c5b45edbfa55419","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  subdirectory and should be valid YAML documents."},{"line_number":68,"context_line":"* Warning should be reported in case when additional files exist in ``Classes``"},{"line_number":69,"context_line":"  subdirectory but not referenced in the manifest file."},{"line_number":70,"context_line":"* UI definition file should exist."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Class validation"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9ad45d7e_a7b5aad1","line":70,"in_reply_to":"bacf61ea_e7fceab6","updated":"2016-08-08 08:53:52.000000000","message":"Done","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"fa534ced4dce7d335263f3148ebbf2fbf5d79310","unresolved":false,"context_lines":[{"line_number":185,"context_line":"* Type: Dict"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"  - Keys: Dependent package ``FullName``"},{"line_number":188,"context_line":"  - Values: ?"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"**UI**"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"bacf61ea_9942b20d","line":188,"updated":"2016-08-05 22:31:20.000000000","message":"version specs, similar to requirements.txt format in Python. For example \"\u003e1.2.3, \u003c1.2.5\". \"1.2.3\" is the same as \"\u003d1.2.3\" (or \"\u003d\u003d1.2.3\"), \"1.2\" is \"\u003e\u003d1.2.0, \u003c1.3.0\" (in reality a little bit more complex because of prerelease parts of SemVer)","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"68c255fdd1aedaf07b370f756c5b45edbfa55419","unresolved":false,"context_lines":[{"line_number":185,"context_line":"* Type: Dict"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"  - Keys: Dependent package ``FullName``"},{"line_number":188,"context_line":"  - Values: ?"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"**UI**"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"bacf61ea_8e01a6b1","line":188,"in_reply_to":"bacf61ea_9942b20d","updated":"2016-08-08 08:53:52.000000000","message":"Done","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"fa534ced4dce7d335263f3148ebbf2fbf5d79310","unresolved":false,"context_lines":[{"line_number":247,"context_line":"* Values: String; Namespace full qualified name"},{"line_number":248,"context_line":"* Format:"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"  - Namespace alias is a valid YAQL identifier."},{"line_number":251,"context_line":"  - Namespace FQN is a string divided by dots (``.``)."},{"line_number":252,"context_line":"  - Recommendation is to use lowerCamelCase naming style."},{"line_number":253,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"bacf61ea_39190623","line":250,"updated":"2016-08-05 22:31:20.000000000","message":"except for the \u0027\u003d\u0027","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"68c255fdd1aedaf07b370f756c5b45edbfa55419","unresolved":false,"context_lines":[{"line_number":247,"context_line":"* Values: String; Namespace full qualified name"},{"line_number":248,"context_line":"* Format:"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"  - Namespace alias is a valid YAQL identifier."},{"line_number":251,"context_line":"  - Namespace FQN is a string divided by dots (``.``)."},{"line_number":252,"context_line":"  - Recommendation is to use lowerCamelCase naming style."},{"line_number":253,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"bacf61ea_0e55b6f8","line":250,"in_reply_to":"bacf61ea_39190623","updated":"2016-08-08 08:53:52.000000000","message":"Done","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"fa534ced4dce7d335263f3148ebbf2fbf5d79310","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"**Body**"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"* Required: yes"},{"line_number":314,"context_line":"* Type: YAQL Expression | List(YAQL Expression)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"**Usage**"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bacf61ea_99b592ee","line":313,"updated":"2016-08-05 22:31:20.000000000","message":"not required","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"68c255fdd1aedaf07b370f756c5b45edbfa55419","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"**Body**"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"* Required: yes"},{"line_number":314,"context_line":"* Type: YAQL Expression | List(YAQL Expression)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"**Usage**"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bacf61ea_ce00be03","line":313,"in_reply_to":"bacf61ea_99b592ee","updated":"2016-08-08 08:53:52.000000000","message":"Done","commit_id":"2ddc7fbe366ef43f18d4ee757e0f573d9e283e75"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is"},{"line_number":84,"context_line":"  considered to be an valid expression."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"UI validation"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_18183a84","line":84,"range":{"start_line":84,"start_character":19,"end_line":84,"end_character":21},"updated":"2016-08-08 17:23:15.000000000","message":"a","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is"},{"line_number":84,"context_line":"  considered to be an valid expression."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"UI validation"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_d7ff7132","line":84,"range":{"start_line":84,"start_character":19,"end_line":84,"end_character":21},"in_reply_to":"9ad45d7e_18183a84","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":99,"context_line":"Error code consists of prefix and error number. Prefix is an upper case"},{"line_number":100,"context_line":"alphabetical sequence. It can be empty for general errors. Errors specific for"},{"line_number":101,"context_line":"some validator should use validator short name as prefix. Error number is an"},{"line_number":102,"context_line":"upper case alphanumerical sequence( one single letter ``E`` or ``W``"},{"line_number":103,"context_line":"following by three digits). Examples: ``E007``, ``MPL:E042`` for errors and"},{"line_number":104,"context_line":"``W777``,  ``UI:W123`` for warnings"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_980c2a44","line":102,"range":{"start_line":102,"start_character":26,"end_line":102,"end_character":39},"updated":"2016-08-08 17:23:15.000000000","message":"sequence (one","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":99,"context_line":"Error code consists of prefix and error number. Prefix is an upper case"},{"line_number":100,"context_line":"alphabetical sequence. It can be empty for general errors. Errors specific for"},{"line_number":101,"context_line":"some validator should use validator short name as prefix. Error number is an"},{"line_number":102,"context_line":"upper case alphanumerical sequence( one single letter ``E`` or ``W``"},{"line_number":103,"context_line":"following by three digits). Examples: ``E007``, ``MPL:E042`` for errors and"},{"line_number":104,"context_line":"``W777``,  ``UI:W123`` for warnings"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_d78651b8","line":102,"range":{"start_line":102,"start_character":26,"end_line":102,"end_character":39},"in_reply_to":"9ad45d7e_980c2a44","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"* Required: no"},{"line_number":210,"context_line":"* Type:"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Class structure"},{"line_number":213,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_fb2a807d","line":211,"updated":"2016-08-08 17:23:15.000000000","message":"What about **Version** option?\nhttp://docs.openstack.org/developer/murano/draft/appdev-guide/murano_pl/versioning.html#package-version","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"* Required: no"},{"line_number":210,"context_line":"* Type:"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Class structure"},{"line_number":213,"context_line":"^^^^^^^^^^^^^^^"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_179109f1","line":211,"in_reply_to":"9ad45d7e_fb2a807d","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":260,"context_line":"* Required: no"},{"line_number":261,"context_line":"* Type: String, Class name, List(Class names)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"**Cardinality**"},{"line_number":264,"context_line":"* Required: no"},{"line_number":265,"context_line":"* Type: Enum(One, Many)"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_1b2b14ed","line":263,"updated":"2016-08-08 17:23:15.000000000","message":"forgotten new line, it breaks following list","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":260,"context_line":"* Required: no"},{"line_number":261,"context_line":"* Type: String, Class name, List(Class names)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"**Cardinality**"},{"line_number":264,"context_line":"* Required: no"},{"line_number":265,"context_line":"* Type: Enum(One, Many)"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_57c1c1e3","line":263,"in_reply_to":"9ad45d7e_1b2b14ed","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":264,"context_line":"* Required: no"},{"line_number":265,"context_line":"* Type: Enum(One, Many)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"**Applies**"},{"line_number":268,"context_line":"* Required: no"},{"line_number":269,"context_line":"* Type: Enum(Package, Type, Method, Property, Argument, All) or List(Enum)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_3b3a5837","line":267,"updated":"2016-08-08 17:23:15.000000000","message":"ditto","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":264,"context_line":"* Required: no"},{"line_number":265,"context_line":"* Type: Enum(One, Many)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"**Applies**"},{"line_number":268,"context_line":"* Required: no"},{"line_number":269,"context_line":"* Type: Enum(Package, Type, Method, Property, Argument, All) or List(Enum)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_b7b63d88","line":267,"in_reply_to":"9ad45d7e_3b3a5837","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":268,"context_line":"* Required: no"},{"line_number":269,"context_line":"* Type: Enum(Package, Type, Method, Property, Argument, All) or List(Enum)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"**Inherited**"},{"line_number":272,"context_line":"* Required: no"},{"line_number":273,"context_line":"* Type: boolean"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_7b3cd02f","line":271,"updated":"2016-08-08 17:23:15.000000000","message":"ditto","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":268,"context_line":"* Required: no"},{"line_number":269,"context_line":"* Type: Enum(Package, Type, Method, Property, Argument, All) or List(Enum)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"**Inherited**"},{"line_number":272,"context_line":"* Required: no"},{"line_number":273,"context_line":"* Type: boolean"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_f7b0b58d","line":271,"in_reply_to":"9ad45d7e_7b3cd02f","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":332,"context_line":"* Required: no"},{"line_number":333,"context_line":"* Type: List(Dict)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"For more details see :ref:`class-properties-section`."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"**Body**"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_bb7e48ac","line":335,"range":{"start_line":335,"start_character":27,"end_line":335,"end_character":51},"updated":"2016-08-08 17:23:15.000000000","message":"\u0027methods-argument-section\u0027 you meant?","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":332,"context_line":"* Required: no"},{"line_number":333,"context_line":"* Type: List(Dict)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"For more details see :ref:`class-properties-section`."},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"**Body**"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_17a8e91e","line":335,"range":{"start_line":335,"start_character":27,"end_line":335,"end_character":51},"in_reply_to":"9ad45d7e_bb7e48ac","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"386a3685424c5ba871361b8f3b2a12c88297aa20","unresolved":false,"context_lines":[{"line_number":492,"context_line":"* ``load_plugins(self)`` - Finds validators from installed plugins"},{"line_number":493,"context_line":"* ``prepare_check_suit(self, loaded_package, validator_list)`` - Collect"},{"line_number":494,"context_line":"  prepared checks from all validators in validator_list against specified"},{"line_number":495,"context_line":"  package. Returns list with prepared checkes."},{"line_number":496,"context_line":"* ``validate_suit(list_prepared_checks)`` - Run suit of checks and report errors"},{"line_number":497,"context_line":"* ``list_errors(self, filters)``- Lists errors/warnings exposed by all available"},{"line_number":498,"context_line":"  validators"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_7679872f","line":495,"range":{"start_line":495,"start_character":38,"end_line":495,"end_character":45},"updated":"2016-08-08 17:23:15.000000000","message":"checkers","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"09daa3bf186354c301f53a7f448fc5f528bb15b1","unresolved":false,"context_lines":[{"line_number":492,"context_line":"* ``load_plugins(self)`` - Finds validators from installed plugins"},{"line_number":493,"context_line":"* ``prepare_check_suit(self, loaded_package, validator_list)`` - Collect"},{"line_number":494,"context_line":"  prepared checks from all validators in validator_list against specified"},{"line_number":495,"context_line":"  package. Returns list with prepared checkes."},{"line_number":496,"context_line":"* ``validate_suit(list_prepared_checks)`` - Run suit of checks and report errors"},{"line_number":497,"context_line":"* ``list_errors(self, filters)``- Lists errors/warnings exposed by all available"},{"line_number":498,"context_line":"  validators"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9ad45d7e_b76d9d06","line":495,"range":{"start_line":495,"start_character":38,"end_line":495,"end_character":45},"in_reply_to":"9ad45d7e_7679872f","updated":"2016-08-09 08:08:12.000000000","message":"Done","commit_id":"92068234393e8c7e1933ec579917d31a20763ba5"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"a9f29af6e90975eb536b7d942687a2b2b6c52b64","unresolved":false,"context_lines":[{"line_number":195,"context_line":"  - Keys: Dependent package ``FullName``"},{"line_number":196,"context_line":"  - Values: valid strings according to"},{"line_number":197,"context_line":"    `SemVer spec \u003chttp://semver.org/#semantic-versioning-specification-semver\u003e`_"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"**UI**"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"File with package UI definition"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9ad45d7e_3696b44c","line":198,"updated":"2016-08-09 15:59:49.000000000","message":"This is not exactly correct:\n1) SemVer doesn\u0027t cover version specs (\"\u003e\u003d1.2.3\")\n2) In SemVer version 1.2 is illegal (or mean 1.2.0 in some implementation). Here it means 1.2.*. The same for version 1 which means 1.*.*\nI think that the version strings need to be validate using the same semantic_version library that Murano uses. It supports version specs so the only thing that we improve on top of it is #2","commit_id":"60f926544fb76382c355c4360a0a10cf3bf22fd1"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"fdc6efe6f9848b18b10d86a4ffda88b173e3e364","unresolved":false,"context_lines":[{"line_number":195,"context_line":"  - Keys: Dependent package ``FullName``"},{"line_number":196,"context_line":"  - Values: valid strings according to"},{"line_number":197,"context_line":"    `SemVer spec \u003chttp://semver.org/#semantic-versioning-specification-semver\u003e`_"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"**UI**"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"File with package UI definition"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9ad45d7e_009358a4","line":198,"in_reply_to":"9ad45d7e_3696b44c","updated":"2016-08-09 22:12:14.000000000","message":"Done","commit_id":"60f926544fb76382c355c4360a0a10cf3bf22fd1"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"a9f29af6e90975eb536b7d942687a2b2b6c52b64","unresolved":false,"context_lines":[{"line_number":215,"context_line":"**Meta**"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"* Required: no"},{"line_number":218,"context_line":"* Type: Dict with metadata information"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"Class structure"},{"line_number":221,"context_line":"^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9ad45d7e_d6b9187b","line":218,"updated":"2016-08-09 15:59:49.000000000","message":"Here and below: it is either a list of dicts or a single dicts when there is only one meta (similar to method arguments). In different places of this spec you specify it either as a dict or as a list when in fact the format is the same in all cases","commit_id":"60f926544fb76382c355c4360a0a10cf3bf22fd1"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"fdc6efe6f9848b18b10d86a4ffda88b173e3e364","unresolved":false,"context_lines":[{"line_number":215,"context_line":"**Meta**"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"* Required: no"},{"line_number":218,"context_line":"* Type: Dict with metadata information"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"Class structure"},{"line_number":221,"context_line":"^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9ad45d7e_60c69449","line":218,"in_reply_to":"9ad45d7e_d6b9187b","updated":"2016-08-09 22:12:14.000000000","message":"Done","commit_id":"60f926544fb76382c355c4360a0a10cf3bf22fd1"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"a9f29af6e90975eb536b7d942687a2b2b6c52b64","unresolved":false,"context_lines":[{"line_number":268,"context_line":"* Required: no"},{"line_number":269,"context_line":"* Type: String, Class name, List(Class names)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"**Cardinality**"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"* Required: no"},{"line_number":274,"context_line":"* Type: Enum(One, Many)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"**Applies**"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"* Required: no"},{"line_number":279,"context_line":"* Type: Enum(Package, Type, Method, Property, Argument, All) or List(Enum)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"**Inherited**"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"* Required: no"},{"line_number":284,"context_line":"* Type: boolean"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"**Meta**"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"9ad45d7e_1669f025","line":284,"range":{"start_line":271,"start_character":0,"end_line":284,"end_character":15},"updated":"2016-08-09 15:59:49.000000000","message":"1) You forgot the Usage attribute (Enum(Class, Meta))\n2) All those 3 attributes can only appear in classes with Usage: Meta and should not be in regular classes","commit_id":"60f926544fb76382c355c4360a0a10cf3bf22fd1"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"fdc6efe6f9848b18b10d86a4ffda88b173e3e364","unresolved":false,"context_lines":[{"line_number":268,"context_line":"* Required: no"},{"line_number":269,"context_line":"* Type: String, Class name, List(Class names)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"**Cardinality**"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"* Required: no"},{"line_number":274,"context_line":"* Type: Enum(One, Many)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"**Applies**"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"* Required: no"},{"line_number":279,"context_line":"* Type: Enum(Package, Type, Method, Property, Argument, All) or List(Enum)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"**Inherited**"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"* Required: no"},{"line_number":284,"context_line":"* Type: boolean"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"**Meta**"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"9ad45d7e_40c55059","line":284,"range":{"start_line":271,"start_character":0,"end_line":284,"end_character":15},"in_reply_to":"9ad45d7e_1669f025","updated":"2016-08-09 22:12:14.000000000","message":"Done","commit_id":"60f926544fb76382c355c4360a0a10cf3bf22fd1"},{"author":{"_account_id":7226,"name":"Stan Lagun","email":"stan.lagun@gmail.com","username":"istalker2"},"change_message_id":"10e316aafc6f08d8818cf94c509012a4e657382e","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"  - Keys: Dependent package ``FullName``"},{"line_number":199,"context_line":"  - Values: valid spec_strings according to"},{"line_number":200,"context_line":"    `python-semanticversion docs \u003chttps://python-semanticversion.readthedocs.io/en/latest/reference.html#semantic_version.SpecItem\u003e`_"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"**UI**"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"9ad45d7e_ac5a1d28","line":200,"range":{"start_line":200,"start_character":5,"end_line":200,"end_character":133},"updated":"2016-08-10 14:30:19.000000000","message":"This is only part of the story. You can write requirement as \"1.2.3\" and it will be valid from Murano standpoint but not for the library. You can leave it empty (meaning null in YAML) and it will still be good but will not fit that syntax","commit_id":"263787d412c581614e7228f4ab0a8ff9d51805e7"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"6aef21eb8d86b23b06635426bf25a1b7751ab2d7","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"  - Keys: Dependent package ``FullName``"},{"line_number":199,"context_line":"  - Values: valid spec_strings according to"},{"line_number":200,"context_line":"    `python-semanticversion docs \u003chttps://python-semanticversion.readthedocs.io/en/latest/reference.html#semantic_version.SpecItem\u003e`_"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"**UI**"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"9ad45d7e_0c61a905","line":200,"range":{"start_line":200,"start_character":5,"end_line":200,"end_character":133},"in_reply_to":"9ad45d7e_ac5a1d28","updated":"2016-08-10 14:38:50.000000000","message":"Done","commit_id":"263787d412c581614e7228f4ab0a8ff9d51805e7"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Class validation"},{"line_number":74,"context_line":"----------------"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_55731d15","line":75,"updated":"2016-08-10 16:59:27.000000000","message":"There should be a check that a class is a vlid yaml document","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"5d7fb951958867fa63b81fcaefbc70c0d0de6df6","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Class validation"},{"line_number":74,"context_line":"----------------"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_2d7b8cc2","line":75,"in_reply_to":"9ad45d7e_282f0789","updated":"2016-08-11 16:11:15.000000000","message":"Sure, so if the yaml is invalid you cannot check it.\nHowever, sometimes it is hard to understand what is wrong with yaml: the misplaced colon or wrong indent may be hard to notice. So, my point here is that the tool should return appropriate error code which preserves the message from yaml parser: it may help the developer to find the error.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"Class validation"},{"line_number":74,"context_line":"----------------"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_282f0789","line":75,"in_reply_to":"9ad45d7e_55731d15","updated":"2016-08-11 12:50:11.000000000","message":"It is a bit separate story... We are checking structure of loaded yaml in this checker.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":74,"context_line":"----------------"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_95f59558","line":77,"range":{"start_line":77,"start_character":16,"end_line":77,"end_character":63},"updated":"2016-08-10 16:59:27.000000000","message":"The unknown keywords are just ignored, so this probably should be a warning, not an error to indicate a possible misspelled keyword.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"----------------"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_08c843a5","line":77,"range":{"start_line":77,"start_character":16,"end_line":77,"end_character":63},"in_reply_to":"9ad45d7e_95f59558","updated":"2016-08-11 12:50:11.000000000","message":"Yeap, extra key will throw warning not an error","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_b5bed962","line":78,"range":{"start_line":78,"start_character":2,"end_line":78,"end_character":41},"updated":"2016-08-10 16:59:27.000000000","message":"There is no syntax to specify the namespace the class belong to, its defined only by manifest. The \u0027\u003d\u0027 key in namespace definition is just a setting of namespace resolver. Technically the class may reference some other namespace as \u0027\u003d\u0027 or not reference any at all. So this part of the check has no sense.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"3b5d9f3972993a667c6ac8fe46b6984356acfb5e","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_4867d6b6","line":78,"range":{"start_line":78,"start_character":2,"end_line":78,"end_character":41},"in_reply_to":"9ad45d7e_b5bed962","updated":"2016-08-11 12:28:48.000000000","message":"Even so this leads to inconsistency. I would still put at least suggestion in such case.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"* Valid classes and methods should check if properties are defined"},{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_c846267a","line":78,"range":{"start_line":78,"start_character":2,"end_line":78,"end_character":41},"in_reply_to":"9ad45d7e_b5bed962","updated":"2016-08-11 12:50:11.000000000","message":"We can throw warning here, mainly because it is not obvious to the user.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* Method\u0027s bodies should be checked for MuranoPL code structure correctness,"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_1577e5d3","line":80,"range":{"start_line":80,"start_character":18,"end_line":80,"end_character":51},"updated":"2016-08-10 16:59:27.000000000","message":"This is unclear: what does \"validated against yaql\" mean? Probably it should be \"parsable into yaql expressions\"","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":77,"context_line":"  correctly and there are no extra keys that are not supported."},{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* Method\u0027s bodies should be checked for MuranoPL code structure correctness,"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_4ef1a3cc","line":80,"range":{"start_line":80,"start_character":18,"end_line":80,"end_character":51},"in_reply_to":"9ad45d7e_1577e5d3","updated":"2016-08-11 12:50:11.000000000","message":"Done","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* Method\u0027s bodies should be checked for MuranoPL code structure correctness,"},{"line_number":84,"context_line":"  which means that method body can be successfully parsed on valid MuranoPL"},{"line_number":85,"context_line":"  blocks"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_c89c945f","line":82,"range":{"start_line":81,"start_character":0,"end_line":82,"end_character":25},"updated":"2016-08-10 16:59:27.000000000","message":"This is not correct. Method blocks may consist of a single MuranoPL statement or a list of MuranoPL statements. Statement is not necessary a yaql explression: it may be a yaql expression or a regular yaml\u0027s key-value pair where key is a yaql expression and a value may be either a yaql expression or yaml construct (constant, list or dict; lists and dicts may recursively include any yaml constructs or yaql expressions). Also, key-value pair\u0027s key may be not a yaql expression but a constant, and in this case this indicates a keyword of some of MuranoPL structural blocks (i.e. \"If-Then-Else\", \"Try-Catch-Else-Finally\", \"While-Do\", \"For-In-Do\", \"Repeat-Do\", \"Match-Default-Value\", \"Switch-Default\", \"Parallel-Do\") or flow interruption keywords (\"Continue\", \"Return\", \"Break\")","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":78,"context_line":"* Check if class is in correct namespaces according to manifest and"},{"line_number":79,"context_line":"  class name matches."},{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* Method\u0027s bodies should be checked for MuranoPL code structure correctness,"},{"line_number":84,"context_line":"  which means that method body can be successfully parsed on valid MuranoPL"},{"line_number":85,"context_line":"  blocks"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_6858da56","line":82,"range":{"start_line":81,"start_character":0,"end_line":82,"end_character":25},"in_reply_to":"9ad45d7e_c89c945f","updated":"2016-08-11 12:50:11.000000000","message":"Done","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* Method\u0027s bodies should be checked for MuranoPL code structure correctness,"},{"line_number":84,"context_line":"  which means that method body can be successfully parsed on valid MuranoPL"},{"line_number":85,"context_line":"  blocks"},{"line_number":86,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is"},{"line_number":87,"context_line":"  considered to be a valid expression."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_e8aeb87f","line":85,"range":{"start_line":83,"start_character":2,"end_line":85,"end_character":8},"updated":"2016-08-10 16:59:27.000000000","message":"This should be described in more details, according to the block descriptions given in a comment above.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"* Contract fields should be validated against YAQL."},{"line_number":81,"context_line":"* Methods body should be single YAQL expression or a list of"},{"line_number":82,"context_line":"  valid YAQL expressions."},{"line_number":83,"context_line":"* Method\u0027s bodies should be checked for MuranoPL code structure correctness,"},{"line_number":84,"context_line":"  which means that method body can be successfully parsed on valid MuranoPL"},{"line_number":85,"context_line":"  blocks"},{"line_number":86,"context_line":"* (Optional) Detect code that cannot be parsed as YAQL expression but is"},{"line_number":87,"context_line":"  considered to be a valid expression."},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_289a676e","line":85,"range":{"start_line":83,"start_character":2,"end_line":85,"end_character":8},"in_reply_to":"9ad45d7e_e8aeb87f","updated":"2016-08-11 12:50:11.000000000","message":"Thx for provided details","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  `\u003chttp://docs.openstack.org/developer/murano/draft/appdev-guide/murano_packages.html#forms\u003e`_"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Errors"},{"line_number":100,"context_line":"------"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Error code consists of prefix and error number. Prefix is an upper case"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_484544b1","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":6},"updated":"2016-08-10 16:59:27.000000000","message":"The document describing mappings of error/warning codes to a particular checks and conditions should be one of the artifacts delivered when this feature is implemented. It should be explicitly referenced in Documentation Impact section","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  `\u003chttp://docs.openstack.org/developer/murano/draft/appdev-guide/murano_packages.html#forms\u003e`_"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Errors"},{"line_number":100,"context_line":"------"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Error code consists of prefix and error number. Prefix is an upper case"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_c8fd8b6f","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":6},"in_reply_to":"9ad45d7e_484544b1","updated":"2016-08-11 12:50:11.000000000","message":"It is not exactly true. This tools is going to be extendable, so it is possible to add checks with extensions.\nTool it self should be able to produce documentation about supported checks","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":6571,"name":"Krzysztof Szukiełojć","email":"kszukielojc@mirantis.com","username":"krzysztof+launchpad"},"change_message_id":"92ff96ea1c3262aaba603ebbd5f3f77ec4a81df6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  `\u003chttp://docs.openstack.org/developer/murano/draft/appdev-guide/murano_packages.html#forms\u003e`_"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Errors"},{"line_number":100,"context_line":"------"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Error code consists of prefix and error number. Prefix is an upper case"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_aeb81f76","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":6},"in_reply_to":"9ad45d7e_484544b1","updated":"2016-08-11 11:52:09.000000000","message":"Nobody cares about codes. If I\u0027m wrong it means that we deliver wrong message to user about problems in the code. So I don\u0027t see the reason why it should be part of docs. You only care about code when it needs to be skipped and that\u0027s it.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"5d7fb951958867fa63b81fcaefbc70c0d0de6df6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  `\u003chttp://docs.openstack.org/developer/murano/draft/appdev-guide/murano_packages.html#forms\u003e`_"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Errors"},{"line_number":100,"context_line":"------"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Error code consists of prefix and error number. Prefix is an upper case"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_46bfba60","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":6},"in_reply_to":"9ad45d7e_c8fd8b6f","updated":"2016-08-11 16:11:15.000000000","message":"Agree.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"adfba5028a53621fac4fca0cd15b93cc12633774","unresolved":false,"context_lines":[{"line_number":130,"context_line":"**Format**"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Application package format. Can be specified as ``\u003cFORMAT\u003e/\u003cVERSION\u003e``,"},{"line_number":133,"context_line":"where format is a format name string (can be ``MuranoPL`` or ``Heat.HOT``)."},{"line_number":134,"context_line":"If format is omitted, ``MuranoPL`` is used by default."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* Required: no"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_48738415","line":133,"range":{"start_line":133,"start_character":73,"end_line":133,"end_character":74},"updated":"2016-08-10 16:59:27.000000000","message":"The format may be of some other type (we have plugins for that). In this case the class validation is not possible, but the manifest structure validation still has to be completed successfully","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"ff5cc33134bd0f251fe05de614857c32634487e0","unresolved":false,"context_lines":[{"line_number":130,"context_line":"**Format**"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Application package format. Can be specified as ``\u003cFORMAT\u003e/\u003cVERSION\u003e``,"},{"line_number":133,"context_line":"where format is a format name string (can be ``MuranoPL`` or ``Heat.HOT``)."},{"line_number":134,"context_line":"If format is omitted, ``MuranoPL`` is used by default."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* Required: no"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_cba74009","line":133,"range":{"start_line":133,"start_character":73,"end_line":133,"end_character":74},"in_reply_to":"9ad45d7e_48738415","updated":"2016-08-11 12:50:11.000000000","message":"It is just an example. Are going to throw a warning if package format is not supported by validator","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"5d7fb951958867fa63b81fcaefbc70c0d0de6df6","unresolved":false,"context_lines":[{"line_number":130,"context_line":"**Format**"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Application package format. Can be specified as ``\u003cFORMAT\u003e/\u003cVERSION\u003e``,"},{"line_number":133,"context_line":"where format is a format name string (can be ``MuranoPL`` or ``Heat.HOT``)."},{"line_number":134,"context_line":"If format is omitted, ``MuranoPL`` is used by default."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* Required: no"}],"source_content_type":"text/x-rst","patch_set":20,"id":"9ad45d7e_a6ae762b","line":133,"range":{"start_line":133,"start_character":73,"end_line":133,"end_character":74},"in_reply_to":"9ad45d7e_cba74009","updated":"2016-08-11 16:11:15.000000000","message":"Got it.","commit_id":"371871f096b6a8e76bc8fd5af92c95955dd055fe"}]}
