)]}'
{"id":"openstack%2Fkeystone~984474","triplet_id":"openstack%2Fkeystone~master~I272455923d50eb891bc15a6ccc76c9c0cb4d469d","project":"openstack/keystone","branch":"master","attention_set":{"39026":{"account":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"last_update":"2026-04-14 00:23:43.000000000","reason":"A robot voted negatively on a label"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"I272455923d50eb891bc15a6ccc76c9c0cb4d469d","subject":"Fix project accumulation in federation mapping rules","status":"NEW","created":"2026-04-13 22:05:02.000000000","updated":"2026-04-21 11:58:02.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":2,"unresolved_comment_count":2,"has_review_started":true,"meta_rev_id":"02cb8f24696160d131fdccdc260055e1ddb890d3","_number":984474,"virtual_id_number":984474,"owner":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-04-14 11:20:34.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":{"all":[{"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":"","default_value":0,"optional":true},"Workflow":{"all":[{"_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":{"CC":[{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"}],"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-04-14 00:23:43.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:58:02.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"}],"messages":[{"id":"0d79bbcec42818d18a98229be4f529b2a97865b8","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"date":"2026-04-13 22:05:02.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"e547507f5841fb786e5d8f0228d377cb0093f1f5","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"date":"2026-04-13 22:39:51.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"f590ea8da9ee18deedc16c4d6d33142a721adbfe","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-14 00:23:43.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/416dbd9c36304da585c70cf9efe63d46\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/9e37306a2e194b5093477f9fb509663b : SUCCESS in 12m 10s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/14f0bd5b735b4717a05f752a45ef5f40 : FAILURE in 3m 16s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/144276607ed2442eac19b1e4386937bf : SUCCESS in 7m 10s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/e41e6a1809d74c188068bf8e4b8c1247 : SUCCESS in 6m 49s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/cfc6cc03915d42949f29c3050b887570 : SUCCESS in 8m 25s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/261ea0c17db74cc2b3b1a67f3b66f2fd : SUCCESS in 14m 21s\n- grenade https://zuul.opendev.org/t/openstack/build/273985e91b384c709e2a622cc3687edb : SUCCESS in 1h 05m 22s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/23e6d9483f9447c981f3095a06ce99c8 : SUCCESS in 1h 43m 06s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/e98a9771b7d24bfe9906f7dad79d7340 : SUCCESS in 12m 52s\n- keystoneclient-devstack-functional https://zuul.opendev.org/t/openstack/build/3349ad0ee81440b88662e6ee928fd6dd : SUCCESS in 19m 51s (non-voting)\n- keystone-tempest https://zuul.opendev.org/t/openstack/build/69437c42dfd041c392f58675e4c3eca6 : SUCCESS in 33m 01s\n- keystone-tempest-fips https://zuul.opendev.org/t/openstack/build/3f326562917140fca6eff43de4937b71 : FAILURE in 9m 58s (non-voting)\n- keystone-tempest-federation https://zuul.opendev.org/t/openstack/build/39e1616c67f24c0a8ba3313db8769141 : FAILURE in 25m 23s (non-voting)\n- keystone-tempest-federation-k2k https://zuul.opendev.org/t/openstack/build/787b46048c954c5eaff9168e9e495f58 : SUCCESS in 30m 53s\n- keystone-tempest-oidc-federation https://zuul.opendev.org/t/openstack/build/725fd098f9a846f3a5ee05bac2ad8664 : SUCCESS in 30m 57s\n- keystone-tempest-ldap-domain-specific-driver https://zuul.opendev.org/t/openstack/build/aeed4704e7074a288d70a210a970d0ad : SUCCESS in 36m 50s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/90d9ecef8b42401b9d58d2b93993cf47 : SUCCESS in 1h 01m 54s\n- keystone-protection-functional https://zuul.opendev.org/t/openstack/build/fdec31d4ff1c41bf92df898b9de6f696 : FAILURE in 40m 07s (non-voting)\n- codegenerator-openapi-identity-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/40b3c72c116f403ea820a7d97f890cac : SUCCESS in 3m 37s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"2bd17ae2862c913c8839e3b2b74cfee40e9cdc97","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-14 06:12:51.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/94947df023394672a4983d0c2f2c1939\n\n- openstack-tox-py310-arm64 https://zuul.opendev.org/t/openstack/build/788dc309308647b89e0d252d997e1538 : SUCCESS in 19m 57s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/6d13329b82b0434780953bfaafd4280f : SUCCESS in 13m 58s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/443d7635e3e44b0da913ef720a65a235 : SUCCESS in 21m 32s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"b7a3a76a43f1fed90320c32c4a9de727509760ff","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"date":"2026-04-14 06:44:52.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"53500c2a246b415d000122b81daff26d69163525","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-14 07:11:14.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/5d9a1e396245484c9bceab2744a56fe1\n\n- openstack-tox-py310-arm64 https://zuul.opendev.org/t/openstack/build/852ff0cc81044bcba5a1838a685170f1 : SUCCESS in 18m 13s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/20c7c963dd934a98a388373ab69d2482 : SUCCESS in 15m 59s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/0c2f68fee1f44fc8a9a62447e56cc6d8 : SUCCESS in 19m 50s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"5fcc891229acc62a304364beb66a3a6c7793267d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-14 08:02:08.000000000","message":"Patch Set 3: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/a2bd47839d864536b3357022c4f6ceb5\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/9d6a0f72750540f1aef301de364c79bd : SUCCESS in 17m 31s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/1cfedb47f9964222ac458986087563f6 : FAILURE in 3m 31s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/6a52431832ed4796beec11212d851a4e : SUCCESS in 10m 09s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/c03a0dfbfa5b42e9aad3d63af01bf1d2 : SUCCESS in 9m 33s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/c4b9a448bd944eeab1e47704df90ec06 : SUCCESS in 15m 50s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/686934afc48e44fbb859f76796f58a38 : SUCCESS in 10m 34s\n- grenade https://zuul.opendev.org/t/openstack/build/3d6fabebc8054071b0946d2b3ec3beda : SUCCESS in 1h 01m 39s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/f0c650233f86434396b6aea1c4ea66aa : SUCCESS in 1h 16m 22s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/fd0a96262aac4230a07a56d3fe722c83 : SUCCESS in 12m 19s\n- keystoneclient-devstack-functional https://zuul.opendev.org/t/openstack/build/2fdeb794746a40ceb481457f44926415 : SUCCESS in 18m 29s (non-voting)\n- keystone-tempest https://zuul.opendev.org/t/openstack/build/f2cbbfaccaae4e9f8809b7e6301fab2a : SUCCESS in 22m 27s\n- keystone-tempest-fips https://zuul.opendev.org/t/openstack/build/9ebf67dbe9864bc09110c850083b33ab : FAILURE in 12m 06s (non-voting)\n- keystone-tempest-federation https://zuul.opendev.org/t/openstack/build/9385a4ffed974bf28f29c5773dfb2fae : FAILURE in 24m 08s (non-voting)\n- keystone-tempest-federation-k2k https://zuul.opendev.org/t/openstack/build/7bb25c2dea80426299898c1fc004ccd2 : SUCCESS in 32m 53s\n- keystone-tempest-oidc-federation https://zuul.opendev.org/t/openstack/build/0be85832ecd0453d8425a418fc327304 : SUCCESS in 19m 32s\n- keystone-tempest-ldap-domain-specific-driver https://zuul.opendev.org/t/openstack/build/aec8924347e64e228352cf68bbe20c0a : SUCCESS in 38m 23s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/362dec9d7714417190b2db00b379c080 : SUCCESS in 58m 40s\n- keystone-protection-functional https://zuul.opendev.org/t/openstack/build/5e39bc8298e946bfb2f2e7a419704a83 : FAILURE in 49m 11s (non-voting)\n- codegenerator-openapi-identity-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/20243cff696740f890a1a40f3bbf04cc : SUCCESS in 6m 44s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"9d14c7d95764153af459553a2ffabcff138fb324","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"date":"2026-04-14 09:06:51.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"010959d1b3520606bababeaeb059f6127ca2ba25","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-14 11:20:34.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d0237fe782a5442e82380b595e9ff013\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/f17afcdb63a449cca71ca7fe115375dd : SUCCESS in 17m 02s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/1d04ef30c0854838af2a22e3bb578650 : SUCCESS in 4m 42s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/258cf210e71a44538c8b070e1746f55e : SUCCESS in 11m 37s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/c7d61bd9324b41abaa11fbad0490aaa9 : SUCCESS in 12m 49s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/d563c76842014257a7183c64619f1ac8 : SUCCESS in 14m 37s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/db051c06926549ef8cfb84db910359cf : SUCCESS in 13m 52s\n- grenade https://zuul.opendev.org/t/openstack/build/a1610812acdd408a9c05920bff3e7206 : SUCCESS in 37m 40s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/b3297c1f70c840719c88dd6144d9eb8c : SUCCESS in 2h 07m 16s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/246d4a5439054f169af236926bdb5115 : SUCCESS in 6m 56s\n- keystoneclient-devstack-functional https://zuul.opendev.org/t/openstack/build/3b13e0711be04c25ac30a108f64618ca : SUCCESS in 12m 31s (non-voting)\n- keystone-tempest https://zuul.opendev.org/t/openstack/build/3d116952fbfb4d92b30be83aeb0abe98 : SUCCESS in 17m 20s\n- keystone-tempest-fips https://zuul.opendev.org/t/openstack/build/80b7037c3cff4919b333022b48860177 : FAILURE in 12m 07s (non-voting)\n- keystone-tempest-federation https://zuul.opendev.org/t/openstack/build/9123d60062484b7f8661203b31e1f6bf : FAILURE in 26m 02s (non-voting)\n- keystone-tempest-federation-k2k https://zuul.opendev.org/t/openstack/build/3b53b8c82f2743c7a0c18d6b2a30cd81 : SUCCESS in 30m 41s\n- keystone-tempest-oidc-federation https://zuul.opendev.org/t/openstack/build/9800fe52ddbd4ede8a53adeaf7ef0429 : SUCCESS in 34m 48s\n- keystone-tempest-ldap-domain-specific-driver https://zuul.opendev.org/t/openstack/build/ee202c28efa04ca598aa7a5601e9a915 : SUCCESS in 20m 19s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/735a6fdb4f2a4d1ab7ec2e08755c0010 : SUCCESS in 31m 59s\n- keystone-protection-functional https://zuul.opendev.org/t/openstack/build/4556d9b7e6bd494bbb1bc10a91a0d4ea : FAILURE in 43m 54s (non-voting)\n- codegenerator-openapi-identity-tips-with-api-ref https://zuul.opendev.org/t/openstack/build/52e9d8f198544b468cff631f4c76af60 : SUCCESS in 6m 46s (non-voting)","accounts_in_message":[],"_revision_number":4},{"id":"4f794751926bf6b5f7d6a811c88b91f36ea7e4ab","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-14 11:55:49.000000000","message":"Patch Set 4:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/971d801188aa4ae6a2516f09c2c90357\n\n- openstack-tox-py310-arm64 https://zuul.opendev.org/t/openstack/build/786a7ae5d8d94227a4f755d82d726f32 : SUCCESS in 18m 29s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/e1b9f9267e81421cb888210166c3868e : SUCCESS in 14m 24s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/76d970690c67408e81d435efcc87dcbc : SUCCESS in 20m 50s (non-voting)","accounts_in_message":[],"_revision_number":4},{"id":"02cb8f24696160d131fdccdc260055e1ddb890d3","author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"date":"2026-04-21 11:58:02.000000000","message":"Patch Set 4:\n\n(2 comments)","accounts_in_message":[],"_revision_number":4}],"current_revision_number":4,"current_revision":"112d2c3ff98e47eb307bf8b48b2d3be37fae369a","revisions":{"387ddd6c38831b302879b0e149eb35c851342e3a":{"kind":"REWORK","_number":1,"created":"2026-04-13 22:05:02.000000000","uploader":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"ref":"refs/changes/74/984474/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/keystone","ref":"refs/changes/74/984474/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/keystone refs/changes/74/984474/1"}}},"commit":{"parents":[{"commit":"80d5b7bf50448073223723cf1f6001a367695e80","subject":"Merge \"Fix pagination next link duplicating URL prefix\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/80d5b7bf50448073223723cf1f6001a367695e80"}]}],"author":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-13 22:02:46.000000000","tz":120},"committer":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-13 22:04:21.000000000","tz":120},"subject":"Fix project accumulation in federation mapping rules","message":"Fix project accumulation in federation mapping rules\n\nWhen multiple federation attribute mapping rules match an assertion,\nprojects should accumulate across all matching rules. Previously,\nthe code reassigned the projects list each iteration, causing\nonly the last rule\u0027s projects to be retained.\n\nThis change modifies RuleProcessor._transform() to use extend()\ninstead of reassignment, and adds _deduplicate_projects() to merge\nduplicate projects by name and domain while preserving all\nassociated roles.\n\nCloses-Bug: #2009752\nSigned-off-by: Underknowledge \u003cunderknowledge@meantech.cc\u003e\nChange-Id: I272455923d50eb891bc15a6ccc76c9c0cb4d469d\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/387ddd6c38831b302879b0e149eb35c851342e3a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/387ddd6c38831b302879b0e149eb35c851342e3a"}]},"branch":"refs/heads/master"},"e237aac0c614b26c6d83be29dec2f70606483fd2":{"kind":"REWORK","_number":2,"created":"2026-04-13 22:39:51.000000000","uploader":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"ref":"refs/changes/74/984474/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/keystone","ref":"refs/changes/74/984474/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/keystone refs/changes/74/984474/2"}}},"commit":{"parents":[{"commit":"80d5b7bf50448073223723cf1f6001a367695e80","subject":"Merge \"Fix pagination next link duplicating URL prefix\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/80d5b7bf50448073223723cf1f6001a367695e80"}]}],"author":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-13 22:02:46.000000000","tz":120},"committer":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-13 22:39:24.000000000","tz":120},"subject":"Fix project accumulation in federation mapping rules","message":"Fix project accumulation in federation mapping rules\n\nWhen multiple federation attribute mapping rules match an assertion,\nprojects should accumulate across all matching rules. Previously,\nthe code reassigned the projects list each iteration, causing\nonly the last rule\u0027s projects to be retained.\n\nThis change modifies RuleProcessor._transform() to use extend()\ninstead of reassignment, and adds _deduplicate_projects() to merge\nduplicate projects by name and domain while preserving all\nassociated roles.\n\nCloses-Bug: #2009752\nSigned-off-by: Underknowledge \u003cunderknowledge@meantech.cc\u003e\nChange-Id: I272455923d50eb891bc15a6ccc76c9c0cb4d469d\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/e237aac0c614b26c6d83be29dec2f70606483fd2"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/e237aac0c614b26c6d83be29dec2f70606483fd2"}]},"branch":"refs/heads/master"},"46c60c267d69fd674d0d78205d6b62f5bda98892":{"kind":"REWORK","_number":3,"created":"2026-04-14 06:44:52.000000000","uploader":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"ref":"refs/changes/74/984474/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/keystone","ref":"refs/changes/74/984474/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/keystone refs/changes/74/984474/3"}}},"commit":{"parents":[{"commit":"80d5b7bf50448073223723cf1f6001a367695e80","subject":"Merge \"Fix pagination next link duplicating URL prefix\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/80d5b7bf50448073223723cf1f6001a367695e80"}]}],"author":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-13 22:02:46.000000000","tz":120},"committer":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-14 06:42:19.000000000","tz":120},"subject":"Fix project accumulation in federation mapping rules","message":"Fix project accumulation in federation mapping rules\n\nWhen multiple federation attribute mapping rules match an assertion,\nprojects should accumulate across all matching rules. Previously,\nthe code reassigned the projects list each iteration, causing\nonly the last rule\u0027s projects to be retained.\n\nThis change modifies RuleProcessor._transform() to use extend()\ninstead of reassignment, and adds _deduplicate_projects() to merge\nduplicate projects by name and domain while preserving all\nassociated roles.\n\nCloses-Bug: #2009752\nSigned-off-by: Underknowledge \u003cunderknowledge@meantech.cc\u003e\nChange-Id: I272455923d50eb891bc15a6ccc76c9c0cb4d469d\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/46c60c267d69fd674d0d78205d6b62f5bda98892"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/46c60c267d69fd674d0d78205d6b62f5bda98892"}]},"branch":"refs/heads/master"},"112d2c3ff98e47eb307bf8b48b2d3be37fae369a":{"kind":"REWORK","_number":4,"created":"2026-04-14 09:06:51.000000000","uploader":{"_account_id":39026,"name":"Philipp Wagner-Kerschbaumer","display_name":"Philipp Wagner-Kerschbaumer","email":"underknowledge@meantech.cc","username":"Underknowledge"},"ref":"refs/changes/74/984474/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/keystone","ref":"refs/changes/74/984474/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/keystone refs/changes/74/984474/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/keystone refs/changes/74/984474/4"}}},"commit":{"parents":[{"commit":"80d5b7bf50448073223723cf1f6001a367695e80","subject":"Merge \"Fix pagination next link duplicating URL prefix\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/80d5b7bf50448073223723cf1f6001a367695e80"}]}],"author":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-13 22:02:46.000000000","tz":120},"committer":{"name":"Underknowledge","email":"underknowledge@meantech.cc","date":"2026-04-14 09:06:35.000000000","tz":120},"subject":"Fix project accumulation in federation mapping rules","message":"Fix project accumulation in federation mapping rules\n\nWhen multiple federation attribute mapping rules match an assertion,\nprojects should accumulate across all matching rules. Previously,\nthe code reassigned the projects list each iteration, causing\nonly the last rule\u0027s projects to be retained.\n\nThis change modifies RuleProcessor._transform() to use extend()\ninstead of reassignment, and adds _deduplicate_projects() to merge\nduplicate projects by name and domain while preserving all\nassociated roles.\n\nCloses-Bug: #2009752\nSigned-off-by: Underknowledge \u003cunderknowledge@meantech.cc\u003e\nChange-Id: I272455923d50eb891bc15a6ccc76c9c0cb4d469d\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/112d2c3ff98e47eb307bf8b48b2d3be37fae369a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/keystone/commit/112d2c3ff98e47eb307bf8b48b2d3be37fae369a"}]},"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"},{"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":""}}}]}
