Overview
Copilot review of PR #285 (submitted after merge) identified several issues in the bucket_list implementation.
Critical Fixes
1. Validate bucket name is present
File: src/quilt_mcp/tools/buckets.py
Currently defaults to empty string: bucket_data.get("name", "") - this silently creates invalid BucketConfig entries where name is required.
Fix: Validate name is present/non-empty, return BucketListError if missing.
2. Handle GraphQL errors explicitly
File: src/quilt_mcp/tools/buckets.py
Currently ignores result.get("errors") and treats error responses as successful empty lists.
Fix: Check for "errors" in result after execute_graphql_query(), return BucketListError with server messages.
Important Fixes
3. Fix camelCase inconsistency
File: src/quilt_mcp/tools/responses.py
BucketConfig uses camelCase (iconUrl, relevanceScore) while all other response models use snake_case.
Fix: Rename to icon_url / relevance_score (use Pydantic alias= if needed for GraphQL compatibility).
4. Update test expectations for GraphQL errors
Files:
tests/unit/tools/test_buckets.py:347
tests/func/test_bucket_list_func.py:219
Tests expect success=True when GraphQL returns errors. Should expect BucketListError instead.
Medium Priority
5. Fix boolean precedence bug in test-runner
File: scripts/test-runner.py:558
is_actual_error logic: ... or "FAILED" in line_clean has wrong precedence, captures FAILED lines even when excluded.
6. Relax E2E optional field assertions
File: tests/e2e/tools/test_bucket_list_e2e.py:98
Enforces non-null for optional fields (title, relevanceScore, browsable) - may cause flaky failures.
Low Priority
7. Include security tests in CI
File: tests/security/test_bucket_list_auth.py
Security tests not run by make test-ci (only runs unit/func/e2e).
Priority: Critical fixes (#1, #2) should be addressed immediately. Important fixes (#3, #4) should be included in the same PR.
Overview
Copilot review of PR #285 (submitted after merge) identified several issues in the
bucket_listimplementation.Critical Fixes
1. Validate bucket name is present
File:
src/quilt_mcp/tools/buckets.pyCurrently defaults to empty string:
bucket_data.get("name", "")- this silently creates invalid BucketConfig entries where name is required.Fix: Validate name is present/non-empty, return
BucketListErrorif missing.2. Handle GraphQL errors explicitly
File:
src/quilt_mcp/tools/buckets.pyCurrently ignores
result.get("errors")and treats error responses as successful empty lists.Fix: Check for
"errors" in resultafterexecute_graphql_query(), returnBucketListErrorwith server messages.Important Fixes
3. Fix camelCase inconsistency
File:
src/quilt_mcp/tools/responses.pyBucketConfiguses camelCase (iconUrl,relevanceScore) while all other response models use snake_case.Fix: Rename to
icon_url/relevance_score(use Pydanticalias=if needed for GraphQL compatibility).4. Update test expectations for GraphQL errors
Files:
tests/unit/tools/test_buckets.py:347tests/func/test_bucket_list_func.py:219Tests expect
success=Truewhen GraphQL returns errors. Should expectBucketListErrorinstead.Medium Priority
5. Fix boolean precedence bug in test-runner
File:
scripts/test-runner.py:558is_actual_errorlogic:... or "FAILED" in line_cleanhas wrong precedence, captures FAILED lines even when excluded.6. Relax E2E optional field assertions
File:
tests/e2e/tools/test_bucket_list_e2e.py:98Enforces non-null for optional fields (
title,relevanceScore,browsable) - may cause flaky failures.Low Priority
7. Include security tests in CI
File:
tests/security/test_bucket_list_auth.pySecurity tests not run by
make test-ci(only runs unit/func/e2e).Priority: Critical fixes (#1, #2) should be addressed immediately. Important fixes (#3, #4) should be included in the same PR.