Story: Portfolio explorer

Table of Contents

This page documents a story in Sprint 13. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

Goal

Combine portfolios + books + trades into one navigable tree-and-table view scoped to the session party.

Status

Field Value
State DONE
Parent sprint Sprint 13
Now Completed 2026-02-25.
Waiting on None.
Next None.
Last touched 2026-02-25

Acceptance

  • PortfolioBookTreeMdiWindow with horizontal splitter (tree left, trade table right).
  • Distinct icons for real / virtual portfolios and trading / banking books.
  • Selecting a node filters trades to that subtree.
  • Breadcrumb shows the path.
  • Trade counts aggregate up.
  • Settings + splitter state persist; stale indicators on changes.
  • Trade protocol gains book_id + portfolio_id filters with recursive CTE; protocol 43.0.

Tasks

Task State Start End Description
Add portfolio explorer DONE 2026-05-20 2026-02-25 PortfolioBookTreeMdiWindow: hierarchical tree of portfolios + books for the session party; trade table on the right filtered by selection; breadcrumb path; trade count aggregation; UI settings persist (incl. splitter); stale indicators on book/portfolio/trade events; trade protocol gains optional book_id + portfolio_id filters with recursive CTE for subtrees; protocol 43.0; EntityListMdiWindow::initializeTableSettings grows optional QSplitter param; book_changed_event + portfolio_changed_event.

Decisions

Tree + filtered table, not two windows
navigation flow is inherently pick a node, see its trades.
Recursive CTE for subtree filtering
cheaper than client-side filtering and matches RLS semantics.

Out of scope

  • Direct trade editing from the explorer.

See also

Emacs 29.1 (Org mode 9.6.6)