)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9914,"name":"Ade Lee","email":"alee@redhat.com","username":"alee"},"change_message_id":"8547de8aa91c0dcd80c2bc308ba22a25659c1377","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5e1d5554_a7de7d66","updated":"2026-08-27 16:14:05.000000000","message":"Looks pretty good in general.","commit_id":"4fb9353c5d5404445cd15c8e46a2978a6ca0fad7"},{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"0f85796ea666eecc0ec98c9f85f3290cec96fe97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"22a851cc_c959f725","updated":"2026-10-02 07:42:34.000000000","message":"lgtm in general","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"}],"api-ref/source/v3/parameters.yaml":[{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"7ba2843a9261f46681782bca74b6b3ef052958ba","unresolved":true,"context_lines":[{"line_number":1789,"context_line":"    An optional caller-supplied ID to assign to the project at creation time"},{"line_number":1790,"context_line":"    (since Identity API v3.15). Must be a UUID in dashless lowercase hex form"},{"line_number":1791,"context_line":"    (32 characters). If omitted the server generates a UUID automatically."},{"line_number":1792,"context_line":"    Specifying an ID requires the admin role; domain managers cannot supply"},{"line_number":1793,"context_line":"    this field. If the ID is already in use the server returns 409 Conflict."},{"line_number":1794,"context_line":"  in: body"},{"line_number":1795,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"2dff1d7e_0a28352a","line":1792,"updated":"2026-09-01 13:31:22.000000000","message":"Maybe the default policy rules shouldn\u0027t be mentioned here? I should remove: \"Specifying an ID requires the admin role; domain managers cannot supply this field.\" since this will depend on the policy customer is using (default or a custom one).","commit_id":"4fb9353c5d5404445cd15c8e46a2978a6ca0fad7"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"3f781d0a9679fe46b617af432879d72d126e1cd5","unresolved":false,"context_lines":[{"line_number":1789,"context_line":"    An optional caller-supplied ID to assign to the project at creation time"},{"line_number":1790,"context_line":"    (since Identity API v3.15). Must be a UUID in dashless lowercase hex form"},{"line_number":1791,"context_line":"    (32 characters). If omitted the server generates a UUID automatically."},{"line_number":1792,"context_line":"    Specifying an ID requires the admin role; domain managers cannot supply"},{"line_number":1793,"context_line":"    this field. If the ID is already in use the server returns 409 Conflict."},{"line_number":1794,"context_line":"  in: body"},{"line_number":1795,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"363a779b_878365fb","line":1792,"in_reply_to":"2dff1d7e_0a28352a","updated":"2026-10-09 10:29:05.000000000","message":"Done","commit_id":"4fb9353c5d5404445cd15c8e46a2978a6ca0fad7"}],"doc/source/admin/cli-manage-projects-users-and-roles.rst":[{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"7ba2843a9261f46681782bca74b6b3ef052958ba","unresolved":true,"context_lines":[{"line_number":100,"context_line":"replaces the deprecated ``explicit_domain_id`` field; existing clients that"},{"line_number":101,"context_line":"send ``explicit_domain_id`` continue to work."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Only administrators may specify an ID when creating a project. Domain managers"},{"line_number":104,"context_line":"can still create projects, but the ID is generated by the server. Resource IDs"},{"line_number":105,"context_line":"must be unique across projects, domains, and users."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"d2752969_53c8ba71","line":103,"updated":"2026-09-01 13:31:22.000000000","message":"Same as before, the default policy rules shouldn\u0027t be mentioned here? I should remove: \"Only administrators may specify an ID when creating a project. Domain managers can still create projects, but the ID is generated by the server.\" since this will depend on the policy customer is using (default or a custom one).","commit_id":"4fb9353c5d5404445cd15c8e46a2978a6ca0fad7"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"3f781d0a9679fe46b617af432879d72d126e1cd5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"replaces the deprecated ``explicit_domain_id`` field; existing clients that"},{"line_number":101,"context_line":"send ``explicit_domain_id`` continue to work."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Only administrators may specify an ID when creating a project. Domain managers"},{"line_number":104,"context_line":"can still create projects, but the ID is generated by the server. Resource IDs"},{"line_number":105,"context_line":"must be unique across projects, domains, and users."},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"146dc2ad_e8c53fb6","line":103,"in_reply_to":"d2752969_53c8ba71","updated":"2026-10-09 10:29:05.000000000","message":"Done","commit_id":"4fb9353c5d5404445cd15c8e46a2978a6ca0fad7"}],"keystone/cmd/idutils.py":[{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"0f85796ea666eecc0ec98c9f85f3290cec96fe97","unresolved":true,"context_lines":[{"line_number":69,"context_line":"            )"},{"line_number":70,"context_line":"            if ("},{"line_number":71,"context_line":"                self.project_id is not None"},{"line_number":72,"context_line":"                and project[\u0027id\u0027] !\u003d self.project_id"},{"line_number":73,"context_line":"            ):"},{"line_number":74,"context_line":"                msg \u003d ("},{"line_number":75,"context_line":"                    f\u0027project `{self.project_name}` already exists \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"af68a917_0d6f339b","line":72,"updated":"2026-10-02 07:42:34.000000000","message":"project_setup() validates dashless UUID format when --project-id is set, anddetects name/id mismatch, but never calls validate_global_uniqueness(). So keystone-manage project_setup --project-id \u003cexisting-user-id\u003e could create a project that collides with a user, while POST /v3/projects would return 409.\n\nI suggest calling validate_global_uniqueness(self.project_id, \u0027project\u0027) after format validation.","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"e36164bc0999087d39650fd36084b3f0b4e3220f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            )"},{"line_number":70,"context_line":"            if ("},{"line_number":71,"context_line":"                self.project_id is not None"},{"line_number":72,"context_line":"                and project[\u0027id\u0027] !\u003d self.project_id"},{"line_number":73,"context_line":"            ):"},{"line_number":74,"context_line":"                msg \u003d ("},{"line_number":75,"context_line":"                    f\u0027project `{self.project_name}` already exists \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"31f18a7d_bc09e0bd","line":72,"in_reply_to":"1216a3a7_7cfc4a53","updated":"2026-10-09 10:56:37.000000000","message":"Done","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"},{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"63481cfb9336a6bb51bec2222f2b853eefe5cf4a","unresolved":true,"context_lines":[{"line_number":69,"context_line":"            )"},{"line_number":70,"context_line":"            if ("},{"line_number":71,"context_line":"                self.project_id is not None"},{"line_number":72,"context_line":"                and project[\u0027id\u0027] !\u003d self.project_id"},{"line_number":73,"context_line":"            ):"},{"line_number":74,"context_line":"                msg \u003d ("},{"line_number":75,"context_line":"                    f\u0027project `{self.project_name}` already exists \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1216a3a7_7cfc4a53","line":72,"in_reply_to":"af68a917_0d6f339b","updated":"2026-10-02 09:24:34.000000000","message":"Also same gap exists on the user follow up for user_setup.","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"}],"keystone/common/id_utils.py":[{"author":{"_account_id":35059,"name":"Veronika Fisarova","display_name":"vfisarov","email":"vfisarov@redhat.com","username":"vfisarov"},"change_message_id":"0f85796ea666eecc0ec98c9f85f3290cec96fe97","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    if resource_type !\u003d \u0027user\u0027:"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            PROVIDERS.identity_api.get_user(resource_id)"},{"line_number":56,"context_line":"            conflicts.append(\u0027user\u0027)"},{"line_number":57,"context_line":"        except exception.UserNotFound:"},{"line_number":58,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"f94a76f3_6ac09ec3","line":55,"updated":"2026-10-02 07:42:34.000000000","message":"validate_global_uniqueness() always checks projects/domains, but only\nchecks users when resource_type !\u003d \u0027user\u0027:\n    if resource_type !\u003d \u0027user\u0027:\n        ... get_user ...\n\nThat is fine for this patch, but the 1007452 follow-up \ncalls this helper with resource_type\u003d\u0027user\u0027, so duplicate user IDs are\nnot checked here and must rely on the DB unique constraint (different\nerror path/message).","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"3f781d0a9679fe46b617af432879d72d126e1cd5","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    if resource_type !\u003d \u0027user\u0027:"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            PROVIDERS.identity_api.get_user(resource_id)"},{"line_number":56,"context_line":"            conflicts.append(\u0027user\u0027)"},{"line_number":57,"context_line":"        except exception.UserNotFound:"},{"line_number":58,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"d554ad03_019e1942","line":55,"in_reply_to":"f94a76f3_6ac09ec3","updated":"2026-10-09 10:29:05.000000000","message":"Done","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"}],"keystone/common/policies/project.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"817391738cda6a050b9706e280262fb1651eaddc","unresolved":true,"context_lines":[{"line_number":192,"context_line":"        name\u003dbase.IDENTITY % \u0027create_project\u0027,"},{"line_number":193,"context_line":"        check_str\u003dADMIN_OR_DOMAIN_MANAGER_WITHOUT_EXPLICIT_ID,"},{"line_number":194,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027domain\u0027, \u0027project\u0027],"},{"line_number":195,"context_line":"        description\u003d("},{"line_number":196,"context_line":"            \u0027Create project. Specifying a caller-supplied id requires the \u0027"},{"line_number":197,"context_line":"            \u0027admin role; domain managers may only create projects without an \u0027"},{"line_number":198,"context_line":"            \u0027explicit id.\u0027"},{"line_number":199,"context_line":"        ),"},{"line_number":200,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/projects\u0027, \u0027method\u0027: \u0027POST\u0027}],"},{"line_number":201,"context_line":"        deprecated_rule\u003ddeprecated_create_project,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6a5038f5_3f27a0c3","line":198,"range":{"start_line":195,"start_character":21,"end_line":198,"end_character":26},"updated":"2026-10-08 10:40:06.000000000","message":"The descriptions of policy rules describes how the rule is used and IMHO it should not describe how its default works. It\u0027s confusing because users can override this anyway which results in the behavior which doesn\u0027t match the explained behavior.","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"3f781d0a9679fe46b617af432879d72d126e1cd5","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        name\u003dbase.IDENTITY % \u0027create_project\u0027,"},{"line_number":193,"context_line":"        check_str\u003dADMIN_OR_DOMAIN_MANAGER_WITHOUT_EXPLICIT_ID,"},{"line_number":194,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027domain\u0027, \u0027project\u0027],"},{"line_number":195,"context_line":"        description\u003d("},{"line_number":196,"context_line":"            \u0027Create project. Specifying a caller-supplied id requires the \u0027"},{"line_number":197,"context_line":"            \u0027admin role; domain managers may only create projects without an \u0027"},{"line_number":198,"context_line":"            \u0027explicit id.\u0027"},{"line_number":199,"context_line":"        ),"},{"line_number":200,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/projects\u0027, \u0027method\u0027: \u0027POST\u0027}],"},{"line_number":201,"context_line":"        deprecated_rule\u003ddeprecated_create_project,"}],"source_content_type":"text/x-python","patch_set":2,"id":"59e6410b_7b92cfaa","line":198,"range":{"start_line":195,"start_character":21,"end_line":198,"end_character":26},"in_reply_to":"6a5038f5_3f27a0c3","updated":"2026-10-09 10:29:05.000000000","message":"Done","commit_id":"93a71dba3ea968f3664d41fc55c3cf9cb64622e4"}],"releasenotes/notes/explicit-project-domain-ids-7a3c1e9b4d2f80c1.yaml":[{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"7ba2843a9261f46681782bca74b6b3ef052958ba","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    creating projects and domains (Identity API v3.15)."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * ``POST /v3/projects`` accepts ``id``. The value must be a dashless UUID"},{"line_number":8,"context_line":"      (32 lowercase hexadecimal characters). Specifying an ID requires the"},{"line_number":9,"context_line":"      admin role; domain managers may still create projects without an ID."},{"line_number":10,"context_line":"    * ``POST /v3/domains`` accepts ``id`` as the preferred alias for the"},{"line_number":11,"context_line":"      existing ``explicit_domain_id`` field. ``explicit_domain_id`` remains"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"4d157ac2_4db11bb5","line":8,"updated":"2026-09-01 13:31:22.000000000","message":"Same as before, the default policy rules shouldn\u0027t be mentioned here? I should remove: \"Specifying an ID requires the admin role; domain managers may still create projects without an ID.\" since this will depend on the policy customer is using (default or a custom one).","commit_id":"4fb9353c5d5404445cd15c8e46a2978a6ca0fad7"},{"author":{"_account_id":34120,"name":"Andre Aranha","display_name":"afariasa","email":"afariasa@redhat.com","username":"afariasa"},"change_message_id":"3f781d0a9679fe46b617af432879d72d126e1cd5","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    creating projects and domains (Identity API v3.15)."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    * ``POST /v3/projects`` accepts ``id``. The value must be a dashless UUID"},{"line_number":8,"context_line":"      (32 lowercase hexadecimal characters). Specifying an ID requires the"},{"line_number":9,"context_line":"      admin role; domain managers may still create projects without an ID."},{"line_number":10,"context_line":"    * ``POST /v3/domains`` accepts ``id`` as the preferred alias for the"},{"line_number":11,"context_line":"      existing ``explicit_domain_id`` field. ``explicit_domain_id`` remains"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"126a8fc0_2e446d33","line":8,"in_reply_to":"4d157ac2_4db11bb5","updated":"2026-10-09 10:29:05.000000000","message":"Done","commit_id":"4fb9353c5d5404445cd15c8e46a2978a6ca0fad7"}]}
