)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1a5247d5_c5420d83","updated":"2026-06-24 16:01:18.000000000","message":"OK this looks sane to me. I only have question inline to see if I understand it properly.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5b3295c1113b00faa41f9f2638fa06d600f808ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b88143f8_9cd2d2e4","updated":"2026-06-26 09:12:15.000000000","message":"Looks good","commit_id":"0cc39a2104615175513c1d5e3c62d8ad58b5a802"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fadc6b0f4279646963e4f42ee3b5c9129cff2e02","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ecee0f26_704a3d09","updated":"2026-06-26 14:58:10.000000000","message":"I found a few more test cases I should update according to the new RP and included changes for these in this commit.","commit_id":"eb455009ac797bfa36caae4e72ae81c1bceb72a4"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"1e849757b953b04d60e35b7651ebbb7c261799e3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5ac0753f_f0f1abe9","updated":"2026-06-26 17:37:00.000000000","message":"recheck","commit_id":"eb455009ac797bfa36caae4e72ae81c1bceb72a4"}],"nova/objects/fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3f9a34a54b0229dad5b107f65df6ee421eb31feb","unresolved":true,"context_lines":[{"line_number":566,"context_line":"    AMD_SEV_ES \u003d \"amd-sev-es\""},{"line_number":567,"context_line":"    AMD_SEV_SNP \u003d \"amd-sev-snp\""},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    ALL \u003d (AMD_SEV, AMD_SEV_ES, AMD_SEV_SNP)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"class MaxPhyAddrMode(BaseNovaEnum):"}],"source_content_type":"text/x-python","patch_set":1,"id":"09e6f633_b8c6d157","line":569,"updated":"2026-06-24 16:29:29.000000000","message":"hm, should it trigger an ovo version bump on the image properties? The intel TDX patch changing this does trigger one","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":false,"context_lines":[{"line_number":566,"context_line":"    AMD_SEV_ES \u003d \"amd-sev-es\""},{"line_number":567,"context_line":"    AMD_SEV_SNP \u003d \"amd-sev-snp\""},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    ALL \u003d (AMD_SEV, AMD_SEV_ES, AMD_SEV_SNP)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"class MaxPhyAddrMode(BaseNovaEnum):"}],"source_content_type":"text/x-python","patch_set":1,"id":"22035086_6214a99a","line":569,"in_reply_to":"09e6f633_b8c6d157","updated":"2026-06-25 14:11:34.000000000","message":"Oh, yes. We need to bump the version.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"}],"nova/tests/functional/libvirt/test_report_cpu_traits.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":true,"context_lines":[{"line_number":371,"context_line":"        # Now simulate the host gaining SEV-SNP functionality.  Here we"},{"line_number":372,"context_line":"        # simulate a kernel update or reconfiguration which causes the"},{"line_number":373,"context_line":"        # kvm-amd kernel module\u0027s \"sev-es\" parameter to become available"},{"line_number":374,"context_line":"        # and set to 1 . We also similate the sev_snp cpu feature, which"},{"line_number":375,"context_line":"        # is the mark to disable SEV-ES functionality."},{"line_number":376,"context_line":"        sev_features \u003d (fakelibvirt.virConnect."},{"line_number":377,"context_line":"                        _domain_capability_features_with_SEV_max_guests)"}],"source_content_type":"text/x-python","patch_set":1,"id":"af7c5941_ab1a990f","line":374,"range":{"start_line":374,"start_character":33,"end_line":374,"end_character":41},"updated":"2026-06-24 16:01:18.000000000","message":"nit:simulate","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        # Now simulate the host gaining SEV-SNP functionality.  Here we"},{"line_number":372,"context_line":"        # simulate a kernel update or reconfiguration which causes the"},{"line_number":373,"context_line":"        # kvm-amd kernel module\u0027s \"sev-es\" parameter to become available"},{"line_number":374,"context_line":"        # and set to 1 . We also similate the sev_snp cpu feature, which"},{"line_number":375,"context_line":"        # is the mark to disable SEV-ES functionality."},{"line_number":376,"context_line":"        sev_features \u003d (fakelibvirt.virConnect."},{"line_number":377,"context_line":"                        _domain_capability_features_with_SEV_max_guests)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff27b128_14ea05bb","line":374,"range":{"start_line":374,"start_character":33,"end_line":374,"end_character":41},"in_reply_to":"af7c5941_ab1a990f","updated":"2026-06-25 14:11:34.000000000","message":"Done","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":true,"context_lines":[{"line_number":420,"context_line":"            ])"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"            # However it won\u0027t disappear in the provider tree and get synced"},{"line_number":423,"context_line":"            # back to placement until we force a reinventory:"},{"line_number":424,"context_line":"            self.compute.manager.reset()"},{"line_number":425,"context_line":"            # reset cached traits so they are recalculated."},{"line_number":426,"context_line":"            self.compute.driver._static_traits \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e08388e_019bb2ee","line":423,"range":{"start_line":423,"start_character":49,"end_line":423,"end_character":60},"updated":"2026-06-24 16:01:18.000000000","message":"hm, is it a compute service restart in reality, isn\u0027t it?","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":true,"context_lines":[{"line_number":420,"context_line":"            ])"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"            # However it won\u0027t disappear in the provider tree and get synced"},{"line_number":423,"context_line":"            # back to placement until we force a reinventory:"},{"line_number":424,"context_line":"            self.compute.manager.reset()"},{"line_number":425,"context_line":"            # reset cached traits so they are recalculated."},{"line_number":426,"context_line":"            self.compute.driver._static_traits \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"83c9df12_6e2fbbe2","line":423,"range":{"start_line":423,"start_character":49,"end_line":423,"end_character":60},"in_reply_to":"0e08388e_019bb2ee","updated":"2026-06-25 14:11:34.000000000","message":"I think that this is the problem with the old SEV test code and I copied it to multiple places. Let me check if I can replace this by restart.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cee5195fd799e786d3d638b697a47d8b2687a428","unresolved":true,"context_lines":[{"line_number":420,"context_line":"            ])"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"            # However it won\u0027t disappear in the provider tree and get synced"},{"line_number":423,"context_line":"            # back to placement until we force a reinventory:"},{"line_number":424,"context_line":"            self.compute.manager.reset()"},{"line_number":425,"context_line":"            # reset cached traits so they are recalculated."},{"line_number":426,"context_line":"            self.compute.driver._static_traits \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"7dff3161_df75e907","line":423,"range":{"start_line":423,"start_character":49,"end_line":423,"end_character":60},"in_reply_to":"83c9df12_6e2fbbe2","updated":"2026-06-26 09:11:47.000000000","message":"I\u0027m fine to keep the hackish way. Just hang up on the odd terminology of \"reinventory\" if in a real deployment it is a compute service restart then I\u0027m OK to just note that here that we simulate it with the reset.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":true,"context_lines":[{"line_number":454,"context_line":"            sev_snp_rp_uuid \u003d sev_rps[\u0027sev-snp\u0027][0][\u0027uuid\u0027]"},{"line_number":455,"context_line":"            sev_snp_rp_traits \u003d self._get_provider_traits(sev_snp_rp_uuid)"},{"line_number":456,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_SNP, sev_snp_rp_traits)"},{"line_number":457,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_snp_rp_uuid, 15)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"class LibvirtReportSevTraitsTests(LibvirtReportTraitsTestBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"abc052f4_07f8b122","line":457,"updated":"2026-06-24 16:01:18.000000000","message":"OK so basically the memory encryption contexts reported to ES now usable for SEV-SNP instead. Am I correct?","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cee5195fd799e786d3d638b697a47d8b2687a428","unresolved":false,"context_lines":[{"line_number":454,"context_line":"            sev_snp_rp_uuid \u003d sev_rps[\u0027sev-snp\u0027][0][\u0027uuid\u0027]"},{"line_number":455,"context_line":"            sev_snp_rp_traits \u003d self._get_provider_traits(sev_snp_rp_uuid)"},{"line_number":456,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_SNP, sev_snp_rp_traits)"},{"line_number":457,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_snp_rp_uuid, 15)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"class LibvirtReportSevTraitsTests(LibvirtReportTraitsTestBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"501ff11c_12166795","line":457,"in_reply_to":"4c84473d_0fc46647","updated":"2026-06-26 09:11:47.000000000","message":"Thanks for the explanation.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"22e063b71fdd5f71c04d114710e9e4af2915dc61","unresolved":true,"context_lines":[{"line_number":454,"context_line":"            sev_snp_rp_uuid \u003d sev_rps[\u0027sev-snp\u0027][0][\u0027uuid\u0027]"},{"line_number":455,"context_line":"            sev_snp_rp_traits \u003d self._get_provider_traits(sev_snp_rp_uuid)"},{"line_number":456,"context_line":"            self.assertIn(ost.HW_CPU_X86_AMD_SEV_SNP, sev_snp_rp_traits)"},{"line_number":457,"context_line":"            self.assertMemEncryptionSlotsEqual(sev_snp_rp_uuid, 15)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"class LibvirtReportSevTraitsTests(LibvirtReportTraitsTestBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4c84473d_0fc46647","line":457,"in_reply_to":"abc052f4_07f8b122","updated":"2026-06-25 14:11:34.000000000","message":"Yes. It\u0027s confusing that libvirt reports the pool limit as maximum SEV-ES guests, but SEV-ES and SEV-SNP uses the same ASID slots. Now SEV-ES is disabled when SEV-SNP is enabled, so SEV-SNP takes over all of these SEV-ES ASID slots.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eb777a0f1991ca23e3acfbe43d04c427c83c3f8d","unresolved":true,"context_lines":[{"line_number":61,"context_line":"            \u0027sev-es\u0027: [rp for rp in rps"},{"line_number":62,"context_line":"                       if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_es\u0027 % root_rp[\u0027name\u0027]],"},{"line_number":63,"context_line":"            \u0027sev-snp\u0027: [rp for rp in rps"},{"line_number":64,"context_line":"                        if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_snp\u0027 % root_rp[\u0027name\u0027]]"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @contextlib.contextmanager"}],"source_content_type":"text/x-python","patch_set":5,"id":"aa962d1f_0199ae4d","line":64,"updated":"2026-07-03 13:20:10.000000000","message":"supernit: add a comma at the end of the line, so when we add the next sev-xxx feature the diff will be cleaner :)","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0ec50ba54d016fc7bf1201bcac51b956e02bb869","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            \u0027sev-es\u0027: [rp for rp in rps"},{"line_number":62,"context_line":"                       if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_es\u0027 % root_rp[\u0027name\u0027]],"},{"line_number":63,"context_line":"            \u0027sev-snp\u0027: [rp for rp in rps"},{"line_number":64,"context_line":"                        if rp[\u0027name\u0027] \u003d\u003d \u0027%s_amd_sev_snp\u0027 % root_rp[\u0027name\u0027]]"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @contextlib.contextmanager"}],"source_content_type":"text/x-python","patch_set":5,"id":"c8c5421c_eea252af","line":64,"in_reply_to":"aa962d1f_0199ae4d","updated":"2026-07-03 16:17:28.000000000","message":"+1 and done.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eb777a0f1991ca23e3acfbe43d04c427c83c3f8d","unresolved":true,"context_lines":[{"line_number":24371,"context_line":"        }, sev_snp_provider_data.inventory)"},{"line_number":24372,"context_line":"        self.assertEqual({ot.HW_CPU_X86_AMD_SEV_SNP},"},{"line_number":24373,"context_line":"                          sev_snp_provider_data.traits)"},{"line_number":24374,"context_line":""},{"line_number":24375,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver._get_local_gb_info\u0027,"},{"line_number":24376,"context_line":"                new\u003dmock.Mock(return_value\u003d{\u0027total\u0027: disk_gb}))"},{"line_number":24377,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_memory_mb_total\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"08fd5a66_4f566cda","line":24374,"updated":"2026-07-03 13:20:10.000000000","message":"I guess there is logic in the driver to delete the sev-es RP when sev-snp RP is created after a restart. Can we have a test case to prove it?","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0ec50ba54d016fc7bf1201bcac51b956e02bb869","unresolved":false,"context_lines":[{"line_number":24371,"context_line":"        }, sev_snp_provider_data.inventory)"},{"line_number":24372,"context_line":"        self.assertEqual({ot.HW_CPU_X86_AMD_SEV_SNP},"},{"line_number":24373,"context_line":"                          sev_snp_provider_data.traits)"},{"line_number":24374,"context_line":""},{"line_number":24375,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver._get_local_gb_info\u0027,"},{"line_number":24376,"context_line":"                new\u003dmock.Mock(return_value\u003d{\u0027total\u0027: disk_gb}))"},{"line_number":24377,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_memory_mb_total\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7e6c481f_3ca0ed5e","line":24374,"in_reply_to":"08fd5a66_4f566cda","updated":"2026-07-03 16:17:28.000000000","message":"I\u0027ve added a functional test scenario to verify that behavior.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"20a4944a1832068e3d40af3a306a6da859d74b62","unresolved":true,"context_lines":[{"line_number":13532,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV:"},{"line_number":13533,"context_line":"            return self._host.supports_amd_sev"},{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ea19cf69_49d76a62","line":13535,"updated":"2026-07-03 09:35:46.000000000","message":"You missed extending this to allow AMD_SEV_SNP this means at least that n-cpu fails to restart if the host has VMs with SNP enabled. I\u0027m not sure which patch in the series should have this though so feel free to fix it where you feel appropriate.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"92b6c7b5a5e4715c5b766ba857e1b000eee00975","unresolved":false,"context_lines":[{"line_number":13532,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV:"},{"line_number":13533,"context_line":"            return self._host.supports_amd_sev"},{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"962f30e4_af1ec19b","line":13535,"in_reply_to":"df5ae029_ee3f1a1d","updated":"2026-07-03 16:40:44.000000000","message":"I\u0027ve fixed this in https://review.opendev.org/c/openstack/nova/+/994930 .","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0ec50ba54d016fc7bf1201bcac51b956e02bb869","unresolved":true,"context_lines":[{"line_number":13532,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV:"},{"line_number":13533,"context_line":"            return self._host.supports_amd_sev"},{"line_number":13534,"context_line":"        if me_model \u003d\u003d fields.MemEncryptionModel.AMD_SEV_ES:"},{"line_number":13535,"context_line":"            return self._host.supports_amd_sev_es"},{"line_number":13536,"context_line":"        raise exception.Invalid(\u0027Invalid memory encryption model: %r\u0027,"},{"line_number":13537,"context_line":"                                me_model)"},{"line_number":13538,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df5ae029_ee3f1a1d","line":13535,"in_reply_to":"ea19cf69_49d76a62","updated":"2026-07-03 16:17:28.000000000","message":"At this stage it\u0027s not accepted to create an instance with sev-snp model. I\u0027ll cover it in that change.","commit_id":"7563be054127999339a9adbaf1bd826e928bbd68"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"MIN_QEMU_SEV_ES_VERSION \u003d (8, 0, 0)"},{"line_number":86,"context_line":"MIN_QEMU_SEV_SNP_VERSION \u003d (9, 1, 0)"},{"line_number":87,"context_line":"MIN_LIBVIRT_SEV_SNP_VERSION \u003d (10, 5, 0)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class LibvirtEventHandler:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b665fed1_065428b3","line":87,"updated":"2026-06-24 16:01:18.000000000","message":"OK this is aligned with the spec.","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"}],"requirements.txt":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53651a4d376d60667c1d2b6133fffa489a79c389","unresolved":false,"context_lines":[{"line_number":50,"context_line":"oslo.versionedobjects\u003e\u003d1.35.0 # Apache-2.0"},{"line_number":51,"context_line":"os-brick\u003e\u003d6.10.0 # Apache-2.0"},{"line_number":52,"context_line":"os-resource-classes\u003e\u003d1.1.0 # Apache-2.0"},{"line_number":53,"context_line":"os-traits\u003e\u003d3.7.0 # Apache-2.0"},{"line_number":54,"context_line":"os-vif\u003e\u003d3.1.0 # Apache-2.0"},{"line_number":55,"context_line":"castellan\u003e\u003d0.16.0 # Apache-2.0"},{"line_number":56,"context_line":"microversion-parse\u003e\u003d0.2.1 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":1,"id":"63505dde_775c1eb8","line":53,"updated":"2026-06-24 16:01:18.000000000","message":"yepp that is the version added the new trait","commit_id":"dae582dbe3b74b11e58c302fc39b3c1bb9f00e4e"}]}
