ibapi 4.1.0

A Rust implementation of the Interactive Brokers TWS API, providing a reliable and user friendly interface for TWS and IB Gateway. Designed with a focus on simplicity and performance.
Documentation
---
id: integration-crate-builds
title: Build the integration crates when a change touches a wire surface
cluster: workflow
status: active
triggers:
  - changing Subscription, a proto encoder or decoder, or a public API shape
  - adding a compile-time restriction to a public type
  - wondering why cargo clippy --all-targets missed a broken call
symbols: [ibapi-integration-sync, ibapi-integration-async, ibapi-test, default-members]
related: [pre-pr-checks, restrict-after-callers, proto-only-decoding]
precedents: ["#593"]
memory: [feedback_minimal_test_helper_deps, feedback_integration_test_tws_encoding]
---

The `integration/` crates — `ibapi-integration-sync`, `ibapi-integration-async`, and the
`ibapi-test` helper — are workspace members but **not** in `default-members`, which is `["."]`.
Plain `cargo build` / `cargo test` / `cargo clippy --all-targets` skip them entirely, and so
does CI.

When a change touches `Subscription`, the proto encoders or decoders, a public API shape, or
anything else wire-adjacent, also run:

```bash
cargo build -p ibapi-integration-sync  --tests
cargo build -p ibapi-integration-async --tests
cargo clippy -p ibapi-integration-sync  --tests -- -D warnings
cargo clippy -p ibapi-integration-async --tests -- -D warnings
```

Compilation is the contract here — no live gateway is needed for this check.

## Why

These crates are the largest body of real calling code in the repo, and they are invisible to
every automated gate. A signature change that compiles against `src/` and its unit tests can
still break every integration test, and nothing will say so until someone runs them against a
gateway — which happens far less often than merging.

The exposure is worst for changes that are *deliberately* caller-breaking: a `#[must_use]`, a
removed field, a narrowed visibility. Those are exactly the PRs whose diff looks complete
because `cargo clippy --all-targets` is green.

## Precedents

- #593 — `#[must_use]` on 31 builders and 8 subscription types. Nine callsites had to gain an
  explicit `let _ = ...`; **eight of the nine were integration-test cleanup paths**, reachable
  only through `-p ibapi-integration-*`.