)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"bdcb44fbf3b5ed0d23c30f41e89806e43043d10c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6ee29b55_1f41740f","updated":"2025-08-31 11:42:37.000000000","message":"recheck — flakes... StopIteration from mock side_effect, temptest\u0027s Neutron IPAM conflict (IpAddressAlreadyAllocated)","commit_id":"44751ec1265126e0dfef5fbdbf3ed4aaf2d63c1b"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0647379f46dc1bc0b687396fabcb973c3d1665a3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0ae0a7fc_68f89e61","updated":"2025-09-02 18:42:14.000000000","message":"How are you scoping this? Curious where you drew the line between annotated and unannotated methods. I assume the plan is to annotate them all?","commit_id":"ad98d2189b114fafee5980c83210e72bc46c1a1b"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"0622bf89df3ab289a4a83a6454476b9df001fd65","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"81e8a6b7_98f16cda","in_reply_to":"0ae0a7fc_68f89e61","updated":"2025-09-03 15:03:23.000000000","message":"There are a few exclusions; tests/|/cmd/|examples, ..., then I just annotated the funcs, files, and modules `mypy` screamed at it about.\n\nI\u0027m working on an update.","commit_id":"ad98d2189b114fafee5980c83210e72bc46c1a1b"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"7455f20f95a7110704f9380602851df6ff815d77","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"44e3306b_a5676843","in_reply_to":"81e8a6b7_98f16cda","updated":"2025-09-08 09:34:59.000000000","message":"Acknowledged.","commit_id":"ad98d2189b114fafee5980c83210e72bc46c1a1b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0831f67f697ec745d144029b91ab4bc18f209a24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"fe002f42_41ce9619","updated":"2025-11-21 21:42:28.000000000","message":"cid, if you can rebase and get this in a non-wip form, I can dedicate to spending some time to reviewing it. It might also help to find another reviewer who we can pair up with and just try and get it taken care of quickly.","commit_id":"e2adfb2d717528a3a10c9446d23ebd355ccc46d5"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"da014b90d0a9803fbc9210a1162d92dd850ae187","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e987fd86_2ae4b060","in_reply_to":"fe002f42_41ce9619","updated":"2025-12-03 20:10:23.000000000","message":"I\u0027m working on it now. I should have an updated patch by tomorrow.","commit_id":"e2adfb2d717528a3a10c9446d23ebd355ccc46d5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b96633973cc62e13b70b80469d2e7450084aa14f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0a9d33e7_21022293","updated":"2025-12-05 14:38:18.000000000","message":"Cid, leaving this comment. I\u0027m thinking a follow-up is likely okay, at least thus far. We should ideally doublecheck the startup logs and all.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f797519494d32ea37d44d84f5feaa696321cc78b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0ffdd003_5639e21f","updated":"2025-12-05 14:28:00.000000000","message":"I\u0027m about 20% into this and it is dawning on me, we might want to consider a release note, but as a follow-up, which basically just says \"hey, we did some heavy reformatting towards using ruff, expect downstream patches to merge conflict and require attention, etc.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"31b1fdad8afe525ea434059062743c320b9e46a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e55f171e_8d5b0eb8","updated":"2025-12-05 15:18:33.000000000","message":"I\u0027m honestly not sure about the value of this anymore, at least not considering its size\nAt least I\u0027m not sure about the refactoring/review time compared to whatever benefits we\u0027ll get\nAs a bare minimum I would consider splitting this in a lot of parts to allow for a gradual migration","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"f32ed0cce02f7f4132ab277c45db3f3e5ff462c3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"33dcbe64_e2cfb89b","updated":"2025-12-05 16:52:34.000000000","message":"Reviewed through file 16/96 (will do more later). Main issues involve weird imports created by ruff.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"adbfd71f83ce94e5be10431cef11eb6ec27a7c5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e01d1796_c33f46b2","in_reply_to":"e55f171e_8d5b0eb8","updated":"2025-12-05 16:35:43.000000000","message":"The vast majority of this is just ruff doing it\u0027s thing.\n\nPerhaps a better way to look at it is as \"we\u0027re stuck in older style... and ruff drags us forward\".\n\nThe question for us is if we wish to advance, or not, and then the qeustion is \"did ruff do the right thing?\". I\u0027m not done reviewing yet, but getting there and overall it looks like ruff did what we expect, the downside is some string weirdness, yet that can also be a follow-up to clean up for our sanity.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"29fb4b69c0ca512ccb59d825ed14fdc893681ef6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"bed7293a_dddf8c47","updated":"2025-12-09 22:05:02.000000000","message":"Through file 50/96.\n\nThere has to be a way we can get ruff to do imports better :(","commit_id":"6117f201acfddaed35749a9b62c1fa5ab4848012"}],"ironic_python_agent/agent.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"f32ed0cce02f7f4132ab277c45db3f3e5ff462c3","unresolved":true,"context_lines":[{"line_number":40,"context_line":"from ironic_python_agent import mdns"},{"line_number":41,"context_line":"from ironic_python_agent import netutils"},{"line_number":42,"context_line":"from ironic_python_agent import utils"},{"line_number":43,"context_line":"from oslo_config.cfg import ConfigOpts"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":10,"id":"46554834_9e24a64b","line":43,"updated":"2025-12-05 16:52:34.000000000","message":"this doesn\u0027t need it\u0027s own import, just update to use cfg.ConfigOpts","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a8e0700ca35c7ab624586e187e11677b44e59b25","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from ironic_python_agent import mdns"},{"line_number":41,"context_line":"from ironic_python_agent import netutils"},{"line_number":42,"context_line":"from ironic_python_agent import utils"},{"line_number":43,"context_line":"from oslo_config.cfg import ConfigOpts"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":10,"id":"2ee2ba9e_8a53863c","line":43,"in_reply_to":"46554834_9e24a64b","updated":"2025-12-09 05:42:15.000000000","message":"Acknowledged","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"}],"ironic_python_agent/config.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b96633973cc62e13b70b80469d2e7450084aa14f","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        default\u003dAPARAMS.get(\"ipa-api-url\"),"},{"line_number":36,"context_line":"        regex\u003d\"^(mdns|http(s?):\\\\/\\\\/.+)\","},{"line_number":37,"context_line":"        help\u003d\"URL(s) of the Ironic API. \""},{"line_number":38,"context_line":"        \u0027Can be supplied as \"ipa-api-url\" kernel parameter.\u0027"},{"line_number":39,"context_line":"        \"The value(s) must start with either http:// or https://. \""},{"line_number":40,"context_line":"        \u0027A special value \"mdns\" can be specified to fetch the \u0027"},{"line_number":41,"context_line":"        \"URL using multicast DNS service discovery. If several \""}],"source_content_type":"text/x-python","patch_set":10,"id":"64a4fa62_db171810","line":38,"updated":"2025-12-05 14:38:18.000000000","message":"This seems inconsistent... this should likely be done more as\n\n    help\u003d(\n        \"text \"\n        \"more text\"\n    )","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"f32ed0cce02f7f4132ab277c45db3f3e5ff462c3","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        default\u003dAPARAMS.get(\"ipa-api-url\"),"},{"line_number":36,"context_line":"        regex\u003d\"^(mdns|http(s?):\\\\/\\\\/.+)\","},{"line_number":37,"context_line":"        help\u003d\"URL(s) of the Ironic API. \""},{"line_number":38,"context_line":"        \u0027Can be supplied as \"ipa-api-url\" kernel parameter.\u0027"},{"line_number":39,"context_line":"        \"The value(s) must start with either http:// or https://. \""},{"line_number":40,"context_line":"        \u0027A special value \"mdns\" can be specified to fetch the \u0027"},{"line_number":41,"context_line":"        \"URL using multicast DNS service discovery. If several \""}],"source_content_type":"text/x-python","patch_set":10,"id":"be33a664_f3515428","line":38,"in_reply_to":"64a4fa62_db171810","updated":"2025-12-05 16:52:34.000000000","message":"the inconsistent use of \u0027 and \" throughout here is bothersome, too","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d30a39acdb8834c1be9dbc594de21c6da4cf604","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        default\u003dAPARAMS.get(\"ipa-api-url\"),"},{"line_number":36,"context_line":"        regex\u003d\"^(mdns|http(s?):\\\\/\\\\/.+)\","},{"line_number":37,"context_line":"        help\u003d\"URL(s) of the Ironic API. \""},{"line_number":38,"context_line":"        \u0027Can be supplied as \"ipa-api-url\" kernel parameter.\u0027"},{"line_number":39,"context_line":"        \"The value(s) must start with either http:// or https://. \""},{"line_number":40,"context_line":"        \u0027A special value \"mdns\" can be specified to fetch the \u0027"},{"line_number":41,"context_line":"        \"URL using multicast DNS service discovery. If several \""}],"source_content_type":"text/x-python","patch_set":10,"id":"79a54ca0_ecbe80ae","line":38,"in_reply_to":"be33a664_f3515428","updated":"2025-12-05 17:44:03.000000000","message":"So, some quick testing, and it looks like it is validly parsed due to the space indentation. If the interpretter is doing what I think it is doing, its fine, but definitely should look at cleaning this up in a follow-up.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b96633973cc62e13b70b80469d2e7450084aa14f","unresolved":true,"context_lines":[{"line_number":37,"context_line":"        help\u003d\"URL(s) of the Ironic API. \""},{"line_number":38,"context_line":"        \u0027Can be supplied as \"ipa-api-url\" kernel parameter.\u0027"},{"line_number":39,"context_line":"        \"The value(s) must start with either http:// or https://. \""},{"line_number":40,"context_line":"        \u0027A special value \"mdns\" can be specified to fetch the \u0027"},{"line_number":41,"context_line":"        \"URL using multicast DNS service discovery. If several \""},{"line_number":42,"context_line":"        \"URLs are provided, all of them are tried until one \""},{"line_number":43,"context_line":"        \"does not return a connection error.\","}],"source_content_type":"text/x-python","patch_set":10,"id":"fb4ea895_2af719fd","line":40,"updated":"2025-12-05 14:38:18.000000000","message":"as does this. :\\","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b96633973cc62e13b70b80469d2e7450084aa14f","unresolved":true,"context_lines":[{"line_number":175,"context_line":"        \"lldp_timeout\","},{"line_number":176,"context_line":"        default\u003dAPARAMS.get(\"ipa-lldp-timeout\", 30.0),"},{"line_number":177,"context_line":"        help\u003d\"The amount of seconds to wait for LLDP packets. \""},{"line_number":178,"context_line":"        \u0027Can be supplied as \"ipa-lldp-timeout\" \u0027"},{"line_number":179,"context_line":"        \"kernel parameter.\","},{"line_number":180,"context_line":"    ),"},{"line_number":181,"context_line":"    cfg.BoolOpt("}],"source_content_type":"text/x-python","patch_set":10,"id":"84bce6a4_190a67a2","line":178,"updated":"2025-12-05 14:38:18.000000000","message":"Yeah, all throughout this file :\\","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"}],"ironic_python_agent/disk_utils.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"f32ed0cce02f7f4132ab277c45db3f3e5ff462c3","unresolved":true,"context_lines":[{"line_number":930,"context_line":"                    \"Processes with the following PIDs are holding \""},{"line_number":931,"context_line":"                    \"device {device}: {pids}. \""},{"line_number":932,"context_line":"                    \"Timed out waiting for completion.\""},{"line_number":933,"context_line":"                ).format(device\u003ddevice, pids\u003d\", \".join(pids[0]))"},{"line_number":934,"context_line":"            )"},{"line_number":935,"context_line":"        else:"},{"line_number":936,"context_line":"            raise errors.DeviceNotFound("}],"source_content_type":"text/x-python","patch_set":10,"id":"afb0140a_237836a7","line":933,"updated":"2025-12-05 16:52:34.000000000","message":"Why is this using .format() when we also have fstrings below? I assume because of the join()?","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d30a39acdb8834c1be9dbc594de21c6da4cf604","unresolved":true,"context_lines":[{"line_number":930,"context_line":"                    \"Processes with the following PIDs are holding \""},{"line_number":931,"context_line":"                    \"device {device}: {pids}. \""},{"line_number":932,"context_line":"                    \"Timed out waiting for completion.\""},{"line_number":933,"context_line":"                ).format(device\u003ddevice, pids\u003d\", \".join(pids[0]))"},{"line_number":934,"context_line":"            )"},{"line_number":935,"context_line":"        else:"},{"line_number":936,"context_line":"            raise errors.DeviceNotFound("}],"source_content_type":"text/x-python","patch_set":10,"id":"a2b937c0_06cf388f","line":933,"in_reply_to":"afb0140a_237836a7","updated":"2025-12-05 17:44:03.000000000","message":"FWIW, That is what I assumed when I looked at it.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"}],"ironic_python_agent/dmi_inspector.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"f32ed0cce02f7f4132ab277c45db3f3e5ff462c3","unresolved":true,"context_lines":[{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from ironic_python_agent import utils"},{"line_number":21,"context_line":"from ironic_python_agent.utils import AccumulatedFailures"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":10,"id":"b0a1561c_36286f8c","line":21,"updated":"2025-12-05 16:52:34.000000000","message":"unneccessary import, should just use utils.AccumulatedFailures","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a8e0700ca35c7ab624586e187e11677b44e59b25","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from ironic_python_agent import utils"},{"line_number":21,"context_line":"from ironic_python_agent.utils import AccumulatedFailures"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a89674e2_c30b4256","line":21,"in_reply_to":"b0a1561c_36286f8c","updated":"2025-12-09 05:42:15.000000000","message":"Acknowledged","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"}],"ironic_python_agent/encoding.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"f32ed0cce02f7f4132ab277c45db3f3e5ff462c3","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"if ty.TYPE_CHECKING:"},{"line_number":22,"context_line":"    from ironic_python_agent.errors import CommandExecutionError"},{"line_number":23,"context_line":"    from ironic_python_agent.extensions.base import AsyncCommandResult"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class Serializable:"}],"source_content_type":"text/x-python","patch_set":10,"id":"b9e43729_71bdf5d4","line":23,"updated":"2025-12-05 16:52:34.000000000","message":"I don\u0027t feel strongly about it, but given the use case for IPA I suggest the annoyance of if ty.TYPE_CHECKING is not worth saving two imports.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a8e0700ca35c7ab624586e187e11677b44e59b25","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"if ty.TYPE_CHECKING:"},{"line_number":22,"context_line":"    from ironic_python_agent.errors import CommandExecutionError"},{"line_number":23,"context_line":"    from ironic_python_agent.extensions.base import AsyncCommandResult"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class Serializable:"}],"source_content_type":"text/x-python","patch_set":10,"id":"fc1cefe3_dd1fff3d","line":23,"in_reply_to":"b9e43729_71bdf5d4","updated":"2025-12-09 05:42:15.000000000","message":"The guard here and other modules is necessary to avoid circular import.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"}],"ironic_python_agent/extensions/base.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"f32ed0cce02f7f4132ab277c45db3f3e5ff462c3","unresolved":true,"context_lines":[{"line_number":27,"context_line":"from ironic_python_agent import encoding"},{"line_number":28,"context_line":"from ironic_python_agent import errors"},{"line_number":29,"context_line":"from ironic_python_agent import utils"},{"line_number":30,"context_line":"from stevedore.extension import ExtensionManager"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"if ty.TYPE_CHECKING:"}],"source_content_type":"text/x-python","patch_set":10,"id":"be811e0e_51befb91","line":30,"updated":"2025-12-05 16:52:34.000000000","message":"again, extension.ExtensionManager","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"a8e0700ca35c7ab624586e187e11677b44e59b25","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from ironic_python_agent import encoding"},{"line_number":28,"context_line":"from ironic_python_agent import errors"},{"line_number":29,"context_line":"from ironic_python_agent import utils"},{"line_number":30,"context_line":"from stevedore.extension import ExtensionManager"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"if ty.TYPE_CHECKING:"}],"source_content_type":"text/x-python","patch_set":10,"id":"c33f546a_c36fb1cc","line":30,"in_reply_to":"be811e0e_51befb91","updated":"2025-12-09 05:42:15.000000000","message":"Acknowledged","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"}],"ironic_python_agent/extensions/rescue.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"eacb988206d5e56b6ca8f1ff56b6a2602c708222","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                rescue_password, secretutils.crypt_mksalt(\u0027SHA-256\u0027))"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            with open(PASSWORD_FILE, \u0027w\u0027) as f:"},{"line_number":49,"context_line":"                f.write(hashed_password or \"\")"},{"line_number":50,"context_line":"        except IOError as e:"},{"line_number":51,"context_line":"            msg \u003d (\"Rescue Operation failed when writing the hashed rescue \""},{"line_number":52,"context_line":"                   \"password to the password file. Error %s\") % e"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a7ed931_3a9fd2e6","line":49,"updated":"2025-09-25 15:52:03.000000000","message":"I\u0027m just going to put this out there, this makes me nervous.","commit_id":"51f63d207f67f0d0b68dae155e736fd8a74ed08c"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"770d2fc8863d3ae3ae82a6447511d2651df99d3e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                rescue_password, secretutils.crypt_mksalt(\u0027SHA-256\u0027))"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            with open(PASSWORD_FILE, \u0027w\u0027) as f:"},{"line_number":49,"context_line":"                f.write(hashed_password or \"\")"},{"line_number":50,"context_line":"        except IOError as e:"},{"line_number":51,"context_line":"            msg \u003d (\"Rescue Operation failed when writing the hashed rescue \""},{"line_number":52,"context_line":"                   \"password to the password file. Error %s\") % e"}],"source_content_type":"text/x-python","patch_set":4,"id":"053be58f_3a5a9b7d","line":49,"in_reply_to":"5a7ed931_3a9fd2e6","updated":"2025-09-29 11:08:16.000000000","message":"Acknowledged","commit_id":"51f63d207f67f0d0b68dae155e736fd8a74ed08c"}],"ironic_python_agent/inspector.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"29fb4b69c0ca512ccb59d825ed14fdc893681ef6","unresolved":true,"context_lines":[{"line_number":36,"context_line":"from ironic_python_agent import mdns"},{"line_number":37,"context_line":"from ironic_python_agent import utils"},{"line_number":38,"context_line":"from ironic_python_agent.utils import AccumulatedFailures"},{"line_number":39,"context_line":"from stevedore.named import NamedExtensionManager"},{"line_number":40,"context_line":"import typing as ty"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"d2702e3e_313b4dcf","line":39,"updated":"2025-12-09 22:05:02.000000000","message":"unneccessary import? Can we not use stevedore from line 26/28? Also in the wrong section","commit_id":"6117f201acfddaed35749a9b62c1fa5ab4848012"}],"ironic_python_agent/qemu_img.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"29fb4b69c0ca512ccb59d825ed14fdc893681ef6","unresolved":true,"context_lines":[{"line_number":23,"context_line":"from ironic_python_agent import errors"},{"line_number":24,"context_line":"from ironic_python_agent import utils"},{"line_number":25,"context_line":"from oslo_concurrency.processutils import ProcessExecutionError"},{"line_number":26,"context_line":"from oslo_concurrency.processutils import ProcessLimits"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":"Imported from ironic_lib/qemu-img.py from commit"}],"source_content_type":"text/x-python","patch_set":11,"id":"7eda0d5d_75da6654","line":26,"updated":"2025-12-09 22:05:02.000000000","message":"Unneccessary imports","commit_id":"6117f201acfddaed35749a9b62c1fa5ab4848012"}],"ironic_python_agent/raid_utils.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"98cbb80d991d5feca77c85f48d678f5533bbfbd6","unresolved":true,"context_lines":[{"line_number":334,"context_line":"    return None"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"# TODO(rg): handle PreP boot parts relocation as well"},{"line_number":338,"context_line":"def prepare_boot_partitions_for_softraid("},{"line_number":339,"context_line":"        device: str, holders: ty.List[str],"},{"line_number":340,"context_line":"        efi_part: ty.Optional[str],"}],"source_content_type":"text/x-python","patch_set":4,"id":"00ef1ecc_d1f149b9","line":337,"updated":"2025-09-25 16:00:52.000000000","message":"Totally unrelated: should we keep prep partition support around?","commit_id":"51f63d207f67f0d0b68dae155e736fd8a74ed08c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d30a39acdb8834c1be9dbc594de21c6da4cf604","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    return None"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"# TODO(rg): handle PreP boot parts relocation as well"},{"line_number":338,"context_line":"def prepare_boot_partitions_for_softraid("},{"line_number":339,"context_line":"        device: str, holders: ty.List[str],"},{"line_number":340,"context_line":"        efi_part: ty.Optional[str],"}],"source_content_type":"text/x-python","patch_set":4,"id":"42d5decb_318c5f9a","line":337,"in_reply_to":"00ef1ecc_d1f149b9","updated":"2025-12-05 17:44:03.000000000","message":"Done","commit_id":"51f63d207f67f0d0b68dae155e736fd8a74ed08c"}],"ironic_python_agent/tests/unit/test_agent.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5d30a39acdb8834c1be9dbc594de21c6da4cf604","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.agent.api.start.assert_called_once_with(mock.ANY, mock.ANY)"},{"line_number":287,"context_line":"        mock_wait.assert_called_once_with(mock.ANY)"},{"line_number":288,"context_line":"        self.assertEqual("},{"line_number":289,"context_line":"            [mock.call(\"list_hardware_info\"), mock.call(\"wait_for_disks\")],"},{"line_number":290,"context_line":"            mock_dispatch.call_args_list,"},{"line_number":291,"context_line":"        )"},{"line_number":292,"context_line":"        self.agent.heartbeater.start.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":10,"id":"266db02f_43d8c55a","line":289,"updated":"2025-12-05 17:44:03.000000000","message":"Kind of surprised it formatted this, this way. Then again, it fits on an entire line.","commit_id":"10153903f13e8f628276fc165e27bcc12cce90c8"}],"pyproject.toml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"ee1bff014a9cf1362cfdb63de6fc6d9d653b5c3a","unresolved":true,"context_lines":[{"line_number":14,"context_line":"]"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[tool.mypy]"},{"line_number":17,"context_line":"python_version \u003d \"3.9\""},{"line_number":18,"context_line":"warn_return_any \u003d true"},{"line_number":19,"context_line":"warn_unused_configs \u003d true"},{"line_number":20,"context_line":"disallow_untyped_defs \u003d false"}],"source_content_type":"text/x-toml","patch_set":4,"id":"527ce557_54e2b63b","line":17,"updated":"2025-09-24 07:25:14.000000000","message":"I don\u0027t think this is valid, we don\u0027t want to support Python 3.9 anymore","commit_id":"51f63d207f67f0d0b68dae155e736fd8a74ed08c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"98cbb80d991d5feca77c85f48d678f5533bbfbd6","unresolved":true,"context_lines":[{"line_number":14,"context_line":"]"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[tool.mypy]"},{"line_number":17,"context_line":"python_version \u003d \"3.9\""},{"line_number":18,"context_line":"warn_return_any \u003d true"},{"line_number":19,"context_line":"warn_unused_configs \u003d true"},{"line_number":20,"context_line":"disallow_untyped_defs \u003d false"}],"source_content_type":"text/x-toml","patch_set":4,"id":"ad3c1896_cc35d55b","line":17,"in_reply_to":"527ce557_54e2b63b","updated":"2025-09-25 16:00:52.000000000","message":"++\n\nhttps://governance.openstack.org/tc/reference/runtimes/2026.1.html -\u003e 3.10","commit_id":"51f63d207f67f0d0b68dae155e736fd8a74ed08c"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"770d2fc8863d3ae3ae82a6447511d2651df99d3e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"]"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[tool.mypy]"},{"line_number":17,"context_line":"python_version \u003d \"3.9\""},{"line_number":18,"context_line":"warn_return_any \u003d true"},{"line_number":19,"context_line":"warn_unused_configs \u003d true"},{"line_number":20,"context_line":"disallow_untyped_defs \u003d false"}],"source_content_type":"text/x-toml","patch_set":4,"id":"6ca1662c_8a9e2d4a","line":17,"in_reply_to":"ad3c1896_cc35d55b","updated":"2025-09-29 11:08:16.000000000","message":"Acknowledged","commit_id":"51f63d207f67f0d0b68dae155e736fd8a74ed08c"}]}
