Task: Delete client-side feed enumeration

Table of Contents

This page documents a task in the Feed lifecycle harmonization: asset-class-agnostic feed control-plane story. It captures the goal, current status, acceptance, and any notes or results.

Goal

Clients stop re-implementing the tree-walk-and-fan-out. The Qt MarketSimulatorWindow folder branch and its per-config IR loop (with the client-side auto_start filter), and the start_synthetic_theme_feeds two-path provisioning in tenant_handler, are deleted — clients send the folder/config request and the server cascades.

Status

Field Value
State DONE
Parent story Feed lifecycle harmonization: asset-class-agnostic feed control-plane
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-08-11

Acceptance

  • MarketSimulatorWindow: starting feeds under a folder issues the folder request only; the per-config IR loop and its auto_start filter are gone. Stopping is the folder-stop request.
  • tenant_handler start_synthetic_theme_feeds issues the folder request (or per-config requests) only; the subtree walk and per-kind fan-out are gone.
  • Behaviour parity: what the two-path loops started before is started by the server cascade (verified via the QA scenarios).

Plan

The server-side folder cascade (task 9E2344CF) already covers every asset class, so both clients delete their enumeration; nothing on the server changes.

  • tenant_handler.hpp start_synthetic_theme_feeds: the dataset/config/folder resolution stays, then one folder-scoped request. The IR two-path block is deleted: the folder-hierarchy walk into subtree_folder_ids, the get_ir_curve_generation_configs listing, the auto_start filter, and the per-curve start_feed_request fan-out — plus the includes only it used (ir_curve_generation_config_protocol.hpp, ores.utility/domain/hierarchy.hpp, <unordered_set>). The function's doc comment and the request-block comment now say one folder-scoped request cascades every feed kind. A folder failure returns false immediately (previously it set ok=false and kept walking; the caller sees the same .failed step either way).
  • MarketSimulatorWindow: the folder branch of onStartFeedClicked and of the theme picker (promptThemeAndStart) issues the folder request only — the per-config IR loop with its auto_start filter is deleted from both. onStopFeedClicked stops via the folder request only when a folder is selected; the per-feed stop (stopIrCurvesAsync) runs only in the folder-less case. The per-feed path (startPairsAsync + startIrCurvesAsync) stays for Feed-leaf and folder-less selections — explicit selections still go through the kind-agnostic per-config request (task 5).
  • Behaviour parity rests on the folder cascade covering both kinds; it is verified via the folder-cascade QA scenarios (task 9E2344CF).

Notes

Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario, run through the QA Validation Runner panel) 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
     

PRs

PR Title
#1974 [iam,qt] Clients send the folder request only; the server cascades

Review

Comment summary File Decision Notes
       

Result

Both clients stopped re-implementing the tree-walk-and-fan-out; the server-side folder cascade (task 9E2344CF) is now the single start/stop path, covering every asset class.

MarketSimulatorWindow: the folder branch of onStartFeedClicked and of the theme picker (promptThemeAndStart) issue the folder request only — the per-config IR loop with its client-side auto_start filter is deleted from both. onStopFeedClicked stops via the folder-stop request when a folder is selected; the per-feed stop (stopIrCurvesAsync) runs only in the folder-less case. The per-feed path (startPairsAsync + startIrCurvesAsync) remains for Feed-leaf and folder-less selections, going through the kind-agnostic per-config request (task 5). Acceptance 1 met: folder start is the folder request only, the per-config IR loop and its auto_start filter are gone, and stopping is the folder-stop request.

tenant_handler start_synthetic_theme_feeds keeps its dataset/config/folder resolution and sends one folder-scoped request. The IR two-path block (folder-hierarchy walk into subtree_folder_ids, the get_ir_curve_generation_configs listing, the auto_start filter, and the per-curve start_feed_request fan-out) is deleted, along with the includes only it used. A folder failure returns false immediately rather than continuing the walk. Acceptance 2 met: the function issues the folder request only; the subtree walk and per-kind fan-out are gone.

Behaviour parity rests on the folder cascade covering both kinds — the cascade QA scenarios (task 9E2344CF) cover it, and the cascade's service tests (folder_cascade_starts_and_stops_both_kinds_with_per_kind_counts) still pass on this branch.

Verification: full build green (no SQL change, so no DB recreate); compass build rat green (all suites pass).

Emacs 29.3 (Org mode 9.6.15)