)]}'
{"/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":"d30cd876895a13b245d9621623f203ed33da2ef3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1fd019e9_0afab809","updated":"2026-05-25 09:19:10.000000000","message":"The commit message lacks detail on the testing or verification process for the changes made. It\u0027s important to include this information to ensure that the fixes are validated.","commit_id":"05087c58f16ba8e32799bfa7a46681aa5b313a00"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"199a25b441bdb8bd04606536bc60c161048b623e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"46b77911_2b619f90","updated":"2026-05-25 09:26:23.000000000","message":"ai review","commit_id":"2d48bb9f2023d757d17a7fb0a797c0e75fbf3bfe"},{"author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"088615363953db5dd1c217485254fbf24a7d9118","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c685ea71_42205ccb","updated":"2026-05-25 09:43:16.000000000","message":"ai review","commit_id":"755fe0267ca8aca93a5a97aa650736e7b0ee109b"},{"author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e01480ddb29d0c4c410eccb47d2387235c432b07","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"38014171_c80c32fc","updated":"2026-05-25 10:36:06.000000000","message":"ai review","commit_id":"4e91def922816266f4018c4691df302a01fde924"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a0fe6a19f4d99d25dd0c23844e47383dc7e81009","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4f924dac_15ddb4d8","updated":"2026-05-25 10:14:21.000000000","message":"ai review","commit_id":"4e91def922816266f4018c4691df302a01fde924"},{"author":{"_account_id":1004304,"name":"Ashwin","email":"ashwin.govindarajulu@couchbase.com","username":"ashwin2002","avatars":[{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/2ee592846162e058ddc8e055dd3f55ce.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8bda05bc2368b62d15c0cc915075e4cef729ba6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"42e9b8c4_0c9fb51f","updated":"2026-05-25 10:39:39.000000000","message":"ai review","commit_id":"289440866f2f4cfae9a3f52ccea3525bd0357bd1"}],"lib/dcp_bin_client.py":[{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"56c8444fea3d128c887c5b417ddd87c5760ed0ed","unresolved":false,"context_lines":[{"line_number":13,"context_line":"CMD_CONTROL \u003d 0x5e"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class DcpClient(MemcachedClient):"},{"line_number":17,"context_line":"    \"\"\" DcpClient implements dcp protocol using mc_bin_client as base"},{"line_number":18,"context_line":"        for sending and receiving commands \"\"\""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"b2ed7a76_caba2132","line":16,"in_reply_to":"c72a2a33_3ca3414b","updated":"2026-05-25 10:23:04.000000000","message":"\u003e Missing unit coverage for `DcpClient` core behaviors (connection lifecycle + error handling). This makes regressions in the client hard to detect. Add a focused unit test that mocks `_recvMsg` and verifies the `\u0027died\u0027` path returns status 0xff.\n\u003e \n\u003e ```python\n\u003e import unittest\n\u003e from unittest import mock\n\u003e \n\u003e class TestDcpClient(unittest.TestCase):\n\u003e     def test_recv_op_died_returns_error_status(self):\n\u003e         client \u003d DcpClient(\"localhost\", 11210, timeout\u003d1, do_auth\u003dFalse)\n\u003e         op \u003d Operation(CMD_NOOP)\n\u003e         with mock.patch.object(client, \"_recvMsg\", side_effect\u003dRuntimeError(\"died\")):\n\u003e             resp \u003d client.recv_op(op)\n\u003e         self.assertEqual(resp[\"status\"], 0xff)\n\u003e ```\n\u003e \n\nPlease fix.","commit_id":"4e91def922816266f4018c4691df302a01fde924"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"56c8444fea3d128c887c5b417ddd87c5760ed0ed","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                    print(\"recv_op Exception:\", ex)"},{"line_number":253,"context_line":"                    return {\u0027opcode\u0027: op.opcode,"},{"line_number":254,"context_line":"                            \u0027status\u0027: 0xff}"},{"line_number":255,"context_line":"                elif \u0027timed out\u0027 in ex_str or \u0027Timeout\u0027 in ex_str:"},{"line_number":256,"context_line":"                    # Socket poll timeout — expected on slow streams, not an error"},{"line_number":257,"context_line":"                    return None"},{"line_number":258,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"0cdd8b08_f9795a57","line":255,"in_reply_to":"fbdace22_8fcff9de","updated":"2026-05-25 10:23:04.000000000","message":"\u003e Timeout handling in `recv_op` is now a soft-return path; add a test to ensure timeouts return `None` without poisoning the stream state. This locks down the intended behavior for slow streams.\n\u003e \n\u003e ```python\n\u003e import unittest\n\u003e from unittest import mock\n\u003e \n\u003e class TestRecvOpTimeout(unittest.TestCase):\n\u003e     def test_recv_op_timeout_returns_none(self):\n\u003e         client \u003d DcpClient(\"localhost\", 11210, timeout\u003d1, do_auth\u003dFalse)\n\u003e         op \u003d Operation(CMD_NOOP)\n\u003e         with mock.patch.object(client, \"_recvMsg\", side_effect\u003dTimeoutError(\"timed out\")):\n\u003e             self.assertIsNone(client.recv_op(op))\n\u003e ```\n\u003e \n\nPlease fix.","commit_id":"4e91def922816266f4018c4691df302a01fde924"}],"pytests/dcp_new/dcp_base.py":[{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4a1b61e807a3988d5724be8897775596b65c6f48","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        config_json \u003d json.loads(DcpClient.get_config(init_dcp_client)[2])"},{"line_number":61,"context_line":"        self.vb_map \u003d config_json[\u0027vBucketServerMap\u0027][\u0027vBucketMap\u0027]"},{"line_number":62,"context_line":"        self.vbuckets \u003d range(len(self.vb_map))"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.dcp_client_dict \u003d dict()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"934761e5_15b75342","line":62,"in_reply_to":"3915582e_4d41b2a5","updated":"2026-05-25 10:09:59.000000000","message":"\u003e Class-level test gap: `DCPBase` has no direct coverage for its stream setup and event-handling helpers, so behavioral changes here can regress silently. Add integration/unit coverage for the base class (e.g., via a small derived test class that drives the helpers).\n\nPlease fix.","commit_id":"755fe0267ca8aca93a5a97aa650736e7b0ee109b"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4a1b61e807a3988d5724be8897775596b65c6f48","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        config_json \u003d json.loads(DcpClient.get_config(init_dcp_client)[2])"},{"line_number":61,"context_line":"        self.vb_map \u003d config_json[\u0027vBucketServerMap\u0027][\u0027vBucketMap\u0027]"},{"line_number":62,"context_line":"        self.vbuckets \u003d range(len(self.vb_map))"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.dcp_client_dict \u003d dict()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"22f158a6_c7203da2","line":62,"in_reply_to":"7f5b121c_a7186c5e","updated":"2026-05-25 10:09:59.000000000","message":"\u003e Missing test coverage for `initialise_cluster_connections`: there is no test asserting `self.vbuckets` length matches the cluster `vBucketMap` and that `LogData` is initialized for each vbucket. Add a test that exercises this path to prevent regressions.\n\nPlease fix.","commit_id":"755fe0267ca8aca93a5a97aa650736e7b0ee109b"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4a1b61e807a3988d5724be8897775596b65c6f48","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        timeout \u003d self.timeout"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        dcp_client \u003d DcpClient(self.host, self.port, timeout\u003dtimeout, do_auth\u003dFalse)"},{"line_number":94,"context_line":"        self.log.info(\"DCP client created.\")"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            response \u003d dcp_client.sasl_auth_plain("}],"source_content_type":"text/x-python","patch_set":4,"id":"ad6779ef_37b61585","line":94,"in_reply_to":"07603287_0fcde0ae","updated":"2026-05-25 10:09:59.000000000","message":"\u003e Missing test coverage for `initiate_connection`, especially around SASL auth failure and feature negotiation; currently failures only log and the connection continues. Add a test to lock down the intended behavior on auth failure.\n\nPlease fix.","commit_id":"755fe0267ca8aca93a5a97aa650736e7b0ee109b"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4a1b61e807a3988d5724be8897775596b65c6f48","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def handleSystemEvent(self, response, manifest):"},{"line_number":186,"context_line":"        # Unpack a DCP system event"},{"line_number":187,"context_line":"        if isinstance(response.get(\u0027key\u0027), bytes):"},{"line_number":188,"context_line":"            response[\u0027key\u0027] \u003d response[\u0027key\u0027].decode(\u0027utf-8\u0027)"},{"line_number":189,"context_line":"        if response[\u0027event\u0027] \u003d\u003d EVENT_CREATE_COLLECTION:"},{"line_number":190,"context_line":"            if response[\u0027version\u0027] \u003d\u003d 0:"},{"line_number":191,"context_line":"                uid, sid, cid \u003d struct.unpack(\"\u003eQII\", response[\u0027value\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"f68cacff_2179f8f5","line":188,"in_reply_to":"57afd5be_858858ce","updated":"2026-05-25 10:09:59.000000000","message":"\u003e Decoding arbitrary DCP keys with strict UTF-8 can raise `UnicodeDecodeError` for binary keys, aborting system-event handling. Use a tolerant decode (or keep bytes and decode only for logging) and add a test covering non-UTF8 keys. Example fix:\n\u003e ```python\n\u003e if isinstance(response.get(\"key\"), bytes):\n\u003e     response[\"key\"] \u003d response[\"key\"].decode(\"utf-8\", errors\u003d\"surrogateescape\")\n\u003e ```\n\nPlease fix.","commit_id":"755fe0267ca8aca93a5a97aa650736e7b0ee109b"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"56c8444fea3d128c887c5b417ddd87c5760ed0ed","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from mc_bin_client import MemcachedError"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class DCPBase(CollectionBase):"},{"line_number":20,"context_line":"    def setUp(self):"},{"line_number":21,"context_line":"        super(DCPBase, self).setUp()"},{"line_number":22,"context_line":"        self.dictstore \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"234abbbe_8be0aad4","line":19,"in_reply_to":"2748ee6e_7066b9de","updated":"2026-05-25 10:23:04.000000000","message":"\u003e DCPBase helpers still lack direct coverage for stream setup and event-handling helpers, so behavior changes can regress silently. Add a small derived test class that drives these helper paths.\n\u003e \n\u003e ```python\n\u003e class TestDcpBaseHelpers(DCPBase):\n\u003e     def test_handle_marker_round_trips(self):\n\u003e         response \u003d {\n\u003e             \"vbucket\": 0,\n\u003e             \"streamId\": 0,\n\u003e             \"snap_start_seqno\": 1,\n\u003e             \"snap_end_seqno\": 2,\n\u003e             \"flag\": \"memory\",\n\u003e         }\n\u003e         start, end \u003d self.handleMarker(response)\n\u003e         self.assertEqual((start, end), (1, 2))\n\u003e ```\n\u003e \n\nPlease fix.","commit_id":"4e91def922816266f4018c4691df302a01fde924"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"56c8444fea3d128c887c5b417ddd87c5760ed0ed","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        config_json \u003d json.loads(DcpClient.get_config(init_dcp_client)[2])"},{"line_number":61,"context_line":"        self.vb_map \u003d config_json[\u0027vBucketServerMap\u0027][\u0027vBucketMap\u0027]"},{"line_number":62,"context_line":"        self.vbuckets \u003d range(len(self.vb_map))"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.dcp_client_dict \u003d dict()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"36eccf43_773f9951","line":62,"in_reply_to":"f4fe04cc_288ae787","updated":"2026-05-25 10:23:04.000000000","message":"\u003e Missing test coverage for `initialise_cluster_connections` verifying `self.vbuckets` matches the `vBucketMap` length and that `LogData` is initialized with that range. Add a test that stubs `DcpClient.get_config` and asserts the derived range.\n\u003e \n\u003e ```python\n\u003e import json\n\u003e from unittest import mock\n\u003e \n\u003e def test_initialise_cluster_connections_sets_vbucket_range(self):\n\u003e     config \u003d {\n\u003e         \"vBucketServerMap\": {\"vBucketMap\": [[0], [1]], \"serverList\": []},\n\u003e         \"nodesExt\": [],\n\u003e     }\n\u003e     with mock.patch.object(DcpClient, \"get_config\", return_value\u003d(None, None, json.dumps(config))):\n\u003e         with mock.patch(\"pytests.dcp_new.dcp_base.LogData\") as log_data_cls:\n\u003e             dcp_base \u003d DCPBase()\n\u003e             dcp_base.log_path \u003d None\n\u003e             dcp_base.keep_logs \u003d False\n\u003e             dcp_base.initialise_cluster_connections()\n\u003e             self.assertEqual(list(dcp_base.vbuckets), [0, 1])\n\u003e             log_data_cls.assert_called_once()\n\u003e ```\n\u003e \n\nPlease fix.","commit_id":"4e91def922816266f4018c4691df302a01fde924"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"56c8444fea3d128c887c5b417ddd87c5760ed0ed","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                                                   \u0027node\u0027: node}"},{"line_number":86,"context_line":"        return init_dcp_client"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def initiate_connection(self):"},{"line_number":89,"context_line":"        self.host \u003d self.cluster.master.ip"},{"line_number":90,"context_line":"        self.port \u003d int(11210)"},{"line_number":91,"context_line":"        timeout \u003d self.timeout"}],"source_content_type":"text/x-python","patch_set":6,"id":"e1b60525_e4a0549a","line":88,"in_reply_to":"6c5aecfa_860b5002","updated":"2026-05-25 10:23:04.000000000","message":"\u003e Missing test coverage for `initiate_connection` around SASL auth failure and feature negotiation; today a `MemcachedError` is logged and execution continues. Add a test to lock down the intended behavior (fail fast or explicit status) so this path can\u0027t regress.\n\u003e \n\u003e ```python\n\u003e from unittest import mock\n\u003e \n\u003e def test_initiate_connection_auth_failure(self):\n\u003e     dcp_base \u003d DCPBase()\n\u003e     with mock.patch.object(DcpClient, \"sasl_auth_plain\", side_effect\u003dMemcachedError(\"auth failed\")):\n\u003e         with self.assertRaises(MemcachedError):\n\u003e             dcp_base.initiate_connection()\n\u003e ```\n\u003e \n\nPlease fix.","commit_id":"4e91def922816266f4018c4691df302a01fde924"},{"author":{"_account_id":1003871,"name":"Balakumaran G","email":"balakumaran.gopal@couchbase.com","username":"bkumaran","avatars":[{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/f937d3bfbbddc9c31fdfb154bf2e1bf4.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"56c8444fea3d128c887c5b417ddd87c5760ed0ed","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def handleSystemEvent(self, response, manifest):"},{"line_number":186,"context_line":"        # Unpack a DCP system event"},{"line_number":187,"context_line":"        if isinstance(response.get(\u0027key\u0027), bytes):"},{"line_number":188,"context_line":"            response[\u0027key\u0027] \u003d response[\u0027key\u0027].decode(\u0027utf-8\u0027, errors\u003d\u0027surrogateescape\u0027)"},{"line_number":189,"context_line":"        if response[\u0027event\u0027] \u003d\u003d EVENT_CREATE_COLLECTION:"},{"line_number":190,"context_line":"            if response[\u0027version\u0027] \u003d\u003d 0:"},{"line_number":191,"context_line":"                uid, sid, cid \u003d struct.unpack(\"\u003eQII\", response[\u0027value\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"f55c75ff_7471f69e","line":188,"in_reply_to":"4d832e23_1b9ffde4","updated":"2026-05-25 10:23:04.000000000","message":"\u003e Add coverage for non-UTF8 system-event keys to ensure the new surrogateescape decode path doesn\u0027t raise and still updates the manifest correctly.\n\u003e \n\u003e ```python\n\u003e import struct\n\u003e \n\u003e def test_handle_system_event_non_utf8_key(self):\n\u003e     response \u003d {\n\u003e         \"event\": EVENT_CREATE_COLLECTION,\n\u003e         \"version\": 0,\n\u003e         \"value\": struct.pack(\"\u003eQII\", 1, 2, 3),\n\u003e         \"key\": b\"\\\\xff\",\n\u003e         \"vbucket\": 0,\n\u003e         \"streamId\": 0,\n\u003e         \"by_seqno\": 1,\n\u003e     }\n\u003e     manifest \u003d {\"uid\": \"0\", \"scopes\": [{\"uid\": \"2\", \"collections\": []}]}\n\u003e     updated \u003d self.handleSystemEvent(response, manifest)\n\u003e     self.assertEqual(updated[\"uid\"], \"1\")\n\u003e ```\n\u003e \n\nPlease fix.","commit_id":"4e91def922816266f4018c4691df302a01fde924"}]}
