From 13020a552aa0fd0e45b4edf83f8f8c7bd28654fd Mon Sep 17 00:00:00 2001 From: Elmehdi Aitbrahim Date: Sat, 22 Aug 2026 20:29:27 -0400 Subject: [PATCH] chore(release): 0.11.2 -- the SELL half of the size-precision fix Bumps keel-trader and the seven workspace packages from 0.11.1 to 0.11.2, plus the '==' sibling pins and uv.lock. Ships #516/#517: SELL base_size and the protective bracket legs are now quantized to the venue's increment, completing what 0.11.1 fixed for BUY only. Patch, not minor -- no interface changed. Behaviour differs only in that an exit carrying a non-round quantity now serialises a value the venue accepts, and an unknown increment still sends unquantized rather than refusing, because refusing a SELL strands a position. All eight distributions move as one set; 'keel versions' exits non-zero when they disagree and tests/test_packaging.py pins the sibling '==' constraints, which is how the 0.11.1 bump caught itself half-finished. Gates: pytest 4498 passed / 3 skipped; ruff check keel tests packages clean; mypy clean across 352 files; 'keel versions' reports 8 distributions all at 0.11.2. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01NyeggYtojNXCTHeD3JHxb6 --- packages/keel-broker-alpaca/pyproject.toml | 4 ++-- packages/keel-broker-api/pyproject.toml | 4 ++-- packages/keel-broker-coinbase/pyproject.toml | 4 ++-- packages/keel-broker-fake/pyproject.toml | 4 ++-- packages/keel-broker-kraken/pyproject.toml | 4 ++-- packages/keel-broker-robinhood/pyproject.toml | 4 ++-- packages/keel-core/pyproject.toml | 2 +- pyproject.toml | 8 ++++---- uv.lock | 16 ++++++++-------- 9 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/keel-broker-alpaca/pyproject.toml b/packages/keel-broker-alpaca/pyproject.toml index da9e934..a394bbb 100644 --- a/packages/keel-broker-alpaca/pyproject.toml +++ b/packages/keel-broker-alpaca/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "keel-broker-alpaca" -version = "0.11.1" +version = "0.11.2" description = "Alpaca Trading API adapter for keel (US equities, cash account)" license = "Apache-2.0" requires-python = ">=3.11" @@ -9,7 +9,7 @@ requires-python = ">=3.11" # deliberately NO `alpaca-py` SDK: Alpaca's Trading + Market Data APIs are plain # JSON-over-HTTPS with two header credentials, so the SDK would add a version-churning # dependency for nothing the port needs. -dependencies = ["keel-core==0.11.1", "keel-broker-api==0.11.1", "requests>=2.32.0"] +dependencies = ["keel-core==0.11.2", "keel-broker-api==0.11.2", "requests>=2.32.0"] [project.entry-points."keel.brokers"] alpaca = "keel_broker_alpaca:AlpacaAdapter" diff --git a/packages/keel-broker-api/pyproject.toml b/packages/keel-broker-api/pyproject.toml index d2aa6e7..093181d 100644 --- a/packages/keel-broker-api/pyproject.toml +++ b/packages/keel-broker-api/pyproject.toml @@ -1,12 +1,12 @@ [project] name = "keel-broker-api" -version = "0.11.1" +version = "0.11.2" description = "Broker port, domain types, capability model, and conformance suite for keel" license = "Apache-2.0" requires-python = ">=3.11" # Pinned `==`: see the note in the root `pyproject.toml`. An unpinned sibling is satisfied by # whatever is already installed, which is how a deployment ends up running mixed versions. -dependencies = ["keel-core==0.11.1"] +dependencies = ["keel-core==0.11.2"] [project.optional-dependencies] conformance = ["pytest>=9.1.1"] diff --git a/packages/keel-broker-coinbase/pyproject.toml b/packages/keel-broker-coinbase/pyproject.toml index 7daa0b2..8d91b10 100644 --- a/packages/keel-broker-coinbase/pyproject.toml +++ b/packages/keel-broker-coinbase/pyproject.toml @@ -1,12 +1,12 @@ [project] name = "keel-broker-coinbase" -version = "0.11.1" +version = "0.11.2" description = "Coinbase Advanced Trade adapter for keel" license = "Apache-2.0" requires-python = ">=3.11" # Siblings pinned `==` (see the root `pyproject.toml`); the third-party SDK is not, because it # has its own release cycle and is not cut from this repo. -dependencies = ["keel-core==0.11.1", "keel-broker-api==0.11.1", "coinbase-advanced-py>=1.8.4"] +dependencies = ["keel-core==0.11.2", "keel-broker-api==0.11.2", "coinbase-advanced-py>=1.8.4"] [project.entry-points."keel.brokers"] coinbase = "keel_broker_coinbase:CoinbaseAdapter" diff --git a/packages/keel-broker-fake/pyproject.toml b/packages/keel-broker-fake/pyproject.toml index 7d8792e..8fc9717 100644 --- a/packages/keel-broker-fake/pyproject.toml +++ b/packages/keel-broker-fake/pyproject.toml @@ -1,11 +1,11 @@ [project] name = "keel-broker-fake" -version = "0.11.1" +version = "0.11.2" description = "A deliberately divergent second broker adapter, to keep the port honest" license = "Apache-2.0" requires-python = ">=3.11" # Pinned `==`: see the note in the root `pyproject.toml`. -dependencies = ["keel-core==0.11.1", "keel-broker-api==0.11.1"] +dependencies = ["keel-core==0.11.2", "keel-broker-api==0.11.2"] [project.entry-points."keel.brokers"] fake = "keel_broker_fake:FakeAdapter" diff --git a/packages/keel-broker-kraken/pyproject.toml b/packages/keel-broker-kraken/pyproject.toml index e65fcfa..61adc39 100644 --- a/packages/keel-broker-kraken/pyproject.toml +++ b/packages/keel-broker-kraken/pyproject.toml @@ -1,13 +1,13 @@ [project] name = "keel-broker-kraken" -version = "0.11.1" +version = "0.11.2" description = "Kraken adapter for keel (port-complete stub; every data/market method raises)" license = "Apache-2.0" requires-python = ">=3.11" # Siblings pinned `==` (see the root `pyproject.toml`). There is deliberately NO third-party # dependency: this package is a stub (#313) that handles no keys and makes no network calls, # so a Kraken SDK (and its credentials) arrive with the real implementation, not before it. -dependencies = ["keel-core==0.11.1", "keel-broker-api==0.11.1"] +dependencies = ["keel-core==0.11.2", "keel-broker-api==0.11.2"] [project.entry-points."keel.brokers"] kraken = "keel_broker_kraken:KrakenAdapter" diff --git a/packages/keel-broker-robinhood/pyproject.toml b/packages/keel-broker-robinhood/pyproject.toml index a7268fa..1bbaeb5 100644 --- a/packages/keel-broker-robinhood/pyproject.toml +++ b/packages/keel-broker-robinhood/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "keel-broker-robinhood" -version = "0.11.1" +version = "0.11.2" description = "Robinhood Crypto Trading API v2 adapter for keel" license = "Apache-2.0" requires-python = ">=3.11" @@ -8,7 +8,7 @@ requires-python = ">=3.11" # Ed25519 key, which no other venue keel talks to requires. Keeping it a dependency of this # package alone means an engine that never installs this adapter never installs the crypto stack # either -- the whole point of adapters being separate distributions. -dependencies = ["keel-core==0.11.1", "keel-broker-api==0.11.1", "pynacl>=1.5.0", "requests>=2.32.0"] +dependencies = ["keel-core==0.11.2", "keel-broker-api==0.11.2", "pynacl>=1.5.0", "requests>=2.32.0"] [project.entry-points."keel.brokers"] robinhood = "keel_broker_robinhood:RobinhoodAdapter" diff --git a/packages/keel-core/pyproject.toml b/packages/keel-core/pyproject.toml index 02c5ae7..ed35456 100644 --- a/packages/keel-core/pyproject.toml +++ b/packages/keel-core/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "keel-core" -version = "0.11.1" +version = "0.11.2" description = "Shared domain types, configuration, and logging for keel" license = "Apache-2.0" requires-python = ">=3.11" diff --git a/pyproject.toml b/pyproject.toml index d2f89e6..5e00242 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "keel-trader" -version = "0.11.1" +version = "0.11.2" description = "Offline-first, broker-agnostic, rule-based spot-trading agent (halal policy by default)" license = "Apache-2.0" readme = "README.md" @@ -23,11 +23,11 @@ dependencies = [ # in one build, so `==` states a fact rather than guessing at compatibility. The cost is that # a version bump must move these numbers too -- the bump already edits every package's # `version`, and `tests/test_packaging.py` fails the build if a pin is left behind. - "keel-core==0.11.1", - "keel-broker-api==0.11.1", + "keel-core==0.11.2", + "keel-broker-api==0.11.2", # keel/cli.py and keel/data/cb_client.py still import the Coinbase SDK directly; depending # on the adapter keeps it available transitively. Phase B deletes those imports and this. - "keel-broker-coinbase==0.11.1", + "keel-broker-coinbase==0.11.2", ] [project.scripts] diff --git a/uv.lock b/uv.lock index 1a78350..864c6cc 100644 --- a/uv.lock +++ b/uv.lock @@ -637,7 +637,7 @@ wheels = [ [[package]] name = "keel-broker-alpaca" -version = "0.11.1" +version = "0.11.2" source = { editable = "packages/keel-broker-alpaca" } dependencies = [ { name = "keel-broker-api" }, @@ -654,7 +654,7 @@ requires-dist = [ [[package]] name = "keel-broker-api" -version = "0.11.1" +version = "0.11.2" source = { editable = "packages/keel-broker-api" } dependencies = [ { name = "keel-core" }, @@ -674,7 +674,7 @@ provides-extras = ["conformance"] [[package]] name = "keel-broker-coinbase" -version = "0.11.1" +version = "0.11.2" source = { editable = "packages/keel-broker-coinbase" } dependencies = [ { name = "coinbase-advanced-py" }, @@ -691,7 +691,7 @@ requires-dist = [ [[package]] name = "keel-broker-fake" -version = "0.11.1" +version = "0.11.2" source = { editable = "packages/keel-broker-fake" } dependencies = [ { name = "keel-broker-api" }, @@ -706,7 +706,7 @@ requires-dist = [ [[package]] name = "keel-broker-kraken" -version = "0.11.1" +version = "0.11.2" source = { editable = "packages/keel-broker-kraken" } dependencies = [ { name = "keel-broker-api" }, @@ -721,7 +721,7 @@ requires-dist = [ [[package]] name = "keel-broker-robinhood" -version = "0.11.1" +version = "0.11.2" source = { editable = "packages/keel-broker-robinhood" } dependencies = [ { name = "keel-broker-api" }, @@ -740,7 +740,7 @@ requires-dist = [ [[package]] name = "keel-core" -version = "0.11.1" +version = "0.11.2" source = { editable = "packages/keel-core" } dependencies = [ { name = "keyring" }, @@ -757,7 +757,7 @@ requires-dist = [ [[package]] name = "keel-trader" -version = "0.11.1" +version = "0.11.2" source = { editable = "." } dependencies = [ { name = "click" },