)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"4f4d0e68af2577d650f06788317b094bd38280aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1caafdeb_29f18529","updated":"2024-04-10 12:14:13.000000000","message":"Artem can you explain why you needed this change? Even though the change makes sense, I am not able to reproduce the issue. This is the code snippet that I am testing:\n\n```\nimport copy\nimport jsonschema\n\nclass UserType(object):\n    EPHEMERAL \u003d \u0027ephemeral\u0027\n    LOCAL \u003d \u0027local\u0027\n\n\nROLE_PROPERTIES \u003d {\n    \"type\": \"array\",\n    \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"name\"],\n        \"properties\": {\n            \"name\": {\n                \"type\": \"string\"\n            },\n            \"additionalProperties\": False\n        }\n    }\n}\n\nROLE_WITH_ACTIVATION_RULES_PROPERTIES \u003d copy.deepcopy(ROLE_PROPERTIES)\nROLE_WITH_ACTIVATION_RULES_PROPERTIES[\u0027items\u0027][\n    \u0027properties\u0027][\u0027activation_rule\u0027] \u003d {\"type\": \"string\"}\n\nPROJECTS_SCHEMA \u003d {\n    \"type\": \"array\",\n    \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"name\", \"roles\"],\n        \"additionalProperties\": False,\n        \"properties\": {\n            \"name\": {\"type\": \"string\"},\n            \"roles\": ROLE_PROPERTIES\n        }\n    }\n}\n\nDOMAIN_SCHEMA \u003d {\n    \"type\": \"object\",\n    \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"name\": {\"type\": \"string\"}\n    },\n    \"additionalProperties\": False\n}\n\nIDP_ATTRIBUTE_MAPPING_SCHEMA_1_0 \u003d {\n    \"type\": \"object\",\n    \"required\": [\u0027rules\u0027],\n    \"properties\": {\n        \"rules\": {\n            \"minItems\": 1,\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"object\",\n                \"required\": [\u0027local\u0027, \u0027remote\u0027],\n                \"additionalProperties\": False,\n                \"properties\": {\n                    \"local\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": False,\n                            \"properties\": {\n                                \"user\": {\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                        \"id\": {\"type\": \"string\"},\n                                        \"name\": {\"type\": \"string\"},\n                                        \"email\": {\"type\": \"string\"},\n                                        \"domain\": {\n                                            \"$ref\": \"#/definitions/domain\"\n                                        },\n                                        \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [UserType.EPHEMERAL,\n                                                     UserType.LOCAL]\n                                        }\n                                    },\n                                    \"additionalProperties\": False\n                                },\n                                \"projects\": PROJECTS_SCHEMA,\n                                \"group\": {\n                                    \"type\": \"object\",\n                                    \"oneOf\": [\n                                        {\"$ref\": \"#/definitions/group_by_id\"},\n                                        {\"$ref\": \"#/definitions/group_by_name\"}\n                                    ]\n                                },\n                                \"groups\": {\n                                    \"type\": \"string\"\n                                },\n                                \"group_ids\": {\n                                    \"type\": \"string\"\n                                },\n                                \"domain\": {\"$ref\": \"#/definitions/domain\"},\n                            }\n                        }\n                    },\n                    \"remote\": {\n                        \"minItems\": 1,\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"oneOf\": [\n                                {\"$ref\": \"#/definitions/empty\"},\n                                {\"$ref\": \"#/definitions/any_one_of\"},\n                                {\"$ref\": \"#/definitions/not_any_of\"},\n                                {\"$ref\": \"#/definitions/blacklist\"},\n                                {\"$ref\": \"#/definitions/whitelist\"}\n                            ],\n                        }\n                    }\n                }\n            }\n        },\n        \"schema_version\": {\n            \"name\": {\"type\": \"string\"}\n        }\n    },\n    \"definitions\": {\n        \"empty\": {\n            \"type\": \"object\",\n            \"required\": [\u0027type\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n            },\n            \"additionalProperties\": False,\n        },\n        \"any_one_of\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027any_one_of\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"any_one_of\": {\n                    \"type\": \"array\"\n                },\n                \"regex\": {\n                    \"type\": \"boolean\"\n                }\n            }\n        },\n        \"not_any_of\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027not_any_of\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"not_any_of\": {\n                    \"type\": \"array\"\n                },\n                \"regex\": {\n                    \"type\": \"boolean\"\n                }\n            }\n        },\n        \"blacklist\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027blacklist\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"blacklist\": {\n                    \"type\": \"array\"\n                }\n            }\n        },\n        \"whitelist\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027whitelist\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"whitelist\": {\n                    \"type\": \"array\"\n                }\n            }\n        },\n        \"domain\": DOMAIN_SCHEMA,\n        \"group_by_id\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"id\": {\"type\": \"string\"}\n            },\n            \"additionalProperties\": False,\n            \"required\": [\"id\"]\n        },\n        \"group_by_name\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"name\": {\"type\": \"string\"},\n                \"domain\": {\"$ref\": \"#/definitions/domain\"}\n            },\n            \"additionalProperties\": False,\n            \"required\": [\"name\", \"domain\"]\n        }\n    }\n}\n\nIDP_ATTRIBUTE_MAPPING_SCHEMA_2_0 \u003d copy.deepcopy(\n    IDP_ATTRIBUTE_MAPPING_SCHEMA_1_0)\n\nPROJECTS_SCHEMA_1_1 \u003d copy.deepcopy(PROJECTS_SCHEMA)\nPROJECTS_SCHEMA_1_1[\"items\"][\"properties\"][\"domain\"] \u003d DOMAIN_SCHEMA\n\nIDP_ATTRIBUTE_MAPPING_SCHEMA_2_0[\n    \u0027definitions\u0027][\u0027projects\u0027] \u003d PROJECTS_SCHEMA_1_1\nIDP_ATTRIBUTE_MAPPING_SCHEMA_2_0[\u0027properties\u0027][\u0027rules\u0027][\u0027items\u0027][\u0027properties\u0027][\n    \u0027local\u0027][\u0027items\u0027][\u0027properties\u0027][\u0027projects_json\u0027] \u003d {\"type\": \"string\"}\n\n\nIDP_ATTRIBUTE_MAPPING_SCHEMA_3_0 \u003d copy.deepcopy(\n    IDP_ATTRIBUTE_MAPPING_SCHEMA_2_0)\n\nPROJECTS_SCHEMA_1_3 \u003d copy.deepcopy(PROJECTS_SCHEMA_1_1)\nPROJECTS_SCHEMA_1_3[\n    \u0027items\u0027][\u0027properties\u0027][\u0027roles\u0027] \u003d ROLE_WITH_ACTIVATION_RULES_PROPERTIES\nIDP_ATTRIBUTE_MAPPING_SCHEMA_3_0[\n    \u0027definitions\u0027][\u0027projects\u0027] \u003d PROJECTS_SCHEMA_1_3\n\n\n\n\n\n\nattribute_mapping_project_json \u003d {\n\"rules\": [\n  {\n    \"local\": [\n      {\n        \"user\": {\n          \"name\": \"{0}\",\n          \"email\": \"{1}\",\n          \"type\": \"ephemeral\",\n          \"domain\": {\n            \"name\": \"{2}\"\n          }\n        },\n        \"domain\": {\n          \"name\": \"{2}\"\n        },\n        \"projects_json\": \"{3}\"\n      }\n    ],\n    \"remote\": [\n      {\n        \"type\": \"OIDC-preferred_username\"\n      },\n      {\n        \"type\": \"OIDC-email\"\n      },\n      {\n        \"type\": \"OIDC-openstack-user-domain\"\n      },\n      {\n        \"type\": \"OIDC-openstack-projects-client-mapper\"\n      }\n    ]\n  }\n],\n\"schema_version\": \"2.0\"}\n\njson_validator \u003d jsonschema.Draft4Validator(IDP_ATTRIBUTE_MAPPING_SCHEMA_2_0)\n\nerrors \u003d list(json_validator.iter_errors(attribute_mapping_project_json))\n\nerrors\n```\n\nThe attribute mapping defined at \"attribute_mapping_project_json\" seems to pass the validation. Are you using something different?\n\nThe schema version in this snippet is defined as:\n```\n        \"schema_version\": {\n            \"name\": {\"type\": \"string\"}\n        }\n\n```","commit_id":"32ef5075035ed2db2c96a469ab49a900c77a0ee7"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"158a33ae39847fd837329264da4eddd809ad1280","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"51bc50ea_c08fe076","updated":"2024-04-10 12:20:38.000000000","message":"because it is just a wrong json schema (https://json-schema.org/understanding-json-schema/reference/object).\nIn the keystone there is currently nearly no validation of the jsonschemas validity (that is why it got through), but in the OpenAPI initiative those are being extracted to construct full OpenAPI spec of Keystone and it is failing on this invalidity.","commit_id":"32ef5075035ed2db2c96a469ab49a900c77a0ee7"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"47c49eefed4b06915df84d9c27ecddcd0733b01f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6f24609d_b16aefa7","in_reply_to":"51bc50ea_c08fe076","updated":"2024-04-10 12:26:24.000000000","message":"Ah, I see then how you spotted the issue. \n\nThere is the validation in Keystone when we do a patch/put, but the method \"iter_errors\" does not seem to capture such error. That is probably why we never caught it before.\n\nThere is another test I performed:\n```\nimport copy\nimport jsonschema\n\n\n\nclass UserType(object):\n    EPHEMERAL \u003d \u0027ephemeral\u0027\n    LOCAL \u003d \u0027local\u0027\n\nROLE_PROPERTIES \u003d {\n    \"type\": \"array\",\n    \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"name\"],\n        \"properties\": {\n            \"name\": {\n                \"type\": \"string\"\n            },\n        },\n        \"additionalProperties\": False\n    }\n}\n\nPROJECTS_SCHEMA \u003d {\n    \"type\": \"array\",\n    \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"name\", \"roles\"],\n        \"additionalProperties\": False,\n        \"properties\": {\n            \"name\": {\"type\": \"string\"},\n            \"roles\": ROLE_PROPERTIES\n        }\n    }\n}\n\nIDP_ATTRIBUTE_MAPPING_SCHEMA_1_0 \u003d {\n    \"type\": \"object\",\n    \"required\": [\u0027rules\u0027],\n    \"properties\": {\n        \"rules\": {\n            \"minItems\": 1,\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"object\",\n                \"required\": [\u0027local\u0027, \u0027remote\u0027],\n                \"additionalProperties\": False,\n                \"properties\": {\n                    \"local\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": False,\n                            \"properties\": {\n                                \"user\": {\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                        \"id\": {\"type\": \"string\"},\n                                        \"name\": {\"type\": \"string\"},\n                                        \"email\": {\"type\": \"string\"},\n                                        \"domain\": {\n                                            \"$ref\": \"#/definitions/domain\"\n                                        },\n                                        \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [UserType.EPHEMERAL,\n                                                     UserType.LOCAL]\n                                        }\n                                    },\n                                    \"additionalProperties\": False\n                                },\n                                \"projects\": PROJECTS_SCHEMA,\n                                \"group\": {\n                                    \"type\": \"object\",\n                                    \"oneOf\": [\n                                        {\"$ref\": \"#/definitions/group_by_id\"},\n                                        {\"$ref\": \"#/definitions/group_by_name\"}\n                                    ]\n                                },\n                                \"groups\": {\n                                    \"type\": \"string\"\n                                },\n                                \"group_ids\": {\n                                    \"type\": \"string\"\n                                },\n                                \"domain\": {\"$ref\": \"#/definitions/domain\"},\n                            }\n                        }\n                    },\n                    \"remote\": {\n                        \"minItems\": 1,\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"oneOf\": [\n                                {\"$ref\": \"#/definitions/empty\"},\n                                {\"$ref\": \"#/definitions/any_one_of\"},\n                                {\"$ref\": \"#/definitions/not_any_of\"},\n                                {\"$ref\": \"#/definitions/blacklist\"},\n                                {\"$ref\": \"#/definitions/whitelist\"}\n                            ],\n                        }\n                    }\n                }\n            }\n        },\n        \"schema_version\": {\n            \"name\": {\"type\": \"string\"}\n        }\n    },\n    \"definitions\": {\n        \"empty\": {\n            \"type\": \"object\",\n            \"required\": [\u0027type\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n            },\n            \"additionalProperties\": False,\n        },\n        \"any_one_of\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027any_one_of\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"any_one_of\": {\n                    \"type\": \"array\"\n                },\n                \"regex\": {\n                    \"type\": \"boolean\"\n                }\n            }\n        },\n        \"not_any_of\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027not_any_of\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"not_any_of\": {\n                    \"type\": \"array\"\n                },\n                \"regex\": {\n                    \"type\": \"boolean\"\n                }\n            }\n        },\n        \"blacklist\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027blacklist\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"blacklist\": {\n                    \"type\": \"array\"\n                },\n                \"regex\": {\n                    \"type\": \"boolean\"\n                }\n            }\n        },\n        \"whitelist\": {\n            \"type\": \"object\",\n            \"additionalProperties\": False,\n            \"required\": [\u0027type\u0027, \u0027whitelist\u0027],\n            \"properties\": {\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"whitelist\": {\n                    \"type\": \"array\"\n                },\n                \"regex\": {\n                    \"type\": \"boolean\"\n                }\n            }\n        },\n        \"domain\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"id\": {\"type\": \"string\"},\n                \"name\": {\"type\": \"string\"}\n            },\n            \"additionalProperties\": False\n        },\n        \"group_by_id\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"id\": {\"type\": \"string\"}\n            },\n            \"additionalProperties\": False,\n            \"required\": [\"id\"]\n        },\n        \"group_by_name\": {\n            \"type\": \"object\",\n            \"properties\": {\n                \"name\": {\"type\": \"string\"},\n                \"domain\": {\"$ref\": \"#/definitions/domain\"}\n            },\n            \"additionalProperties\": False,\n            \"required\": [\"name\", \"domain\"]\n        }\n    }\n}\n\n# `IDP_ATTRIBUTE_MAPPING_SCHEMA_2_0` adds the domain option for projects,\n# the goal is to work in a similar fashion as `user` and `groups` properties\nIDP_ATTRIBUTE_MAPPING_SCHEMA_2_0 \u003d copy.deepcopy(\n    IDP_ATTRIBUTE_MAPPING_SCHEMA_1_0)\n\nPROJECTS_SCHEMA_2_0 \u003d copy.deepcopy(PROJECTS_SCHEMA)\nPROJECTS_SCHEMA_2_0[\"items\"][\"properties\"][\n    \"domain\"] \u003d {\"$ref\": \"#/definitions/domain\"}\n\nIDP_ATTRIBUTE_MAPPING_SCHEMA_2_0[\u0027properties\u0027][\u0027rules\u0027][\u0027items\u0027][\u0027properties\u0027][\n    \u0027local\u0027][\u0027items\u0027][\u0027properties\u0027][\u0027projects\u0027] \u003d PROJECTS_SCHEMA_2_0\n\nattribute_mapping_project_json \u003d {\n\"rules\": [\n  {\n    \"local\": [\n      {\n        \"user\": {\n          \"name\": \"{0}\",\n          \"email\": \"{1}\",\n          \"type\": \"ephemeral\",\n          \"domain\": {\n            \"name\": \"{2}\"\n          }\n        },\n        \"domain\": {\n          \"name\": \"{2}\"\n        },\n        \"projects\": [{\"name\": \"{3}\", \"roles\": [{\"name\": \"member\"}]}]\n      }\n    ],\n    \"remote\": [\n      {\n        \"type\": \"OIDC-preferred_username\"\n      },\n      {\n        \"type\": \"OIDC-email\"\n      },\n      {\n        \"type\": \"OIDC-openstack-user-domain\"\n      },\n      {\n        \"type\": \"OIDC-openstack-project-static-name\"\n      }\n    ]\n  }\n],\n\"schema_version\": \"2.0\"}\n\njson_validator \u003d jsonschema.Draft4Validator(IDP_ATTRIBUTE_MAPPING_SCHEMA_2_0)\n\nerrors \u003d list(json_validator.iter_errors(attribute_mapping_project_json))\n\nerrors\n```\n\nAgain, with no errors.","commit_id":"32ef5075035ed2db2c96a469ab49a900c77a0ee7"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"0dbfdcfa4db143f811791da748d4918718fc1a06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fc81e519_b3e6c537","in_reply_to":"6f24609d_b16aefa7","updated":"2024-04-10 12:49:48.000000000","message":"I see now why the validator does not throw an error:\n```\nfrom jsonschema import validate\n\nschema \u003d {\n    \"type\": \"object\",\n    \"properties\": {\n        \"name\": {\"type\": \"string\"},\n        \"age\": {\"type\": \"number\"},\n        \"schema_version\": {\"name\": {\"type\": \"string\"}},\n    },\n    \"required\": [\"name\"],\n    \"additionalProperties\": False\n}\n\nvalidate(instance\u003d{\"name\": \"John\", \"age\": 30, \"schema_version\": \"2.0\"}, schema\u003dschema)\n\nschema \u003d {\n    \"type\": \"object\",\n    \"properties\": {\n        \"name\": {\"type\": \"string\"},\n        \"age\": {\"type\": \"number\"},\n        \"schema_version\": {\"type\": \"object\", \"name\": {\"type\": \"string\"}},\n    },\n    \"required\": [\"name\"],\n    \"additionalProperties\": False\n}\n\nvalidate(instance\u003d{\"name\": \"John\", \"age\": 30, \"schema_version\": \"2.0\"}, schema\u003dschema)\n```\n\nIf we do not define the schema \"type\"as \"object\" for an object structure, the jsonschema validator will just ignore that definition; that is why the \"schema_version\" was not being validated/matched.","commit_id":"32ef5075035ed2db2c96a469ab49a900c77a0ee7"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"dd846d61d736e555d2997ec63c5274f41ace8882","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c9232e20_36286a5d","in_reply_to":"fc81e519_b3e6c537","updated":"2024-04-10 12:50:48.000000000","message":"It is something very specific that is quite difficult to spot. Thanks for spotting it!","commit_id":"32ef5075035ed2db2c96a469ab49a900c77a0ee7"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"e809604a153f72d3c6273b4b8a4cedefa5482c9f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a7da1f21_70893e20","updated":"2024-04-11 15:44:15.000000000","message":"nice finding, thanks.","commit_id":"71a2c248bcf05be688f240576d4673725a73ce19"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d5e1932c8e922647854aac0f9f12d0d5bf585328","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0933ceba_b5405807","updated":"2024-04-10 12:43:44.000000000","message":"validation of the jsonschema is not equal to the validation of the json against schema. Depending on which library and spec version you use there are different behaviors dealing with errors.\njson schema specifies required attributes to be set for certain \"types\". Normally schema is also permissive to allow extensions (that means that whatever is \"beyond\" normal stuff is left untouched).\nOpenAPI is, however, more strict in certain regards. So if you go to https://editor.swagger.io/ and leave the following schema snippet (just a relevant part of the mapping schema) you will see it is wrong:\n```\nopenapi: 3.0.3\ninfo:\n  title: dummy\n  description: dummy\n  version: \"1.0\"\npaths: {}\ncomponents:\n  schemas:\n    Dummy:\n      type: object\n      properties:\n        schema_version:\n          name:\n            type: string\n```\n\njsonschema validation (whether json is valid against schema) tend to have default to \"type\": \"string\" when \"type\" is not present. And the current schema is in that regard not specifying \"type\" at all since it is located under \"name\" attribute what is considered as a user extension.\n\nYou can also verify this by going to any online jsonschema validator (i.e. https://www.jsonschemavalidator.net/) and validate \n```\n{\n  \"schema_version\": {\"foo\": \"bar\"}\n}\n```\n\nagainst following schema \n```\n{\n    \"type\": \"object\",\n    \"propreties\": {\n      \"schema_version\": {\n        \"name\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n}\n```\n\nIt will actually tell you it is a valid json. This is not what you wanted, isn\u0027t it?","commit_id":"71a2c248bcf05be688f240576d4673725a73ce19"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"20a68442fc96b2502a10501a92ea597d20783eee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cf89bb1f_393b29f4","in_reply_to":"0933ceba_b5405807","updated":"2024-04-10 12:49:24.000000000","message":"P.S. and if you enter in jsonschemavalidator.net the corrected schema it will be also valid. That demonstrates that not all validators are correct (https://jsonschemalint.com/#!/version/draft-07/markup/json is behaving differently and properly recognizes validity)","commit_id":"71a2c248bcf05be688f240576d4673725a73ce19"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"f2351f21c14960ecc2207abdbfdecdce4a872276","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"41503666_250f732f","updated":"2025-08-13 13:32:29.000000000","message":"Hello Artem, \nI have amended this patch to fix the conflict. \n\nCan you guys review it?","commit_id":"c5151ed555299d958049c7910e874d9dfdc26448"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"0d032836d03d2c806d4392c6b3dd12635fd05d69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0e96faf2_b2e75a4f","updated":"2025-10-03 16:05:19.000000000","message":"Thanks David for this one!","commit_id":"c5151ed555299d958049c7910e874d9dfdc26448"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"35d2a3bcd180a265f831e8441d679699534484fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c405fde8_707f9a3f","updated":"2025-08-29 14:21:49.000000000","message":"Thanks for the review!","commit_id":"c5151ed555299d958049c7910e874d9dfdc26448"}]}
