)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"f9d2b1de8ee4dd235c15bcee5bd65fac0a82533c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ebaa4d5c_74b58a29","updated":"2026-09-25 15:44:22.000000000","message":"recheck","commit_id":"7bcca990bc0eaec9b6821c027541020c20a26950"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"a3eec0f752d2ee81dd204bcc0ce314d0c04e27cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f3b7af24_df277665","updated":"2026-09-30 10:49:21.000000000","message":"recheck","commit_id":"7bcca990bc0eaec9b6821c027541020c20a26950"},{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"2630f320972d8c33ed216c3c72712fcdaf7eef64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0104efce_e1faeaaa","updated":"2026-10-02 08:09:33.000000000","message":"We should resolve the API version mismatch","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"650788889144863bb90eaf04fcb03acb523aaada","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5757c556_fabf2989","updated":"2026-10-01 10:45:59.000000000","message":"recheck","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"67655ea963a6ac6cc2632238e6e8edf8b47d6c14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"78d51fb2_f54247e5","updated":"2026-10-05 14:41:03.000000000","message":"recheck","commit_id":"188ac8f7d69f2a3ae53602fd6cc2c4583b1902e3"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"87a388b598da5237d65567b99fd4952944f73c55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cc1aaf76_0fe10767","updated":"2026-10-08 13:26:25.000000000","message":"recheck","commit_id":"188ac8f7d69f2a3ae53602fd6cc2c4583b1902e3"}],"keystone/conf/identity.py":[{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"2630f320972d8c33ed216c3c72712fcdaf7eef64","unresolved":true,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"predefined_user_id_custom_pattern \u003d cfg.StrOpt("},{"line_number":232,"context_line":"    \u0027predefined_user_id_custom_pattern\u0027,"},{"line_number":233,"context_line":"    default\u003dr\u0027^[a-zA-Z0-9._@-]+$\u0027,"},{"line_number":234,"context_line":"    help\u003dutils.fmt("},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"Custom regular expression used to validate caller-specified user IDs when"}],"source_content_type":"text/x-python","patch_set":3,"id":"15fdb8b5_a54822e4","line":233,"updated":"2026-10-02 08:09:33.000000000","message":"THis allows allows ``.``, ``_``, and ``@``, which conflicts with the help text (and the spec) saying operators should keep the custom pattern a subset of Nova ``^[a-zA-Z0-9-]*$``\n\nhttps://opendev.org/openstack/nova/src/branch/master/nova/api/validation/parameter_types.py#L352","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"0b8dddcdbe3d69b99422fa3845e1c6f9484d3fa0","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"predefined_user_id_custom_pattern \u003d cfg.StrOpt("},{"line_number":232,"context_line":"    \u0027predefined_user_id_custom_pattern\u0027,"},{"line_number":233,"context_line":"    default\u003dr\u0027^[a-zA-Z0-9._@-]+$\u0027,"},{"line_number":234,"context_line":"    help\u003dutils.fmt("},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"Custom regular expression used to validate caller-specified user IDs when"}],"source_content_type":"text/x-python","patch_set":3,"id":"86e2cdf3_6f070ab1","line":233,"in_reply_to":"15fdb8b5_a54822e4","updated":"2026-10-02 13:07:01.000000000","message":"Done","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"}],"keystone/identity/id_validation.py":[{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"2630f320972d8c33ed216c3c72712fcdaf7eef64","unresolved":true,"context_lines":[{"line_number":55,"context_line":"            )"},{"line_number":56,"context_line":"    elif pattern_mode \u003d\u003d \u0027custom\u0027:"},{"line_number":57,"context_line":"        custom_pattern \u003d CONF.identity.predefined_user_id_custom_pattern"},{"line_number":58,"context_line":"        if not custom_pattern or not re.match(custom_pattern, user_id):"},{"line_number":59,"context_line":"            raise exception.ValidationError("},{"line_number":60,"context_line":"                attribute\u003d\u0027id\u0027,"},{"line_number":61,"context_line":"                target\u003df\u0027the configured custom pattern: {custom_pattern}\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c0e669cf_1201d266","line":58,"updated":"2026-10-02 08:09:33.000000000","message":"SHould we use re.fullmatch() to check against the full user ID?","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"0b8dddcdbe3d69b99422fa3845e1c6f9484d3fa0","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            )"},{"line_number":56,"context_line":"    elif pattern_mode \u003d\u003d \u0027custom\u0027:"},{"line_number":57,"context_line":"        custom_pattern \u003d CONF.identity.predefined_user_id_custom_pattern"},{"line_number":58,"context_line":"        if not custom_pattern or not re.match(custom_pattern, user_id):"},{"line_number":59,"context_line":"            raise exception.ValidationError("},{"line_number":60,"context_line":"                attribute\u003d\u0027id\u0027,"},{"line_number":61,"context_line":"                target\u003df\u0027the configured custom pattern: {custom_pattern}\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"4801a82c_f9187f17","line":58,"in_reply_to":"c0e669cf_1201d266","updated":"2026-10-02 13:07:01.000000000","message":"Done","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"}],"releasenotes/notes/explicit-user-ids-cdf1bab3717c4309.yaml":[{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"2630f320972d8c33ed216c3c72712fcdaf7eef64","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Identity API now accepts an optional caller-specified ``id`` when"},{"line_number":5,"context_line":"    creating users (Identity API v3.16), extending the caller-specified-ID"},{"line_number":6,"context_line":"    capability previously added for projects and domains (v3.15)."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * ``POST /v3/users`` accepts ``id``. The value must be a non-empty"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"a32f822f_00613567","line":5,"updated":"2026-10-02 08:09:33.000000000","message":"There\u0027s a API version mismatch - the parent patch 1002519 says Identity API v3.15, and also this patch\u0027s commit message and discovery.py keep v3.15. What is the version intent?","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"0b8dddcdbe3d69b99422fa3845e1c6f9484d3fa0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Identity API now accepts an optional caller-specified ``id`` when"},{"line_number":5,"context_line":"    creating users (Identity API v3.16), extending the caller-specified-ID"},{"line_number":6,"context_line":"    capability previously added for projects and domains (v3.15)."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * ``POST /v3/users`` accepts ``id``. The value must be a non-empty"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"4ef98c9f_38622a4d","line":5,"in_reply_to":"a32f822f_00613567","updated":"2026-10-02 13:07:01.000000000","message":"Done","commit_id":"dead9c358ca33a5a69e625f0d22d075eb9f3ea77"}]}
