)]}'
{"couchbase/logic/views.py":[{"author":{"_account_id":1000201,"name":"Sergey Avseyev","email":"sergey.avseyev@gmail.com","username":"avsej","avatars":[{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5b6738b33a64aa1b1792430908b064af700b86ef","unresolved":true,"context_lines":[{"line_number":62,"context_line":"            return cls.UPDATE_AFTER"},{"line_number":63,"context_line":"        raise InvalidArgumentException("},{"line_number":64,"context_line":"            message\u003d(f\"{value} is not a valid ViewScanConsistency option. \""},{"line_number":65,"context_line":"                     \"Expected str representation of type ViewScanConsistency.\"))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class ViewOrdering(Enum):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4747c869_7f1f33bd","line":65,"updated":"2026-09-01 02:45:13.000000000","message":"You made `ViewScanConsistency.from_str` strict by raising an exception for unrecognized strings, but `ViewOrdering.from_str` (line 79) and `ViewErrorMode.from_str` (line 94) still silently return defaults (`ASCENDING` and `STOP`) for unrecognized strings. For API symmetry and defensive programming, we should apply the same strict validation to all Enum string parsers, rather than leaving some lenient and others strict.\n\nSimilarly, `QueryScanConsistency` in `n1ql.py` and `SearchScanConsistency` in `search.py` also silently default to `NOT_BOUNDED` if an unrecognized string is passed. We should align on a single strategy (fail fast on invalid strings) across all builders.","commit_id":"4631c5443af466764ed4b2c9a9e6834d24f14648"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2a06be433ea32cf330a24c7c4dd7b049d36c4f40","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            return cls.UPDATE_AFTER"},{"line_number":63,"context_line":"        raise InvalidArgumentException("},{"line_number":64,"context_line":"            message\u003d(f\"{value} is not a valid ViewScanConsistency option. \""},{"line_number":65,"context_line":"                     \"Expected str representation of type ViewScanConsistency.\"))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class ViewOrdering(Enum):"}],"source_content_type":"text/x-python","patch_set":1,"id":"84f0343f_12a3009e","line":65,"in_reply_to":"4747c869_7f1f33bd","updated":"2026-09-01 20:42:50.000000000","message":"Fair point.  In the reorg that will come soon Enum handling will be cleaned up. So, this will be handled before a customer sees anything.","commit_id":"4631c5443af466764ed4b2c9a9e6834d24f14648"}],"couchbase/tests/query_params_t.py":[{"author":{"_account_id":1000201,"name":"Sergey Avseyev","email":"sergey.avseyev@gmail.com","username":"avsej","avatars":[{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5b6738b33a64aa1b1792430908b064af700b86ef","unresolved":true,"context_lines":[{"line_number":318,"context_line":"        # set_option does no verification, so the getter is where an unusable value surfaces"},{"line_number":319,"context_line":"        for option, prop in ((\u0027scan_consistency\u0027, \u0027consistency\u0027), (\u0027profile\u0027, \u0027profile\u0027)):"},{"line_number":320,"context_line":"            query \u003d N1QLQuery.create_query_object(\u0027SELECT * FROM default\u0027, QueryOptions())"},{"line_number":321,"context_line":"            query.set_option(option, 5)"},{"line_number":322,"context_line":"            with pytest.raises(InvalidArgumentException):"},{"line_number":323,"context_line":"                getattr(query, prop)"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2cfa21ff_28ecb062","line":321,"updated":"2026-09-01 02:45:13.000000000","message":"This test only checks if `InvalidArgumentException` is raised when the option is passed a non-string value (like `5`). Because of how the getter is written, passing an unrecognized string (e.g., `\"not_an_option\"`) will silently return the default instead of raising an error. If we decide to enforce strict checking for unrecognized strings, we should expand this test to also verify that `query.set_option(option, \"invalid_string\")` raises an exception.","commit_id":"4631c5443af466764ed4b2c9a9e6834d24f14648"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2a06be433ea32cf330a24c7c4dd7b049d36c4f40","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        # set_option does no verification, so the getter is where an unusable value surfaces"},{"line_number":319,"context_line":"        for option, prop in ((\u0027scan_consistency\u0027, \u0027consistency\u0027), (\u0027profile\u0027, \u0027profile\u0027)):"},{"line_number":320,"context_line":"            query \u003d N1QLQuery.create_query_object(\u0027SELECT * FROM default\u0027, QueryOptions())"},{"line_number":321,"context_line":"            query.set_option(option, 5)"},{"line_number":322,"context_line":"            with pytest.raises(InvalidArgumentException):"},{"line_number":323,"context_line":"                getattr(query, prop)"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d5c46bbb_994af8ea","line":321,"in_reply_to":"2cfa21ff_28ecb062","updated":"2026-09-01 20:42:50.000000000","message":"Fair point.  In the reorg that will come soon Enum handling will be cleaned up. So, this will be handled before a customer sees anything.","commit_id":"4631c5443af466764ed4b2c9a9e6834d24f14648"}],"couchbase/tests/search_params_t.py":[{"author":{"_account_id":1000201,"name":"Sergey Avseyev","email":"sergey.avseyev@gmail.com","username":"avsej","avatars":[{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/dd70f9d8cc5f9ee488d68e7a787ba526.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5b6738b33a64aa1b1792430908b064af700b86ef","unresolved":true,"context_lines":[{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        search_query.set_option(\u0027scan_consistency\u0027, 5)"},{"line_number":949,"context_line":"        with pytest.raises(InvalidArgumentException):"},{"line_number":950,"context_line":"            search_query.consistency"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def test_params_scope_collections(self, cb_env, base_query_opts):"},{"line_number":953,"context_line":"        q, base_opts \u003d base_query_opts"}],"source_content_type":"text/x-python","patch_set":1,"id":"47a76eb2_d655e0a8","line":950,"updated":"2026-09-01 02:45:13.000000000","message":"Nit: `ruff` (flake8-bugbear B018) flags this as a useless expression because it cannot infer it is a property. You can assign it to a dummy variable to avoid the linter warning:\n\n```suggestion\n            _ \u003d search_query.consistency\n```\n\nAlternatively, use `getattr(search_query, \"consistency\")` as done in `query_params_t.py`.","commit_id":"4631c5443af466764ed4b2c9a9e6834d24f14648"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2a06be433ea32cf330a24c7c4dd7b049d36c4f40","unresolved":false,"context_lines":[{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        search_query.set_option(\u0027scan_consistency\u0027, 5)"},{"line_number":949,"context_line":"        with pytest.raises(InvalidArgumentException):"},{"line_number":950,"context_line":"            search_query.consistency"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def test_params_scope_collections(self, cb_env, base_query_opts):"},{"line_number":953,"context_line":"        q, base_opts \u003d base_query_opts"}],"source_content_type":"text/x-python","patch_set":1,"id":"e254f447_59cc8d22","line":950,"in_reply_to":"47a76eb2_d655e0a8","updated":"2026-09-01 20:42:50.000000000","message":"Acknowledged","commit_id":"4631c5443af466764ed4b2c9a9e6834d24f14648"}]}
