Task: Make Synthetic one screen with a dashboard and a feed tree
Table of Contents
This page documents a task in the Organise feeds by provider and scope story. It captures the goal, current status, acceptance, and any notes or results.
1. Goal
Synthetic is one screen with two tabs. The FX and IR list screens are gone.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Organise feeds by provider and scope |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-10-13 |
3. Acceptance
- The dashboard lists the providers and counts the feeds that should run
- The feed tree has a paged table with state, asset class and search filters, and start or stop by selection
- The old list screens, their cards, addresses and words are removed
4. Plan
The shape is the Browse the feed tree prototype.
marketdata/synthetic/holds the screen, the feed pages and their panels.SyntheticScreenhas the two tabs throughuseTabs, inside the synthetic record store.- The dashboard lists the providers with what each simulates and a banner for the feeds that should run. The feed tree has the providers and their folders, and a table that pages with the standard pager and filters by state, asset class and words, all in the address.
- Rows are picked, or every row the filter matches, and one Start or Stop sends the filter and the ids.
selection.tsis the pure model of a pick. - The overview, the tree, the two lists, the folder page, their cards, addresses, redirects and words are removed.
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
- The tree stops at the asset class. The instrument type is a column of the feed, not a folder.
- A guard test holds every tab to the synthetic store, because a screen outside it asks the reference data service for the folders and the providers.
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
9. Review
| # | Comment summary | File | Decision | Notes |
|---|---|---|---|---|
| 1 | An empty selection means every feed | feed_filter.cpp | Fixed | The service refuses a request that names nothing and narrows nothing. A state of all says on purpose that every feed is meant, and the screen sends it. A service test and an api test hold it. |
| 2 | feed_ids overrides the other fields | feed_filter.hpp | Fixed | The header and the model say so. |
| 3 | Start and stop need only the read | feed_selection_handler.hpp | Captured | The folder verbs check the same, so the gap is older. A backlog item asks for the write permission. |
| 4 | A null source name hides a feed from a search | feed_filter.cpp | Dismissed | The column is not null, and the label is built from not-null columns. |
| 5 | Raw exception text goes to the client | feed_selection_handler.hpp | Fixed | Both new handlers log the cause and answer with a fixed sentence. |
| 6 | State depends on a snapshot | feed_filter.hpp | Fixed | The header says why a stale answer does no harm. |
| 7 | The cap message hard-codes 2000 | feed_filter.cpp | Fixed | It is built from the constant. |
10. Result
Synthetic is one screen at /market-data/synthetic with a Dashboard and a Feed tree. A feed opens at /market-data/synthetic/fx/:id or /market-data/synthetic/ir/:id, and its page is unchanged but for its trail. The old screens and their words are gone.
Checked: 1440 web tests and 748 BFF tests, the type check, and the built screen served by the web service.
Not met: nothing in the acceptance.