)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"75ef622edf3b4ac625c241fe4e47b1146cfc1c8d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8c042ac0_2f814e0b","updated":"2026-08-09 04:12:55.000000000","message":"recheck","commit_id":"8fc6f8ec62ef7f7a4e0717cc756ef384da9cd302"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"710149417db687cf4f163e7f4639d97cb5484564","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5a7392c3_6b159224","updated":"2026-08-18 02:59:29.000000000","message":"recheck","commit_id":"761a47102b34919891a9af0d2b4cf6ba163a959c"}],"cyborg_tempest_plugin/tests/scenario/driver_lifecycle_base.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"7fb4f7fdce1ae0f1d3a6340182ae0f4fcf279d3c","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":"        if CONF.cyborg.image_ssh_user:"},{"line_number":162,"context_line":"            kwargs[\u0027username\u0027] \u003d CONF.cyborg.image_ssh_user"},{"line_number":163,"context_line":"        if CONF.cyborg.image_ssh_password:"},{"line_number":164,"context_line":"            kwargs[\u0027password\u0027] \u003d CONF.cyborg.image_ssh_password"},{"line_number":165,"context_line":"        return self.get_remote_client(**kwargs)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"30a0b4dd_938253b2","line":163,"updated":"2026-08-18 05:41:55.000000000","message":"The refactored _get_ssh_client forwards CONF.cyborg.image_ssh_password as a password kwarg to self.get_remote_client, but tempest\u0027s ScenarioTest.get_remote_client does not accept a password parameter. Any deployment that sets [cyborg] image_ssh_password (a documented new option) makes every driver lifecycle test, including the existing PCI tests, fail before reaching the guest.\n\n**Severity**: HIGH | **Confidence**: 0.95\n\n**Impact**: Setting the newly documented option breaks all lifecycle scenario tests (PCI and NVMe) with an unexpected-keyword TypeError instead of authenticating, and the stated intent of password-based SSH support is not actually delivered through this code path.\n\n**Priority**: Before merge\n**Recommendation**:\nDo not pass password to get_remote_client. Either construct tempest.lib.common.remote_client.RemoteClient directly (it accepts both pkey and password), or document that password auth relies on validation.auth_method\u003d\u0027password\u0027 plus validation.image_ssh_password and drop the password forwarding and the [cyborg] image_ssh_password option; keep the username override, which does map to a real parameter.","commit_id":"1ab92f56d28d1a7ef6ebd8039f83da2861b499a9"}],"cyborg_tempest_plugin/tests/scenario/test_nvme_driver_lifecycle.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35457035c4d60dda2fd80230da40fe20f93c7267","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2025 Red Hat, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"bcecbd15_00f80354","line":1,"updated":"2026-08-06 08:39:17.000000000","message":"The new file test_nvme_driver_lifecycle.py uses \u0027# Copyright 2025 Red Hat, Inc.\u0027 while its sibling test_pci_driver_lifecycle.py and the shared driver_lifecycle_base.py both use \u0027# Copyright 2026 Red Hat, Inc.\u0027 Given the commit date is 2026, the year is inconsistent.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Minor inconsistency in the copyright header that could be caught in review. Low impact but trivially fixable.\n\n**Recommendation**:\nChange \u0027# Copyright 2025 Red Hat, Inc.\u0027 to \u0027# Copyright 2026 Red Hat, Inc.\u0027 to match the sibling files.","commit_id":"b09aefe8dc364c88273c0ec05de551f1dbc1bcb2"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"35457035c4d60dda2fd80230da40fe20f93c7267","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            marker, readback,"},{"line_number":91,"context_line":"            \u0027NVMe I/O failed: wrote %r, got %r\u0027 % (marker, readback))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @decorators.idempotent_id(\u0027a1b2c3d4-e5f6-7890-abcd-ef0123456789\u0027)"},{"line_number":94,"context_line":"    @decorators.attr(type\u003d\u0027smoke\u0027)"},{"line_number":95,"context_line":"    @utils.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":96,"context_line":"    def test_create_delete_server_with_nvme_device(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a17559fc_f2b3e7f5","line":93,"updated":"2026-08-06 08:39:17.000000000","message":"All eight @decorators.idempotent_id values in test_nvme_driver_lifecycle.py follow an obvious sequential pattern (a1b2c3d4-e5f6-7890-abcd-ef0123456789, b2c3d4e5-f6a7-8901-bcde-f01234567890, etc.) rather than being randomly generated. The PCI sibling test uses genuinely random UUIDs (e.g., 1f6ef53...\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Sequential placeholder UUIDs risk collision with other tests in the OpenStack ecosystem if similar patterns are reused. They also appear unprofessional and signal that proper UUID generation was skipped during development.\n\n**Suggestion**:\nGenerate a unique random UUID (uuid4) for each test method. For example: python3 -c \u0027import uuid; print(uuid.uuid4())\u0027 for each decorator.","commit_id":"b09aefe8dc364c88273c0ec05de551f1dbc1bcb2"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"aa3bf52422b42788515d57a7dba544bcb3e6535f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"fi"},{"line_number":80,"context_line":"\"\"\""},{"line_number":81,"context_line":"        output \u003d ssh_client.exec_command(cmd)"},{"line_number":82,"context_line":"        self.assertIn("},{"line_number":83,"context_line":"            \u00270108\u0027, output,"},{"line_number":84,"context_line":"            \u0027NVMe device not visible as PCI class 0108 in guest:\\n%s\u0027 % output,"},{"line_number":85,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"f724b85b_615f43bf","line":82,"updated":"2026-08-11 08:30:57.000000000","message":"The _run_device_specific_validation override asserts \u00270108\u0027 (NVMe PCI class) in shell output. The sysfs fallback only reads vendor and device files, never the class file (/sys/bus/pci/devices/*/class). When lspci is absent, no class code appears in output, so assertIn(\u00270108\u0027, output) always fails...\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: When the guest image lacks lspci (pciutils), every NVMe lifecycle test fails with a misleading assertion error about the NVMe device not being visible, even though the device is correctly attached.\n\n**Priority**: Before merge\n**Why This Matters**: When the guest image lacks lspci (pciutils), every NVMe lifecycle test fails with a misleading assertion error about the NVMe device not being visible, even though the device is correctly attached.\n\n**Recommendation**:\nAdd reading of the \u0027class\u0027 sysfs file in the fallback loop so PCI class is included: if [ -r \"$dev/class\" ]; then printf \u0027class %s\u0027 \"$(cat \"$dev/class\")\". The class file contains values like \u00270x010802\u0027 so \u00270108\u0027 would match. Alternatively, use a more precise pattern like \u0027 0108:\u0027 for lspci output.","commit_id":"72d8c81930e579884576c3c60d54c9aeba2c6745"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"bff8fd99005d4d807d467947861c12a652c9736a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    lspci -n"},{"line_number":70,"context_line":"else"},{"line_number":71,"context_line":"    for dev in /sys/bus/pci/devices/*; do"},{"line_number":72,"context_line":"        if [ -r \"$dev/vendor\" ] \u0026\u0026 [ -r \"$dev/device\" ] \u0026\u0026 [ -r \"$dev/class\" ]; then"},{"line_number":73,"context_line":"            printf \u0027%s class\u003d%s %s:%s\\\\n\u0027 \\\\"},{"line_number":74,"context_line":"                \"$(basename \"$dev\")\" \\\\"},{"line_number":75,"context_line":"                \"$(cat \"$dev/class\")\" \\\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"5317a6e1_a5868674","line":72,"updated":"2026-08-12 12:19:44.000000000","message":"Line 72 of test_nvme_driver_lifecycle.py is 84 characters long, exceeding the 79-character maximum enforced by the project\u0027s flake8 configuration. The tox.ini [flake8] section only ignores E123 and E125, so E501 is active. The tox -e pep8 gate runs flake8 and this line would cause a gate failure.\n\n**Severity**: HIGH | **Confidence**: 1.0\n\n**Risk**: The tox -e pep8 CI gate will fail with E501 \u0027line too long (84 \u003e 79 characters)\u0027, blocking merge. This is a merge-blocking issue because OpenStack CI runs flake8 as a required check.\n\n**Priority**: Before merge\n**Why This Matters**: The tox -e pep8 CI gate will fail with E501 \u0027line too long (84 \u003e 79 characters)\u0027, blocking merge. This is a merge-blocking issue because OpenStack CI runs flake8 as a required check.\n\n**Recommendation**:\nBreak the shell condition across two lines, for example: if [ -r \"$dev/vendor\" ] \u0026\u0026 [ -r \"$dev/device\" ] \u0026\u0026 [ -r \"$dev/class\" ]; then Alternatively, add a # noqa: E501 comment on that line if the shell script line truly cannot be wrapped. Breaking the line is preferred.","commit_id":"761a47102b34919891a9af0d2b4cf6ba163a959c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5136fc128fff1c5128b96cc41551ab1bad544835","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    lspci -n"},{"line_number":70,"context_line":"else"},{"line_number":71,"context_line":"    for dev in /sys/bus/pci/devices/*; do"},{"line_number":72,"context_line":"        if [ -r \"$dev/vendor\" ] \u0026\u0026 [ -r \"$dev/device\" ] \u0026\u0026 [ -r \"$dev/class\" ]; then"},{"line_number":73,"context_line":"            printf \u0027%s class\u003d%s %s:%s\\\\n\u0027 \\\\"},{"line_number":74,"context_line":"                \"$(basename \"$dev\")\" \\\\"},{"line_number":75,"context_line":"                \"$(cat \"$dev/class\")\" \\\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"386ed961_1d6044f4","line":72,"updated":"2026-08-12 10:34:13.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"761a47102b34919891a9af0d2b4cf6ba163a959c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5d75bbc3cd8dd5149040b933a6c3b0453e37930a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    lspci -n"},{"line_number":70,"context_line":"else"},{"line_number":71,"context_line":"    for dev in /sys/bus/pci/devices/*; do"},{"line_number":72,"context_line":"        if [ -r \"$dev/vendor\" ] \u0026\u0026 [ -r \"$dev/device\" ] \u0026\u0026 [ -r \"$dev/class\" ]; then"},{"line_number":73,"context_line":"            printf \u0027%s class\u003d%s %s:%s\\\\n\u0027 \\\\"},{"line_number":74,"context_line":"                \"$(basename \"$dev\")\" \\\\"},{"line_number":75,"context_line":"                \"$(cat \"$dev/class\")\" \\\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"d6cbe1f1_dc7b6ab2","line":72,"updated":"2026-08-18 03:59:53.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"761a47102b34919891a9af0d2b4cf6ba163a959c"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"7fb4f7fdce1ae0f1d3a6340182ae0f4fcf279d3c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"fi"},{"line_number":81,"context_line":"\"\"\""},{"line_number":82,"context_line":"        output \u003d ssh_client.exec_command(cmd)"},{"line_number":83,"context_line":"        self.assertIn("},{"line_number":84,"context_line":"            \u00270108\u0027, output,"},{"line_number":85,"context_line":"            \u0027NVMe device not visible as PCI class 0108 in guest:\\n%s\u0027 % output,"},{"line_number":86,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"f99def37_320ab2d1","line":83,"updated":"2026-08-18 05:41:55.000000000","message":"The new guest-side NVMe check runs assertIn(\u00270108\u0027, output) over the entire concatenated lspci -n / sysfs listing. The substring \u00270108\u0027 can appear in vendor or device ID fields of unrelated PCI devices, so the test can pass when no device of PCI class 0108 exists in the guest.\n\n**Severity**: WARNING | **Confidence**: 0.85\n\n**Impact**: The core assertion of the new NVMe tests (PCI class 0108 present) can silently pass on a guest where the NVMe device was never attached or disappeared after a lifecycle operation, so the tests would fail to detect exactly the regressions they were written to catch.\n\n**Suggestion**:\nAnchor the match to the class field, e.g. use a regexp such as r\u0027(^|\\s)0108:\u0027 against lspci -n output plus r\u0027class\u003d0x0108\u0027 for the sysfs fallback (or have the shell script emit only devices whose class starts with 0108), instead of an unanchored assertIn over the whole listing.","commit_id":"1ab92f56d28d1a7ef6ebd8039f83da2861b499a9"}]}
