)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"85c724bb89525de3d9033febc55db4fb25426cdf","unresolved":true,"context_lines":[{"line_number":12,"context_line":"Note that we don\u0027t yet enable auto-fixing so people will need to do this"},{"line_number":13,"context_line":"manually."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib328fab944a42766400f2e5087b58c8d557eead2"},{"line_number":16,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"We exclude a number of UP rules since they would incur too many changes."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"4d879b62_dcbd0200","line":15,"updated":"2026-01-26 13:10:46.000000000","message":"two change ID, probably a squash artifact","commit_id":"2af8338f724986961543cc05e3055d175e83ada2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d35321466909f2be7b284a432b7b19a2304a5f5f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Note that we don\u0027t yet enable auto-fixing so people will need to do this"},{"line_number":13,"context_line":"manually."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib328fab944a42766400f2e5087b58c8d557eead2"},{"line_number":16,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"We exclude a number of UP rules since they would incur too many changes."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"566cf9f3_74873a0c","line":15,"in_reply_to":"4d879b62_dcbd0200","updated":"2026-01-26 13:48:03.000000000","message":"Yeah, this was a squash that I didn\u0027t clean up. I had seen it earlier but didn\u0027t want to fix until I needed a rebase 😅","commit_id":"2af8338f724986961543cc05e3055d175e83ada2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4bd4fe58b732ced40b5d81016120d2f59f94ffce","unresolved":true,"context_lines":[{"line_number":17,"context_line":"E741, F601, and F811."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that we don\u0027t yet enable auto-fixing so people will need to call"},{"line_number":20,"context_line":"ruff manually to get that behavior."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I85a7729ee65f8987ed0239f80d8d0082a414ab8f"},{"line_number":23,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1bec7f1c_b14be9cd","line":20,"updated":"2026-01-26 18:51:57.000000000","message":"that a problem because it mean that we coudl merge soming in ci that will then break our ablity to run pre-commit locally.\n\n\nif we are running the check locally or in ci it shoudl run in both.\n\ni dont really see a reason not to enable fixign the lints that we are detecting form day one if we are going ot do this.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ef3a3e9f4cd56e5f3f1d9cc1c1917ea0e6874a1c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"E741, F601, and F811."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that we don\u0027t yet enable auto-fixing so people will need to call"},{"line_number":20,"context_line":"ruff manually to get that behavior."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I85a7729ee65f8987ed0239f80d8d0082a414ab8f"},{"line_number":23,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"d22e2124_f07947e4","line":20,"in_reply_to":"1bec7f1c_b14be9cd","updated":"2026-01-26 22:13:21.000000000","message":"I think you\u0027ve misunderstood what I\u0027m saying here. There\u0027s no gap between what the CI is doing and what pre-commit is doing. I\u0027m adding ruff as a pre-commit hook, and the pep8 tox target calls pre-commit. The CI calls the pep8 tox target so ruff will ultimately always be run in CI.\n\nWhat won\u0027t happen is that ruff won\u0027t auto fix violations because I\u0027m not passing the `--fix` option to the hook. To fix violations of the linter you will either need to run ruff with that option manually or fix the issues by hand like you\u0027d need to do with flake8.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8c38fd34259092052e3a672c1ae62ac3ed260a2d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"E741, F601, and F811."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that we don\u0027t yet enable auto-fixing so people will need to call"},{"line_number":20,"context_line":"ruff manually to get that behavior."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I85a7729ee65f8987ed0239f80d8d0082a414ab8f"},{"line_number":23,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"4ecc4194_ea5086ef","line":20,"in_reply_to":"d22e2124_f07947e4","updated":"2026-01-27 12:08:24.000000000","message":"your right looking at it again you didn\u0027t disable the ruff-check in the pep8 target so the enforcement in ci and locally is the saem\n\nwhat i didnt want is for the ci to allow somethign to merge that would then fail locally but that is not the case.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"85c724bb89525de3d9033febc55db4fb25426cdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8dd05ce6_ad490a8d","updated":"2026-01-26 13:10:46.000000000","message":"Looks good except the commit message.","commit_id":"2af8338f724986961543cc05e3055d175e83ada2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4bd4fe58b732ced40b5d81016120d2f59f94ffce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5abe416e_8d5465fb","updated":"2026-01-26 18:51:57.000000000","message":"+1 for using ruff check to do the upgrade fixes but i woudl prefer to either not at the pre-commit hook until we are ready to have ti auto fix or do that now.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d36c9819339d090f2ea91d656167836caf1ae19c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f6ba6431_b928ec26","updated":"2026-01-27 12:46:26.000000000","message":"comments adressed in https://review.opendev.org/c/openstack/nova/+/974843","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8c38fd34259092052e3a672c1ae62ac3ed260a2d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ac537185_9664f24a","updated":"2026-01-27 12:08:24.000000000","message":"keeping -1 for the logic bug i found.\n\nim ok to upgrade to +2 if you fix it or if you submit a follow up patch for it.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76b30d5a5728b16a530a71fc8a1ff4b1e7e50eaf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6c9c0c13_2e048da0","updated":"2026-01-26 18:27:22.000000000","message":"recheck","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6554084a16b1a32379251599820c3672961b2543","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3e366a47_97961408","in_reply_to":"ac537185_9664f24a","updated":"2026-01-27 12:42:40.000000000","message":"https://review.opendev.org/c/openstack/nova/+/974843","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"acd95a882ecccd7079ab9bb9ca911894de7ffa5a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d41cd148_bff07f60","updated":"2026-05-15 10:57:46.000000000","message":"sigh, more issues have popped up since I wrote this","commit_id":"f8b9aac55e1f58f23d62ccc1ba10bb2392e93aba"}],"nova/api/openstack/__init__.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"85c724bb89525de3d9033febc55db4fb25426cdf","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        if subclass not in encountered:"},{"line_number":42,"context_line":"            encountered.append(subclass)"},{"line_number":43,"context_line":"            # drill down to leaves first"},{"line_number":44,"context_line":"            yield from walk_class_hierarchy(subclass, encountered)"},{"line_number":45,"context_line":"            yield subclass"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ad8fa6c2_347ccedc","line":44,"updated":"2026-01-26 13:10:46.000000000","message":"yield from is available since py3.3 so this is corrcet","commit_id":"2af8338f724986961543cc05e3055d175e83ada2"}],"nova/api/openstack/compute/certificates.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"85c724bb89525de3d9033febc55db4fb25426cdf","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \"\"\"Return certificate information.\"\"\""},{"line_number":39,"context_line":"        raise webob.exc.HTTPGone()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @wsgi.expected_errors(410)"},{"line_number":42,"context_line":"    @wsgi.removed(\u002716.0.0\u0027, _removal_reason)"},{"line_number":43,"context_line":"    @validation.schema(schema.create)"},{"line_number":44,"context_line":"    @validation.response_body_schema(schema.create_response)"}],"source_content_type":"text/x-python","patch_set":3,"id":"e5a65a52_b6fcf5a7","line":41,"updated":"2026-01-26 13:10:46.000000000","message":"correct, the decorator take both an int and a tuple of ints","commit_id":"2af8338f724986961543cc05e3055d175e83ada2"}],"nova/compute/manager.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8c38fd34259092052e3a672c1ae62ac3ed260a2d","unresolved":true,"context_lines":[{"line_number":1587,"context_line":"            # have a UUID file already, as this is not our first time starting."},{"line_number":1588,"context_line":"            if nova.virt.node.read_local_node_uuid() is None:"},{"line_number":1589,"context_line":"                raise exception.InvalidConfiguration("},{"line_number":1590,"context_line":"                    \u0027No local node identity found, but this is not our \u0027"},{"line_number":1591,"context_line":"                     \u0027first startup on this host. Refusing to start after \u0027"},{"line_number":1592,"context_line":"                     \u0027potentially having lost that state!\u0027)"},{"line_number":1593,"context_line":"            return"},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"        if nova.virt.node.read_local_node_uuid():"}],"source_content_type":"text/x-python","patch_set":4,"id":"74866085_e52510d4","line":1592,"range":{"start_line":1590,"start_character":20,"end_line":1592,"end_character":59},"updated":"2026-01-27 12:08:24.000000000","message":"nit i would prefer if you fixed the alignement here.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee4557ed049eaa7ac6f2d6349c8b7f76be984e3c","unresolved":false,"context_lines":[{"line_number":1587,"context_line":"            # have a UUID file already, as this is not our first time starting."},{"line_number":1588,"context_line":"            if nova.virt.node.read_local_node_uuid() is None:"},{"line_number":1589,"context_line":"                raise exception.InvalidConfiguration("},{"line_number":1590,"context_line":"                    \u0027No local node identity found, but this is not our \u0027"},{"line_number":1591,"context_line":"                     \u0027first startup on this host. Refusing to start after \u0027"},{"line_number":1592,"context_line":"                     \u0027potentially having lost that state!\u0027)"},{"line_number":1593,"context_line":"            return"},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"        if nova.virt.node.read_local_node_uuid():"}],"source_content_type":"text/x-python","patch_set":4,"id":"3d7c90f3_79f6af5b","line":1592,"range":{"start_line":1590,"start_character":20,"end_line":1592,"end_character":59},"in_reply_to":"74866085_e52510d4","updated":"2026-01-27 12:40:24.000000000","message":"Certain people shout at me when I change stuff like this normally 😅 Done in the follow-up.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"}],"nova/objects/pci_device.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8c38fd34259092052e3a672c1ae62ac3ed260a2d","unresolved":true,"context_lines":[{"line_number":573,"context_line":"        if old_status \u003d\u003d fields.PciDeviceStatus.ALLOCATED and instance:"},{"line_number":574,"context_line":"            # Notes(yjiang5): remove this check when instance object for"},{"line_number":575,"context_line":"            # compute manager is finished"},{"line_number":576,"context_line":"            existed \u003d next((dev for dev in instance[\u0027pci_devices\u0027]"},{"line_number":577,"context_line":"                if dev.id \u003d\u003d self.id))"},{"line_number":578,"context_line":"            if isinstance(instance, dict):"},{"line_number":579,"context_line":"                instance[\u0027pci_devices\u0027].remove(existed)"},{"line_number":580,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"34114ba9_014a241a","side":"PARENT","line":577,"range":{"start_line":576,"start_character":0,"end_line":577,"end_character":38},"updated":"2026-01-27 12:08:24.000000000","message":"so i thinkin the distant past generator expresses needed the extra parens or perhaps in the past they were not valid in this context and we had to create a tupple to pass to next\n\nin either case this is adopting hte more correct syntax for py3.10+ so ya this is fine.","commit_id":"e67372b33ef12e9d198aa0e2d455fe09de8537ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee4557ed049eaa7ac6f2d6349c8b7f76be984e3c","unresolved":false,"context_lines":[{"line_number":573,"context_line":"        if old_status \u003d\u003d fields.PciDeviceStatus.ALLOCATED and instance:"},{"line_number":574,"context_line":"            # Notes(yjiang5): remove this check when instance object for"},{"line_number":575,"context_line":"            # compute manager is finished"},{"line_number":576,"context_line":"            existed \u003d next((dev for dev in instance[\u0027pci_devices\u0027]"},{"line_number":577,"context_line":"                if dev.id \u003d\u003d self.id))"},{"line_number":578,"context_line":"            if isinstance(instance, dict):"},{"line_number":579,"context_line":"                instance[\u0027pci_devices\u0027].remove(existed)"},{"line_number":580,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"8ae4b611_9ace86e6","side":"PARENT","line":577,"range":{"start_line":576,"start_character":0,"end_line":577,"end_character":38},"in_reply_to":"34114ba9_014a241a","updated":"2026-01-27 12:40:24.000000000","message":"Acknowledged","commit_id":"e67372b33ef12e9d198aa0e2d455fe09de8537ac"}],"nova/objects/request_spec.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8c38fd34259092052e3a672c1ae62ac3ed260a2d","unresolved":true,"context_lines":[{"line_number":1222,"context_line":"        # NOTE(sbauza): We are not persisting the user context since it\u0027s only"},{"line_number":1223,"context_line":"        # needed for hydrating the Retry object"},{"line_number":1224,"context_line":"        retry_obj \u003d cls()"},{"line_number":1225,"context_line":"        if (\u0027num_attempts\u0027 and \u0027hosts\u0027) not in retry_dict:"},{"line_number":1226,"context_line":"            # NOTE(sbauza): We prefer to return an empty object if the"},{"line_number":1227,"context_line":"            # primitive is not good enough"},{"line_number":1228,"context_line":"            return retry_obj"}],"source_content_type":"text/x-python","patch_set":4,"id":"707413de_af9b565b","line":1225,"range":{"start_line":1225,"start_character":8,"end_line":1225,"end_character":58},"updated":"2026-01-27 12:08:24.000000000","message":"so this is a bug before and after\n(\u0027num_attempts\u0027 and \u0027hosts\u0027) will be evaluated as \"hosts\"  then we assert hosts is not in the dict\n\nthe  `and` and `or` operator in python retrun teh object that is truty as there result\n\nin the case of and it return the latter value in the case of or the first truty value.\n\nthis should be \n\n\n```suggestion\n        if \u0027num_attempts\u0027 not in retry_dict or \u0027hosts\u0027 not in retry_dict):\n```\n\nor slightly more compactly if we ever need to extend it\n\n```\n        if  not all(k in retry_dict for k in (\u0027num_attempts\u0027,\u0027hosts\u0027))):\n```\n\nyou didn\u0027t introduce this bug but it probably good to fix it now that your reworking this code.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ee4557ed049eaa7ac6f2d6349c8b7f76be984e3c","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"        # NOTE(sbauza): We are not persisting the user context since it\u0027s only"},{"line_number":1223,"context_line":"        # needed for hydrating the Retry object"},{"line_number":1224,"context_line":"        retry_obj \u003d cls()"},{"line_number":1225,"context_line":"        if (\u0027num_attempts\u0027 and \u0027hosts\u0027) not in retry_dict:"},{"line_number":1226,"context_line":"            # NOTE(sbauza): We prefer to return an empty object if the"},{"line_number":1227,"context_line":"            # primitive is not good enough"},{"line_number":1228,"context_line":"            return retry_obj"}],"source_content_type":"text/x-python","patch_set":4,"id":"c2ccbb7c_8ca24700","line":1225,"range":{"start_line":1225,"start_character":8,"end_line":1225,"end_character":58},"in_reply_to":"707413de_af9b565b","updated":"2026-01-27 12:40:24.000000000","message":"Good point. Done in a follow-up.","commit_id":"1b8b91c4aa3c8c157ea96d47d646b4447c0b211a"}],"nova/tests/unit/policies/base.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"85c724bb89525de3d9033febc55db4fb25426cdf","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                \"project_member_or_admin\":"},{"line_number":246,"context_line":"                    \"rule:project_member_api or rule:context_is_admin\","},{"line_number":247,"context_line":"                \"project_reader_or_admin\":"},{"line_number":248,"context_line":"                    \"rule:project_reader_api or rule:context_is_admin\","},{"line_number":249,"context_line":"                \"service_api\": \"role:service\","},{"line_number":250,"context_line":"            })"},{"line_number":251,"context_line":"            self.policy.set_rules(self.rules_without_deprecation,"}],"source_content_type":"text/x-python","patch_set":3,"id":"011337a5_c5ada418","side":"PARENT","line":248,"updated":"2026-01-26 13:10:46.000000000","message":"OK this is a duplicate key in the dict update.","commit_id":"e67372b33ef12e9d198aa0e2d455fe09de8537ac"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"85c724bb89525de3d9033febc55db4fb25426cdf","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        \u0027host\u0027: \u0027fake-host\u0027,"},{"line_number":715,"context_line":"        \u0027node\u0027: \u0027fake-node\u0027,"},{"line_number":716,"context_line":"        \u0027task_state\u0027: None,"},{"line_number":717,"context_line":"        \u0027vm_state\u0027: None,"},{"line_number":718,"context_line":"        \u0027trusted_certs\u0027: None,"},{"line_number":719,"context_line":"        \u0027resources\u0027: None,"},{"line_number":720,"context_line":"        \u0027migration_context\u0027: None,"}],"source_content_type":"text/x-python","patch_set":3,"id":"a7be1ce5_108d9ca3","side":"PARENT","line":717,"updated":"2026-01-26 13:10:46.000000000","message":"yepp duplicate key","commit_id":"e67372b33ef12e9d198aa0e2d455fe09de8537ac"}]}
