Task: QA Market Simulator tree Start/Stop-at-Root for merged theme datasets
Table of Contents
This page documents a task in the IR Rates synthetic data: dataset seeding, index cleanup, dual-curve, quoting conventions story. It captures the goal, current status, acceptance, and any notes or results.
Goal
Follow-up QA left open by Make a synthetic theme one atomic dataset: that task's SQL-level structural check confirmed the new one-dataset-per-theme model (one collection folder per theme, with FX/Rates asset-class sub-folders as children), but the Market Simulator Qt tree's Start/Stop-at-Root behaviour and the full "Synthetic data themes" manual test scenario were not re-verified end to end. Run that scenario against this environment's re-provisioned Barclays tenant and fix any issues the merged-theme model introduced.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | IR Rates synthetic data: dataset seeding, index cleanup, dual-curve, quoting conventions |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-07-29 |
Acceptance
- The "Synthetic data themes" manual test scenario (Test Scenario: Synthetic data themes (2016 ORE Samples / 2026 Realistic / Uniform Volatility Demo) and the Start-at-Root theme picker) is run end to end against this environment and passes.
- Starting/stopping a theme's root node in the Market Simulator tree starts/stops every asset class under it, for all three themes.
- Any regression or defect surfaced by the scenario is fixed, or explicitly filed as a follow-up task if out of scope for a same-PR fix.
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.)
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 |
|---|---|---|
| Synthetic data themes … Start-at-Root theme picker | PASSED | Re-run twice against fresh code; failed both first passes, fixed, passed clean on the third. |
PRs
| PR | Title |
|---|---|
| #1741 | [ores.qt] Fix Start-at-Root theme picker for merged synthetic themes |
Review
| # | Comment summary | File | Decision | Notes |
|---|---|---|---|---|
| 5120063524 | Claude review: no functional issues; suggested a comment clarifying why rootCollections() is re-fetched in the accepted lambda instead of reusing the outer list | MarketSimulatorWindow.cpp | Accepted | Added the clarifying comment; no other changes requested. |
Result
Ran the "Synthetic data themes" scenario end to end against a fresh
db recreate + re-provisioned Barclays tenant on a rebased-onto-main
build (picking up the start_all() coroutine fix that was otherwise
blocking every service in this environment). Confirmed structurally
via SQL first: exactly three collection folders (2016 ORE Samples,
2026 Realistic, Uniform Volatility Demo), each with one FX and one
Rates asset-class sub-folder – no duplicates, matching this story's
Make a synthetic theme one atomic dataset acceptance.
The scenario surfaced three real bugs in
MarketSimulatorWindow (projects/ores.qt/synthetic/src/MarketSimulatorWindow.cpp),
all fixed in this task:
rootCollections()only scanned direct children of the tree model's true invisible root.buildTree()nests every theme under one real "Synthetic" root folder item instead, sorootCollections()always returned empty andpromptThemeAndStart()silently no-opped – the Start-at-Root theme picker was completely unreachable. Fixed by recursing the whole tree instead of scanning one level down.- The Start toolbar action was disabled whenever nothing was selected – exactly the root case that should trigger the theme picker. Fixed by enabling Start when either something is selected or nothing is (the root case).
- The theme picker used a floating
QInputDialog. Even setQt::NonModal, it still fought this single-top-level-window MDI app for keyboard focus against sibling subwindows (the Scenario Runner a tester takes notes in). Replaced with an MDI-subwindow- embedded picker (QComboBox+QDialogButtonBoxin aDetachableMdiSubWindow), matching the pattern this window already uses for its FX/IR editors.
Also trimmed the picker's prose to a direct question per review feedback ("just ask what to start"), dropping the mutually-exclusive- vintages rationale from the dialog body.
Investigated a fourth report – Uniform Volatility Demo's IR curves
not bulk-starting from the theme picker – and confirmed via seed
data comments (synthetic_ir_curve_configs_uniform_demo_populate.sql)
and service logs that this is by design, not a bug:
auto_start = false on that dataset deliberately guards against a
real curve_feed_controller tenor-collision with 2026 Realistic
(both seed the same currency/index pairs). Left as-is; not folded
into this task's fix.
Also investigated a report that 2026 Realistic's PLN-POLONIA curve
"did not start" – backend logs confirmed it started cleanly and
published curve ticks throughout, so this was not a start failure.
Filed as a follow-up (Improve Market Simulator status icons) since the
tree's running/stopped iconography is not visually unambiguous
enough to tell at a glance, and there is no indicator at all for
auto_start = false feeds.
Acceptance met:
- "Synthetic data themes" scenario passed end to end (Start-at-Root picker appears, starts only the chosen theme, Cancel is a no-op, Stop cleans up).
- Verified Start/Stop-at-Root starts/stops every asset class under a theme for all three themes (subject to the pre-existing, by-design auto_start=false exception noted above).
- Two regressions found and fixed in this task's own commit; two further gaps (icon clarity, a broader synthetic-config-topology design question) filed as separate follow-up tasks in this story rather than folded in here.