Task: Answer the rail from one grouped read

Table of Contents

This page documents a task in the Let the blotter read a page, not the book story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

(Describe what user-visible-or-internal change this task produces.)

2. Status

Field Value
State DONE
Parent story Let the blotter read a page, not the book
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-11-01

3. Acceptance

4. Plan

(Implementation strategy. Written when work starts; key decisions are distilled into the parent story's * Decisions at close, but the plan itself stays — it is the historical record of what we did.)

5. Measurements

Every number this task claims about a tree, with the command that produced it and the commit it was measured at. A number without both is not a measurement, because a clean-up record describes a tree and trunk moves under a branch: a consumer count, a gate's component count and a suite's size all change with no code changing, and the reader of a bare number cannot tell which tree it came from. Where the raw output matters, put it in an evidence/ file beside the task and name that file in the Command column.

What Value Command Commit
       

6. Notes

7. Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario) that verify this task. Link new ones here as they're created; the scenario doc itself links back via its "Verifies task" field.

Scenario State Notes
     

8. PRs

PR Title
[#4403](https://github.com/OreStudio/OreStudio/pull/4403) [trading] Answer the blotter's two questions with two reads

9. Review

Comment summary File Decision Notes
       

10. Result

The rail is answered by one grouped read. count_blotter_rail groups ores_trading_trade_summaries_vw by the dimension the request names, under the same filter the page takes, and trading.v1.blotter.rail returns one node per group with its count. The portfolios a book sits under are rolled up from the grouped rows, not from the trades.

Merged on main in #4403 at b903acb4. The six [rail] cases in trading/core/tests/blotter_rail_tests.cpp cover the book counts, the portfolio subtree, the filter the page honours, a list of values, a search, and the refusal of a dimension the rail does not have.

The store behind the rail is still the union view. This task gave the rail the right shape; making it cheap is List a package as the trade it is and Order the page by an indexed key.

Emacs 29.3 (Org mode 9.6.15)