)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86cb2e38ca6ede028e96ffcc1009173d17a76d21","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9e06e10e_a16e0a5e","updated":"2025-11-07 05:17:23.000000000","message":"The commit message \"Add fusion testing infra \u0026 first scale test.\" lacks detail about the specific changes made in the code. A clearer commit message would be: \"Implement AWS Fusion testing infrastructure and initial scale test, including EC2, S3, and Secrets Manager libraries with example usage and integration into the TAF framework.\"","commit_id":"2673c531b0e6e431c99711843936f5a70183e1a7"}],"couchbase_utils/capella_utils/dedicated.py":[{"author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86cb2e38ca6ede028e96ffcc1009173d17a76d21","unresolved":true,"context_lines":[{"line_number":716,"context_line":"                                 tenant.user,"},{"line_number":717,"context_line":"                                 tenant.pwd)"},{"line_number":718,"context_line":"        resp \u003d capella_api.enable_fusion(tenant.id, tenant.projects[0], cluster_id)"},{"line_number":719,"context_line":"        if resp.status_code !\u003d 200:"},{"line_number":720,"context_line":"            CapellaUtils.log.critical(\"Enabling Fusion failed for cluster {}:{}\"."},{"line_number":721,"context_line":"                                      format(cluster_id, resp.status_code))"},{"line_number":722,"context_line":"            raise Exception(\"Enabling Fusion failed: {}\"."},{"line_number":723,"context_line":"                            format(resp.content))"},{"line_number":724,"context_line":"        return resp"}],"source_content_type":"text/x-python","patch_set":1,"id":"ad21c6c4_24432598","line":721,"range":{"start_line":719,"start_character":8,"end_line":721,"end_character":75},"updated":"2025-11-07 05:17:23.000000000","message":"The `enable_fusion` method in `dedicated.py` does not handle the case where the `resp` object might not have a `status_code` attribute. This could lead to an AttributeError if the API call fails in an unexpected way. Consider adding a check to ensure `resp` is a valid response object before accessing its attributes.","commit_id":"2673c531b0e6e431c99711843936f5a70183e1a7"}],"pytests/aGoodDoctor/fusion/awslib/ec2_lib.py":[{"author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86cb2e38ca6ede028e96ffcc1009173d17a76d21","unresolved":true,"context_lines":[{"line_number":482,"context_line":"        results \u003d {}"},{"line_number":483,"context_line":"        poll_count \u003d 0"},{"line_number":484,"context_line":"        "},{"line_number":485,"context_line":"        while poll_count \u003c max_polls:"},{"line_number":486,"context_line":"            all_ready \u003d True"},{"line_number":487,"context_line":"            "},{"line_number":488,"context_line":"            for instance_id in instance_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"2151e8ca_59a207d8","line":485,"range":{"start_line":485,"start_character":8,"end_line":485,"end_character":37},"updated":"2025-11-07 05:17:23.000000000","message":"The `poll_instances_by_tag` method in `ec2_lib.py` uses a while loop with a fixed number of polls. If the target state is never reached, this could lead to unnecessary waiting. Consider implementing a mechanism to exit early if all instances reach the target state before the maximum number of polls is reached.","commit_id":"2673c531b0e6e431c99711843936f5a70183e1a7"}],"pytests/aGoodDoctor/fusion/awslib/s3_lib.py":[{"author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86cb2e38ca6ede028e96ffcc1009173d17a76d21","unresolved":true,"context_lines":[{"line_number":218,"context_line":"                # Process errors"},{"line_number":219,"context_line":"                for error in response.get(\u0027Errors\u0027, []):"},{"line_number":220,"context_line":"                    results[error[\u0027Key\u0027]] \u003d False"},{"line_number":221,"context_line":"                    self.logger.error(f\"Error deleting {error[\u0027Key\u0027]}: {error[\u0027Message\u0027]}\")"},{"line_number":222,"context_line":"                    "},{"line_number":223,"context_line":"        except ClientError as e:"},{"line_number":224,"context_line":"            self.logger.error(f\"Error deleting multiple files from {bucket_name}: {e}\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"a2ea541e_4b2b36c6","line":221,"range":{"start_line":221,"start_character":20,"end_line":221,"end_character":91},"updated":"2025-11-07 05:17:23.000000000","message":"In `s3_lib.py`, the `delete_multiple_files` method processes errors by logging them but does not raise exceptions or return a comprehensive error status. This could lead to silent failures if the caller does not check the returned dictionary. Consider raising exceptions for critical errors or providing a more detailed error report.","commit_id":"2673c531b0e6e431c99711843936f5a70183e1a7"}],"pytests/aGoodDoctor/fusion/awslib/secrets_manager_lib.py":[{"author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86cb2e38ca6ede028e96ffcc1009173d17a76d21","unresolved":true,"context_lines":[{"line_number":72,"context_line":"            }"},{"line_number":73,"context_line":"        except ClientError as e:"},{"line_number":74,"context_line":"            self.logger.error(f\"Error getting secret by name {secret_name}: {e}\")"},{"line_number":75,"context_line":"            return {"},{"line_number":76,"context_line":"                \u0027secret_name\u0027: secret_name,"},{"line_number":77,"context_line":"                \u0027secret_value\u0027: \u0027\u0027,"},{"line_number":78,"context_line":"                \u0027secret_binary\u0027: None,"},{"line_number":79,"context_line":"                \u0027success\u0027: False,"},{"line_number":80,"context_line":"                \u0027error\u0027: str(e)"},{"line_number":81,"context_line":"            }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_secret_by_tag(self, tag_key: str, tag_value: str \u003d None) -\u003e Dict[str, Any]:"},{"line_number":84,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fdafbe10_253c44cc","line":81,"range":{"start_line":75,"start_character":12,"end_line":81,"end_character":13},"updated":"2025-11-07 05:17:23.000000000","message":"The `get_secret_by_name` method in `secrets_manager_lib.py` returns a dictionary with keys like \u0027secret_name\u0027, \u0027secret_value\u0027, and \u0027secret_binary\u0027, which are inconsistent with the keys used in the successful response dictionary. This inconsistency can lead to confusion and potential errors when accessing these keys. Consider standardizing the keys across both success and error responses.","commit_id":"2673c531b0e6e431c99711843936f5a70183e1a7"}],"pytests/aGoodDoctor/fusion/fusion_aws_util.py":[{"author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86cb2e38ca6ede028e96ffcc1009173d17a76d21","unresolved":true,"context_lines":[{"line_number":20,"context_line":"        table.field_names \u003d [\"Instance ID\", \"Instance Type\", \"VolumeId\", \"Disk Size (GiB)\", \"IOPS\", \"Public IP\", \"Instance Create Time\", \"Volume Create Time\"]"},{"line_number":21,"context_line":"        result \u003d []"},{"line_number":22,"context_line":"        # Filter only instances which are in \u0027running\u0027 state"},{"line_number":23,"context_line":"        instances \u003d [instance for instance in instances if instance.get(\u0027State\u0027, {}).get(\u0027Name\u0027) \u003d\u003d \u0027running\u0027]"},{"line_number":24,"context_line":"        for instance in instances:"},{"line_number":25,"context_line":"            temp \u003d dict()            "},{"line_number":26,"context_line":"            temp[\u0027InstanceId\u0027] \u003d instance.get(\u0027InstanceId\u0027, \u0027N/A\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ca9d7a4_bdd6e655","line":23,"range":{"start_line":23,"start_character":8,"end_line":23,"end_character":110},"updated":"2025-11-07 05:17:23.000000000","message":"In `fusion_aws_util.py`, the `list_instances` method uses a list comprehension to filter instances by their state. However, the filtering logic is embedded within the list comprehension, which can reduce readability. Consider extracting the filtering logic into a separate function or using a more descriptive variable name to improve code clarity.","commit_id":"2673c531b0e6e431c99711843936f5a70183e1a7"}]}
