)]}'
{"id":"openstack%2Fkeystone~980600","triplet_id":"openstack%2Fkeystone~master~I31c0b1a65fda9d45a22bbf1409362b91185bb6d3","project":"openstack/keystone","branch":"master","attention_set":{"13478":{"account":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"last_update":"2026-04-21 12:56:50.000000000","reason":"\u003cGERRIT_ACCOUNT_28619\u003e replied on the change","reason_account":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"}}},"removed_from_attention_set":{"28619":{"account":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"last_update":"2026-04-21 12:56:50.000000000","reason":"\u003cGERRIT_ACCOUNT_28619\u003e replied on the change","reason_account":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"}}},"hashtags":[],"change_id":"I31c0b1a65fda9d45a22bbf1409362b91185bb6d3","subject":"Remove legacy add_role_to_user_and_project","status":"NEW","created":"2026-03-15 09:20:12.000000000","updated":"2026-04-21 12:56:50.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":4,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"c4569a9a8c2610d259a93bed12a6fc1e554325f3","_number":980600,"virtual_id_number":980600,"owner":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},{"tag":"autogenerated:zuul:check","value":1,"date":"2026-03-15 11:31:05.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"recommended":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"all":[{"value":1,"date":"2026-04-21 12:56:50.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","value":1,"default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-03-15 09:52:52.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-03-15 11:31:05.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2026-04-21 11:38:53.000000000","updated_by":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"reviewer":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"state":"CC"},{"updated":"2026-04-21 12:56:50.000000000","updated_by":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"reviewer":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"state":"REVIEWER"}],"messages":[{"id":"f1f1c1ba9306eed0a0e35e70cf941e3c06f04dc2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"date":"2026-03-15 09:20:12.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"0cda8f6619546274af040806a5dd9fb4195f2de2","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-15 09:52:52.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/de790c6dddf3487baa5d179d3afdd106\n\n- openstack-tox-py310-arm64 https://zuul.opendev.org/t/openstack/build/c46d27d3b2d94cdaaf211ad152205b1c : SUCCESS in 18m 27s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/09ea647e0b61468c80c06b73b52b6d3d : SUCCESS in 14m 08s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/1a85752b64b749a0963c2376619fdb8d : SUCCESS in 30m 17s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"9321b8cf333a6d914694f435fe2b0a6bac71e4e0","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-15 11:31:05.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/058589a273254758824c9f7232449146\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/a6270b55a89a45ee9f36587e9b546c18 : SUCCESS in 15m 05s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4414cbf3b80e415485869f2ede55b881 : SUCCESS in 4m 56s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/24e8e640d4eb4b3682a5e5d719b5a6ee : SUCCESS in 11m 56s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/aa65635dd5a1466bb2b8210381aa14e9 : SUCCESS in 12m 06s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/7c98118bc97d407888f14c1bf6c5fef5 : SUCCESS in 8m 42s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6b114e6bbffc47bdabb51b0087a59613 : SUCCESS in 13m 34s\n- grenade https://zuul.opendev.org/t/openstack/build/80419c243530480095df8efa8e7e13a7 : SUCCESS in 35m 13s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/9bddc32472d14b1fa9e7008143dacb81 : SUCCESS in 2h 02m 59s\n- keystoneclient-devstack-functional https://zuul.opendev.org/t/openstack/build/2948412387db4adba12f6d091665be9c : SUCCESS in 10m 17s (non-voting)\n- keystone-tempest https://zuul.opendev.org/t/openstack/build/c6effea274934a1d912f0feb8448e644 : SUCCESS in 18m 52s\n- keystone-tempest-fips https://zuul.opendev.org/t/openstack/build/fd73fbd990eb41d3a7eb21ba903946cf : FAILURE in 10m 37s (non-voting)\n- keystone-tempest-federation https://zuul.opendev.org/t/openstack/build/662202b991c04c309e6e1a5612116783 : FAILURE in 15m 31s (non-voting)\n- keystone-tempest-federation-k2k https://zuul.opendev.org/t/openstack/build/7f29c9b43e5440b9aaef9d13e908bdb0 : SUCCESS in 20m 01s\n- keystone-tempest-oidc-federation https://zuul.opendev.org/t/openstack/build/f8380fc233294d6fa8a06f0e0b64ecc9 : SUCCESS in 30m 47s\n- keystone-tempest-ldap-domain-specific-driver https://zuul.opendev.org/t/openstack/build/86e81ff4f30745a7bdd79f4831947d4f : SUCCESS in 18m 41s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/37ce7ae1a4204e759b24d7b2b29efef2 : SUCCESS in 1h 01m 51s\n- keystone-protection-functional https://zuul.opendev.org/t/openstack/build/f33cdac22a2c4195a3b1b2d9e377157c : FAILURE in 27m 20s (non-voting)\n- codegenerator-openapi-identity-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/dfc6930d42364cf9b20fb842fcdecfe3 : RETRY_LIMIT in 4m 36s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"cf902515030c19740f352982df750c351373c56c","author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"date":"2026-04-21 11:38:53.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"271c5227d0af20f760c7cce69107c75bd8ded5e9","author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"date":"2026-04-21 11:43:46.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"c4569a9a8c2610d259a93bed12a6fc1e554325f3","author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"date":"2026-04-21 12:56:50.000000000","message":"Patch Set 1: Code-Review+1\n\n(2 comments)","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"bc437e7227e0ab4680aa8bcee600cf2a24bb82f5","revisions":{"bc437e7227e0ab4680aa8bcee600cf2a24bb82f5":{"kind":"REWORK","_number":1,"created":"2026-03-15 09:20:12.000000000","uploader":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"ref":"refs/changes/00/980600/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/keystone","ref":"refs/changes/00/980600/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/keystone refs/changes/00/980600/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/keystone refs/changes/00/980600/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/keystone refs/changes/00/980600/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/keystone refs/changes/00/980600/1"}}},"commit":{"parents":[{"commit":"c380616887b4d93743970a64f20e743c231436af","subject":"Remove legacy list_user_ids_for_project","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/c380616887b4d93743970a64f20e743c231436af"}]}],"author":{"name":"Boris Bobrov","email":"b.bobrov@sap.com","date":"2026-03-15 00:35:31.000000000","tz":60},"committer":{"name":"Boris Bobrov","email":"b.bobrov@sap.com","date":"2026-03-15 00:35:31.000000000","tz":60},"subject":"Remove legacy add_role_to_user_and_project","message":"Remove legacy add_role_to_user_and_project\n\nThe add_role_to_user_and_project method is a legacy V2 API remnant\nthat duplicates create_grant with subtly different behavior: it\nraises Conflict on duplicate assignments while create_grant is\nidempotent, and it lacks domain-specific role mismatch validation.\n\nThe sole production caller in bootstrap.py is replaced with\ncreate_grant, which is actually better for a bootstrap tool since\nidempotent re-runs no longer need Conflict error handling.\n\nRemove the method from the assignment manager, SQL backend, and\nabstract driver interface. Update all tests to use create_grant.\n\nGenerated-By: claude-opus-4-6 (OpenCode)\nSigned-off-by: Boris Bobrov \u003cb.bobrov@sap.com\u003e\nChange-Id: I31c0b1a65fda9d45a22bbf1409362b91185bb6d3\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/bc437e7227e0ab4680aa8bcee600cf2a24bb82f5"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/bc437e7227e0ab4680aa8bcee600cf2a24bb82f5"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"}},{"label":"Workflow","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
