Skip to content

chore(release): 0.16.0 -- brackets reach the venue, and exits name their rule - #806

Merged
eaitbrahim merged 1 commit into
mainfrom
chore/release-0.16.0
Sep 16, 2026
Merged

eaitbrahim merged 1 commit into
mainfrom
chore/release-0.16.0

Conversation

@eaitbrahim

Copy link
Copy Markdown
Contributor

Version bump only. No behaviour change in this PR.

Why MINOR and not a patch

#805 ships schema v21 (positions.rule_id). A deployment must run keel migrate on every
database before the new build trades, and the version number is the only signal an operator gets
before they read the notes. 0.15.1 was a pure bug fix and was numbered accordingly; this is not.

What lands

#804 (#802) Bracket prices quantized to the venue tick — stop up, target down. Until now every protective bracket was rejected with Too many decimals in order price, so the stop-loss and take-profit machinery had never fired on the live deployment. Nothing distinguished that from DCA's legitimate bracket-lessness.
#805 (#803) positions.rule_id, so the protective SELL exiting a tranche names its owning rule. Both exit paths build their intent from a position, so every bracket, roll and scale-out was written unattributed while its entry carried the name.

Both PRs were reviewed and both reviews found a real defect the original missed — an unpatched
second _bracket_spec call site in one, an untested inheritance line in the other. Those fixes
are included.

What moved

  • eight workspace pyproject.toml version fields, 0.15.1 → 0.16.0
  • fourteen inter-package ==0.15.1 pins → ==0.16.0 (these are what a keel versions
    PARTIAL INSTALL comes from when left behind — this deployment has hit that before)
  • uv.lock, refreshed via uv lock

Verified locally

grep -rn '0\.15\.1' pyproject.toml packages/*/pyproject.toml  -> (none)
ruff check keel tests packages                                 -> All checks passed!
ruff format --check .                                          -> 504 files already formatted
keel/templates/config.live.yaml                                -> mode: confirm
keel/data/db.py                                                -> SCHEMA_VERSION = 21
pytest tests/execution tests/data tests/test_agent.py          -> 1134 passed

After merge — the order matters

  1. Actions → Release → Run workflow, entering 0.16.0
  2. Install the five production wheels by path into ~/keel
  3. keel migrate on all four databases — new column; the ALTER is guarded and nullable, so
    it is non-destructive and idempotent, but the build should not trade before it runs
  4. Restart the four console daemons

The live deployment has a PAXG position retrying its bracket every cycle and escalating
reconcile.position_unprotected at CRITICAL. #804 is what lets that retry finally succeed.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AoGRoExgHVCsWDHT3ej8mD

…eir rule

MINOR, not a patch, because #805 ships schema v21: `positions.rule_id`. A deployment
must run `keel migrate` on every database before the new build trades, and the version
is the only signal an operator gets before reading the notes.

What lands:

  #804 (#802) -- bracket prices quantized to the venue tick, stop UP and target DOWN.
  Until now every protective bracket was rejected with "Too many decimals in order
  price", so the stop-loss and take-profit machinery had never fired on the live
  deployment at all. Nothing distinguished that from DCA's legitimate bracket-lessness.

  #805 (#803) -- `positions.rule_id`, so the protective SELL that exits a tranche names
  the rule that owns it. Both exit paths build their intent from a position, so every
  bracket, roll and scale-out was written unattributed while its entry carried the name.

Eight workspace versions and the fourteen inter-package `==` pins move together, plus the
refreshed `uv.lock` the workflow checks first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AoGRoExgHVCsWDHT3ej8mD
@eaitbrahim
eaitbrahim merged commit c86de77 into main Sep 16, 2026
4 checks passed
@eaitbrahim
eaitbrahim deleted the chore/release-0.16.0 branch September 16, 2026 21:59
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