Sprint 16
Table of Contents
This page documents a sprint (Sprint 16) of ORE Studio v0. It captures the sprint's mission, current status, and the stories that compose it. For the surrounding context — version goals, sprint order, and product identity — see Version 0.
Mission
Make ORE import work end-to-end, and land the cross-cutting infrastructure it leans on.
- ORE import end-to-end: dispatch pipeline, mappers for every
instrument family, server-side
ores.ore.service, supporting market / fixings / calendar / conventions, golden roundtrip tests, portfolio export. - Infrastructure import depends on: workflow engine + saga
orchestration, market data subsystem from scratch,
ores.controllerservice lifecycle, Qt plugin architecture, reporting + analytics stack. - Surrounding cleanup: trade detail dialog unification, per-type instrument tables, asset-class / product-type separation, UTC- everywhere policy, ~20 Windows portability fixes, party-isolation RLS gaps closed.
The largest v0 sprint to date (157h, 89 tasks across 22 stories).
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent version | Version 0 |
| Previous | Sprint 15 |
| Start | 2026-03-30 |
| End (expected) | 2026-04-18 |
| Now | Sprint closed 2026-04-17. |
| Waiting on | Nothing. |
| Next | Sprint 17 |
| Release Notes | Release notes |
| Last touched | 2026-04-17 |
Achievements
- ORE import pipeline complete: dispatch pipeline, mappers for every instrument family, supporting files, and golden roundtrip tests.
- Workflow engine established with generalised event-driven FSM and party provisioning saga.
- Market data subsystem end-to-end: parser, schema, repo, service, and Qt UI.
- Qt plugin architecture introduced with 7 domain plugins split from the monolith.
- Service lifecycle controller with unified NATS heartbeat landed.
- Reporting and analytics: DQ-sourced report definitions and pricing engine.
- ~20 Windows portability fixes landed.
Stories
For the definitions of the themes see Themes.
Infrastructure
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Party isolation RLS policies | DONE | 2026-04-09 | close the gaps. Continues from sprint 13 party_isolation_books_portfolios_trades. | |
| Generic object storage API | DONE | 2026-04-03 | ores.storage + compute grid migration. | |
| Service lifecycle controller | DONE | 2026-04-08 | ores.controller + unified NATS heartbeat. Continues from sprint 15 compute_grid_ observability. | |
| Qt plugin architecture | DONE | 2026-04-09 | ores.qt.api + 7 domain plugins. | |
| Nats-Session-Id | DONE | 2026-04-01 | session-level correlation. | |
| UTC-everywhere timestamp policy | DONE | 2026-04-08 | canonical UTC API. | |
| Windows portability fixes | DONE | 2026-04-11 | ~20 fixes surfaced by Windows builds. | |
| Engineering hygiene | DONE | 2026-04-07 | clock_cast, nodiscard, codegen profiles, menu repositioning. |
Product
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Asset class and product_type unification | DONE | 2026-04-03 | rename + analysis + implementation. | |
| Workflow engine | DONE | 2026-04-06 | scaffold + FSM state UUIDs + generalised event-driven engine. | |
| Party provisioning saga | DONE | 2026-03-31 | first concrete saga + UX. | |
| Workflow monitor | DONE | 2026-04-11 | Qt plugin + late fixes. | |
| ORE import pipeline | DONE | 2026-04-04 | the sprint's mission. Continues from sprint 15 fix_ore_import_bugs. | |
| ORE import supporting files | DONE | 2026-04-03 | market.txt + fixings.txt + calendar + conventions. | |
| ORE golden roundtrip tests | DONE | 2026-03-31 | three test PRs. | |
| ORE portfolio export | DONE | 2026-04-01 | exporter + Qt actions. | |
| Market data subsystem | DONE | 2026-04-01 | parser + schema + repo + service + Qt UI. | |
| Reporting and analytics | DONE | 2026-04-07 | DQ-sourced report defs + execution workflow + analytics pricing engine. Continues from sprint 14 reporting_subsystem. | |
| Trade detail dialog unification | DONE | 2026-04-07 | six instrument family merges + IInstrumentForm registry. | |
| Per-type instrument tables | DONE | 2026-04-10 | rates / FX / equity. Continues from sprint 15 cdm_instruments. | |
| Scheduler UI complete | DONE | 2026-04-11 | Job Instances + Monitor. |
Agile
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Sprint 16 housekeeping | DONE | 2026-04-17 | backlog refinement. |
Charts
Charts generated via sprint_charts cmake target.
PRs & Commits per Day
Dual-axis bar chart. PRs (left axis) and commits (right axis) per day. A high commits-to-PR ratio may indicate scope creep.
Daily Line Churn
Lines added (green) and deleted (red) per day. Building work produces mostly additions; refactoring produces a mix. Days with no churn may indicate blockers.
PR Cycle Time
Hours from PR open to merge, one bar per PR. Long bars indicate review bottlenecks. Generated only when PR data is available.
Cumulative Stories Done
Line chart tracking stories marked DONE during the sprint. Steady upward slope is healthy; plateauing signals a stall.
Retrospective
What went well
- ORE import landed end-to-end inside the sprint — pipeline + mappers for all six instrument families + supporting files + server-side service.
- Workflow engine generalised mid-sprint and immediately consumed two sagas (party provisioning + ORE import); the engine becomes load-bearing infrastructure rather than party-specific machinery.
- Market data subsystem from scratch in one sprint: parser + schema
- domain + repository + service + UI.
- Trade detail dialog unification (six merge PRs + IInstrumentForm registry) closes a long-running UX inconsistency.
- Qt plugin architecture (ores.qt.api + 7 domain plugins) prepares the codebase for v1's modularity needs.
- Windows portability sweep — 20+ fixes — gets Windows CI back to green and keeps it there.
- Asset class unification finally separates risk-taxonomy (asset_class) from structural-routing (product_type).
- Sprint hit 89 tasks across 22 stories; everything either DONE or documented as next-version work.
What hurt
- 157h sprint — by far the longest. The breadth was hard to keep coherent + the review queue was substantial.
- Per-type instrument table refactor (rates / FX / equity) repeats parts of the sprint-15 CDM modelling work; that we needed both passes is evidence the first design wasn't quite right.
- Trade detail dialog merge surfaced several regressions in intermediate PRs (CDO zero values, new-trade tab visibility, etc.) that lingered across PRs before being cleaned up.
- Workflow engine generalisation came after the first concrete saga rather than before — saga-2 (ORE import) had to wait while the engine grew up.
- Windows portability fixes were largely reactive — surfaced by CI rather than prevented by deliberate cross-platform discipline.
What changed
ores.controllerowns service lifecycle; the dashboard is the visible window into it.ores.qtis nowores.qt.api+ 7 domain plugins; the monolith is gone.- TradeDetailDialog drives every instrument family via the
IInstrumentFormregistry. - ORE import is end-to-end with mappers for every family + server- side service + supporting market data / fixings / calendar / conventions.
- Workflow engine is general-purpose; party provisioning and ORE import are both event-driven sagas on top of it.
- Market data is a real component with its own subsystem.
asset_classandproduct_typeare recognised as distinct concepts with shared refdata source of truth.- Per-type instrument tables (rates / FX / equity) replace the generic instruments table from sprint 15.
- Party isolation RLS gaps closed; trading instrument subtables have proper RLS.
- UTC-everywhere timestamp policy enforced from DB to wire format.
- Windows is a first-class build target with the ~20 portability fixes that landed this sprint.
Where v0 stands after this sprint
The bulk of v0's mission is now delivered: every ORE entity type is modelled, importable, and manageable through the GUI; the platform has multi-tenant + multi-party RLS, JWT-based auth, NATS-based microservices, a compute grid, a scheduler, a workflow engine, an analytics + reporting stack, and a Qt plugin architecture. v0 remains open — Sprint 17 carries the remaining work and any follow-ups surfaced here.