Skip to content

fix(client): move backend e2e out of the client crate; provision CI backends - #20

Merged
hortovanyi merged 2 commits into
mainfrom
fix/client-storage-deps-and-ci-backends
Aug 16, 2026
Merged

fix(client): move backend e2e out of the client crate; provision CI backends#20
hortovanyi merged 2 commits into
mainfrom
fix/client-storage-deps-and-ci-backends

Conversation

@hortovanyi

Copy link
Copy Markdown
Contributor

Why

Two problems with one root cause, both surfaced by the red CI on main.

turul-mcp-client dev-depended on Postgres and DynamoDB drivers. The
four-backend Tasks e2e added in 0.4.4 was written into
crates/turul-mcp-client/tests/, pulling sqlx, aws-config,
aws-sdk-dynamodb and turul-mcp-ext-tasks's sqlite/postgres/dynamodb
features into an MCP client library's graph. It also coupled cargo publish -p turul-mcp-client to turul-mcp-ext-tasks having already published those
features — which is exactly how the 0.4.1 client dry-run failed.

CI ran that suite with no backends running. The suite panics rather than
skips when a store is unreachable — deliberate, so a silent skip can't report
green — so with neither service present it could only fail.

What changed

  • Suite moved to tests-ext-tasks/, a publish = false crate. Separate from
    tests/ because that crate pins the 2025-11-25 lane throughout and the two
    protocol features are mutually exclusive.
  • CI provisions PostgreSQL and DynamoDB Local without docker, the same way
    scripts/ext-tasks-backends.sh does locally.
  • The Postgres URL default hardcoded one developer's unix username
    (postgres://nick@…) in two places, so it connected on exactly one machine.
    No default now — derived once, by the script that starts the server.
  • scripts/ci-gates.sh no longer runs the suite bare; only the backends script,
    which provisions first, does.

Caught before commit

The moved file kept a #![cfg(feature = "ext-tasks", …)] guard naming the
client's features. In its new home those don't exist, so the whole file
compiled away and reported a green run of zero tests — the precise failure mode
this gate exists to prevent. The guard is gone; the manifest enables what the
suite needs unconditionally.

Verification

Dependency removal proven by absence rather than by reading the manifest:

cargo tree -p turul-mcp-client --edges dev -i sqlx
error: package ID specification `sqlx` did not match any packages

Same for aws-sdk-dynamodb.

  • ./scripts/ext-tasks-backends.sh — ALL TASK BACKENDS PASSED (all four)
  • ./scripts/ci-gates.sh — 132 pass / 0 fail, ALL GATES PASSED
  • conformance — 37/37 scored
  • cargo test -p turul-mcp-client — 205 pass

No shipped code changed, so no crate version bump: the only non-test edit is
inside #[cfg(test)] mod conformance.

🤖 Generated with Claude Code

…ackends

The four-backend Tasks e2e lived in crates/turul-mcp-client/tests/, which put
sqlx, aws-config, aws-sdk-dynamodb and ext-tasks' storage features into an MCP
client library's dependency graph, and coupled `cargo publish -p
turul-mcp-client` to ext-tasks having already published them.

Moved to tests-ext-tasks/ (publish = false). Separate from tests/ because that
crate pins the 2025-11-25 lane and the protocol features are exclusive.

Also fixed, all found by the red CI run:
- CI ran the suite with neither Postgres nor DynamoDB started; it panics rather
  than skips by design, so it could only fail. Both are now provisioned without
  docker, matching scripts/ext-tasks-backends.sh.
- The Postgres URL default hardcoded a developer's unix username in two places.
  No default now; derived once by the provisioning script.
- The moved file's #![cfg(feature = ...)] named the client's features, so in its
  new home it compiled away and reported zero tests as green.

No shipped code changed. Gates: 132 pass / 0 fail, conformance 37/37 scored.
… gates the drivers

The in-memory store is unconditional. Listing it as a feature alongside
sqlite/postgres/dynamodb implied a dependent must opt in to get a store, and
obscured the point that the three durable features are the only thing that
pulls sqlx or the AWS SDK. Same correction applied to the v0.4.4 release notes.
@hortovanyi
hortovanyi merged commit a2c4ec7 into main Aug 16, 2026
10 checks passed
@hortovanyi
hortovanyi deleted the fix/client-storage-deps-and-ci-backends branch August 16, 2026 00:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant