chore(release): 0.14.0 — the honest cockpit, and a book that can prove it was not edited - #750
Merged
Conversation
…e it was not edited Forty-eight PRs since 0.13.3. Nine console views, five engine records they were waiting on, and one thing an operator has to do before upgrading.⚠️ THIS RELEASE CARRIES A SCHEMA MIGRATION. v20 landed after 0.13.3 was cut: `orders.quote_provenance`, `orders.client_order_id`, `attest_due_ts` on both attestation tables, plus the `cycle_balances` and `audit_events` tables. Every CLI command migrates on the way in, but `keel serve` and `keel mcp` deliberately do NOT -- a view must not take a schema write lock on a database the agent may be mid-cycle on -- so run `keel migrate` per deployment database before serving. Readers tolerate a pre-v20 database and say so rather than crashing; they simply report the new fields as unrecorded until the migration runs. THE HONEST COCKPIT (#700-#708) Positions, Balances, Activity, Orders, the Research Hub's four views, session identity on every page, and an inverted Plans page. The pattern underneath all of it: a view was built against a record the engine did not keep, and the fix was always in the engine. #703's audit export said NOT RECORDED in every hash cell until #721 chained the book. #708's Evidence Matrix could not exist until #726 stopped throwing away what `trials pbo` computed. Both surfaced as "the UI cannot show this" and neither was a UI problem. WHAT THE ENGINE NOW WRITES DOWN An append-only, hash-chained record of every write to `orders`, `transactions` and the attestation tables (#721) -- so the activity export carries real hashes and a per-row verdict on whether the chain vouches for them. The quote provenance and client order id behind each placement (#715). When an attestation's window closes (#718). The per-currency balance pair a cycle observed (#719). The full CSCV, DSR and Monte Carlo artifacts a gauntlet run produces (#726), instead of printing them and exiting. TWO NEW OPERATOR SURFACES `keel journal` -- the discretionary journal, wired at last after sitting in the schema unused since the beginning. CLI-only by constitution: there is no web form, and `add` takes no value options, so the entry cannot be scripted past the terminal gate. `keel orders cancel` -- the cancel asymmetry. Cancelling an entry refuses risk and asks once; cancelling an exit or a protective bracket removes protection and takes a typed phrase that names the order. The console classifies and hands over the command; it never cancels, because `keel serve` holds no venue credential and this release does not change that. ONE BEHAVIOUR CHANGE TO KNOW ABOUT A deployment that has never attested a cash posture now sends a webhook event, if notifications are on. `attest.cash_posture` was registered for delivery and nothing produced it (#732), so rail 22 could veto every entry while the operator heard nothing -- an agent that looks healthy and never trades again. VERSION BUMP ONLY Every workspace package and the lockfile move together (#424). The release workflow is a human action in Actions; nothing here tags anything. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KZZxmspQXe5qJ9FAsG13s6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Version bump only. Thirty-seven PRs since 0.13.3.
v0.13.3shippedSCHEMA_VERSION = 16. This release is 20, so an upgraded deployment applies four steps, not one:candle_series_feed(#696)venue_cash_postures(#666)equity_points(#698)orders.quote_provenance,orders.client_order_id,attest_due_tson both attestation tables,cycle_balances,audit_events(#721)keel servemigrates for you, once, at bind time (server.ensure_schema) — a missing database is left alone as a first run. What it deliberately does not do is migrate per request: the pages auto-reload every 15 seconds, and a view calling itself read-only must not take a schema write lock on a database the agent may be mid-cycle on, four times a minute.keel mcpdoes not migrate at all (keel/mcp/tools.py), and against a database still at v16–v17 itsdoctortool raisessqlite3.OperationalError: no such table: venue_cash_posturesrather than reporting the gap. Only the audit chain carries atable_presentguard; the cash-posture and equity readers do not. Tracked in #751 — runkeel migratebefore pointing an MCP client at an upgraded deployment.The honest cockpit (#700–#708)
Positions, Balances, Activity, Orders, the Research Hub's four views, session identity on every page, and an inverted Plans page.
The pattern underneath all of it: a view was built against a record the engine didn't keep, and the fix was always in the engine. #703's audit export said
NOT RECORDEDin every hash cell until #721 chained the book. #708's Evidence Matrix couldn't exist until #726 stopped throwing away whattrials pbocomputed.What the engine now writes down
orders,transactionsand the attestation tables ([engine] Append-only SHA-256 hash chaining for orders, transactions and attestations #721) — the activity export carries real hashes and a per-row verdict on whether the chain vouches for themTwo new operator surfaces
keel journal— the discretionary journal, wired at last after sitting in the schema unused since the beginning. CLI-only by constitution: no web form, andaddtakes no value options, so an entry can't be scripted past the terminal gate.keel orders cancel— the cancel asymmetry. Cancelling an entry refuses risk and asks once; cancelling an exit or protective bracket removes protection and takes a typed phrase naming the order. The console classifies and hands over the command; it never cancels, becausekeel serveholds no venue credential and this release doesn't change that.One behaviour change to know about
A deployment that has never attested a cash posture now sends a webhook event, if notifications are on.
attest.cash_posturewas registered for delivery and nothing produced it (#732) — so rail 22 could veto every entry while the operator heard nothing.Checks
pyproject.tomland all seven workspace packages moved together,uv.lockrefreshed (#424). 6,305 passed / 3 skipped; ruff clean apart from a pre-existingE501indocs/experiments/.After merge: Actions → Release → Run workflow, entering
0.14.0.🤖 Generated with Claude Code
https://claude.ai/code/session_01KZZxmspQXe5qJ9FAsG13s6