)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"548df14b3a406ffa22c2757861bdec4c13c57a4e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"107fb306_468e7834","updated":"2025-10-10 07:58:51.000000000","message":"I have nothing else top of Dan\u0027s comment directly for this patch. But I noticed one possible source of bugs independent from this change. I suggest to handled that with a separate bug. Otherwise this looks OK to me. So when Dan comments are fixed I can upgrade my vote.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b97f18a0794127e5407e9df96198ad9c17644324","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"42af292c_290e0bef","updated":"2025-10-09 13:48:41.000000000","message":"Just some comments about the tests.. Let\u0027s make sure we don\u0027t have to do this _again_ okay? :)","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0dcddb249125e13f8ec9d900d38ef08336063d30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d3354989_ff5e3fd0","updated":"2025-10-15 21:40:46.000000000","message":"I think it will be better to have a releasenotes for this bug fix in case users wondering why Imageproperty weigher was not working as expected.\n\nI added few comment but nothing blocker, I am +2 but not +w yet in case you would like to update or add release notes in this change. If not then also fine to me and feel free to +w (or reply and I will +w tomorrow.)","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"66c90946b8b9fdb6987183274b68ec94a093d8e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7f60331f_8de284d3","updated":"2025-10-15 16:30:51.000000000","message":"I\u0027m OK with this. My problem was handled with documentation.","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ab99c1b60d647b225b2607e1925b2a5387f0102a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6f976530_6a68fd55","updated":"2025-10-15 21:45:34.000000000","message":"btw I took little longer time to review this, to first understand the ImagePropertiesWeigher (scheduler Weigher) working but worth learning :)","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"af6d8a930f2891eb248d639a089ab0bb76ecc107","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e18cd4a6_5468079e","updated":"2025-10-14 13:15:02.000000000","message":"recheck multicell ssh timeout on snapshot","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"51287c1542a78ba56893ede4a4ffcebd18ba2aa5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"99b6cc56_13ffd458","updated":"2025-10-16 12:32:32.000000000","message":"recheck nova-ceph-multistore keystone wsgi crashed https://zuul.opendev.org/t/openstack/build/46b6209e205047b8ad212623e0a9f62f/log/controller/logs/screen-keystone.txt","commit_id":"98885344bd93531d569ded3f4492f473b09d0614"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bf9edb5ca648d81a0297e2d8050ca7f930ca6116","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4433ee7c_2488a980","updated":"2025-10-16 18:59:33.000000000","message":"recheck ssh timeout in test_rebuild_server","commit_id":"98885344bd93531d569ded3f4492f473b09d0614"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1be83a6e8ab0186b7bdf60bdffedfce8331c719","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"da257c13_836bc8b9","updated":"2025-10-16 12:31:08.000000000","message":"still looks good to me.","commit_id":"98885344bd93531d569ded3f4492f473b09d0614"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8b0858e3229b9f7ef750ca1cdfbb17a44e319629","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f01ae2f8_9d31cc79","updated":"2025-10-16 15:26:32.000000000","message":"thanks for updates, lgtm","commit_id":"98885344bd93531d569ded3f4492f473b09d0614"}],"nova/objects/instance.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0dcddb249125e13f8ec9d900d38ef08336063d30","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"                # Patch up our instances with system_metadata from the fill"},{"line_number":1607,"context_line":"                # operation"},{"line_number":1608,"context_line":"                inst.system_metadata \u003d utils.instance_sys_meta("},{"line_number":1609,"context_line":"                    updated[inst.uuid])"},{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"    @base.remotable_classmethod"},{"line_number":1612,"context_line":"    def get_uuids_by_host(cls, context, host):"}],"source_content_type":"text/x-python","patch_set":3,"id":"731421ff_cb49b579","line":1609,"range":{"start_line":1609,"start_character":16,"end_line":1609,"end_character":39},"updated":"2025-10-15 21:40:46.000000000","message":"++.\n\nJust to avoid this mistake in future or in other places, maybe we can check if a single instance is not passed, then throw an error in the util function instance_sys_meta(). But that is something that can be done in follow-up because your change fixes the current issue.\n\n- https://github.com/openstack/nova/blob/17f1f0ad49a51bfcc5900808f7345965525a45b5/nova/utils.py#L489","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ea6ceb3d0002882464b0dbc1e123143e8a2ef578","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"                # Patch up our instances with system_metadata from the fill"},{"line_number":1607,"context_line":"                # operation"},{"line_number":1608,"context_line":"                inst.system_metadata \u003d utils.instance_sys_meta("},{"line_number":1609,"context_line":"                    updated[inst.uuid])"},{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"    @base.remotable_classmethod"},{"line_number":1612,"context_line":"    def get_uuids_by_host(cls, context, host):"}],"source_content_type":"text/x-python","patch_set":3,"id":"cfd076dd_37bc4d88","line":1609,"range":{"start_line":1609,"start_character":16,"end_line":1609,"end_character":39},"in_reply_to":"731421ff_cb49b579","updated":"2025-10-16 09:00:25.000000000","message":"Not sure I can do this by a FUP in the next weeks unfortunately 😞","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"}],"nova/scheduler/weights/image_props.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"548df14b3a406ffa22c2757861bdec4c13c57a4e","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        # field set to None"},{"line_number":64,"context_line":"        if request_spec.image:"},{"line_number":65,"context_line":"            # List values aren\u0027t hashable so we need to stringify them."},{"line_number":66,"context_line":"            requested_props \u003d {(key, f\"{value}\") for key, value in"},{"line_number":67,"context_line":"                request_spec.image.properties.to_dict().items()}"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            requested_props \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"b35aac0f_788f4a53","line":66,"updated":"2025-10-10 07:58:51.000000000","message":"unrelated to this patch but if we are matching lists (or stringified lists) then it means we consider two list equal if the order of the items are the same. At least there are hw:numa_cpus.{num} where hw:numa_cpus.0\u003d0,1 and hw:numa_cpus.0\u003d1,0 means the same but would be considered different by this match.\n\nI suggest reviewing the possible list valued extra specs separately and decide what to do.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"df82aa9ada20a6701eb71c3e991db88fc8a3672d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        # field set to None"},{"line_number":64,"context_line":"        if request_spec.image:"},{"line_number":65,"context_line":"            # List values aren\u0027t hashable so we need to stringify them."},{"line_number":66,"context_line":"            requested_props \u003d {(key, f\"{value}\") for key, value in"},{"line_number":67,"context_line":"                request_spec.image.properties.to_dict().items()}"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            requested_props \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"a0989696_0d73e1ac","line":66,"in_reply_to":"50feef34_60d7096c","updated":"2025-10-13 13:32:01.000000000","message":"Acknowledged","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"66c90946b8b9fdb6987183274b68ec94a093d8e2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        # field set to None"},{"line_number":64,"context_line":"        if request_spec.image:"},{"line_number":65,"context_line":"            # List values aren\u0027t hashable so we need to stringify them."},{"line_number":66,"context_line":"            requested_props \u003d {(key, f\"{value}\") for key, value in"},{"line_number":67,"context_line":"                request_spec.image.properties.to_dict().items()}"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            requested_props \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"17700feb_886dcbab","line":66,"in_reply_to":"a0989696_0d73e1ac","updated":"2025-10-15 16:30:51.000000000","message":"I\u0027m OK with the added documentation.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bd702d8db90195a1229e05d96f2a9191f12d8eb","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        # field set to None"},{"line_number":64,"context_line":"        if request_spec.image:"},{"line_number":65,"context_line":"            # List values aren\u0027t hashable so we need to stringify them."},{"line_number":66,"context_line":"            requested_props \u003d {(key, f\"{value}\") for key, value in"},{"line_number":67,"context_line":"                request_spec.image.properties.to_dict().items()}"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            requested_props \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"b41457b0_5e8ebd26","line":66,"in_reply_to":"b35aac0f_788f4a53","updated":"2025-10-10 16:31:53.000000000","message":"hum that is technically true\nwe are just treating this as a sting and doing a basic equality check but not condierign that it could be a serialisation fo a lis tor other data structure.\n\n\nin the list case i think technically order would matter but this is actually not a list it s set of element or ranges  so your over all point remains\n\n\nhw_numa_cpus.0\u003d1,0 and hw_numa_cpus.0\u003d1-0 are tecninally the same.\n\nthis feels a bit beyond the simple case that this was organically intended to address\n\nmy suggestion is not to try an parse any of the value but just to document that we are strictly doing a sting comparison \n\nwe do have access to the typed object so we shoudl be rount driptiong it though a ListOfSetsOfIntegersField  before convetign it to a string but i dont think that will help use here.\nhttps://github.com/openstack/nova/blob/master/nova/objects/image_meta.py#L425","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d2cef4a4021c19f59404f0ae98ded3e5d1f1f341","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        # field set to None"},{"line_number":64,"context_line":"        if request_spec.image:"},{"line_number":65,"context_line":"            # List values aren\u0027t hashable so we need to stringify them."},{"line_number":66,"context_line":"            requested_props \u003d {(key, f\"{value}\") for key, value in"},{"line_number":67,"context_line":"                request_spec.image.properties.to_dict().items()}"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            requested_props \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"50feef34_60d7096c","line":66,"in_reply_to":"b41457b0_5e8ebd26","updated":"2025-10-10 16:34:29.000000000","message":"just to clarify lance woudl condier `hw_numa_cpus.0\u003d1,0` and `hw_numa_cpus.0\u003d0,1` to be diffent and if ord for that specific value did matter we woudl too so i dont think we shoudl complicate this logic more unless this really does manifest as a problem.\n\nbut im very much ok with updating the shcduler docs to note this behaviour so that admins are not surrpsed by it.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0dcddb249125e13f8ec9d900d38ef08336063d30","unresolved":true,"context_lines":[{"line_number":77,"context_line":"        # system_metadata isn\u0027t loaded yet, let\u0027s do this."},{"line_number":78,"context_line":"        # Given all instances are in the same host, we can target the same"},{"line_number":79,"context_line":"        # cell."},{"line_number":80,"context_line":"        host_mapping \u003d objects.HostMapping.get_by_host(ctxt, host_state.host)"},{"line_number":81,"context_line":"        cell_mapping \u003d host_mapping.cell_mapping"},{"line_number":82,"context_line":"        with nova_context.target_cell(ctxt, cell_mapping) as cell_ctxt:"},{"line_number":83,"context_line":"            insts \u003d objects.InstanceList(cell_ctxt,"}],"source_content_type":"text/x-python","patch_set":3,"id":"6920ffe2_257c47d4","line":80,"range":{"start_line":80,"start_character":0,"end_line":80,"end_character":77},"updated":"2025-10-15 21:40:46.000000000","message":"If there is no host mapping found[1], then shouldn\u0027t we catch the HostMappingNotFound exception and return weight as 0 ?\n\n[1] https://github.com/openstack/nova/blob/17f1f0ad49a51bfcc5900808f7345965525a45b5/nova/objects/host_mapping.py#L101\n\nOr another faster way can be to fetch the cell mapping directly by cell uuid as host_state already has that host_state.cell_uuid","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ea6ceb3d0002882464b0dbc1e123143e8a2ef578","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # system_metadata isn\u0027t loaded yet, let\u0027s do this."},{"line_number":78,"context_line":"        # Given all instances are in the same host, we can target the same"},{"line_number":79,"context_line":"        # cell."},{"line_number":80,"context_line":"        host_mapping \u003d objects.HostMapping.get_by_host(ctxt, host_state.host)"},{"line_number":81,"context_line":"        cell_mapping \u003d host_mapping.cell_mapping"},{"line_number":82,"context_line":"        with nova_context.target_cell(ctxt, cell_mapping) as cell_ctxt:"},{"line_number":83,"context_line":"            insts \u003d objects.InstanceList(cell_ctxt,"}],"source_content_type":"text/x-python","patch_set":3,"id":"e6f1db01_be5af5bc","line":80,"range":{"start_line":80,"start_character":0,"end_line":80,"end_character":77},"in_reply_to":"6920ffe2_257c47d4","updated":"2025-10-16 09:00:25.000000000","message":"Aaaaaah very good point indeed !","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"}],"nova/tests/functional/regressions/test_bug_2125935.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0dcddb249125e13f8ec9d900d38ef08336063d30","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        ]"},{"line_number":44,"context_line":"        self.flags(weight_classes\u003dweight_classes,"},{"line_number":45,"context_line":"                   group\u003d\u0027filter_scheduler\u0027)"},{"line_number":46,"context_line":"        self.flags(image_props_weight_multiplier\u003d2.0, group\u003d\u0027filter_scheduler\u0027)"},{"line_number":47,"context_line":"        super(TestImagePropsWeigher, self).setUp()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Start only the compute services we want for testing"}],"source_content_type":"text/x-python","patch_set":3,"id":"7002b92a_4dfb8f05","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":53},"updated":"2025-10-15 21:40:46.000000000","message":"I was wondering why you defined it to 2.0 (and not 1.0), but saw that the test checks only the weight and not the multiplier* weight score.","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ea6ceb3d0002882464b0dbc1e123143e8a2ef578","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        ]"},{"line_number":44,"context_line":"        self.flags(weight_classes\u003dweight_classes,"},{"line_number":45,"context_line":"                   group\u003d\u0027filter_scheduler\u0027)"},{"line_number":46,"context_line":"        self.flags(image_props_weight_multiplier\u003d2.0, group\u003d\u0027filter_scheduler\u0027)"},{"line_number":47,"context_line":"        super(TestImagePropsWeigher, self).setUp()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Start only the compute services we want for testing"}],"source_content_type":"text/x-python","patch_set":3,"id":"6fa24d9c_2866fa4b","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":53},"in_reply_to":"7002b92a_4dfb8f05","updated":"2025-10-16 09:00:25.000000000","message":"will change it.","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"}],"nova/tests/unit/objects/test_instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b97f18a0794127e5407e9df96198ad9c17644324","unresolved":true,"context_lines":[{"line_number":2067,"context_line":""},{"line_number":2068,"context_line":"        for i in range(5):"},{"line_number":2069,"context_line":"            if i \u003d\u003d 4:"},{"line_number":2070,"context_line":"                # persist some metadata directly in the DB only for instance 4"},{"line_number":2071,"context_line":"                values[\u0027system_metadata\u0027] \u003d {"},{"line_number":2072,"context_line":"                    \u0027BTTF2\u0027: \u00272015\u0027,"},{"line_number":2073,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"1de0b019_bf2f6cdf","line":2070,"updated":"2025-10-09 13:48:41.000000000","message":"Any reason not to give all of them (or maybe all but one) DB metadata? That\u0027s more realistic and the tests below are mostly trying to make sure we don\u0027t clobber client-side existing data. For Instance 1, it should probably have the same data that the instance already has saved, for consistency.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a33353ad64c7dcab2a62cc5239726bca9faeef53","unresolved":false,"context_lines":[{"line_number":2067,"context_line":""},{"line_number":2068,"context_line":"        for i in range(5):"},{"line_number":2069,"context_line":"            if i \u003d\u003d 4:"},{"line_number":2070,"context_line":"                # persist some metadata directly in the DB only for instance 4"},{"line_number":2071,"context_line":"                values[\u0027system_metadata\u0027] \u003d {"},{"line_number":2072,"context_line":"                    \u0027BTTF2\u0027: \u00272015\u0027,"},{"line_number":2073,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"c2748be7_9097818c","line":2070,"in_reply_to":"1de0b019_bf2f6cdf","updated":"2025-10-13 13:30:15.000000000","message":"I was just wanting to not motify the existing checks but OK, I\u0027ll modify them.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b97f18a0794127e5407e9df96198ad9c17644324","unresolved":true,"context_lines":[{"line_number":2070,"context_line":"                # persist some metadata directly in the DB only for instance 4"},{"line_number":2071,"context_line":"                values[\u0027system_metadata\u0027] \u003d {"},{"line_number":2072,"context_line":"                    \u0027BTTF2\u0027: \u00272015\u0027,"},{"line_number":2073,"context_line":"                }"},{"line_number":2074,"context_line":"            db.instance_create(self.context,"},{"line_number":2075,"context_line":"                               dict(values))"},{"line_number":2076,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0abf61f8_bac19681","line":2073,"updated":"2025-10-09 13:48:41.000000000","message":"I sure wish this could be formatted like the dict on L2064 and take one line instead of three :(","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a33353ad64c7dcab2a62cc5239726bca9faeef53","unresolved":false,"context_lines":[{"line_number":2070,"context_line":"                # persist some metadata directly in the DB only for instance 4"},{"line_number":2071,"context_line":"                values[\u0027system_metadata\u0027] \u003d {"},{"line_number":2072,"context_line":"                    \u0027BTTF2\u0027: \u00272015\u0027,"},{"line_number":2073,"context_line":"                }"},{"line_number":2074,"context_line":"            db.instance_create(self.context,"},{"line_number":2075,"context_line":"                               dict(values))"},{"line_number":2076,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3c9ee4c2_41a4505a","line":2073,"in_reply_to":"0abf61f8_bac19681","updated":"2025-10-13 13:30:15.000000000","message":"Acknowledged","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b97f18a0794127e5407e9df96198ad9c17644324","unresolved":true,"context_lines":[{"line_number":2097,"context_line":"        # Inst 2 should have not had its in-memory copy clobbered"},{"line_number":2098,"context_line":"        self.assertEqual({\u0027bttf3\u0027: \u00271885\u0027}, insts[2].system_metadata)"},{"line_number":2099,"context_line":""},{"line_number":2100,"context_line":"        # Inst 0 should have system_metadata loaded, but empty"},{"line_number":2101,"context_line":"        self.assertIn(\u0027system_metadata\u0027, insts[0])"},{"line_number":2102,"context_line":"        self.assertEqual({}, insts[0].system_metadata)"},{"line_number":2103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"89079cfa_bc760662","line":2100,"updated":"2025-10-09 13:48:41.000000000","message":"I think this was actually supposed to be instance 1, the comment is right and the code is wrong. Because this is the one that has 1955 already set and saved.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5989828679fa70c8d26632d1b5f31d9204880e18","unresolved":false,"context_lines":[{"line_number":2097,"context_line":"        # Inst 2 should have not had its in-memory copy clobbered"},{"line_number":2098,"context_line":"        self.assertEqual({\u0027bttf3\u0027: \u00271885\u0027}, insts[2].system_metadata)"},{"line_number":2099,"context_line":""},{"line_number":2100,"context_line":"        # Inst 0 should have system_metadata loaded, but empty"},{"line_number":2101,"context_line":"        self.assertIn(\u0027system_metadata\u0027, insts[0])"},{"line_number":2102,"context_line":"        self.assertEqual({}, insts[0].system_metadata)"},{"line_number":2103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f9847221_dd51901d","line":2100,"in_reply_to":"05367f8e_38ed9e08","updated":"2025-10-13 14:06:59.000000000","message":"Done","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a33353ad64c7dcab2a62cc5239726bca9faeef53","unresolved":true,"context_lines":[{"line_number":2097,"context_line":"        # Inst 2 should have not had its in-memory copy clobbered"},{"line_number":2098,"context_line":"        self.assertEqual({\u0027bttf3\u0027: \u00271885\u0027}, insts[2].system_metadata)"},{"line_number":2099,"context_line":""},{"line_number":2100,"context_line":"        # Inst 0 should have system_metadata loaded, but empty"},{"line_number":2101,"context_line":"        self.assertIn(\u0027system_metadata\u0027, insts[0])"},{"line_number":2102,"context_line":"        self.assertEqual({}, insts[0].system_metadata)"},{"line_number":2103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"05367f8e_38ed9e08","line":2100,"in_reply_to":"89079cfa_bc760662","updated":"2025-10-13 13:30:15.000000000","message":"well, you were checking the first instance in the list, but you were saying \"Inst 2\" in L2097 hence why I modified the comment.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0dcddb249125e13f8ec9d900d38ef08336063d30","unresolved":true,"context_lines":[{"line_number":2091,"context_line":"        self.assertEqual(0, len([i for i in insts"},{"line_number":2092,"context_line":"                                 if \u0027system_metadata\u0027 not in i]))"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"        #  Inst 1 is now updated with the new metadata"},{"line_number":2095,"context_line":"        self.assertEqual({\u0027BTTF1\u0027: \u00271955\u0027}, insts[1].system_metadata)"},{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"        # Inst 2 should have not had its in-memory copy clobbered"}],"source_content_type":"text/x-python","patch_set":3,"id":"b52fa8b9_9d762f58","line":2094,"range":{"start_line":2094,"start_character":11,"end_line":2094,"end_character":54},"updated":"2025-10-15 21:40:46.000000000","message":"this comment is confusing. fill_metadata() will not update Inst 1 system_metadata because it already had one.\n```suggestion\n        #  Inst 1 already had system_metadata, so it is not updated.\n```","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"032c04dcb1c2d77f1dbc1b28970c1d90d923c2ac","unresolved":false,"context_lines":[{"line_number":2091,"context_line":"        self.assertEqual(0, len([i for i in insts"},{"line_number":2092,"context_line":"                                 if \u0027system_metadata\u0027 not in i]))"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"        #  Inst 1 is now updated with the new metadata"},{"line_number":2095,"context_line":"        self.assertEqual({\u0027BTTF1\u0027: \u00271955\u0027}, insts[1].system_metadata)"},{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"        # Inst 2 should have not had its in-memory copy clobbered"}],"source_content_type":"text/x-python","patch_set":3,"id":"cfa5d603_69c6c89a","line":2094,"range":{"start_line":2094,"start_character":11,"end_line":2094,"end_character":54},"in_reply_to":"24873aab_bb37b047","updated":"2025-10-16 09:03:03.000000000","message":"Oh, reading it again, no, this is wrong, if you set the metadata directly by the object, then it crashes the already existing metadata, hence why it\u0027s updated.","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ea6ceb3d0002882464b0dbc1e123143e8a2ef578","unresolved":false,"context_lines":[{"line_number":2091,"context_line":"        self.assertEqual(0, len([i for i in insts"},{"line_number":2092,"context_line":"                                 if \u0027system_metadata\u0027 not in i]))"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"        #  Inst 1 is now updated with the new metadata"},{"line_number":2095,"context_line":"        self.assertEqual({\u0027BTTF1\u0027: \u00271955\u0027}, insts[1].system_metadata)"},{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"        # Inst 2 should have not had its in-memory copy clobbered"}],"source_content_type":"text/x-python","patch_set":3,"id":"24873aab_bb37b047","line":2094,"range":{"start_line":2094,"start_character":11,"end_line":2094,"end_character":54},"in_reply_to":"b52fa8b9_9d762f58","updated":"2025-10-16 09:00:25.000000000","message":"Acknowledged","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8b0858e3229b9f7ef750ca1cdfbb17a44e319629","unresolved":false,"context_lines":[{"line_number":2091,"context_line":"        self.assertEqual(0, len([i for i in insts"},{"line_number":2092,"context_line":"                                 if \u0027system_metadata\u0027 not in i]))"},{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"        #  Inst 1 is now updated with the new metadata"},{"line_number":2095,"context_line":"        self.assertEqual({\u0027BTTF1\u0027: \u00271955\u0027}, insts[1].system_metadata)"},{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"        # Inst 2 should have not had its in-memory copy clobbered"}],"source_content_type":"text/x-python","patch_set":3,"id":"a568dd7a_7de9fd95","line":2094,"range":{"start_line":2094,"start_character":11,"end_line":2094,"end_character":54},"in_reply_to":"cfa5d603_69c6c89a","updated":"2025-10-16 15:26:32.000000000","message":"we are doing save() after updating it on object L2079 and that is why fill_metadata() will find the system_metadata on this instance and ignore to update the new system_metadata - https://github.com/openstack/nova/blob/17f1f0ad49a51bfcc5900808f7345965525a45b5/nova/objects/instance.py#L1598\n\nThat is why you are asserting this inst with old metadata right? - {\u0027BTTF1\u0027: \u00271955\u0027}\n\nanyways, this is not blocking as assert is correct so not a blocker","commit_id":"13856b78fde73b7c2dc2163b49fe9063ae42c19b"}],"nova/tests/unit/scheduler/weights/test_weights_image_props.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b97f18a0794127e5407e9df96198ad9c17644324","unresolved":true,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        mock_cell_ctx \u003d mock.MagicMock()"},{"line_number":214,"context_line":"        # target_cell should be mocked as a context manager"},{"line_number":215,"context_line":"        mock_target_cell.return_value.__enter__.return_value \u003d mock_cell_ctx"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        # Just create two hosts with only one instance, we just want to test"},{"line_number":218,"context_line":"        # the calls to target_cell and fill_metadata."}],"source_content_type":"text/x-python","patch_set":1,"id":"a53d7d07_38f470d4","line":215,"updated":"2025-10-09 13:48:41.000000000","message":"Instead of mocking `target_cell()` why not mock `set_target_cell()` which is a regular function and called by `target_cell()`, and you can avoid mocking the `__enter__` stuff.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a33353ad64c7dcab2a62cc5239726bca9faeef53","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        mock_cell_ctx \u003d mock.MagicMock()"},{"line_number":214,"context_line":"        # target_cell should be mocked as a context manager"},{"line_number":215,"context_line":"        mock_target_cell.return_value.__enter__.return_value \u003d mock_cell_ctx"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        # Just create two hosts with only one instance, we just want to test"},{"line_number":218,"context_line":"        # the calls to target_cell and fill_metadata."}],"source_content_type":"text/x-python","patch_set":1,"id":"0ad8d42a_5db96c4a","line":215,"in_reply_to":"a53d7d07_38f470d4","updated":"2025-10-13 13:30:15.000000000","message":"Acknowledged","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b97f18a0794127e5407e9df96198ad9c17644324","unresolved":true,"context_lines":[{"line_number":233,"context_line":"        # Check that we pass the original context to target_cell twice"},{"line_number":234,"context_line":"        self.assertEqual(2, mock_target_cell.call_count)"},{"line_number":235,"context_line":"        mock_target_cell.assert_called_with(fake_context, fake_cell_mapping)"},{"line_number":236,"context_line":"        mock_target_cell.assert_called_with(fake_context, fake_cell_mapping)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # Just verify that fill_metadata was called twice, we can\u0027t check that"},{"line_number":239,"context_line":"        # it was called with the correct context but given we checked that"}],"source_content_type":"text/x-python","patch_set":1,"id":"36a40584_a54e83e9","line":236,"updated":"2025-10-09 13:48:41.000000000","message":"Erm, pretty sure this second assert isn\u0027t adding anything to the test. Why not `assert_has_calls()`?","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a33353ad64c7dcab2a62cc5239726bca9faeef53","unresolved":true,"context_lines":[{"line_number":233,"context_line":"        # Check that we pass the original context to target_cell twice"},{"line_number":234,"context_line":"        self.assertEqual(2, mock_target_cell.call_count)"},{"line_number":235,"context_line":"        mock_target_cell.assert_called_with(fake_context, fake_cell_mapping)"},{"line_number":236,"context_line":"        mock_target_cell.assert_called_with(fake_context, fake_cell_mapping)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # Just verify that fill_metadata was called twice, we can\u0027t check that"},{"line_number":239,"context_line":"        # it was called with the correct context but given we checked that"}],"source_content_type":"text/x-python","patch_set":1,"id":"fb40b901_fdd4c298","line":236,"in_reply_to":"36a40584_a54e83e9","updated":"2025-10-13 13:30:15.000000000","message":"unfortunately if I use assert_has_calls() then it also checks __enter__ and __exit__ \nAnyway, will change it given your above comment.","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"75e9254be570243dc76b0c0aa98fc08f1238c2a0","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        # Check that we pass the original context to target_cell twice"},{"line_number":234,"context_line":"        self.assertEqual(2, mock_target_cell.call_count)"},{"line_number":235,"context_line":"        mock_target_cell.assert_called_with(fake_context, fake_cell_mapping)"},{"line_number":236,"context_line":"        mock_target_cell.assert_called_with(fake_context, fake_cell_mapping)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # Just verify that fill_metadata was called twice, we can\u0027t check that"},{"line_number":239,"context_line":"        # it was called with the correct context but given we checked that"}],"source_content_type":"text/x-python","patch_set":1,"id":"626a6af1_4b00de91","line":236,"in_reply_to":"fb40b901_fdd4c298","updated":"2025-10-13 17:22:00.000000000","message":"Done","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b97f18a0794127e5407e9df96198ad9c17644324","unresolved":true,"context_lines":[{"line_number":240,"context_line":"        #  target_cell was called with the original context, we can assume that"},{"line_number":241,"context_line":"        #  fill_metadata was called with the correct cell context."},{"line_number":242,"context_line":"        self.assertEqual(2, mock_fm.call_count)"},{"line_number":243,"context_line":"        mock_fm.assert_has_calls([mock.call(), mock.call()])"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # host1 wins but we return both hosts."},{"line_number":246,"context_line":"        self.assertEqual(2, len(weights))"}],"source_content_type":"text/x-python","patch_set":1,"id":"2256f27b_26d14e9a","line":243,"updated":"2025-10-09 13:48:41.000000000","message":"`mock(wraps\u003d...)` with a local function that asserts something about the context is a way to make sure we did the right thing. Since this went completely broken for so long, we should probably make the test pretty airtight :/","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a33353ad64c7dcab2a62cc5239726bca9faeef53","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        #  target_cell was called with the original context, we can assume that"},{"line_number":241,"context_line":"        #  fill_metadata was called with the correct cell context."},{"line_number":242,"context_line":"        self.assertEqual(2, mock_fm.call_count)"},{"line_number":243,"context_line":"        mock_fm.assert_has_calls([mock.call(), mock.call()])"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # host1 wins but we return both hosts."},{"line_number":246,"context_line":"        self.assertEqual(2, len(weights))"}],"source_content_type":"text/x-python","patch_set":1,"id":"62454cd6_b12ceedb","line":243,"in_reply_to":"2256f27b_26d14e9a","updated":"2025-10-13 13:30:15.000000000","message":"Acknowledged","commit_id":"77b557a8867754db301dc03d694a08f2a5304a64"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"75e9254be570243dc76b0c0aa98fc08f1238c2a0","unresolved":true,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class TestTargetCellCalled(_ImagePropertiesWeigherBase):"},{"line_number":204,"context_line":"    # Using real cell infrastructure instead of SingleCellSimple fixture"},{"line_number":205,"context_line":"    #  as we need to verify set_target_cell calls are made"},{"line_number":206,"context_line":"    USES_DB_SELF \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @mock.patch(\u0027nova.objects.InstanceList.fill_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"040c4a40_03c9670f","line":205,"range":{"start_line":205,"start_character":5,"end_line":205,"end_character":7},"updated":"2025-10-13 17:22:00.000000000","message":"f*** autopep8","commit_id":"d51116011b31ab099aaf94cac431afc3e3c5c0b5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5503c230a783f5a05e401789350ac9ad00f503b3","unresolved":true,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class TestTargetCellCalled(_ImagePropertiesWeigherBase):"},{"line_number":204,"context_line":"    # Using real cell infrastructure instead of SingleCellSimple fixture"},{"line_number":205,"context_line":"    #  as we need to verify set_target_cell calls are made"},{"line_number":206,"context_line":"    USES_DB_SELF \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @mock.patch(\u0027nova.objects.InstanceList.fill_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"0d243cb7_3805cdee","line":205,"range":{"start_line":205,"start_character":5,"end_line":205,"end_character":7},"in_reply_to":"040c4a40_03c9670f","updated":"2025-10-13 19:45:15.000000000","message":"so pre comment will only do this if your editor is adding a No-Break Space\nlike a https://www.compart.com/en/unicode/U+00A0\n\nyou had this issue with your editor in the past if im not mistaken.\n\nhttps://termbin.com/xlpf is an example test file the show the behavior\n\nwe shoudl not be merging code with random invisible Unicode characters\nso autopep8 is catching a legitimate issue that should be resolved before\nmerging the patch.\n\ni woudl prefer if autopep8 delete it instead of convertign it to a normal space but that is what is happening.\n\ncan you confirm if this is what is happening for you. if it is we can likely try and figure out how to fix your editor to not do this.\n\nhttps://stackoverflow.com/a/58854106\n\napparently this can happen if you are holding shift or option on mac when typing space after `#` but i have not been able to replicate this locally.\n\nif you use the high contrast dark team and have whitespace renderign enabeld you can barely see the on line 1 there is no `.` indicating a space\n\nhttps://imgur.com/a/gKZEkkc\n\nin almost every other theme bar kimbie dark this is impossible to see as the contrast for the white space markers is just too low.\n\nas far as im aware other have not reported this so it seams to be specific to your install.","commit_id":"d51116011b31ab099aaf94cac431afc3e3c5c0b5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"378b1fd786381203504c3fe2947b3fac2a7ee0bd","unresolved":true,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class TestTargetCellCalled(_ImagePropertiesWeigherBase):"},{"line_number":204,"context_line":"    # Using real cell infrastructure instead of SingleCellSimple fixture"},{"line_number":205,"context_line":"    #  as we need to verify set_target_cell calls are made"},{"line_number":206,"context_line":"    USES_DB_SELF \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @mock.patch(\u0027nova.objects.InstanceList.fill_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"4a501c16_bf33f2aa","line":205,"range":{"start_line":205,"start_character":5,"end_line":205,"end_character":7},"in_reply_to":"0d243cb7_3805cdee","updated":"2025-10-13 19:50:43.000000000","message":"i spoke too soon\n\n```\n[20:28:42]\u003e cat test.py | tb\nhttps://termbin.com/byk7\n~/pre-commit-testing on master [!+?] via python: v3.12.10 (.venv) took 6s\n[20:47:47]\u003e cat -vet test.py\n#M-BM- TODO(sean): This line has a unicode nonbreaking space$\n# TODO(sean): test-1 this line does not.$\n$\n$\n#vscode tests$\n# TODO with shift$\n# TODO without shift $\n#M-BM- TODO with AltGR space\n```\ni replciate this in vscode if you pre ALTGR or aka the right alt key and space it adds `0xC2 0xA0` of `0x20` for a normal space.\n\nso this is likely happen because you are acidently hittign alt or altgr when pressing space.","commit_id":"d51116011b31ab099aaf94cac431afc3e3c5c0b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4c895bd0cb405c64e93f1c55d936ce433336bab7","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class TestTargetCellCalled(_ImagePropertiesWeigherBase):"},{"line_number":204,"context_line":"    # Using real cell infrastructure instead of SingleCellSimple fixture"},{"line_number":205,"context_line":"    #  as we need to verify set_target_cell calls are made"},{"line_number":206,"context_line":"    USES_DB_SELF \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @mock.patch(\u0027nova.objects.InstanceList.fill_metadata\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f3a82524_12d07b36","line":205,"range":{"start_line":205,"start_character":5,"end_line":205,"end_character":7},"in_reply_to":"4a501c16_bf33f2aa","updated":"2025-10-14 09:33:08.000000000","message":"That was indeed the cause and given my KB mapping was using a variant, it was creating a nobreakspace.\n\nClosing this comment as now I use another mapping.","commit_id":"d51116011b31ab099aaf94cac431afc3e3c5c0b5"}]}
