Skip to content

Post-merge fixes for bucket_list (PR #285) #287

@drernie

Description

@drernie

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions