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: floor-ratchet-splits
title: Ship the protocol floor bump separately from decoder cleanups
cluster: wire
status: historical
triggers:
  - raising the connection protobuf floor
  - IBKR ships a newly proto-gated message family
symbols: [require_protobuf_support, PROTOBUF_REST_MESSAGES_3, server_versions]
related: [fixture-migration, proto-only-decoding]
precedents: ["#527", "#529", "#530", "#531"]
memory: [project_protobuf_only, feedback_end_of_arc_doc_audit]
---

**Concluded** at floor `server_versions::PROTOBUF_REST_MESSAGES_3` (213). Kept in case IBKR
ships new gated families.

Ship the floor ratchet — the `require_protobuf_support` constant bump plus test-fixture
version sync — as its own PR, separate from the per-family decoder text-branch deletions
that follow it.

## Why

The bump is mechanical. Each cleanup is not: it needs verification against the C#
`EDecoder.cs` that the family's proto/text dispatch isn't server-version-gated *within* the
case. Dispatch keys purely on the 4-byte message-id framing, with no `if server_version >=`
guards inside the handler — confirm that per family rather than assuming it.

Mixing the two makes the mechanical change unreviewable and buries the per-family reasoning.

## Multi-gate ratchets

Skipping several gates at once (203 → 210 crosses six) is safe **only if** every family in
the skipped range already has a proto decoder in place. Verify against a per-family inventory
before bumping.

## Naming

Cite the floor as `server_versions::PROTOBUF_REST_MESSAGES_3` (213), not as a bare number.
`server_versions::PROTOBUF` is a different, lower constant (201) and is easy to reach for by
mistake.

## Precedents

- #527 → #529, #530 → #531 — the bump-then-cleanup pairs.