)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"db95d04f228f525cdc491d3063c9bf01e0782739","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9a12a8f8_18075983","updated":"2026-07-21 16:35:18.000000000","message":"thanks for the improvment Chandan!","commit_id":"0324c62e2957689da999938cff4e86c2aa8f4189"}],"cyborg/accelerator/drivers/driver.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":"a7b836e6851efc3194b986893d1180e1fe38fe36","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            yield sub"},{"line_number":26,"context_line":"            yield from sub._all_subclasses()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def create(cls, vendor, *args, **kwargs):"},{"line_number":30,"context_line":"        \"\"\"Instantiate a vendor-specific driver subclass."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c2ec1077_d9d36c65","line":28,"updated":"2026-07-20 17:33:38.000000000","message":"GenericDriver.create() and _all_subclasses() are new public methods with no direct unit tests. Existing tests only exercise FPGADriver.create() (inherited). No test calls GenericDriver.create() directly, which is the actual call path used by manager.py. The recursive subclass walk and cross-categ...\n\n**Severity**: SUGGESTION | **Confidence**: 0.8\n\n**Benefit**: The recursive _all_subclasses() walk and GenericDriver.create() entry point are untested. A regression in subclass discovery would not be caught until runtime. The production call path (GenericDriver.create() from manager.py) has zero test coverage.\n\n**Recommendation**:\nAdd tests to test_driver.py that: (1) call GenericDriver.create() with known vendor names and verify correct subclass returned, (2) test nested subclass discovery via _all_subclasses(), (3) verify LookupError for unknown vendors, and (4) add a fpga_program test in test_manager.py.","commit_id":"ac8333d6eb3f7ebd3c094dc532ffd4f644cb538b"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"db95d04f228f525cdc491d3063c9bf01e0782739","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        Resolves *vendor* through ``cls.VENDOR_MAPS`` then matches"},{"line_number":33,"context_line":"        against each subclass\u0027s ``VENDOR`` attribute."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        vendor_name \u003d cls.VENDOR_MAPS.get(vendor, vendor)"},{"line_number":36,"context_line":"        for driver_class in cls._all_subclasses():"},{"line_number":37,"context_line":"            if vendor_name \u003d\u003d driver_class.VENDOR:"}],"source_content_type":"text/x-python","patch_set":2,"id":"4bace023_61e315ca","line":34,"updated":"2026-07-21 16:35:18.000000000","message":"thinking about this, I\u0027m not convinced on the robustness of the whole mechanism of having a `create` method and VENDOR and VENDOR_MAPS attributes to resolve the driver. This is completely out of the scope of this change, but I\u0027m thinking that maybe giving each driver an id and storing that in the deployable might be a cleaner way to handle it","commit_id":"0324c62e2957689da999938cff4e86c2aa8f4189"},{"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":"758dfec060d6df167229074d5d88d43cf090e08d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        Resolves *vendor* through ``cls.VENDOR_MAPS`` then matches"},{"line_number":33,"context_line":"        against each subclass\u0027s ``VENDOR`` attribute."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        vendor_name \u003d cls.VENDOR_MAPS.get(vendor, vendor)"},{"line_number":36,"context_line":"        for driver_class in cls._all_subclasses():"},{"line_number":37,"context_line":"            if vendor_name \u003d\u003d driver_class.VENDOR:"},{"line_number":38,"context_line":"                return driver_class(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e2293a8a_7ffa5365","line":35,"updated":"2026-07-21 04:55:06.000000000","message":"manager.py now calls GenericDriver.create(driver_name) which uses GenericDriver.VENDOR_MAPS (empty {}), not FPGADriver.VENDOR_MAPS. The PCI vendor ID resolution documented by the FPGADriver.VENDOR_MAPS comment only takes effect when create() is called directly on FPGADriver, which no production c...\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: The FPGADriver.VENDOR_MAPS dictionary and its comment (\u0027Resolves PCI vendor IDs for FPGADriver.create() callers\u0027) are misleading dead code from the primary call path. While the current fpga_program flow passes already-resolved vendor names (e.g. \u0027intel\u0027), any future caller passing a raw PCI vendo...\n\n**Suggestion**:\nEither (a) merge VENDOR_MAPS from all ancestor classes in create() so FPGADriver.VENDOR_MAPS is consulted regardless of entry point, or (b) update the comment on FPGADriver.VENDOR_MAPS to clarify it is only used when calling FPGADriver.create() directly, or (c) if PCI vendor ID resolution is no longer needed at all, remove VENDOR_MAPS from FPGADriver and document that GenericDriver.create() expects resolved vendor names.","commit_id":"0324c62e2957689da999938cff4e86c2aa8f4189"}],"cyborg/agent/manager.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":"a7b836e6851efc3194b986893d1180e1fe38fe36","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            context, bitstream_uuid, dest_path\u003ddownload_path.name"},{"line_number":180,"context_line":"        )"},{"line_number":181,"context_line":"        try:"},{"line_number":182,"context_line":"            driver \u003d GenericDriver.create(driver_name)"},{"line_number":183,"context_line":"            ret \u003d driver.update(controlpath_id, download_path.name)"},{"line_number":184,"context_line":"            LOG.info(\u0027Driver update() API returned %s\u0027, ret)"},{"line_number":185,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":1,"id":"657a2529_f99d5a69","line":182,"updated":"2026-07-20 17:33:38.000000000","message":"manager.py now calls GenericDriver.create() instead of FPGADriver.create(). The create() method resolves vendor through cls.VENDOR_MAPS, but when cls is GenericDriver, VENDOR_MAPS is empty. The FPGADriver.VENDOR_MAPS override (\u00270x8086\u0027-\u003e\u0027intel\u0027, \u00271bd4\u0027-\u003e\u0027inspur\u0027) is never consulted in the fpga_pr...\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: If any caller passes a raw PCI vendor ID (e.g., \u00270x8086\u0027) to fpga_program, driver lookup will fail with LookupError. While current callers pass resolved vendor names, the FPGADriver.VENDOR_MAPS override added here is dead code for the production path, creating confusion for maintainers.\n\n**Suggestion**:\nEither (a) call FPGADriver.create() in manager.py to preserve PCI vendor ID resolution, or (b) if GenericDriver.create() is the intended universal entry point, document that callers must pass resolved vendor names and that VENDOR_MAPS on FPGADriver only applies to FPGADriver.create() calls.","commit_id":"ac8333d6eb3f7ebd3c094dc532ffd4f644cb538b"}]}
