)]}'
{"/COMMIT_MSG":[{"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":"0b835d98924fb94da1f6c296dfd9d4c500f99426","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     c5dbb2b9 (Bump Device object to v1.3 for MDEV and PCI type support)"},{"line_number":2,"context_line":"Author:     Chandan Kumar (raukadah) \u003cchkumar@redhat.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2026-08-06 10:55:36 +0530"},{"line_number":4,"context_line":"Commit:     Chandan Kumar (raukadah) \u003cchkumar@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"a093dedb_fb465433","line":1,"updated":"2026-08-20 03:18:06.000000000","message":"The commit message body reads \u0027NVME devices require a dedicated device type so Cyborg can track and manage them alongside existing types such as GPU, FPGA, , NIC, MDEV and PCI.\u0027 The line break after \u0027FPGA,\u0027 is followed by a line starting with \u0027, NIC\u0027, yielding a doubled comma in the permanent change history.\n\n**Severity**: SUGGESTION | **Confidence**: 0.95\n\n**Impact**: Minor readability defect in the immutable git history and Gerrit change record; meaning stays obvious but the double comma is visible to every future reader of git log.\n\n**Recommendation**:\nRebase/amend the commit message to remove the stray comma, e.g. \u0027...alongside existing types such as GPU, FPGA, NIC, MDEV and PCI.\u0027 (drop the trailing comma after FPGA at the line break).","commit_id":"7585807510b22d77155647af7ef266a3dd3ab3f1"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"f6e32e1cfdad94e97f8c20cce349cc20488b7cd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"498c32e2_c720ed2d","updated":"2026-08-13 08:05:42.000000000","message":"recheck","commit_id":"68d451878cb8a828f7371a0c14f648b8ec50e339"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fc7111567d2130359d489eaedff6243fccf46be0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0f365409_ca82d6ed","updated":"2026-08-14 15:03:48.000000000","message":"this will need to be rebased once https://review.opendev.org/c/openstack/cyborg/+/997047?usp\u003dmerge-conflict merges which should happen today but the content looks correct","commit_id":"68d451878cb8a828f7371a0c14f648b8ec50e339"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"be058dddd961bd1527c790cf3a3039e643623adb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"287cdcdb_2f8ee35d","in_reply_to":"0f365409_ca82d6ed","updated":"2026-08-17 07:06:28.000000000","message":"Done!","commit_id":"68d451878cb8a828f7371a0c14f648b8ec50e339"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"caed6e7c6a177b5ed570cef07f7e5dc250ee077c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"970e4296_1c49d797","updated":"2026-08-18 11:32:49.000000000","message":"see https://review.opendev.org/c/openstack/cyborg/+/999933/comment/637d07a7_a8b42476/","commit_id":"ecdefdd66445c1e4e64a1a800f6c11031a59fadd"}],"cyborg/objects/device.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d57459cd3877fe943f1288111eb39f87e8e0a07","unresolved":true,"context_lines":[{"line_number":64,"context_line":"                \u0027type\u0027,"},{"line_number":65,"context_line":"                (constants.DEVICE_MDEV, constants.DEVICE_PCI),"},{"line_number":66,"context_line":"            )"},{"line_number":67,"context_line":"        if target_version \u003c (1, 4):"},{"line_number":68,"context_line":"            base.raise_on_too_new_values("},{"line_number":69,"context_line":"                target_version,"},{"line_number":70,"context_line":"                primitive,"},{"line_number":71,"context_line":"                \u0027type\u0027,"},{"line_number":72,"context_line":"                (constants.DEVICE_NVME,),"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def create(self, context):"},{"line_number":76,"context_line":"        \"\"\"Create a device record in the DB.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"da3b2e7c_c3728939","line":73,"range":{"start_line":67,"start_character":8,"end_line":73,"end_character":13},"updated":"2026-08-19 11:19:44.000000000","message":"so this is in the wrogn order\n\nwe want to go newest to oldest\n\nin this case the order does not mate rbut in genreal it does.","commit_id":"7dfcd58c554f35dfe55ac7b2b526b01639b7d568"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"b31aeb789f7ce25bc18985d92e12aae8af59487f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                \u0027type\u0027,"},{"line_number":65,"context_line":"                (constants.DEVICE_MDEV, constants.DEVICE_PCI),"},{"line_number":66,"context_line":"            )"},{"line_number":67,"context_line":"        if target_version \u003c (1, 4):"},{"line_number":68,"context_line":"            base.raise_on_too_new_values("},{"line_number":69,"context_line":"                target_version,"},{"line_number":70,"context_line":"                primitive,"},{"line_number":71,"context_line":"                \u0027type\u0027,"},{"line_number":72,"context_line":"                (constants.DEVICE_NVME,),"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def create(self, context):"},{"line_number":76,"context_line":"        \"\"\"Create a device record in the DB.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"e9ca7593_8b1372b4","line":73,"range":{"start_line":67,"start_character":8,"end_line":73,"end_character":13},"in_reply_to":"da3b2e7c_c3728939","updated":"2026-08-20 03:10:18.000000000","message":"Done","commit_id":"7dfcd58c554f35dfe55ac7b2b526b01639b7d568"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"af7f9f5527fbe816b660796aa83da9f501468891","unresolved":true,"context_lines":[{"line_number":31,"context_line":"    # Version 1.1: Add AICHIP type"},{"line_number":32,"context_line":"    # Version 1.2: Add status field"},{"line_number":33,"context_line":"    # Version 1.3: Add MDEV, PCI type"},{"line_number":34,"context_line":"    # Version 1.4: Add NVME type"},{"line_number":35,"context_line":"    VERSION \u003d \u00271.4\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    dbapi \u003d dbapi.get_instance()"}],"source_content_type":"text/x-python","patch_set":17,"id":"0d13673d_46b22da4","line":34,"updated":"2026-08-21 18:02:16.000000000","message":"we need to do the same change to DriverDevice as well","commit_id":"2a84b2b6bc00d99e28494734c1539dd425ab943b"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"6d6d290050ac9dabfe6f23e7f6354dd0a10218c1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    # Version 1.1: Add AICHIP type"},{"line_number":32,"context_line":"    # Version 1.2: Add status field"},{"line_number":33,"context_line":"    # Version 1.3: Add MDEV, PCI type"},{"line_number":34,"context_line":"    # Version 1.4: Add NVME type"},{"line_number":35,"context_line":"    VERSION \u003d \u00271.4\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    dbapi \u003d dbapi.get_instance()"}],"source_content_type":"text/x-python","patch_set":17,"id":"95b1680a_ece4af31","line":34,"in_reply_to":"0d13673d_46b22da4","updated":"2026-08-24 06:08:14.000000000","message":"Done","commit_id":"2a84b2b6bc00d99e28494734c1539dd425ab943b"}],"cyborg/tests/unit/db/test_migrations.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":"922f3723974b846345bef4dc4be9a0b611ae4051","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        actual_types \u003d set(devices.c.type.type.enums)"},{"line_number":322,"context_line":"        self.assertEqual(expected_types, actual_types)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _check_a35b4295a0e5(self, engine, data):"},{"line_number":325,"context_line":"        devices \u003d db_utils.get_table(engine, \u0027devices\u0027)"},{"line_number":326,"context_line":"        type_enum \u003d devices.c.type.type"},{"line_number":327,"context_line":"        self.assertIn(\u0027NVME\u0027, type_enum.enums)"}],"source_content_type":"text/x-python","patch_set":12,"id":"4f133612_3822a6b6","line":324,"updated":"2026-08-15 15:23:51.000000000","message":"The _check_a35b4295a0e5 migration check uses assertIn(\u0027NVME\u0027, ...) while the immediately preceding check _check_9625668549b5 asserts the exact full enum set with assertEqual. The weaker assertion would pass even if the migration dropped or misnamed an existing value (e.g. a typo\u0027d enum list), and...\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: A broken migration (missing or misspelled non-NVME value) would pass the migration test suite, letting enum corruption reach deployed databases.\n\n**Suggestion**:\nAssert the full set: expected \u003d {\u0027GPU\u0027,\u0027FPGA\u0027,\u0027AICHIP\u0027,\u0027QAT\u0027,\u0027NIC\u0027,\u0027SSD\u0027,\u0027MDEV\u0027,\u0027PCI\u0027,\u0027NVME\u0027}; self.assertEqual(expected, set(type_enum.enums)). Optionally derive the expected values from constants.DEVICE_TYPE so the check stays in sync.","commit_id":"5834e7c8c9187c85fa67ddfe6435382b804ddcef"}],"cyborg/tests/unit/objects/test_device.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":"a7985823d63c3300545915cfa5297b6420d0f085","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                self.assertEqual(self.context, device._context)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def test_device_type(self):"},{"line_number":162,"context_line":"        for t in [\"GPU\", \"FPGA\", \"AICHIP\", \"NVME\"]:"},{"line_number":163,"context_line":"            device \u003d objects.Device(self.context, type\u003dt)"},{"line_number":164,"context_line":"            self.assertEqual(self.context, device._context)"},{"line_number":165,"context_line":"        # Invalid type will raise ValueError"}],"source_content_type":"text/x-python","patch_set":5,"id":"b4fc1ccf_cc4d5768","line":162,"updated":"2026-08-07 05:57:40.000000000","message":"The test_device_type method iterates over a hardcoded list of device types (now including NVME) rather than deriving the list from constants.DEVICE_TYPE. This means QAT, NIC, and SSD remain untested, and future device type additions will silently lack coverage unless manually added to the list.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: Three device types (QAT, NIC, SSD) have no validation test coverage in test_device_type. Future device type additions will require manual updates to the test list or they will also lack coverage.\n\n**Recommendation**:\nReplace the hardcoded list with constants.DEVICE_TYPE to iterate over all valid device types automatically. For example: for t in constants.DEVICE_TYPE:. This ensures full coverage and is self-maintaining.","commit_id":"99126ab6ab95e15933e5aa54440eac993d579342"},{"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":"8359382f8e3df16ce733345a2bc6ceb567588ca3","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                self.assertEqual(self.context, device._context)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def test_device_type(self):"},{"line_number":162,"context_line":"        for t in [\"GPU\", \"FPGA\", \"AICHIP\", \"NVME\"]:"},{"line_number":163,"context_line":"            device \u003d objects.Device(self.context, type\u003dt)"},{"line_number":164,"context_line":"            self.assertEqual(self.context, device._context)"},{"line_number":165,"context_line":"        # Invalid type will raise ValueError"}],"source_content_type":"text/x-python","patch_set":6,"id":"cbcb167e_3c9a1953","line":162,"updated":"2026-08-09 04:21:11.000000000","message":"The test_device_type method in test_device.py was modified to add \u0027NVME\u0027 to a hardcoded list of device types, but still omits QAT, NIC, and SSD. Using constants.DEVICE_TYPE would ensure all device types are covered and keep the test in sync with future additions.\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: The test validates only 4 of 7 device types. If the Enum in models.py were accidentally changed to drop QAT, NIC, or SSD, the test would not catch it. Using the constants tuple eliminates this risk permanently.\n\n**Recommendation**:\nReplace the hardcoded list with constants.DEVICE_TYPE, e.g.: for t in constants.DEVICE_TYPE:. This ensures all current and future device types are tested without requiring manual updates to the test.","commit_id":"f4b8f14f4e09f5c88da6b76cebc91288d04447d8"}],"releasenotes/notes/add-nvme-device-type-9f9e1fd9dec8bb30.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d57459cd3877fe943f1288111eb39f87e8e0a07","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add NVME device type support. A new ``DEVICE_NVME \u003d \u0027NVME\u0027`` constant is"},{"line_number":5,"context_line":"    available in ``cyborg.common.constants`` and is included in the"},{"line_number":6,"context_line":"    ``DEVICE_TYPE`` tuple."},{"line_number":7,"context_line":"upgrade:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    An Alembic schema migration (``a35b4295a0e5``) alters the ``devices.type``"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5bc5efe4_b29ddeef","line":6,"range":{"start_line":2,"start_character":0,"end_line":6,"end_character":26},"updated":"2026-08-19 11:19:44.000000000","message":"this is too low level to deserve its own feature release note.\nthis is an internal detail not one that operator or end users shoudl need to care about in gneral.\n\nwe shoudl ideally only have 1 feature release not for the entire nvme driver feature","commit_id":"7dfcd58c554f35dfe55ac7b2b526b01639b7d568"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"b31aeb789f7ce25bc18985d92e12aae8af59487f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add NVME device type support. A new ``DEVICE_NVME \u003d \u0027NVME\u0027`` constant is"},{"line_number":5,"context_line":"    available in ``cyborg.common.constants`` and is included in the"},{"line_number":6,"context_line":"    ``DEVICE_TYPE`` tuple."},{"line_number":7,"context_line":"upgrade:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    An Alembic schema migration (``a35b4295a0e5``) alters the ``devices.type``"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"07a5865f_6e840599","line":6,"range":{"start_line":2,"start_character":0,"end_line":6,"end_character":26},"in_reply_to":"5bc5efe4_b29ddeef","updated":"2026-08-20 03:10:18.000000000","message":"I added release notes based on the suggestion from AI review. Make sense to put 1 feature release note for entire nvme driver. I can drop all these release notes from further patches.","commit_id":"7dfcd58c554f35dfe55ac7b2b526b01639b7d568"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0d57459cd3877fe943f1288111eb39f87e8e0a07","unresolved":true,"context_lines":[{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    An Alembic schema migration (``a35b4295a0e5``) alters the ``devices.type``"},{"line_number":10,"context_line":"    enum column to include the new ``NVME`` value. Run ``cyborg-dbsync upgrade``"},{"line_number":11,"context_line":"    before starting the upgraded Cyborg services."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"8396bd6c_2cabef56","line":11,"updated":"2026-08-19 11:19:44.000000000","message":"this im also hesitent to call out\n\nwe expect that you alwasy run cyborg-dbsync upgrade when upgrading be tween release before you restart the cyborg services\n\nso we shoudl not really call out things in the upgrade notes unless it requried the operator to make a decsion or take a action that is not part of the normal upgrade process\n\nhttps://docs.openstack.org/cyborg/latest/admin/upgrade.html#database-and-online-data-migrations","commit_id":"7dfcd58c554f35dfe55ac7b2b526b01639b7d568"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"b31aeb789f7ce25bc18985d92e12aae8af59487f","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    An Alembic schema migration (``a35b4295a0e5``) alters the ``devices.type``"},{"line_number":10,"context_line":"    enum column to include the new ``NVME`` value. Run ``cyborg-dbsync upgrade``"},{"line_number":11,"context_line":"    before starting the upgraded Cyborg services."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3e26f049_194db8c8","line":11,"in_reply_to":"8396bd6c_2cabef56","updated":"2026-08-20 03:10:18.000000000","message":"Dropping the release notes in favor of single release note in coming patches.","commit_id":"7dfcd58c554f35dfe55ac7b2b526b01639b7d568"}]}
