Story: Config-driven synthetic feed generation (per-config series, lifecycle)
Table of Contents
This page documents a story in Sprint 21. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
Goal
A user can configure any FX spot rate in the Market Simulator and start a feed for it that generates correct, isolated synthetic market data — not just the single hard-wired EUR/USD PoC feed. Multiple feeds run concurrently, each writing to a market series that matches its own ORE key.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 21 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-06-29 |
Acceptance
- Starting a feed resolves or creates a market series matching the config's ORE key (tenant/party scoped), instead of always using the pre-created EUR/USD series; observations persist to the correct series.
- Feeds can be started/stopped by config id; the current single-active-feed limitation in feed_controller is removed so multiple feeds run concurrently.
- Synthetic ticks publish to the synthetic producer namespace (synthetic.v1.tick.<key>); the marketdata authority ingests/remaps per the market data architecture (feed binding) rather than the producer writing the official marketdata stream directly.
- The Market Simulator's Start/Stop (added under the Qt config UI task as a PoC reusing the single-feed handler) is rewired to the config-driven path.
Notes
Background: the Qt config UI task (A433571D) added Start/Stop in the Market Simulator as Scope 1, reusing the PoC single-EUR/USD-series feed_controller. This story is Scope 2 — the proper config-driven generation backend.
Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Config-driven multi-feed generation (start a config) | DONE | 2026-06-29 | 2026-06-29 | Make the synthetic service run many feeds at once and start/stop a whole config's FX rates together, publishing on producer-namespaced channels. |
| Ornstein-Uhlenbeck (mean-reverting) process engine | DONE | 2026-07-02 | Add a mean-reverting Ornstein-Uhlenbeck price-process engine alongside geometric and arithmetic, selectable on the synthetic screen. | |
| Scaffold new feed config/domain types via codegen | DONE | 2026-06-30 | Create any new persisted config and domain types this feed work needs (e.g. a market-data feed-config/binding entity) through the codegen full-stack pipeline rather than hand-writing them. | |
| Regenerate synthetic config types via codegen (backend) | DONE | 2026-06-29 | 2026-06-30 | Replace the hand-written backend stack of the three synthetic config types with codegen output driven by entity+table models. |
Decisions
Out of scope
Result
Main goal delivered: multi-feed config-driven generation running, synthetic types regenerated via codegen. OU process engine abandoned — deferred to backlog.