)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"ad3dd6ba44efab968ff879df75362bc461dd1c5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"31209612_c688fbc6","updated":"2026-08-25 19:23:29.000000000","message":"I\u0027m AI-rewording the docstrings, since the lint rule (H405/D205/D400) requires a docstring\u0027s first line to be a complete, standalone summary sentence ending in a  period, followed by a blank line, then the rest...","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"}],"keystone/tests/unit/test_v3_trust.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"        return token"},{"line_number":1206,"context_line":""},{"line_number":1207,"context_line":"    def test_rejects_empty_methods(self):"},{"line_number":1208,"context_line":"        \"\"\"The fernet round-trip gap: ec2credential/oauth2_credential have"},{"line_number":1209,"context_line":"        no bit in the method bitmask, so a token carrying only one of"},{"line_number":1210,"context_line":"        those decodes back to an empty list on any cache miss."},{"line_number":1211,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"240882f8_3340d7c2","line":1208,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1206,"context_line":""},{"line_number":1207,"context_line":"    def test_rejects_empty_methods(self):"},{"line_number":1208,"context_line":"        \"\"\"The fernet round-trip gap: ec2credential/oauth2_credential have"},{"line_number":1209,"context_line":"        no bit in the method bitmask, so a token carrying only one of"},{"line_number":1210,"context_line":"        those decodes back to an empty list on any cache miss."},{"line_number":1211,"context_line":"        \"\"\""},{"line_number":1212,"context_line":"        self.assertTrue(delegation.is_delegated_method(self._token([])))"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffbc9a3d_a4c6cb45","line":1209,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1207,"context_line":"    def test_rejects_empty_methods(self):"},{"line_number":1208,"context_line":"        \"\"\"The fernet round-trip gap: ec2credential/oauth2_credential have"},{"line_number":1209,"context_line":"        no bit in the method bitmask, so a token carrying only one of"},{"line_number":1210,"context_line":"        those decodes back to an empty list on any cache miss."},{"line_number":1211,"context_line":"        \"\"\""},{"line_number":1212,"context_line":"        self.assertTrue(delegation.is_delegated_method(self._token([])))"},{"line_number":1213,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dcb31055_b45ca69c","line":1210,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"        \"\"\"The fernet round-trip gap: ec2credential/oauth2_credential have"},{"line_number":1209,"context_line":"        no bit in the method bitmask, so a token carrying only one of"},{"line_number":1210,"context_line":"        those decodes back to an empty list on any cache miss."},{"line_number":1211,"context_line":"        \"\"\""},{"line_number":1212,"context_line":"        self.assertTrue(delegation.is_delegated_method(self._token([])))"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":"    def test_allows_builtin_primary_method(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5123226b_2bc6b43a","line":1211,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"        )"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"    def test_rejects_unknown_future_method_by_default(self):"},{"line_number":1225,"context_line":"        \"\"\"Deny-by-default: a brand new, unreviewed method name must be"},{"line_number":1226,"context_line":"        treated as delegated until an operator or a future patch"},{"line_number":1227,"context_line":"        explicitly allowlists it -- this is the property an"},{"line_number":1228,"context_line":"        allow-by-default denylist design would not have."}],"source_content_type":"text/x-python","patch_set":1,"id":"5546b67d_f8fa0e75","line":1225,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"    def test_rejects_unknown_future_method_by_default(self):"},{"line_number":1225,"context_line":"        \"\"\"Deny-by-default: a brand new, unreviewed method name must be"},{"line_number":1226,"context_line":"        treated as delegated until an operator or a future patch"},{"line_number":1227,"context_line":"        explicitly allowlists it -- this is the property an"},{"line_number":1228,"context_line":"        allow-by-default denylist design would not have."},{"line_number":1229,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"1cdb4b72_a4e923c8","line":1226,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1224,"context_line":"    def test_rejects_unknown_future_method_by_default(self):"},{"line_number":1225,"context_line":"        \"\"\"Deny-by-default: a brand new, unreviewed method name must be"},{"line_number":1226,"context_line":"        treated as delegated until an operator or a future patch"},{"line_number":1227,"context_line":"        explicitly allowlists it -- this is the property an"},{"line_number":1228,"context_line":"        allow-by-default denylist design would not have."},{"line_number":1229,"context_line":"        \"\"\""},{"line_number":1230,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":1,"id":"92058401_df4fe90f","line":1227,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"        \"\"\"Deny-by-default: a brand new, unreviewed method name must be"},{"line_number":1226,"context_line":"        treated as delegated until an operator or a future patch"},{"line_number":1227,"context_line":"        explicitly allowlists it -- this is the property an"},{"line_number":1228,"context_line":"        allow-by-default denylist design would not have."},{"line_number":1229,"context_line":"        \"\"\""},{"line_number":1230,"context_line":"        self.assertTrue("},{"line_number":1231,"context_line":"            delegation.is_delegated_method("}],"source_content_type":"text/x-python","patch_set":1,"id":"5e09e718_fa530ce3","line":1228,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"        treated as delegated until an operator or a future patch"},{"line_number":1227,"context_line":"        explicitly allowlists it -- this is the property an"},{"line_number":1228,"context_line":"        allow-by-default denylist design would not have."},{"line_number":1229,"context_line":"        \"\"\""},{"line_number":1230,"context_line":"        self.assertTrue("},{"line_number":1231,"context_line":"            delegation.is_delegated_method("},{"line_number":1232,"context_line":"                self._token([\u0027some_future_delegated_method\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"2798a693_bafffb0c","line":1229,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1234,"context_line":"        )"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":"    def test_additional_primary_auth_methods_allows_custom_plugin(self):"},{"line_number":1237,"context_line":"        \"\"\"An operator-registered custom auth plugin (e.g. a site-specific"},{"line_number":1238,"context_line":"        SSO integration) is not mistaken for a delegated credential once"},{"line_number":1239,"context_line":"        listed in [auth] additional_primary_auth_methods."},{"line_number":1240,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"0b0d3c2b_38912fd2","line":1237,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":"    def test_additional_primary_auth_methods_allows_custom_plugin(self):"},{"line_number":1237,"context_line":"        \"\"\"An operator-registered custom auth plugin (e.g. a site-specific"},{"line_number":1238,"context_line":"        SSO integration) is not mistaken for a delegated credential once"},{"line_number":1239,"context_line":"        listed in [auth] additional_primary_auth_methods."},{"line_number":1240,"context_line":"        \"\"\""},{"line_number":1241,"context_line":"        CONF.set_override("}],"source_content_type":"text/x-python","patch_set":1,"id":"709351f3_82329e70","line":1238,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    def test_additional_primary_auth_methods_allows_custom_plugin(self):"},{"line_number":1237,"context_line":"        \"\"\"An operator-registered custom auth plugin (e.g. a site-specific"},{"line_number":1238,"context_line":"        SSO integration) is not mistaken for a delegated credential once"},{"line_number":1239,"context_line":"        listed in [auth] additional_primary_auth_methods."},{"line_number":1240,"context_line":"        \"\"\""},{"line_number":1241,"context_line":"        CONF.set_override("},{"line_number":1242,"context_line":"            \u0027additional_primary_auth_methods\u0027, [\u0027sso\u0027], group\u003d\u0027auth\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"a5ba5d67_047bd6ce","line":1239,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"        \"\"\"An operator-registered custom auth plugin (e.g. a site-specific"},{"line_number":1238,"context_line":"        SSO integration) is not mistaken for a delegated credential once"},{"line_number":1239,"context_line":"        listed in [auth] additional_primary_auth_methods."},{"line_number":1240,"context_line":"        \"\"\""},{"line_number":1241,"context_line":"        CONF.set_override("},{"line_number":1242,"context_line":"            \u0027additional_primary_auth_methods\u0027, [\u0027sso\u0027], group\u003d\u0027auth\u0027"},{"line_number":1243,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"eaac0583_e2f29a96","line":1240,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1249,"context_line":"            delegation.is_delegated_method(self._token([\u0027sso\u0027]))"},{"line_number":1250,"context_line":"        )"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"    def test_unlisted_custom_plugin_still_denied_by_default(self):"},{"line_number":1253,"context_line":"        \"\"\"Without the config option set, the same custom method is still"},{"line_number":1254,"context_line":"        denied -- adding the extension point does not weaken the default"},{"line_number":1255,"context_line":"        posture for anyone who hasn\u0027t opted in."}],"source_content_type":"text/x-python","patch_set":1,"id":"373cb40e_9248fd76","line":1252,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"        )"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"    def test_unlisted_custom_plugin_still_denied_by_default(self):"},{"line_number":1253,"context_line":"        \"\"\"Without the config option set, the same custom method is still"},{"line_number":1254,"context_line":"        denied -- adding the extension point does not weaken the default"},{"line_number":1255,"context_line":"        posture for anyone who hasn\u0027t opted in."},{"line_number":1256,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"f9eecd08_2e1f3b2c","line":1253,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"    def test_unlisted_custom_plugin_still_denied_by_default(self):"},{"line_number":1253,"context_line":"        \"\"\"Without the config option set, the same custom method is still"},{"line_number":1254,"context_line":"        denied -- adding the extension point does not weaken the default"},{"line_number":1255,"context_line":"        posture for anyone who hasn\u0027t opted in."},{"line_number":1256,"context_line":"        \"\"\""},{"line_number":1257,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":1,"id":"33c2b4aa_49f21417","line":1254,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"ce7847c1dfef81079347b4b942cee48146ae4a37","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"    def test_unlisted_custom_plugin_still_denied_by_default(self):"},{"line_number":1253,"context_line":"        \"\"\"Without the config option set, the same custom method is still"},{"line_number":1254,"context_line":"        denied -- adding the extension point does not weaken the default"},{"line_number":1255,"context_line":"        posture for anyone who hasn\u0027t opted in."},{"line_number":1256,"context_line":"        \"\"\""},{"line_number":1257,"context_line":"        self.assertTrue("},{"line_number":1258,"context_line":"            delegation.is_delegated_method(self._token([\u0027sso\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"0026e274_c22d8ec9","line":1255,"updated":"2026-08-25 16:10:12.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"eed696ba20f40571e2a3d430ddbe3c18aa91de7e"}]}
