)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"73096c204cb513b6c1df2d23dc381ab1bf247698","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9c263836_2deb52ff","updated":"2026-04-16 14:40:40.000000000","message":"LGTM, thank you!","commit_id":"07252599d50e636a85ccbc835a62c9af45eae275"}],"openstack_dashboard/test/selenium/integration/conftest.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a104b7807f88b556a22208ea801b8550433617df","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    if len(env_services_regions) \u003c 2:"},{"line_number":82,"context_line":"        pytest.skip("},{"line_number":83,"context_line":"            \"Test required only when multiple\""},{"line_number":84,"context_line":"            \" services_regions are available.\")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"@pytest.fixture(scope\u003d\u0027session\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"d92ab499_f52b3d27","line":84,"updated":"2026-03-26 13:25:24.000000000","message":"Have you considered using a skipif decorator, as documented at https://docs.pytest.org/en/6.2.x/skipping.html#id1?","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"540e8df011d736de59a63dc37a281f7b50a59380","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    if len(env_services_regions) \u003c 2:"},{"line_number":82,"context_line":"        pytest.skip("},{"line_number":83,"context_line":"            \"Test required only when multiple\""},{"line_number":84,"context_line":"            \" services_regions are available.\")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"@pytest.fixture(scope\u003d\u0027session\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"60f2b112_935376b0","line":84,"in_reply_to":"b0cf8ff3_90b91048","updated":"2026-04-07 09:24:17.000000000","message":"Acknowledged","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"467472dd2d00c398aea0e41060fd7c313b51682f","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    if len(env_services_regions) \u003c 2:"},{"line_number":82,"context_line":"        pytest.skip("},{"line_number":83,"context_line":"            \"Test required only when multiple\""},{"line_number":84,"context_line":"            \" services_regions are available.\")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"@pytest.fixture(scope\u003d\u0027session\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b0cf8ff3_90b91048","line":84,"in_reply_to":"d92ab499_f52b3d27","updated":"2026-04-01 14:25:35.000000000","message":"I was thinking about it but I think it is not good way for us. Skipif requires conditions at collection time (before any test code or fixtures is executed) and we are getting the required condition information as a part of env_services_regions fixture. Those information are not existing yet during collection.\n\nWe would need to get that information somehow before the tests starts (before fixtures, before the test code) practically before the collections. It means to have it somehow defined in horizon.conf or be able to read from keystone API before tests started (which would require to create another OpenStackSDK connection separately out of fixtures and also all the other required parts like config) to be able to run it in advance. But then we would lose the advantage of the fixture (at least of those that we would need to run in advance) that could possibly lead to not correctly close connections or the code would be probably significantly more complicated than it is now.\n\nI think that skipif is good for environment or system checks (basically information that you can get directly without super complicated connections/API calls, etc.) but it does not seem to be a very good solution for me in complicated cases like our one. The current solution is from my point of view the clearest and safest that we can have (as everything is a fixture) so we know everything is properly closed and we are able to define order.\n\nIf I missed something and you can share with me a code example how we could do it better, it is welcomed of course.","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"}],"openstack_dashboard/test/selenium/integration/test_services_regions.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a104b7807f88b556a22208ea801b8550433617df","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            if service is None and \"keystone-public\" in url:"},{"line_number":126,"context_line":"                service \u003d \"keystone\""},{"line_number":127,"context_line":"            # Because of Swift specific name"},{"line_number":128,"context_line":"            url \u003d url.replace(\"%(tenant_id)s\", project_id)"},{"line_number":129,"context_line":"            service_row \u003d driver.find_element("},{"line_number":130,"context_line":"                By.CSS_SELECTOR,"},{"line_number":131,"context_line":"                f\"table#endpoints\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5545719d_45a9b4aa","line":128,"updated":"2026-03-26 13:25:24.000000000","message":"this could be fragile if the tenant_id is some common word, perhaps it would be better to parse the endpoint url, recognize when it\u0027s swift, and only replace the particular part of it? I can help with parsing the url if you show me examples.","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"cba30eaa09a77c4e3a0cf603d8522eb24efa1de1","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            if service is None and \"keystone-public\" in url:"},{"line_number":126,"context_line":"                service \u003d \"keystone\""},{"line_number":127,"context_line":"            # Because of Swift specific name"},{"line_number":128,"context_line":"            url \u003d url.replace(\"%(tenant_id)s\", project_id)"},{"line_number":129,"context_line":"            service_row \u003d driver.find_element("},{"line_number":130,"context_line":"                By.CSS_SELECTOR,"},{"line_number":131,"context_line":"                f\"table#endpoints\""}],"source_content_type":"text/x-python","patch_set":5,"id":"8cbb8fe8_fcaa2bd8","line":128,"in_reply_to":"5545719d_45a9b4aa","updated":"2026-03-26 16:22:28.000000000","message":"I am not sure if tenant_id can be a common word, it is a system-generated UUID as far as I know.\nIn the case of Swift this is what openstackSDK returns as url for swift, in call openstack_admin.identity.endpoints():\nurl\u003dhttps://swift-public-.../v1/AUTH_%(tenant_id)s\n\nAnd this is what is visible in Horizon UI in services endpoints:\nhttps://swift-public-.../v1/AUTH_111a3333c666666d……\n(where the number after AUTH_ is project ID).\n\n\nDamn... I can see in different deployment in UI:\nCompute_legacy service with endpoint:\nhttp://address/compute/v2/11c2bdc444d…. (where the number after last / is project ID)\nbut Compute_legacy endpoint I can get from OpenStackSDK call is:\nhttp://address/compute/v2/$(project_id)s\n\n\nSo it is completely mess. Swift (at least in RHOSO) is using AUTH_%(tenant_id)s\nCompute_legacy (at least in Upstream) is using $(project_id)s\n\nAnd I was able to check only the services I can see in my environments. I guess there will be tons of others.","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"abec19252697a658cbb408cc01d431b5bb7b1b0a","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            if service is None and \"keystone-public\" in url:"},{"line_number":126,"context_line":"                service \u003d \"keystone\""},{"line_number":127,"context_line":"            # Because of Swift specific name"},{"line_number":128,"context_line":"            url \u003d url.replace(\"%(tenant_id)s\", project_id)"},{"line_number":129,"context_line":"            service_row \u003d driver.find_element("},{"line_number":130,"context_line":"                By.CSS_SELECTOR,"},{"line_number":131,"context_line":"                f\"table#endpoints\""}],"source_content_type":"text/x-python","patch_set":5,"id":"a5f07f2a_727d1d4a","line":128,"in_reply_to":"8cbb8fe8_fcaa2bd8","updated":"2026-03-27 08:32:33.000000000","message":"Perhaps we should chop off both urls at the /vX/, and igonre the remainder on both sides of the comparison?","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"540e8df011d736de59a63dc37a281f7b50a59380","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            if service is None and \"keystone-public\" in url:"},{"line_number":126,"context_line":"                service \u003d \"keystone\""},{"line_number":127,"context_line":"            # Because of Swift specific name"},{"line_number":128,"context_line":"            url \u003d url.replace(\"%(tenant_id)s\", project_id)"},{"line_number":129,"context_line":"            service_row \u003d driver.find_element("},{"line_number":130,"context_line":"                By.CSS_SELECTOR,"},{"line_number":131,"context_line":"                f\"table#endpoints\""}],"source_content_type":"text/x-python","patch_set":5,"id":"a418f7b9_88dd8d02","line":128,"in_reply_to":"9765394d_94203270","updated":"2026-04-07 09:24:17.000000000","message":"Acknowledged","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"467472dd2d00c398aea0e41060fd7c313b51682f","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            if service is None and \"keystone-public\" in url:"},{"line_number":126,"context_line":"                service \u003d \"keystone\""},{"line_number":127,"context_line":"            # Because of Swift specific name"},{"line_number":128,"context_line":"            url \u003d url.replace(\"%(tenant_id)s\", project_id)"},{"line_number":129,"context_line":"            service_row \u003d driver.find_element("},{"line_number":130,"context_line":"                By.CSS_SELECTOR,"},{"line_number":131,"context_line":"                f\"table#endpoints\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9765394d_94203270","line":128,"in_reply_to":"a5f07f2a_727d1d4a","updated":"2026-04-01 14:25:35.000000000","message":"What do you think about the current version?","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a104b7807f88b556a22208ea801b8550433617df","unresolved":true,"context_lines":[{"line_number":153,"context_line":"    assert len(rows) \u003d\u003d 1"},{"line_number":154,"context_line":"    switch_to_services_region("},{"line_number":155,"context_line":"        driver, config, config.services_regions.region_two_name)"},{"line_number":156,"context_line":"    rows \u003d driver.find_elements("},{"line_number":157,"context_line":"        By.CSS_SELECTOR,"},{"line_number":158,"context_line":"        f\"table#flavors tr[data-display\u003d\u0027{new_flavor_region_one.name}\u0027]\")"},{"line_number":159,"context_line":"    assert len(rows) \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"776dc4a4_e6ea0535","line":156,"updated":"2026-03-26 13:25:24.000000000","message":"you might want to use the \"no_wait\" context manager here, like in test_regions.py","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"cba30eaa09a77c4e3a0cf603d8522eb24efa1de1","unresolved":true,"context_lines":[{"line_number":153,"context_line":"    assert len(rows) \u003d\u003d 1"},{"line_number":154,"context_line":"    switch_to_services_region("},{"line_number":155,"context_line":"        driver, config, config.services_regions.region_two_name)"},{"line_number":156,"context_line":"    rows \u003d driver.find_elements("},{"line_number":157,"context_line":"        By.CSS_SELECTOR,"},{"line_number":158,"context_line":"        f\"table#flavors tr[data-display\u003d\u0027{new_flavor_region_one.name}\u0027]\")"},{"line_number":159,"context_line":"    assert len(rows) \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"d1a4cdb6_14d3f5f5","line":156,"in_reply_to":"776dc4a4_e6ea0535","updated":"2026-03-26 16:22:28.000000000","message":"You mean to reduce (not to waste time) on waiting for something that \"should not be there\", right? (when I am already checking/waiting for all possible things as a part of the switch_to_services_region function).\n\nOr is there something else that I am missing?","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"467472dd2d00c398aea0e41060fd7c313b51682f","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    assert len(rows) \u003d\u003d 1"},{"line_number":154,"context_line":"    switch_to_services_region("},{"line_number":155,"context_line":"        driver, config, config.services_regions.region_two_name)"},{"line_number":156,"context_line":"    rows \u003d driver.find_elements("},{"line_number":157,"context_line":"        By.CSS_SELECTOR,"},{"line_number":158,"context_line":"        f\"table#flavors tr[data-display\u003d\u0027{new_flavor_region_one.name}\u0027]\")"},{"line_number":159,"context_line":"    assert len(rows) \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"451b0b6e_c8c90030","line":156,"in_reply_to":"b4725cf3_185727c7","updated":"2026-04-01 14:25:35.000000000","message":"Done","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"abec19252697a658cbb408cc01d431b5bb7b1b0a","unresolved":true,"context_lines":[{"line_number":153,"context_line":"    assert len(rows) \u003d\u003d 1"},{"line_number":154,"context_line":"    switch_to_services_region("},{"line_number":155,"context_line":"        driver, config, config.services_regions.region_two_name)"},{"line_number":156,"context_line":"    rows \u003d driver.find_elements("},{"line_number":157,"context_line":"        By.CSS_SELECTOR,"},{"line_number":158,"context_line":"        f\"table#flavors tr[data-display\u003d\u0027{new_flavor_region_one.name}\u0027]\")"},{"line_number":159,"context_line":"    assert len(rows) \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"b4725cf3_185727c7","line":156,"in_reply_to":"d1a4cdb6_14d3f5f5","updated":"2026-03-27 08:32:33.000000000","message":"yes","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a104b7807f88b556a22208ea801b8550433617df","unresolved":true,"context_lines":[{"line_number":178,"context_line":"    assert len(rows) \u003d\u003d 1"},{"line_number":179,"context_line":"    switch_to_services_region("},{"line_number":180,"context_line":"        driver, config, config.services_regions.region_one_name)"},{"line_number":181,"context_line":"    rows \u003d driver.find_elements("},{"line_number":182,"context_line":"        By.CSS_SELECTOR,"},{"line_number":183,"context_line":"        f\"table#flavors tr[data-display\u003d\u0027{new_flavor_region_two.name}\u0027]\")"},{"line_number":184,"context_line":"    assert len(rows) \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"5caac7be_3e18c245","line":181,"updated":"2026-03-26 13:25:24.000000000","message":"some with no_wait","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"467472dd2d00c398aea0e41060fd7c313b51682f","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    assert len(rows) \u003d\u003d 1"},{"line_number":179,"context_line":"    switch_to_services_region("},{"line_number":180,"context_line":"        driver, config, config.services_regions.region_one_name)"},{"line_number":181,"context_line":"    rows \u003d driver.find_elements("},{"line_number":182,"context_line":"        By.CSS_SELECTOR,"},{"line_number":183,"context_line":"        f\"table#flavors tr[data-display\u003d\u0027{new_flavor_region_two.name}\u0027]\")"},{"line_number":184,"context_line":"    assert len(rows) \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"08bd73ad_5152e59f","line":181,"in_reply_to":"5caac7be_3e18c245","updated":"2026-04-01 14:25:35.000000000","message":"Done","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a104b7807f88b556a22208ea801b8550433617df","unresolved":true,"context_lines":[{"line_number":223,"context_line":"            flavor_sdk_region_one.ram \u003d\u003d flavor_ram and"},{"line_number":224,"context_line":"            flavor_sdk_region_one.disk \u003d\u003d flavor_disk)"},{"line_number":225,"context_line":"    flavor_sdk_region_two \u003d ("},{"line_number":226,"context_line":"        openstack_admin_region_two.compute.find_flavor(flavor_name))"},{"line_number":227,"context_line":"    assert flavor_sdk_region_two is None"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"0624b3ed_155255d8","line":226,"updated":"2026-03-26 13:25:24.000000000","message":"and here","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"cba30eaa09a77c4e3a0cf603d8522eb24efa1de1","unresolved":true,"context_lines":[{"line_number":223,"context_line":"            flavor_sdk_region_one.ram \u003d\u003d flavor_ram and"},{"line_number":224,"context_line":"            flavor_sdk_region_one.disk \u003d\u003d flavor_disk)"},{"line_number":225,"context_line":"    flavor_sdk_region_two \u003d ("},{"line_number":226,"context_line":"        openstack_admin_region_two.compute.find_flavor(flavor_name))"},{"line_number":227,"context_line":"    assert flavor_sdk_region_two is None"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"83d1b9b3_4111ca5d","line":226,"in_reply_to":"0624b3ed_155255d8","updated":"2026-03-26 16:22:28.000000000","message":"Are you sure here? Here is no \"find\" anything using selenium. Here is the OpenstackSDK call (which is immediate) and then the return from the OpenstackSDK call is asserted.","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"abec19252697a658cbb408cc01d431b5bb7b1b0a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            flavor_sdk_region_one.ram \u003d\u003d flavor_ram and"},{"line_number":224,"context_line":"            flavor_sdk_region_one.disk \u003d\u003d flavor_disk)"},{"line_number":225,"context_line":"    flavor_sdk_region_two \u003d ("},{"line_number":226,"context_line":"        openstack_admin_region_two.compute.find_flavor(flavor_name))"},{"line_number":227,"context_line":"    assert flavor_sdk_region_two is None"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fdd15630_3f591add","line":226,"in_reply_to":"83d1b9b3_4111ca5d","updated":"2026-03-27 08:32:33.000000000","message":"you are right, I was overenthusiastic","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a104b7807f88b556a22208ea801b8550433617df","unresolved":true,"context_lines":[{"line_number":266,"context_line":"            flavor_sdk_region_two.ram \u003d\u003d flavor_ram and"},{"line_number":267,"context_line":"            flavor_sdk_region_two.disk \u003d\u003d flavor_disk)"},{"line_number":268,"context_line":"    flavor_sdk_region_one \u003d ("},{"line_number":269,"context_line":"        openstack_admin_region_one.compute.find_flavor(flavor_name))"},{"line_number":270,"context_line":"    assert flavor_sdk_region_one is None"}],"source_content_type":"text/x-python","patch_set":5,"id":"6a7b8f61_b75a4ee0","line":269,"updated":"2026-03-26 13:25:24.000000000","message":"and here","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"cba30eaa09a77c4e3a0cf603d8522eb24efa1de1","unresolved":true,"context_lines":[{"line_number":266,"context_line":"            flavor_sdk_region_two.ram \u003d\u003d flavor_ram and"},{"line_number":267,"context_line":"            flavor_sdk_region_two.disk \u003d\u003d flavor_disk)"},{"line_number":268,"context_line":"    flavor_sdk_region_one \u003d ("},{"line_number":269,"context_line":"        openstack_admin_region_one.compute.find_flavor(flavor_name))"},{"line_number":270,"context_line":"    assert flavor_sdk_region_one is None"}],"source_content_type":"text/x-python","patch_set":5,"id":"87adf5f7_1033f3bc","line":269,"in_reply_to":"6a7b8f61_b75a4ee0","updated":"2026-03-26 16:22:28.000000000","message":"The same as previous, OpenstackSDK call.","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"abec19252697a658cbb408cc01d431b5bb7b1b0a","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            flavor_sdk_region_two.ram \u003d\u003d flavor_ram and"},{"line_number":267,"context_line":"            flavor_sdk_region_two.disk \u003d\u003d flavor_disk)"},{"line_number":268,"context_line":"    flavor_sdk_region_one \u003d ("},{"line_number":269,"context_line":"        openstack_admin_region_one.compute.find_flavor(flavor_name))"},{"line_number":270,"context_line":"    assert flavor_sdk_region_one is None"}],"source_content_type":"text/x-python","patch_set":5,"id":"c85ee637_09a2f847","line":269,"in_reply_to":"87adf5f7_1033f3bc","updated":"2026-03-27 08:32:33.000000000","message":"Acknowledged","commit_id":"91ca4a8e7d87675f3139967cdf042b78bc33cde3"}]}
