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.

Emacs 29.3 (Org mode 9.6.15)