)]}'
{"/COMMIT_MSG":[{"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":"ef303e1dc8130a188974ef4c36bc00768955d533","unresolved":true,"context_lines":[{"line_number":39,"context_line":"* Supports both \u0027redfish\u0027 and \u0027idrac-redfish\u0027 drivers"},{"line_number":40,"context_line":"* Maps Redfish health enum to string values"},{"line_number":41,"context_line":"* Logs warnings for degraded health status"},{"line_number":42,"context_line":"* Graceful error handling - doesn\u0027t fail power sync"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Assisted-by: Claude (Anthropic) version 4.5"},{"line_number":45,"context_line":"Change-Id: Id1142325fd2094e46f2c79c781aae2e230cc04aa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"0baeafec_40f6646c","line":42,"updated":"2025-11-13 23:44:15.000000000","message":"[this is more commentary than direct feedback; take it or leave it]\n\nI know claude loves the large, verbose commit messages. I think this is probably a little much.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"92f5dad66f9d8ad8379d96984b671f1d45dc9c74","unresolved":false,"context_lines":[{"line_number":39,"context_line":"* Supports both \u0027redfish\u0027 and \u0027idrac-redfish\u0027 drivers"},{"line_number":40,"context_line":"* Maps Redfish health enum to string values"},{"line_number":41,"context_line":"* Logs warnings for degraded health status"},{"line_number":42,"context_line":"* Graceful error handling - doesn\u0027t fail power sync"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Assisted-by: Claude (Anthropic) version 4.5"},{"line_number":45,"context_line":"Change-Id: Id1142325fd2094e46f2c79c781aae2e230cc04aa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"56c3f907_72ab8d10","line":42,"in_reply_to":"0baeafec_40f6646c","updated":"2025-11-27 16:55:42.000000000","message":"Fair point, commit message condensed.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a7cab1fb3f1ca2e4347b0a85c8707ad98d65e5c3","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Id1142325fd2094e46f2c79c781aae2e230cc04aa"},{"line_number":27,"context_line":"Assisted-by: Claude (Anthropic) version 4.5"},{"line_number":28,"context_line":"Signed-off-by: Jacob Anders \u003cjanders@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"d330b541_f1820523","line":28,"updated":"2025-11-28 03:01:09.000000000","message":"Is this feature tracked by any issue or spec?","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"62140e85516c1009a44b0b27af4ce65ddc540b18","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Id1142325fd2094e46f2c79c781aae2e230cc04aa"},{"line_number":27,"context_line":"Assisted-by: Claude (Anthropic) version 4.5"},{"line_number":28,"context_line":"Signed-off-by: Jacob Anders \u003cjanders@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"495fc0ff_faa70395","line":28,"in_reply_to":"8e578af8_460d98dc","updated":"2025-12-17 04:44:04.000000000","message":"I created https://bugs.launchpad.net/ironic/+bug/2133522 to track this.","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b1645fbce2bbd982092f521b7a5bb17061503042","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Id1142325fd2094e46f2c79c781aae2e230cc04aa"},{"line_number":27,"context_line":"Assisted-by: Claude (Anthropic) version 4.5"},{"line_number":28,"context_line":"Signed-off-by: Jacob Anders \u003cjanders@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"8e578af8_460d98dc","line":28,"in_reply_to":"d330b541_f1820523","updated":"2025-12-01 13:20:26.000000000","message":"No, it isn\u0027t. The idea of implementing this came from myself during recent PTG and seemed well received by the Community. I am not aware of specific operator requests for this (even though I discussed this informally and received positive feedback). This feature didn\u0027t seem major enough for me to justify a spec. Please let me know if you think we may need to reconsider.","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"dce7546aa7107ace82822cab05b25204b4ceb239","unresolved":true,"context_lines":[{"line_number":24,"context_line":"[conductor]/enable_health_monitoring configuration option."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Id1142325fd2094e46f2c79c781aae2e230cc04aa"},{"line_number":27,"context_line":"Assisted-by: Claude (Anthropic) version 4.5"},{"line_number":28,"context_line":"Signed-off-by: Jacob Anders \u003cjacob-anders-dev@proton.me\u003e"},{"line_number":29,"context_line":"Partial-Bug: #2133522"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"b9f2dbd8_e925a649","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":43},"updated":"2026-01-20 12:52:27.000000000","message":"Sonnet or Opus?","commit_id":"317b69e271b963e24915f5c693158bc751339b0b"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"fd642c836fd6b12584e046d74db68cd7eaecd88d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"[conductor]/enable_health_monitoring configuration option."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Id1142325fd2094e46f2c79c781aae2e230cc04aa"},{"line_number":27,"context_line":"Assisted-by: Claude (Anthropic) version 4.5"},{"line_number":28,"context_line":"Signed-off-by: Jacob Anders \u003cjacob-anders-dev@proton.me\u003e"},{"line_number":29,"context_line":"Partial-Bug: #2133522"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"0ba7ffff_f0e77e25","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":43},"in_reply_to":"b9f2dbd8_e925a649","updated":"2026-01-20 12:59:57.000000000","message":"It\u0027s a good question, because I started off in November on Sonnet but now I\u0027m on Opus. I think it would be right to say that Sonnet did most work so set it to that for all three (API, client, SDK) patches.","commit_id":"317b69e271b963e24915f5c693158bc751339b0b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"3626464c559eaba56767b2004e0d293b2a1208be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d87abf2c_7bc48527","updated":"2025-11-13 12:19:38.000000000","message":"This looks like a great feature - haven\u0027t seen anything obviously wrong, but will wait to review until it is no longer WIP","commit_id":"69c1fc3f32a6bead20453b6d02b0635214ac0a12"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"5b74c7df168b82677b18b8728248a43dcd251f86","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"81b53e5a_693a4099","updated":"2025-11-13 13:42:58.000000000","message":"Thanks for your feedback, Jakub. I think it\u0027s far down enough for initial review (I lab tested it and it works, CI passed) so removing WIP flag.","commit_id":"ca6a4081f04a94a78401ab3fc17e840b91c0e939"},{"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":"ef303e1dc8130a188974ef4c36bc00768955d533","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9bb9afb4_db9af079","updated":"2025-11-13 23:44:15.000000000","message":"In general this should be more defensive -- IMO we really, really should have a flag -- even if it defaults to on -- to toggle the health fetching behavior during the power sync loop. Also, we need to be more careful about assuming the data returned will be sane.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"32e7be0f324d01ce00cd2e2ff5b90248438175a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bced41aa_0ac9b133","updated":"2025-11-13 16:25:12.000000000","message":"Thank you for your feedback Dmitry. I revised the patch.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"a2cb8c8512ad00fb9f690905a3880171e33c4477","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"3b3b4c3d_b046e3bb","updated":"2025-11-13 18:38:04.000000000","message":"recheck nearly same code was passing earier, failures are tempest/grenade","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"92f5dad66f9d8ad8379d96984b671f1d45dc9c74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"255eeb69_c7c6bf39","in_reply_to":"9bb9afb4_db9af079","updated":"2025-11-27 16:55:42.000000000","message":"I re-added the config option as per your suggestion.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a7cab1fb3f1ca2e4347b0a85c8707ad98d65e5c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b8c464d5_c3d4021c","updated":"2025-11-28 03:01:09.000000000","message":"Looks good, a couple of nits","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"92f5dad66f9d8ad8379d96984b671f1d45dc9c74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"57a9a77c_bd37c7e0","updated":"2025-11-27 16:55:42.000000000","message":"Thank you for your feedback Jay and Dmitry. I rebased the patch and addressed your changes. Please have another look. Thank you.","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"cdfc28d5580f945db976926df4dc2f33e8a85a23","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c1bdb171_f637d604","updated":"2025-11-27 20:19:05.000000000","message":"recheck\nlooks like same failure pattern as in the client chance","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b1645fbce2bbd982092f521b7a5bb17061503042","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"82a339c9_b7d40901","updated":"2025-12-01 13:20:26.000000000","message":"Thank you for your review, Steve. Pushed revised version.","commit_id":"8d329fc5709ff2989050a2ce06fe7c1246930c1a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"35383b4098b1fbf30c099f0ade4a8a1c4f752959","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b2c1ca4d_7c281ae1","updated":"2025-12-01 14:28:09.000000000","message":"Thank you for your review, Jakub. Pushing revised patch.","commit_id":"aed9a4fc3f53ae99280f29f23b777b5fe6c3d408"},{"author":{"_account_id":35929,"name":"Mahnoor Asghar","display_name":"Mahnoor Asghar","email":"masghar@redhat.com","username":"mahnoorasghar"},"change_message_id":"ad9c59b7aa340c7746ce240c93e3b895fb586d40","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"55db1e44_22584b1e","updated":"2025-12-09 13:42:41.000000000","message":"+1 except for Dmitry\u0027s comment :)","commit_id":"f404109ae96898ab49f84f16933372cffcc6918e"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f6a9f2d0c875d0636ef5419f2b9f99209d24b8d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":16,"id":"d24721c8_01023253","updated":"2025-12-11 14:32:07.000000000","message":"Adding my -1 to get defined constants (even better would be an StrEnum type instead of just a str).","commit_id":"f404109ae96898ab49f84f16933372cffcc6918e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"62140e85516c1009a44b0b27af4ce65ddc540b18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"000a1d0e_2899f185","in_reply_to":"d24721c8_01023253","updated":"2025-12-17 04:44:04.000000000","message":"Done","commit_id":"f404109ae96898ab49f84f16933372cffcc6918e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"62140e85516c1009a44b0b27af4ce65ddc540b18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"643dfbc2_d47d5bc6","updated":"2025-12-17 04:44:04.000000000","message":"Thank you for your comments, folks. Uploaded revised patch.","commit_id":"12c8ec3aa105d0d510bdd0346d4f81a39dafe246"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"f5a1ac73062794392b32f33ef18bf3d95bdcbf22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7c5973ca_3aa1650d","updated":"2026-01-05 13:46:56.000000000","message":"waiting for CI and checking over everything post-rebase","commit_id":"9ef7242c4643766aa29d80e3d0fbae2a7440b7a7"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"3d9f05993c0dbb882addb6bf025eed245fc3099d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"48e02237_0e3e74cb","updated":"2026-01-05 17:20:38.000000000","message":"rebase complete, CI pass, ready for re-reviews","commit_id":"3d711e7b19b85b24e18760ff4e1866017f76571c"},{"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":"d1f93c710ad922f04e1c014cafe225ee5f9385f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"92ef7f57_06bf9fe8","updated":"2026-01-15 21:54:42.000000000","message":"Once the merge conflict is fixed, please re-add ironic-week-prio","commit_id":"95a8cdd936ec48a4964619dcf18077919f800b8f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"c98ae4c13a15cf4e16052d6025c478c5338497e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"7f7d4245_82c0ff2f","updated":"2026-01-12 15:14:34.000000000","message":"Thank you for your review Doug. Uploaded a revised version.","commit_id":"95a8cdd936ec48a4964619dcf18077919f800b8f"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"98201879071eb98e730d987699ee7cfb674387ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"daf5de48_e1326d9d","updated":"2026-01-19 16:30:36.000000000","message":"Rebase done, thank you Jay.","commit_id":"3d23cb5c4b0df362ab23285af9667822b5341101"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b0dbb53e2df4cccd525c1c0d4f319dda800b8975","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"819ddb49_2bbdbefe","updated":"2026-01-21 21:44:26.000000000","message":"Looks good, just a couple of things","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"fd642c836fd6b12584e046d74db68cd7eaecd88d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"9520e038_8d1bc887","updated":"2026-01-20 12:59:57.000000000","message":"Thank you for your review Pierre. Response inline.","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"461ff7c5be744dc5195f10deb31a1308b91f4222","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"450a6e35_f65dbde7","updated":"2026-01-22 09:24:11.000000000","message":"Thank you for your reviews Doug and Steve. I will rebase/respin the patch and push new version later today.","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"bd3922c41aec34d8568e53fdf6214482d180855a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"049e9847_7b954d60","updated":"2026-01-20 15:08:21.000000000","message":"recheck","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"cc829dc4be7e3d438c168e515f901a77f412f516","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"39ce3dc2_06152a0c","updated":"2026-01-21 09:21:42.000000000","message":"recheck","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"7b34e020d11d6863219932fd507e0c9954ba2fe8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"66576de1_bb980ae3","updated":"2026-01-20 17:31:45.000000000","message":"recheck","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"6695c14efe537d084cadb244f5a9c9e0cd5fcfa6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"398ff58c_7a0d96d9","updated":"2026-01-22 17:04:49.000000000","message":"Thanks again for your comments, all addressed.","commit_id":"f61755d81b55ede83f1e24ee85145903c264742d"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b0dbb53e2df4cccd525c1c0d4f319dda800b8975","unresolved":true,"context_lines":[{"line_number":127,"context_line":"_VENDOR_METHODS \u003d {}"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"_DEFAULT_RETURN_FIELDS \u003d [\u0027instance_uuid\u0027, \u0027maintenance\u0027, \u0027power_state\u0027,"},{"line_number":130,"context_line":"                          \u0027provision_state\u0027, \u0027uuid\u0027, \u0027name\u0027, \u0027health\u0027]"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"# States where calling do_provisioning_action makes sense"},{"line_number":133,"context_line":"PROVISION_ACTION_STATES \u003d (ir_states.VERBS[\u0027manage\u0027],"}],"source_content_type":"text/x-python","patch_set":28,"id":"908a7125_8cd85c68","line":130,"updated":"2026-01-21 21:44:26.000000000","message":"I don\u0027t think health should be in both _DEFAULT_RETURN_FIELDS and VERSIONED_FIELDS. Since it is an addition enabled via a minor API version I think it should be removed from here.","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"6695c14efe537d084cadb244f5a9c9e0cd5fcfa6","unresolved":false,"context_lines":[{"line_number":127,"context_line":"_VENDOR_METHODS \u003d {}"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"_DEFAULT_RETURN_FIELDS \u003d [\u0027instance_uuid\u0027, \u0027maintenance\u0027, \u0027power_state\u0027,"},{"line_number":130,"context_line":"                          \u0027provision_state\u0027, \u0027uuid\u0027, \u0027name\u0027, \u0027health\u0027]"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"# States where calling do_provisioning_action makes sense"},{"line_number":133,"context_line":"PROVISION_ACTION_STATES \u003d (ir_states.VERBS[\u0027manage\u0027],"}],"source_content_type":"text/x-python","patch_set":28,"id":"7cee038d_baa9911d","line":130,"in_reply_to":"7388bbb7_23f8f6d7","updated":"2026-01-22 17:04:49.000000000","message":"Done","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"9f388ce09968741ed6a8f3bd05547285cb2c909f","unresolved":true,"context_lines":[{"line_number":127,"context_line":"_VENDOR_METHODS \u003d {}"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"_DEFAULT_RETURN_FIELDS \u003d [\u0027instance_uuid\u0027, \u0027maintenance\u0027, \u0027power_state\u0027,"},{"line_number":130,"context_line":"                          \u0027provision_state\u0027, \u0027uuid\u0027, \u0027name\u0027, \u0027health\u0027]"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"# States where calling do_provisioning_action makes sense"},{"line_number":133,"context_line":"PROVISION_ACTION_STATES \u003d (ir_states.VERBS[\u0027manage\u0027],"}],"source_content_type":"text/x-python","patch_set":28,"id":"7388bbb7_23f8f6d7","line":130,"in_reply_to":"908a7125_8cd85c68","updated":"2026-01-22 14:49:43.000000000","message":"Actually good catch. You\u0027re right.","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"}],"ironic/common/health_states.py":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3242d7c7f686143ee524c978b0d788600630a559","unresolved":true,"context_lines":[{"line_number":27,"context_line":"WARNING \u003d \u0027Warning\u0027"},{"line_number":28,"context_line":"\"\"\"Hardware has non-critical issues that may require attention.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CRITICAL \u003d \u0027Critical\u0027"},{"line_number":31,"context_line":"\"\"\"Hardware has critical issues requiring immediate attention.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"d98bf1e9_6197949d","line":30,"updated":"2026-01-10 01:54:29.000000000","message":"these can be enum.Enum.","commit_id":"af310011d52c3a62c9c1b3407247dc4796b6f0e5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"c98ae4c13a15cf4e16052d6025c478c5338497e6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"WARNING \u003d \u0027Warning\u0027"},{"line_number":28,"context_line":"\"\"\"Hardware has non-critical issues that may require attention.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CRITICAL \u003d \u0027Critical\u0027"},{"line_number":31,"context_line":"\"\"\"Hardware has critical issues requiring immediate attention.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"a9fe7997_c8b1e8e6","line":30,"in_reply_to":"d98bf1e9_6197949d","updated":"2026-01-12 15:14:34.000000000","message":"Done","commit_id":"af310011d52c3a62c9c1b3407247dc4796b6f0e5"}],"ironic/conductor/manager.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":"ef303e1dc8130a188974ef4c36bc00768955d533","unresolved":true,"context_lines":[{"line_number":4451,"context_line":"    # Also make sure to cache the current boot_mode and secure_boot states"},{"line_number":4452,"context_line":"    utils.node_cache_boot_mode(task)"},{"line_number":4453,"context_line":"    # Cache health status from Redfish BMC if supported"},{"line_number":4454,"context_line":"    utils.node_cache_health(task)"},{"line_number":4455,"context_line":""},{"line_number":4456,"context_line":"    if ((node.power_state and node.power_state \u003d\u003d power_state)"},{"line_number":4457,"context_line":"            or (node.power_state is None and power_state is None)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"4aa3adbb_7c859e53","line":4454,"updated":"2025-11-13 23:44:15.000000000","message":"Should this be optional? Making this a part of one of our most commonly run code paths without having a way to disable it seems like we\u0027re asking for trouble.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ac8c8fb5970bcc473e455222d1166276517b1b73","unresolved":true,"context_lines":[{"line_number":4451,"context_line":"    # Also make sure to cache the current boot_mode and secure_boot states"},{"line_number":4452,"context_line":"    utils.node_cache_boot_mode(task)"},{"line_number":4453,"context_line":"    # Cache health status from Redfish BMC if supported"},{"line_number":4454,"context_line":"    utils.node_cache_health(task)"},{"line_number":4455,"context_line":""},{"line_number":4456,"context_line":"    if ((node.power_state and node.power_state \u003d\u003d power_state)"},{"line_number":4457,"context_line":"            or (node.power_state is None and power_state is None)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a223ed2_950f3114","line":4454,"in_reply_to":"2e5a2dd0_72edc84a","updated":"2025-11-17 10:26:39.000000000","message":"I\u0027m curious to look into a more uniform approach of doing so, although I\u0027d not block this patch on it. Following your example, I imagine someone wanting to disable power sync or metrics collection per node.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b028f3313131711732893063faad3baf0f6a8868","unresolved":false,"context_lines":[{"line_number":4451,"context_line":"    # Also make sure to cache the current boot_mode and secure_boot states"},{"line_number":4452,"context_line":"    utils.node_cache_boot_mode(task)"},{"line_number":4453,"context_line":"    # Cache health status from Redfish BMC if supported"},{"line_number":4454,"context_line":"    utils.node_cache_health(task)"},{"line_number":4455,"context_line":""},{"line_number":4456,"context_line":"    if ((node.power_state and node.power_state \u003d\u003d power_state)"},{"line_number":4457,"context_line":"            or (node.power_state is None and power_state is None)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"19d86811_3e85574b","line":4454,"in_reply_to":"3a223ed2_950f3114","updated":"2025-11-27 16:57:42.000000000","message":"Done","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1ce5795f0af2ed34964ed38e30b3191288e810b0","unresolved":true,"context_lines":[{"line_number":4451,"context_line":"    # Also make sure to cache the current boot_mode and secure_boot states"},{"line_number":4452,"context_line":"    utils.node_cache_boot_mode(task)"},{"line_number":4453,"context_line":"    # Cache health status from Redfish BMC if supported"},{"line_number":4454,"context_line":"    utils.node_cache_health(task)"},{"line_number":4455,"context_line":""},{"line_number":4456,"context_line":"    if ((node.power_state and node.power_state \u003d\u003d power_state)"},{"line_number":4457,"context_line":"            or (node.power_state is None and power_state is None)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"aa922bf4_ebc218be","line":4454,"in_reply_to":"4aa3adbb_7c859e53","updated":"2025-11-14 17:26:14.000000000","message":"You\u0027re literally reading one field from an already cached System, no?\n\nI\u0027m worried about overwhelming operators with literally hundreds of options without a proper guidance on how and when to use them.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"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":"74a3e141dd3da272d1846ccf6d81a66f956c9ac4","unresolved":true,"context_lines":[{"line_number":4451,"context_line":"    # Also make sure to cache the current boot_mode and secure_boot states"},{"line_number":4452,"context_line":"    utils.node_cache_boot_mode(task)"},{"line_number":4453,"context_line":"    # Cache health status from Redfish BMC if supported"},{"line_number":4454,"context_line":"    utils.node_cache_health(task)"},{"line_number":4455,"context_line":""},{"line_number":4456,"context_line":"    if ((node.power_state and node.power_state \u003d\u003d power_state)"},{"line_number":4457,"context_line":"            or (node.power_state is None and power_state is None)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"2e5a2dd0_72edc84a","line":4454,"in_reply_to":"aa922bf4_ebc218be","updated":"2025-11-14 18:02:49.000000000","message":"Two things:\n- You\u0027re thinking about a specific implementation in redfish; but we aren\u0027t guaranteed the implementation will be the same in all management drivers so I\u0027m treating it as such. That being said; I also didn\u0027t realize it\u0027s pulling pre-cached data which lessens my concern greatly.\n- I\u0027m not just concerned about pulling it here, but also as I commented elsewhere, we\u0027re basically baking in an assumption that the string returned for system health won\u0027t change in weird ways across all hardware -- if you DO find a redfish machine which reports bad information there, we\u0027ve got *zero* escape paths to help that operator avoid thrashing their database.\n\nI don\u0027t think of these as \"turn things on or off\" toggles so much as I do \"give an escape hatch for a user with misbehaving hardware or hardware that uses a driver where this getting system health is a heavy call\". If there\u0027s a better way to do that than in config (maybe a \"skip me\" in driver_info?) let\u0027s talk about that.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"}],"ironic/conductor/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9de0f8e6a0820811f9021a6bd51c5451d1a818d7","unresolved":true,"context_lines":[{"line_number":1685,"context_line":"    :param task: a TaskManager instance containing the node to check."},{"line_number":1686,"context_line":"    \"\"\""},{"line_number":1687,"context_line":"    # Only check health if the feature is enabled and node uses Redfish"},{"line_number":1688,"context_line":"    if not CONF.conductor.sync_health_state:"},{"line_number":1689,"context_line":"        return"},{"line_number":1690,"context_line":""},{"line_number":1691,"context_line":"    # Only check if this is a Redfish-based node"}],"source_content_type":"text/x-python","patch_set":8,"id":"d07139e1_6098feff","line":1688,"updated":"2025-11-13 13:51:07.000000000","message":"I\u0027m not sure we need a new flag if we cache systems properly","commit_id":"ca6a4081f04a94a78401ab3fc17e840b91c0e939"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"32e7be0f324d01ce00cd2e2ff5b90248438175a8","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"    :param task: a TaskManager instance containing the node to check."},{"line_number":1686,"context_line":"    \"\"\""},{"line_number":1687,"context_line":"    # Only check health if the feature is enabled and node uses Redfish"},{"line_number":1688,"context_line":"    if not CONF.conductor.sync_health_state:"},{"line_number":1689,"context_line":"        return"},{"line_number":1690,"context_line":""},{"line_number":1691,"context_line":"    # Only check if this is a Redfish-based node"}],"source_content_type":"text/x-python","patch_set":8,"id":"5b1c029c_1bfa6172","line":1688,"in_reply_to":"d07139e1_6098feff","updated":"2025-11-13 16:25:12.000000000","message":"Noted. Removed proposed config option. Thank you for the pointer.","commit_id":"ca6a4081f04a94a78401ab3fc17e840b91c0e939"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9de0f8e6a0820811f9021a6bd51c5451d1a818d7","unresolved":true,"context_lines":[{"line_number":1688,"context_line":"    if not CONF.conductor.sync_health_state:"},{"line_number":1689,"context_line":"        return"},{"line_number":1690,"context_line":""},{"line_number":1691,"context_line":"    # Only check if this is a Redfish-based node"},{"line_number":1692,"context_line":"    if task.node.power_interface not in (\u0027redfish\u0027, \u0027idrac-redfish\u0027):"},{"line_number":1693,"context_line":"        return"},{"line_number":1694,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"0014d94a_e5d57413","line":1691,"updated":"2025-11-13 13:51:07.000000000","message":"This has to be new driver API (probably in the management interface), not hardcoding driver names in general code","commit_id":"ca6a4081f04a94a78401ab3fc17e840b91c0e939"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"32e7be0f324d01ce00cd2e2ff5b90248438175a8","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"    if not CONF.conductor.sync_health_state:"},{"line_number":1689,"context_line":"        return"},{"line_number":1690,"context_line":""},{"line_number":1691,"context_line":"    # Only check if this is a Redfish-based node"},{"line_number":1692,"context_line":"    if task.node.power_interface not in (\u0027redfish\u0027, \u0027idrac-redfish\u0027):"},{"line_number":1693,"context_line":"        return"},{"line_number":1694,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"af0eccfb_64d679c2","line":1691,"in_reply_to":"0014d94a_e5d57413","updated":"2025-11-13 16:25:12.000000000","message":"Excellent point, Claude got a bit carried away and I didn\u0027t pick it up. Got the implementation reworked. When you have time, please let me know if this attempt is OK.","commit_id":"ca6a4081f04a94a78401ab3fc17e840b91c0e939"},{"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":"ef303e1dc8130a188974ef4c36bc00768955d533","unresolved":true,"context_lines":[{"line_number":1711,"context_line":"            task.node.health \u003d health"},{"line_number":1712,"context_line":"            task.node.save()"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"            LOG.info(\"Updated health status for node %(node)s: \""},{"line_number":1715,"context_line":"                     \"health\u003d%(health)s (was %(old_health)s)\","},{"line_number":1716,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health,"},{"line_number":1717,"context_line":"                      \u0027old_health\u0027: old_health})"}],"source_content_type":"text/x-python","patch_set":10,"id":"cfcaa25d_891e6341","line":1714,"updated":"2025-11-13 23:44:15.000000000","message":"Throughout: _() for i18n","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"92f5dad66f9d8ad8379d96984b671f1d45dc9c74","unresolved":false,"context_lines":[{"line_number":1711,"context_line":"            task.node.health \u003d health"},{"line_number":1712,"context_line":"            task.node.save()"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"            LOG.info(\"Updated health status for node %(node)s: \""},{"line_number":1715,"context_line":"                     \"health\u003d%(health)s (was %(old_health)s)\","},{"line_number":1716,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health,"},{"line_number":1717,"context_line":"                      \u0027old_health\u0027: old_health})"}],"source_content_type":"text/x-python","patch_set":10,"id":"ec8efd20_b40a15cb","line":1714,"in_reply_to":"cfcaa25d_891e6341","updated":"2025-11-27 16:55:42.000000000","message":"Done","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"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":"ef303e1dc8130a188974ef4c36bc00768955d533","unresolved":true,"context_lines":[{"line_number":1714,"context_line":"            LOG.info(\"Updated health status for node %(node)s: \""},{"line_number":1715,"context_line":"                     \"health\u003d%(health)s (was %(old_health)s)\","},{"line_number":1716,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health,"},{"line_number":1717,"context_line":"                      \u0027old_health\u0027: old_health})"},{"line_number":1718,"context_line":""},{"line_number":1719,"context_line":"            # Record change in node history"},{"line_number":1720,"context_line":"            event_msg \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"d9540bda_82426225","line":1717,"updated":"2025-11-13 23:44:15.000000000","message":"Should this be debug level? This is going to generate a lot of logging noise for info.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"92f5dad66f9d8ad8379d96984b671f1d45dc9c74","unresolved":false,"context_lines":[{"line_number":1714,"context_line":"            LOG.info(\"Updated health status for node %(node)s: \""},{"line_number":1715,"context_line":"                     \"health\u003d%(health)s (was %(old_health)s)\","},{"line_number":1716,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health,"},{"line_number":1717,"context_line":"                      \u0027old_health\u0027: old_health})"},{"line_number":1718,"context_line":""},{"line_number":1719,"context_line":"            # Record change in node history"},{"line_number":1720,"context_line":"            event_msg \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"a2455431_bd86cb15","line":1717,"in_reply_to":"d9540bda_82426225","updated":"2025-11-27 16:55:42.000000000","message":"Done","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a7cab1fb3f1ca2e4347b0a85c8707ad98d65e5c3","unresolved":true,"context_lines":[{"line_number":1649,"context_line":"        # Driver doesn\u0027t support health monitoring, skip silently"},{"line_number":1650,"context_line":"        return"},{"line_number":1651,"context_line":"    except Exception as exc:"},{"line_number":1652,"context_line":"        # Don\u0027t fail power sync if health checking fails"},{"line_number":1653,"context_line":"        LOG.debug(_(\u0027Could not retrieve health status for node %(node)s: \u0027"},{"line_number":1654,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1655,"context_line":"                  {\u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7e22451c_21f84d10","line":1652,"updated":"2025-11-28 03:01:09.000000000","message":"Lets not assume this is running during power sync, and frame this comment accordingly","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b1645fbce2bbd982092f521b7a5bb17061503042","unresolved":false,"context_lines":[{"line_number":1649,"context_line":"        # Driver doesn\u0027t support health monitoring, skip silently"},{"line_number":1650,"context_line":"        return"},{"line_number":1651,"context_line":"    except Exception as exc:"},{"line_number":1652,"context_line":"        # Don\u0027t fail power sync if health checking fails"},{"line_number":1653,"context_line":"        LOG.debug(_(\u0027Could not retrieve health status for node %(node)s: \u0027"},{"line_number":1654,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1655,"context_line":"                  {\u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"324c13e2_19eb31de","line":1652,"in_reply_to":"7e22451c_21f84d10","updated":"2025-12-01 13:20:26.000000000","message":"Good point. Done.","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a7cab1fb3f1ca2e4347b0a85c8707ad98d65e5c3","unresolved":true,"context_lines":[{"line_number":1650,"context_line":"        return"},{"line_number":1651,"context_line":"    except Exception as exc:"},{"line_number":1652,"context_line":"        # Don\u0027t fail power sync if health checking fails"},{"line_number":1653,"context_line":"        LOG.debug(_(\u0027Could not retrieve health status for node %(node)s: \u0027"},{"line_number":1654,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1655,"context_line":"                  {\u0027node\u0027: task.node.uuid,"},{"line_number":1656,"context_line":"                   \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":12,"id":"5d1e2cb9_a48d5bd9","line":1653,"range":{"start_line":1653,"start_character":12,"end_line":1653,"end_character":17},"updated":"2025-11-28 03:01:09.000000000","message":"Other node_cache_* functions to a LOG.warning in this situation, which seems appropriate","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b1645fbce2bbd982092f521b7a5bb17061503042","unresolved":false,"context_lines":[{"line_number":1650,"context_line":"        return"},{"line_number":1651,"context_line":"    except Exception as exc:"},{"line_number":1652,"context_line":"        # Don\u0027t fail power sync if health checking fails"},{"line_number":1653,"context_line":"        LOG.debug(_(\u0027Could not retrieve health status for node %(node)s: \u0027"},{"line_number":1654,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1655,"context_line":"                  {\u0027node\u0027: task.node.uuid,"},{"line_number":1656,"context_line":"                   \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":12,"id":"dba13180_ebf4cfe7","line":1653,"range":{"start_line":1653,"start_character":12,"end_line":1653,"end_character":17},"in_reply_to":"5d1e2cb9_a48d5bd9","updated":"2025-12-01 13:20:26.000000000","message":"Good pickup, Steve. Done.","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a7cab1fb3f1ca2e4347b0a85c8707ad98d65e5c3","unresolved":true,"context_lines":[{"line_number":1705,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health})"},{"line_number":1706,"context_line":""},{"line_number":1707,"context_line":"    except Exception as exc:"},{"line_number":1708,"context_line":"        # Don\u0027t fail power sync if health value change processing fails"},{"line_number":1709,"context_line":"        LOG.debug(_(\u0027Error updating health status for node %(node)s: \u0027"},{"line_number":1710,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1711,"context_line":"                  {\u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"22a825b9_658cca2b","line":1708,"updated":"2025-11-28 03:01:09.000000000","message":"See above","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b1645fbce2bbd982092f521b7a5bb17061503042","unresolved":false,"context_lines":[{"line_number":1705,"context_line":"                      {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health})"},{"line_number":1706,"context_line":""},{"line_number":1707,"context_line":"    except Exception as exc:"},{"line_number":1708,"context_line":"        # Don\u0027t fail power sync if health value change processing fails"},{"line_number":1709,"context_line":"        LOG.debug(_(\u0027Error updating health status for node %(node)s: \u0027"},{"line_number":1710,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1711,"context_line":"                  {\u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"03d4fcae_6a760ba0","line":1708,"in_reply_to":"22a825b9_658cca2b","updated":"2025-12-01 13:20:26.000000000","message":"Done","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a7cab1fb3f1ca2e4347b0a85c8707ad98d65e5c3","unresolved":true,"context_lines":[{"line_number":1706,"context_line":""},{"line_number":1707,"context_line":"    except Exception as exc:"},{"line_number":1708,"context_line":"        # Don\u0027t fail power sync if health value change processing fails"},{"line_number":1709,"context_line":"        LOG.debug(_(\u0027Error updating health status for node %(node)s: \u0027"},{"line_number":1710,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1711,"context_line":"                  {\u0027node\u0027: task.node.uuid,"},{"line_number":1712,"context_line":"                   \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":12,"id":"e9175509_4d4fb17d","line":1709,"updated":"2025-11-28 03:01:09.000000000","message":"LOG.warning","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"b1645fbce2bbd982092f521b7a5bb17061503042","unresolved":false,"context_lines":[{"line_number":1706,"context_line":""},{"line_number":1707,"context_line":"    except Exception as exc:"},{"line_number":1708,"context_line":"        # Don\u0027t fail power sync if health value change processing fails"},{"line_number":1709,"context_line":"        LOG.debug(_(\u0027Error updating health status for node %(node)s: \u0027"},{"line_number":1710,"context_line":"                    \u0027%(class)s: %(exc)s\u0027),"},{"line_number":1711,"context_line":"                  {\u0027node\u0027: task.node.uuid,"},{"line_number":1712,"context_line":"                   \u0027class\u0027: type(exc).__name__, \u0027exc\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":12,"id":"54acaf8a_23bb1f97","line":1709,"in_reply_to":"e9175509_4d4fb17d","updated":"2025-12-01 13:20:26.000000000","message":"Done","commit_id":"0785ae8ba77091a019f0ee0c269ff4d69b1dd84a"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"3242d7c7f686143ee524c978b0d788600630a559","unresolved":true,"context_lines":[{"line_number":1694,"context_line":"                LOG.warning(_(\"Node %(node)s health status indicates a \""},{"line_number":1695,"context_line":"                              \"problem: health\u003d%(health)s\"),"},{"line_number":1696,"context_line":"                            {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health})"},{"line_number":1697,"context_line":"            elif health and health not in (health_states.OK,"},{"line_number":1698,"context_line":"                                           health_states.WARNING,"},{"line_number":1699,"context_line":"                                           health_states.CRITICAL):"},{"line_number":1700,"context_line":"                # Unexpected health value, log it"}],"source_content_type":"text/x-python","patch_set":23,"id":"7d2adafb_f3712221","line":1697,"updated":"2026-01-10 01:54:29.000000000","message":"Why are we going all the way down here to check if it’s a valid value? We shouldn’t save an invalid state above either.","commit_id":"af310011d52c3a62c9c1b3407247dc4796b6f0e5"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"c98ae4c13a15cf4e16052d6025c478c5338497e6","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"                LOG.warning(_(\"Node %(node)s health status indicates a \""},{"line_number":1695,"context_line":"                              \"problem: health\u003d%(health)s\"),"},{"line_number":1696,"context_line":"                            {\u0027node\u0027: task.node.uuid, \u0027health\u0027: health})"},{"line_number":1697,"context_line":"            elif health and health not in (health_states.OK,"},{"line_number":1698,"context_line":"                                           health_states.WARNING,"},{"line_number":1699,"context_line":"                                           health_states.CRITICAL):"},{"line_number":1700,"context_line":"                # Unexpected health value, log it"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a6018ea_824d712d","line":1697,"in_reply_to":"7d2adafb_f3712221","updated":"2026-01-12 15:14:34.000000000","message":"Done","commit_id":"af310011d52c3a62c9c1b3407247dc4796b6f0e5"}],"ironic/drivers/modules/redfish/management.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":"ef303e1dc8130a188974ef4c36bc00768955d533","unresolved":true,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        # Try to get health status from system.status"},{"line_number":821,"context_line":"        if system.status and system.status.health:"},{"line_number":822,"context_line":"            return str(system.status.health.value)"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        # Health status not available"},{"line_number":825,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"0d972436_ac713367","line":822,"updated":"2025-11-13 23:44:15.000000000","message":"We have code lower in the stack that makes an assumption this only changes when the actual health changes; are we sure there\u0027s no timestamps or sequence numbers that may be included here?","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"92f5dad66f9d8ad8379d96984b671f1d45dc9c74","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        # Try to get health status from system.status"},{"line_number":821,"context_line":"        if system.status and system.status.health:"},{"line_number":822,"context_line":"            return str(system.status.health.value)"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        # Health status not available"},{"line_number":825,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"38ef1026_e41ad338","line":822,"in_reply_to":"0d972436_ac713367","updated":"2025-11-27 16:55:42.000000000","message":"To my best knowledge, only health status is passed here with no timestamps / sequence numbers. I grepped through a collection of dozen+ BMC mockups I have and I only ever see OK, Warning, Unknown and null. I\u0027d expect it to reach Critical or Error at times, but no evidence of other data. Please let me know if you have further concerns about this part.","commit_id":"f5937a1421bb73b6f9072cb13b380d08a382b4c4"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d92785a1b846b1b5b6edfcf55b95adb6a11a83bb","unresolved":true,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        # Try to get health status from system.status"},{"line_number":821,"context_line":"        if system.status and system.status.health:"},{"line_number":822,"context_line":"            return str(system.status.health.value)"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        # Health status not available"},{"line_number":825,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":16,"id":"b1da737f_6f9868fb","line":822,"updated":"2025-12-08 17:20:57.000000000","message":"To each what I requested on the meeting today: I\u0027d prefer we defined Ironic-level constants that all drivers will use, similarly to how we define power state constants (and convert Redfish values into them).","commit_id":"f404109ae96898ab49f84f16933372cffcc6918e"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"62140e85516c1009a44b0b27af4ce65ddc540b18","unresolved":false,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        # Try to get health status from system.status"},{"line_number":821,"context_line":"        if system.status and system.status.health:"},{"line_number":822,"context_line":"            return str(system.status.health.value)"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        # Health status not available"},{"line_number":825,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf90a62a_1d4daffc","line":822,"in_reply_to":"78a57fcf_a2111074","updated":"2025-12-17 04:44:04.000000000","message":"Done","commit_id":"f404109ae96898ab49f84f16933372cffcc6918e"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f6a9f2d0c875d0636ef5419f2b9f99209d24b8d","unresolved":true,"context_lines":[{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        # Try to get health status from system.status"},{"line_number":821,"context_line":"        if system.status and system.status.health:"},{"line_number":822,"context_line":"            return str(system.status.health.value)"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"        # Health status not available"},{"line_number":825,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":16,"id":"78a57fcf_a2111074","line":822,"in_reply_to":"b1da737f_6f9868fb","updated":"2025-12-11 14:32:07.000000000","message":"I\u0027m a +1 on defined constants. With that this would get my +2.","commit_id":"f404109ae96898ab49f84f16933372cffcc6918e"}],"ironic/objects/node.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b0dbb53e2df4cccd525c1c0d4f319dda800b8975","unresolved":true,"context_lines":[{"line_number":236,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def _set_from_db_object(self, context, db_object, fields\u003dNone):"},{"line_number":239,"context_line":"        use_fields \u003d set(fields or self.fields) - {\u0027traits\u0027}"},{"line_number":240,"context_line":"        # Handle fields that might not exist in older database schemas"},{"line_number":241,"context_line":"        # Remove fields from use_fields if they don\u0027t exist in db_object"},{"line_number":242,"context_line":"        use_fields \u003d {f for f in use_fields if f in db_object}"}],"source_content_type":"text/x-python","patch_set":28,"id":"fd0b43f5_6f29951f","line":239,"updated":"2026-01-21 21:44:26.000000000","message":"Should this be deleted since the value is replaced below?","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"6695c14efe537d084cadb244f5a9c9e0cd5fcfa6","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def _set_from_db_object(self, context, db_object, fields\u003dNone):"},{"line_number":239,"context_line":"        use_fields \u003d set(fields or self.fields) - {\u0027traits\u0027}"},{"line_number":240,"context_line":"        # Handle fields that might not exist in older database schemas"},{"line_number":241,"context_line":"        # Remove fields from use_fields if they don\u0027t exist in db_object"},{"line_number":242,"context_line":"        use_fields \u003d {f for f in use_fields if f in db_object}"}],"source_content_type":"text/x-python","patch_set":28,"id":"4dfc6b18_e1c50391","line":239,"in_reply_to":"d86e22aa_8fb2456b","updated":"2026-01-22 17:04:49.000000000","message":"Done","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"9f388ce09968741ed6a8f3bd05547285cb2c909f","unresolved":true,"context_lines":[{"line_number":236,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def _set_from_db_object(self, context, db_object, fields\u003dNone):"},{"line_number":239,"context_line":"        use_fields \u003d set(fields or self.fields) - {\u0027traits\u0027}"},{"line_number":240,"context_line":"        # Handle fields that might not exist in older database schemas"},{"line_number":241,"context_line":"        # Remove fields from use_fields if they don\u0027t exist in db_object"},{"line_number":242,"context_line":"        use_fields \u003d {f for f in use_fields if f in db_object}"}],"source_content_type":"text/x-python","patch_set":28,"id":"d86e22aa_8fb2456b","line":239,"in_reply_to":"fd0b43f5_6f29951f","updated":"2026-01-22 14:49:43.000000000","message":"+1 another good catch","commit_id":"38b4a7910bed0b01edc7e46091f251fa202ea83c"}],"releasenotes/notes/add-redfish-health-monitoring-support-a8f3c4d2e9b7f1a3.yaml":[{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"cf3af981582fa3c8c9afad8b489306da6d78f0b5","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds hardware health status monitoring and synchronization capability."},{"line_number":5,"context_line":"    A new ``health`` field has been added to the Node object and API"},{"line_number":6,"context_line":"    (microversion 1.104) to expose hardware health status reported by the"},{"line_number":7,"context_line":"    BMC."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    This feature introduces a new optional ``get_node_health()`` method in"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"a0eca29d_0ec04ef7","line":6,"updated":"2025-12-01 13:56:13.000000000","message":"nit: now it is microversion 1.105","commit_id":"8d329fc5709ff2989050a2ce06fe7c1246930c1a"},{"author":{"_account_id":32177,"name":"Jacob Anders","email":"jacob-anders-dev@proton.me","username":"janders"},"change_message_id":"35383b4098b1fbf30c099f0ade4a8a1c4f752959","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds hardware health status monitoring and synchronization capability."},{"line_number":5,"context_line":"    A new ``health`` field has been added to the Node object and API"},{"line_number":6,"context_line":"    (microversion 1.104) to expose hardware health status reported by the"},{"line_number":7,"context_line":"    BMC."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    This feature introduces a new optional ``get_node_health()`` method in"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"941697f3_7daf844e","line":6,"in_reply_to":"a0eca29d_0ec04ef7","updated":"2025-12-01 14:28:09.000000000","message":"Good pickup, thank you Jakub. Missed this while rebasing the API patch.","commit_id":"8d329fc5709ff2989050a2ce06fe7c1246930c1a"},{"author":{"_account_id":35099,"name":"Jakub Jelinek","email":"jakub.jelinek@cern.ch","username":"kubajj"},"change_message_id":"748f8c1dca3ac752f7dfda883956214bc9997b6c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds hardware health status monitoring and synchronization capability."},{"line_number":5,"context_line":"    A new ``health`` field has been added to the Node object and API"},{"line_number":6,"context_line":"    (microversion 1.104) to expose hardware health status reported by the"},{"line_number":7,"context_line":"    BMC."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    This feature introduces a new optional ``get_node_health()`` method in"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"26997d00_1ae0aa83","line":6,"in_reply_to":"a0eca29d_0ec04ef7","updated":"2025-12-01 14:27:32.000000000","message":"thanks","commit_id":"8d329fc5709ff2989050a2ce06fe7c1246930c1a"}]}
