Task: Qt config UI for synthetic market data generation configs

Table of Contents

This page documents a task in the Synthetic generation configuration and config-driven feeds story. It captures the goal, current status, acceptance, and any notes or results.

Goal

(Describe what user-visible-or-internal change this task produces.)

Status

Field Value
State DONE
Parent story Synthetic generation configuration and config-driven feeds
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-06-28

Acceptance

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

PRs

PR Title
#1367 [synthetic] Qt config UI for synthetic market data generation

Review

Round 1 (PR #1367, 2026-06-29) — 3 bot reviewers, issue-level

# Comment summary File Decision Notes
1 All-zero weights → discrete_distribution UB FxSpotRateEditor.cpp Fixed 78c0ce2 — reject save with warning
2 QLineSeries leaked each refresh ReturnDistributionChart.cpp Fixed 78c0ce2 — parent line to area
3 No delete confirmation MarketSimulatorWindow.cpp Fixed 78c0ce2 — QMessageBox::question
4 Duplicated server/client clamp limits simulate_fx_spot_paths_protocol.hpp Fixed 1a0d897 — shared max_num_* constants
5 Silent fallback on unknown process_type process_factory.cpp Fixed 1a0d897 — warn log
6 make_gmm_process dead code process_factory.{hpp,cpp} Fixed 1a0d897 — removed (zero callers)
7 Default 50 sample paths heavy SamplePricePathsChart.cpp Fixed 78c0ce2 — default 10
8 "Non-deterministic tree ordering" MarketSimulatorWindow.cpp Declined Incorrect — containers are std::map (deterministic)
9 version=0 disables optimistic locking FxSpotRateEditor.cpp Declined Project-wide pattern, not a regression
10 Double currency fetch / dual signal / eager join_doubles / pi / slug various Declined Benign (idempotent / trivial / ASCII-only)
11 Non-transactional multi-step save FxSpotRateEditor.cpp Deferred Capture: atomic_batch_save_fx_spot_config
12 No test for σ=0 fix gmm_process.cpp Deferred Capture: regression_test_zero_volatility_gmm
13 Request-boundary GMM validation simulate_handler.hpp Deferred Capture: validate_gmm_params_at_request_boundary

Result

Delivered the Market Simulator: a Qt configuration UI for authoring synthetic FX-spot feeds and their GMM price models, with Simple/Advanced price-behaviour modes, geometric and arithmetic engines, live return-distribution and sample-path preview charts (backed by a new authenticated dry-run simulate endpoint), config-driven feed start/stop, and a TradingView-style FX hero header. Fixed a service abort (SIGABRT) on zero-volatility GMM components. Shipped via PR #1367 (review round 1 addressed; merged bypassing the slow canary check). Follow-ups filed as captures: move quant primitives to ores.analytics, request-boundary GMM validation, atomic batch-save endpoint, zero-volatility regression test, show-data-in-pips option, and open FX seed-source investigation.

Emacs 29.3 (Org mode 9.6.15)