Task: Build the 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

A person reaches any feed through the tree, runs a folder of feeds, and finds a feed by words, on the screen the Browse the feed tree prototype argued.

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 Synthetic folder has a Feed tree card. The tree opens a level at a time, with the feeds and the running ones counted by the service.
  • The folder that holds feeds lists them a page at a time, each with its state, Start and Stop, and a link to its page.
  • A search finds feeds by words in their label, source or URI, and a running only switch narrows the tree and the lists.
  • A feed's page has the trail Home, Market data, Synthetic, Feed tree, the folders down to the feed, and each folder opens the tree there.

4. Plan

The shape is the Browse the feed tree prototype.

  • The nodes come from two service reads. list_feed_folders (built with the overview) counts a folder's children. list_folder_feeds is new: a page of the feeds that sit in a folder, or of the feeds of every folder that match some words. One query reads both feed kinds, ordered by label; the folder id is a checked UUID and each word an escaped literal.
  • The scopes and the providers are made from the collections, as the overview makes them. A provider with one collection stands for it, so its children are the folders under the collection. The pure model is feedTree.ts.
  • The feeds are not tree nodes. The instrument type folder lists them in its panel, paged, because a folder can hold thousands.
  • A node has an address in the URL. The overview, the feed page's trail and a search result link to it.
  • Start and Stop are the overview's, in useFolderRuns, shared.

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 prototype draws feeds as leaves of the tree. Here they are rows of the panel, paged, so a folder of thousands stays light.
  • The search is a flat list of matching feeds with the folders each sits in, not a filter of the tree.
  • A feed that sits in no folder keeps the trail of its list.

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
#3221 Add the feed tree

9. Review

Comment summary File Decision Notes
       

10. Result

The Synthetic folder has a Feed tree. Its roots are System feeds and Test feeds. The tree opens a level at a time, the service counts each level, and the chosen node has its figures, Start and Stop, and the nodes under it. The folder that holds feeds lists them in its panel a page at a time, each with its state, Start and Stop, and a link to its page. A search finds feeds by words in their label, source or URI and shows where each sits, and Running only narrows the tree and the lists. A node has an address, so the overview and a feed's trail link to it. A feed's page has the trail Home, Market data, Synthetic, Feed tree, the folders down to the feed.

A new service read, synthetic.v1.ops.list_folder_feeds, pages the feeds of a folder or the feeds that match words. The folder id is a checked UUID and each word an escaped literal.

Checked: the synthetic api suite (65 cases), the BFF route tests (54), 1467 web tests, the synthetic drift gate, and, as the Acme tenant administrator, the folder reads, a page of 26 feeds, searches including an injection string and a lone percent sign, and a bad folder id, which gets a 400.

Not met: the prototype draws feeds as tree nodes and filters the tree by the search; here feeds are rows of the panel and the search is a flat list. System feeds is empty until a dataset publishes a system collection. The screens were not looked at in a browser by the author.

Emacs 29.3 (Org mode 9.6.15)