)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"fa7b7b4634481bfd939874b0bb0b8861b999fd51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"cac7812d_7fcbf8a6","updated":"2026-02-23 14:56:03.000000000","message":"recheck pkg_respurces","commit_id":"b5b78095c4470a2eaa4adfdca890fb84b64b2088"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9b6d139e68f9c9866fa96aee54a819adea0e9743","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"4d8fd916_ade1d067","updated":"2026-03-12 19:08:31.000000000","message":"Thank you for your work. The add/remove functionality works for me. I have found some discrepancies, but I am ok to merge this as is, and we can fix them along with implementing the rest of the functionality. I\u0027ll mark them here for better tracking:\n- Checkbox for boolean metadata instead of true/false in AngularJS version\n- Light blue help test with full property name shows \"custom\" instead for os_hash_algo, os_hash_value and os_hidden\n- Property name in decription uses italic in AngularJS version","commit_id":"eaa9bea68440d8f9fc3fd1a91a4ebe07b491451f"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"aad6e639ffd4579fb51b38efe67cb08e45337f4c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9fb6c3b5_5d836b1c","updated":"2026-03-13 14:09:29.000000000","message":"Thanks Radomir, all the things I pointed out are working well now. Just one point that can be done in the upcoming patch - os_hash_algo and os_hash_value should be \"read only\".","commit_id":"8bd5e2babe189aa3ab7eeee3bd5968664f45e06a"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"6e555a6c9ecd276d7ddc09e54eea6524daa1f554","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"ce7efb0c_56f3fdef","updated":"2026-03-13 11:47:36.000000000","message":"recheck, probably random failure/race condition (ERROR: could not install deps)","commit_id":"8bd5e2babe189aa3ab7eeee3bd5968664f45e06a"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4d0f0ec0a85196e2b535009ffa4144d557c2ae4c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3c1cc78f_17a2a5ee","in_reply_to":"9fb6c3b5_5d836b1c","updated":"2026-03-13 14:23:51.000000000","message":"There\u0027s some more read only listed in IMAGE_RO_PROPERTIES. But it can be fixed later. Let\u0027s have this one merged.","commit_id":"8bd5e2babe189aa3ab7eeee3bd5968664f45e06a"}],"openstack_dashboard/dashboards/project/images/images/forms.py":[{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"dacd266d038c10f8db6db6406ca64847c1f594dc","unresolved":true,"context_lines":[{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def handle(self, request, data):"},{"line_number":490,"context_line":"        image_id \u003d data.pop(\u0027image_id\u0027)"},{"line_number":491,"context_line":"        api.glance.image_update_properties(request, image_id, data)"},{"line_number":492,"context_line":"        # XXX Do we need an extra step to delete properties?"},{"line_number":493,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":8,"id":"797edf25_f9d3ff1b","line":491,"range":{"start_line":491,"start_character":8,"end_line":491,"end_character":67},"updated":"2026-03-10 12:44:44.000000000","message":"I can not create any property at all. No matter if I create a custom one (fill textbox, click blue “+” and then in the right column fill value) and then click Save. Or if I use some of the predefined properties like CPU mode, fill value and click Save.\nIt shows no error, but something happens (API call). Property is not visible in image detail, not visible when I open again the Update Metadata tab and not visible in CLI.\nIt seems like it does an empty API update call.\n\nBased on this: https://github.com/openstack/horizon/blob/d95f224756f5060ec3244d6f346d5d710116f482/openstack_dashboard/api/glance.py#L516\nI guess your call is incorrect. You have 3 parameters so you provide request, image_id AND remove_props but not the data.\nI guess the call should look like this:\napi.glance.image_update_properties(request, image_id, /double asterisks/data)\nOr\napi.glance.image_update_properties(request, image_id, remove_props\u003dNone, /double asterisks/data)","commit_id":"b5b78095c4470a2eaa4adfdca890fb84b64b2088"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"d16bacf69f18d40f974c335ed62fc7fa0d99d183","unresolved":false,"context_lines":[{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def handle(self, request, data):"},{"line_number":490,"context_line":"        image_id \u003d data.pop(\u0027image_id\u0027)"},{"line_number":491,"context_line":"        api.glance.image_update_properties(request, image_id, data)"},{"line_number":492,"context_line":"        # XXX Do we need an extra step to delete properties?"},{"line_number":493,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":8,"id":"8b10a830_d57c5d24","line":491,"range":{"start_line":491,"start_character":8,"end_line":491,"end_character":67},"in_reply_to":"797edf25_f9d3ff1b","updated":"2026-03-10 14:50:54.000000000","message":"Acknowledged","commit_id":"b5b78095c4470a2eaa4adfdca890fb84b64b2088"}],"openstack_dashboard/dashboards/project/images/images/tables.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"30d6b8340b36a8029369cece11a1022bd8098684","unresolved":true,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"class UpdateMetadata(tables.LinkAction):"},{"line_number":172,"context_line":"    name \u003d \"update_metadata2\""},{"line_number":173,"context_line":"    verbose_name \u003d _(\"Update Metadata\")"},{"line_number":174,"context_line":"    icon \u003d \"pencil\""},{"line_number":175,"context_line":"    url \u003d \"horizon:project:images:images:metadata\""}],"source_content_type":"text/x-python","patch_set":10,"id":"83572027_89a08957","line":172,"range":{"start_line":172,"start_character":27,"end_line":172,"end_character":29},"updated":"2026-03-12 19:08:56.000000000","message":"A typo?","commit_id":"eaa9bea68440d8f9fc3fd1a91a4ebe07b491451f"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"00bdf598ecb52cb2893c030e7f69fc8474128e27","unresolved":true,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"class UpdateMetadata(tables.LinkAction):"},{"line_number":172,"context_line":"    name \u003d \"update_metadata2\""},{"line_number":173,"context_line":"    verbose_name \u003d _(\"Update Metadata\")"},{"line_number":174,"context_line":"    icon \u003d \"pencil\""},{"line_number":175,"context_line":"    url \u003d \"horizon:project:images:images:metadata\""}],"source_content_type":"text/x-python","patch_set":10,"id":"0ca36e99_acc4e8a8","line":172,"range":{"start_line":172,"start_character":27,"end_line":172,"end_character":29},"in_reply_to":"83572027_89a08957","updated":"2026-03-13 07:35:16.000000000","message":"Ah, no, I had both the old and thew new actions enabled for debugging for a time, and this is a leftover from that. I will fix that, thanks for catching it.","commit_id":"eaa9bea68440d8f9fc3fd1a91a4ebe07b491451f"}],"openstack_dashboard/static/js/horizon.image_metadata.js":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7eef8347e33ae316b41d18468e4d1b38a341bfd2","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    properties_init() {"},{"line_number":55,"context_line":"      const properties \u003d this.root.querySelectorAll(\u0027ul.metadata-properties li\u0027);"},{"line_number":56,"context_line":"      for (let el of properties) {"},{"line_number":57,"context_line":"        const element \u003d el;"},{"line_number":58,"context_line":"        const button \u003d element.querySelector(\u0027a.btn\u0027);"},{"line_number":59,"context_line":"        button.onclick \u003d () \u003d\u003e this.property_remove(element);"},{"line_number":60,"context_line":"      }"}],"source_content_type":"text/javascript","patch_set":4,"id":"e1e09a36_607041f6","line":57,"updated":"2025-12-11 19:18:22.000000000","message":"Maybe a comment why we need const here?","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"6f52b2ee6d506e563fb6096ae541234e2d58577a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    properties_init() {"},{"line_number":55,"context_line":"      const properties \u003d this.root.querySelectorAll(\u0027ul.metadata-properties li\u0027);"},{"line_number":56,"context_line":"      for (let el of properties) {"},{"line_number":57,"context_line":"        const element \u003d el;"},{"line_number":58,"context_line":"        const button \u003d element.querySelector(\u0027a.btn\u0027);"},{"line_number":59,"context_line":"        button.onclick \u003d () \u003d\u003e this.property_remove(element);"},{"line_number":60,"context_line":"      }"}],"source_content_type":"text/javascript","patch_set":4,"id":"14627ad3_675fcca1","line":57,"in_reply_to":"70859040_fde712d5","updated":"2026-02-10 11:26:42.000000000","message":"Done","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1054c088d444d8168cc60fddb1fde739c8d3f2b6","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    properties_init() {"},{"line_number":55,"context_line":"      const properties \u003d this.root.querySelectorAll(\u0027ul.metadata-properties li\u0027);"},{"line_number":56,"context_line":"      for (let el of properties) {"},{"line_number":57,"context_line":"        const element \u003d el;"},{"line_number":58,"context_line":"        const button \u003d element.querySelector(\u0027a.btn\u0027);"},{"line_number":59,"context_line":"        button.onclick \u003d () \u003d\u003e this.property_remove(element);"},{"line_number":60,"context_line":"      }"}],"source_content_type":"text/javascript","patch_set":4,"id":"70859040_fde712d5","line":57,"in_reply_to":"e1e09a36_607041f6","updated":"2026-02-09 16:01:38.000000000","message":"Good point.","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7eef8347e33ae316b41d18468e4d1b38a341bfd2","unresolved":true,"context_lines":[{"line_number":95,"context_line":"      const li \u003d document.createElement(\u0027li\u0027);"},{"line_number":96,"context_line":"      li.classList.add(\u0027list-group-item\u0027);"},{"line_number":97,"context_line":"      li.dataset.name \u003d name;"},{"line_number":98,"context_line":"      // XXX consider using a template"},{"line_number":99,"context_line":"      li.innerHTML \u003d `\u003cdiv class\u003d\"metadata-tree-item\"\u003e"},{"line_number":100,"context_line":"  \u003cdiv class\u003d\"input-group input-group-sm\"\u003e"},{"line_number":101,"context_line":"    \u003cspan class\u003d\"input-group-addon\" title\u003d\"${name}\"\u003e${name}\u003c/span\u003e"}],"source_content_type":"text/javascript","patch_set":4,"id":"f054af44_efd2f09c","line":98,"updated":"2025-12-11 19:18:22.000000000","message":"+1 for on using a template","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1054c088d444d8168cc60fddb1fde739c8d3f2b6","unresolved":false,"context_lines":[{"line_number":95,"context_line":"      const li \u003d document.createElement(\u0027li\u0027);"},{"line_number":96,"context_line":"      li.classList.add(\u0027list-group-item\u0027);"},{"line_number":97,"context_line":"      li.dataset.name \u003d name;"},{"line_number":98,"context_line":"      // XXX consider using a template"},{"line_number":99,"context_line":"      li.innerHTML \u003d `\u003cdiv class\u003d\"metadata-tree-item\"\u003e"},{"line_number":100,"context_line":"  \u003cdiv class\u003d\"input-group input-group-sm\"\u003e"},{"line_number":101,"context_line":"    \u003cspan class\u003d\"input-group-addon\" title\u003d\"${name}\"\u003e${name}\u003c/span\u003e"}],"source_content_type":"text/javascript","patch_set":4,"id":"39698870_4c4b0a8c","line":98,"in_reply_to":"f054af44_efd2f09c","updated":"2026-02-09 16:01:38.000000000","message":"Done","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7eef8347e33ae316b41d18468e4d1b38a341bfd2","unresolved":true,"context_lines":[{"line_number":129,"context_line":"      const description \u003d element.dataset.description;"},{"line_number":130,"context_line":"      const title \u003d element.dataset.title;"},{"line_number":131,"context_line":"      const name \u003d element.dataset.name;"},{"line_number":132,"context_line":"      // XXX We probably want some html escaping here?"},{"line_number":133,"context_line":"      well.innerHTML \u003d `\u003cp\u003e\u003cstrong\u003e${title}\u003c/strong\u003e (${name})\u003c/p\u003e\u003cp\u003e${description}\u003c/p\u003e`;"},{"line_number":134,"context_line":"    }"},{"line_number":135,"context_line":""}],"source_content_type":"text/javascript","patch_set":4,"id":"6fa67426_79d94821","line":132,"updated":"2025-12-11 19:18:22.000000000","message":"textContent property maybe?","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"1054c088d444d8168cc60fddb1fde739c8d3f2b6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"      const description \u003d element.dataset.description;"},{"line_number":130,"context_line":"      const title \u003d element.dataset.title;"},{"line_number":131,"context_line":"      const name \u003d element.dataset.name;"},{"line_number":132,"context_line":"      // XXX We probably want some html escaping here?"},{"line_number":133,"context_line":"      well.innerHTML \u003d `\u003cp\u003e\u003cstrong\u003e${title}\u003c/strong\u003e (${name})\u003c/p\u003e\u003cp\u003e${description}\u003c/p\u003e`;"},{"line_number":134,"context_line":"    }"},{"line_number":135,"context_line":""}],"source_content_type":"text/javascript","patch_set":4,"id":"2c1518d9_7406e697","line":132,"in_reply_to":"6fa67426_79d94821","updated":"2026-02-09 16:01:38.000000000","message":"Done","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7eef8347e33ae316b41d18468e4d1b38a341bfd2","unresolved":true,"context_lines":[{"line_number":223,"context_line":"      const metadefs \u003d this.root.querySelectorAll("},{"line_number":224,"context_line":"        \u0027ul.metadata-metadefs li.metadata-property\u0027);"},{"line_number":225,"context_line":"      for (let el of metadefs) {"},{"line_number":226,"context_line":"        const element \u003d el;"},{"line_number":227,"context_line":"        const button \u003d element.querySelector(\u0027a.btn\u0027);"},{"line_number":228,"context_line":"        button.onclick \u003d () \u003d\u003e this.metadef_add(element);"},{"line_number":229,"context_line":"        element.onclick \u003d () \u003d\u003e this.metadef_click(element);"}],"source_content_type":"text/javascript","patch_set":4,"id":"a01d22f9_12bf2a1e","line":226,"updated":"2025-12-11 19:18:22.000000000","message":"Same here","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"6f52b2ee6d506e563fb6096ae541234e2d58577a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"      const metadefs \u003d this.root.querySelectorAll("},{"line_number":224,"context_line":"        \u0027ul.metadata-metadefs li.metadata-property\u0027);"},{"line_number":225,"context_line":"      for (let el of metadefs) {"},{"line_number":226,"context_line":"        const element \u003d el;"},{"line_number":227,"context_line":"        const button \u003d element.querySelector(\u0027a.btn\u0027);"},{"line_number":228,"context_line":"        button.onclick \u003d () \u003d\u003e this.metadef_add(element);"},{"line_number":229,"context_line":"        element.onclick \u003d () \u003d\u003e this.metadef_click(element);"}],"source_content_type":"text/javascript","patch_set":4,"id":"ce935603_e8157c2c","line":226,"in_reply_to":"a01d22f9_12bf2a1e","updated":"2026-02-10 11:26:42.000000000","message":"Done","commit_id":"7b89a46c6f8d49ae49b656d13646c8c8b0d07949"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"dacd266d038c10f8db6db6406ca64847c1f594dc","unresolved":true,"context_lines":[{"line_number":108,"context_line":"        const input \u003d li.querySelector(\u0027input\u0027);"},{"line_number":109,"context_line":"        input.setAttribute(\u0027name\u0027, name);"},{"line_number":110,"context_line":"        const button \u003d li.querySelector(\u0027a.btn\u0027);"},{"line_number":111,"context_line":"        button.onclick \u003d () \u003d\u003e this.property_remove(element);"},{"line_number":112,"context_line":"        ul.appendChild(li);"},{"line_number":113,"context_line":"      }"},{"line_number":114,"context_line":"      this.metadefs_update();"}],"source_content_type":"text/javascript","patch_set":8,"id":"296cffa2_9f1c2965","line":111,"range":{"start_line":111,"start_character":52,"end_line":111,"end_character":59},"updated":"2026-03-10 12:44:44.000000000","message":"I can add a Custom property (fill the textbox and click blue \"+\"), but I can not remove it then (by clicking “-“ in the right column). It does not work, clicking on the \"-\" button does nothing. I would say that the issue is that element here is not defined?","commit_id":"b5b78095c4470a2eaa4adfdca890fb84b64b2088"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"d16bacf69f18d40f974c335ed62fc7fa0d99d183","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        const input \u003d li.querySelector(\u0027input\u0027);"},{"line_number":109,"context_line":"        input.setAttribute(\u0027name\u0027, name);"},{"line_number":110,"context_line":"        const button \u003d li.querySelector(\u0027a.btn\u0027);"},{"line_number":111,"context_line":"        button.onclick \u003d () \u003d\u003e this.property_remove(element);"},{"line_number":112,"context_line":"        ul.appendChild(li);"},{"line_number":113,"context_line":"      }"},{"line_number":114,"context_line":"      this.metadefs_update();"}],"source_content_type":"text/javascript","patch_set":8,"id":"964f02f6_ead18b31","line":111,"range":{"start_line":111,"start_character":52,"end_line":111,"end_character":59},"in_reply_to":"296cffa2_9f1c2965","updated":"2026-03-10 14:50:54.000000000","message":"Acknowledged","commit_id":"b5b78095c4470a2eaa4adfdca890fb84b64b2088"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"dacd266d038c10f8db6db6406ca64847c1f594dc","unresolved":true,"context_lines":[{"line_number":237,"context_line":"        const namespace \u003d el.dataset.parentnamespace;"},{"line_number":238,"context_line":"        const visible_children \u003d ul.querySelectorAll("},{"line_number":239,"context_line":"          `li:not(.metadata-used)[data-parentobject\u003d\"${name}\"][data-parentnamespace\u003d\"${namespace}\"]`);"},{"line_number":240,"context_line":"        console.log(visible_children);"},{"line_number":241,"context_line":"        if (visible_children.length \u003d\u003d\u003d 0) {"},{"line_number":242,"context_line":"          el.classList.add(\u0027metadata-used\u0027);"},{"line_number":243,"context_line":"          console.log(el);"},{"line_number":244,"context_line":"        } else {"},{"line_number":245,"context_line":"          el.classList.remove(\u0027metadata-used\u0027);"},{"line_number":246,"context_line":"        }"},{"line_number":247,"context_line":"      }"},{"line_number":248,"context_line":"    }"},{"line_number":249,"context_line":""}],"source_content_type":"text/javascript","patch_set":8,"id":"6b9671d1_2de69ee6","line":246,"range":{"start_line":240,"start_character":0,"end_line":246,"end_character":9},"updated":"2026-03-10 12:44:44.000000000","message":"Do we need this? Or is it leftover from debugging?\nWhen I open Image Metadata form, it flood whole console with NodeList information.","commit_id":"b5b78095c4470a2eaa4adfdca890fb84b64b2088"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"d16bacf69f18d40f974c335ed62fc7fa0d99d183","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        const namespace \u003d el.dataset.parentnamespace;"},{"line_number":238,"context_line":"        const visible_children \u003d ul.querySelectorAll("},{"line_number":239,"context_line":"          `li:not(.metadata-used)[data-parentobject\u003d\"${name}\"][data-parentnamespace\u003d\"${namespace}\"]`);"},{"line_number":240,"context_line":"        console.log(visible_children);"},{"line_number":241,"context_line":"        if (visible_children.length \u003d\u003d\u003d 0) {"},{"line_number":242,"context_line":"          el.classList.add(\u0027metadata-used\u0027);"},{"line_number":243,"context_line":"          console.log(el);"},{"line_number":244,"context_line":"        } else {"},{"line_number":245,"context_line":"          el.classList.remove(\u0027metadata-used\u0027);"},{"line_number":246,"context_line":"        }"},{"line_number":247,"context_line":"      }"},{"line_number":248,"context_line":"    }"},{"line_number":249,"context_line":""}],"source_content_type":"text/javascript","patch_set":8,"id":"f8994b7f_3124e653","line":246,"range":{"start_line":240,"start_character":0,"end_line":246,"end_character":9},"in_reply_to":"6b9671d1_2de69ee6","updated":"2026-03-10 14:50:54.000000000","message":"Acknowledged","commit_id":"b5b78095c4470a2eaa4adfdca890fb84b64b2088"}]}
