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. SyntheticScreen has the two tabs through useTabs, 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.ts is 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

PR Title
#3244 [web] Open the feed tree on its providers
#3242 [agile] Keep one Result heading on the Synthetic tasks
#3239 [synthetic,web] Make Synthetic one screen with a dashboard and a feed tree

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.

Emacs 29.3 (Org mode 9.6.15)