Release v0.10.31
April 26, 2026 Enriched
v0.10.31
Date: 2026-04-26
Changes: v0.10.30…v0.10.31
Summary
This release introduces a dedicated Flow tab built around a sleeve-level Sankey diagram, with start/end value labels, gain/loss deltas, sleeve name tags, and period attribution panels on hover. The cashflow simulator gains a sensitivity explorer alongside per-year market return overrides, annual Roth contribution and years-working inputs, an additional retirement savings field, taxable-account tooltips, and refreshed defaults. A new KEEP research agent skeleton lands as a CLI harness with one chain and three tools. The portfolio surface picks up snapshot delta indicators with dollar change, a gain/loss column on sleeve rows in the Structure tab, sleeve value history charts with transaction markers and a top-holdings overlay, and a Purchase Price column in the Portfolio detail table.
Notable Changes
- Flow tab with sleeve Sankey: A dedicated full-width Flow tab hosts a sleeve-level Sankey with start/end value labels, sleeve name tags, gain/loss deltas, and period attribution hover panels, presented in the neobrutalist visual style.
- Cashflow simulator — sensitivity explorer: The simulator adds a sensitivity explorer with refined metrics, per-year market return overrides, annual Roth contribution and years-working inputs, an additional retirement savings field, taxable-account tooltips, and a friends DB script for default seeding.
- Sleeve value history charts: Each sleeve now has its own value history chart with transaction markers and a top-holdings overlay; a fix addresses charts not rendering after tab switches due to stale canvas refs.
- Snapshot delta indicators: Portfolio rows now show snapshot delta indicators including dollar change, and the Structure tab adds a gain/loss column on sleeve rows.
- KEEP research agent skeleton: A CLI harness lands with one chain (research_symbol) and three tools, providing the foundation for an agentic research loop.
Features
- feat: add start/end value labels, sleeve name tags, and gain/loss deltas to Sankey
- feat: move Sankey to dedicated Flow tab with full-width layout and neobrutalist styling
- feat: add sleeve Sankey diagram with period attribution hover panels
- feat: add gain/loss column to sleeve rows in Structure tab
- feat: add dollar change to snapshot delta indicators
- feat: add snapshot delta indicators to portfolio rows
- feat: add taxable-account tooltips and update cashflow defaults
- feat: add sleeve value history charts with transaction markers and top holdings overlay
- feat: add additional retirement savings field and update defaults
- feat: refine sensitivity explorer metrics and fix fractional years bug
- feat: add sensitivity explorer to cashflow simulator
- feat: add years working and annual Roth contribution to cashflow simulator
- feat: add annual income, external defaults, and friends DB script to cashflow simulator
- feat: add per-year market return override to cash flow simulator
- feat: add KEEP research agent skeleton — 1 chain, 3 tools, CLI harness
- feat: add Purchase Price column to Portfolio detail table
Fixes
- fix: sleeve charts not rendering on tab switch due to stale canvas refs
- fix: make Roth contributions monthly outflows and fix yearsWorking=0 semantics
- fix: transaction flag tooltip clipping and chart cache staleness
- fix: use explicit rsync-path and IdentitiesOnly for Synology NAS publish
Other
- readme updates
- docs: add AppSumo investigation to roadmap
- docs: add ideal customer profile (ICP) for KEEP
- docs: add operations docs for release checklist and promote workflow
- add release notes for v0.10.30
Files Changed
.gitignore | 4 +
Claude.md | 1 +
README.md | 48 +-
agent/__init__.py | 0
agent/chains/__init__.py | 0
agent/chains/research_symbol.py | 71 ++
agent/config.example.json | 6 +
agent/config.py | 44 ++
agent/contracts/__init__.py | 0
agent/contracts/block.py | 21 +
agent/contracts/command.py | 15 +
agent/contracts/tool.py | 16 +
agent/main.py | 213 ++++++
agent/runner/__init__.py | 0
agent/runner/chain_runner.py | 62 ++
agent/runner/types.py | 41 +
agent/sessions/__init__.py | 0
agent/sessions/session_store.py | 30 +
agent/tools/__init__.py | 0
agent/tools/portfolio.py | 61 ++
agent/tools/symbol.py | 113 +++
apps/cashflow/README.md | 111 +++
apps/cashflow/defaults.js | 22 +
apps/cashflow/index.html | 998 +++++++++++++++++++++++++
apps/desktop/index.html | 2 +-
apps/desktop/package-lock.json | 461 +++++++++++-
apps/desktop/package.json | 4 +-
apps/desktop/src-tauri/Cargo.toml | 2 +-
apps/desktop/src-tauri/src/commands/sleeves.rs | 149 ++++
apps/desktop/src-tauri/src/lib.rs | 3 +
apps/desktop/src-tauri/tauri.conf.json | 6 +-
apps/desktop/src/App.jsx | 674 ++++++++++++++++-
apps/desktop/src/SleeveSankey.jsx | 816 ++++++++++++++++++++
apps/desktop/src/app.css | 105 ++-
bin/release | 2 +
core/src/export/portfolio.rs | 36 +-
docs/branding-keep/icp.md | 128 ++++
docs/keep-research-agent.md | 546 ++++++++++++++
docs/keep-terminal-ui-reference.png | Bin 0 -> 187970 bytes
docs/operations/keep-release-checklist.md | 41 +
docs/operations/promote-keep-release.md | 39 +
docs/purchase-price-feature.md | 69 ++
docs/tauri-evolution.md | 1 +
pyproject.toml | 6 +
release-notes/20260302-v0.10.30.enriched.md | 71 ++
release-notes/20260302-v0.10.30.md | 66 ++
scripts/build_friends_db.py | 674 +++++++++++++++++
uv.lock | 168 +++++
48 files changed, 5875 insertions(+), 71 deletions(-)
Artifacts
| Platform | Artifact | Status |
|---|---|---|
| macOS | KEEP-v0.10.31-macos-universal.zip | pending |
| Linux | KEEP-v0.10.31-linux-amd64.AppImage | pending |
| Linux | KEEP-v0.10.31-linux-amd64.deb | pending |
| Windows | KEEP-v0.10.31-windows-x64.msi | pending |
Raw Commits (source of truth)
- f76d203 release: v0.10.31
- 36a1563 feat: add start/end value labels, sleeve name tags, and gain/loss deltas to Sankey
- cf8d86b feat: move Sankey to dedicated Flow tab with full-width layout and neobrutalist styling
- 1a989c9 feat: add sleeve Sankey diagram with period attribution hover panels
- d79b6f6 feat: add gain/loss column to sleeve rows in Structure tab
- c6bc2c6 feat: add dollar change to snapshot delta indicators
- 48fd63a feat: add snapshot delta indicators to portfolio rows
- 6e3e4e4 feat: add taxable-account tooltips and update cashflow defaults
- b6e6b84 readme updates
- 9fcb117 fix: sleeve charts not rendering on tab switch due to stale canvas refs
- 84c3f5c feat: add sleeve value history charts with transaction markers and top holdings overlay
- fdf5b2f feat: add additional retirement savings field and update defaults
- f38d1b3 feat: refine sensitivity explorer metrics and fix fractional years bug
- fa810aa feat: add sensitivity explorer to cashflow simulator
- bc1af51 fix: make Roth contributions monthly outflows and fix yearsWorking=0 semantics
- 5d6c270 feat: add years working and annual Roth contribution to cashflow simulator
- 9c64ffd feat: add annual income, external defaults, and friends DB script to cashflow simulator
- f68fd25 feat: add per-year market return override to cash flow simulator
- 62f1890 feat: add KEEP research agent skeleton — 1 chain, 3 tools, CLI harness
- 93c0918 docs: add AppSumo investigation to roadmap
- 64ea6e0 feat: add Purchase Price column to Portfolio detail table
- baf8da3 docs: add ideal customer profile (ICP) for KEEP
- 72c32d1 docs: add operations docs for release checklist and promote workflow
- 2ca13d2 fix: transaction flag tooltip clipping and chart cache staleness
- b4e1bf4 add release notes for v0.10.30
- f2b87f3 fix: use explicit rsync-path and IdentitiesOnly for Synology NAS publish