Sprint 15 Release Notes
Table of Contents
March 2026
Sprint 15 delivered the BOINC-inspired distributed compute grid, a full service architecture migration to *.api=/=*.core layers, a production-grade JWT refresh system, and four new CDM instrument domain models.
✅ Highlights
- Distributed compute grid — full stack implementation (domain, SQL, service, wrapper, NATS JetStream, Qt UI) inspired by BOINC, with telemetry pipeline and RAG service health dashboard.
- Service architecture migration — all ten service libraries (
iam,refdata,compute,scheduler,assets,variability,synthetic,trading,reporting,http.server) split into*.api(contracts) and*.core(implementation) layers. - JWT token refresh — configurable lifetimes via system settings,
iam.v1.auth.refreshendpoint, reactive shell retry, proactive Qt timer, andores_iam_auth_events_tblTimescaleDB telemetry hypertable. - CDM instrument models — Rates (Swap, CrossCurrencySwap, CapFloor, Swaption), FX (FxForward, FxSwap, FxOption), Bond (Bond, ForwardBond, CallableBond, ConvertibleBond, BondRepo), and Credit (CDS, CDSIndex, SyntheticCDO).
- Unified system settings — replaced
ores_variability_feature_flags_tblwithores_variability_system_settings_tblsupporting bool, int, string, and JSON value types across all stack layers.
🛠️ Key Improvements
Compute Grid
- BOINC-inspired grid with
ores.compute.serviceandores.compute.wrapperexecutables; NATS JetStream lifecycle transitions replace legacy PGMQ/pg_cron. - Telemetry:
ores_compute_grid_samples_tblandores_compute_node_samples_tblhypertables;get_grid_statsunified NATS endpoint for dashboard. - E2E fixes: result-stuck-InProgress bug, host_id persistence, outcome code mapping, SIGSEGV on window close, file extension preservation in artifact URIs.
- Loading lifecycle refactored via
AbstractClientModelwithdataLoaded()=/=loadError()signals wired toendLoading()across all six compute MdiWindows.
Authentication & Security
- Token lifetimes configurable via
iam.token.*system settings; hot-reloaded onsystem_setting_changedevents. make_request_context()now explicitly returnstoken_expired/unauthorizederror codes viaX-ErrorNATS headers — updated across all 48 domain handlers.- Auth telemetry records login, logout, refresh, max-session events with 90-day/3-year retention policies.
Architecture
- All modules migrated to
*.api/*.corethree-layer pattern; HTTP route handlers relocated to domain core modules. - NATS service discovery: Qt client auto-discovers HTTP base URL after login via
ores.httpshared protocol types — eliminates manualhttp_portconfig. - Full PostgreSQL environment isolation: environment-prefixed roles prevent cross-environment contamination.
Infrastructure & DX
sccacheCI bloat fixed: cross-PR cache sharing, increased sccache limit — reduced cold build times from 2+ hours.ORES_PRESETstored in.env; newstart-client.shsupports multi-instance coloured Qt clients.- Loading indicators (4px indeterminate progress bar) added to all 45+ entity list windows.
- Badge system Phase 1 infrastructure:
badge_definitionandbadge_mappingdomain entities with DB-driven metadata for reuse across Qt and Wt.
⚠️ Known Issues & Postponed
- CDM CLI commands (instruments list/add/delete) deferred to a follow-up story for all four instrument phases.
- Database recreate required to pick up new
ores_trading_fx_instruments_tbl,ores_trading_bond_instruments_tbl,ores_trading_credit_instruments_tbltables. - Three-level provisioning (party wizard split,
provision-partiesendpoint,ores.workfloworchestration service) — Phase 1 landed late in sprint; Phases 2–3 deferred to Sprint 16.
📊 Time Summary
- Total effort: not tracked
- PRs merged: not tracked
- Sprint duration: 2026-03-19 → 2026-03-30
Next sprint: Sprint 16.