Sprint 23

Table of Contents

This page documents a sprint (Sprint 23) of ORE Studio. 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

Continue commissioning ores.refdata entities and codegen C++ drift correction.

Status

Field Value
State DONE
Parent version Version 0
Previous Sprint 22
Start 2026-07-11
End 2026-07-21
Now Nothing.
Waiting on Nothing.
Next Open sprint 24.
Release Notes release_notes.org
Last touched 2026-07-21

Stories

For the definitions of the themes see Themes.

Product

Story State Start End Description
Open sprint 23 DONE 2026-07-11 2026-07-11 Scaffold sprint 23, wire version manifest, move postponed stories.
Retire legacy codegen profile system; add junction support to physical-space codegen DONE 2026-07-13 2026-07-15 Deleted the dead facet_catalogue.org/–profile codegen path; junction C++ generation (domain/generator/repository) now works, validated end-to-end against tenor_convention_resolution (hand-authored code retired). At health review 1 (2026-07-20) the 4 remaining BACKLOG tasks (not required by this story's own acceptance) were split into Codegen legacy-profile retirement follow-ups.
Generic entity-mirror cache primitive + codegen facet (party as first consumer) DONE 2026-07-12 2026-07-14 Build a reusable, thread-safe entity-mirror cache: an immer-based partitioned_cache<PartitionKey,Key,Value> primitive plus a nats-event-cache codegen facet that generates the subscribe/reload wiring for any entity, declared where the entity is defined. Migrate ores.iam.core's party_cache to be its first real consumer, fixing the original subject-mismatch bug as a byproduct.
Book data model cleanup DONE 2026-07-08 2026-07-15 Carried from sprint 22 (3/9 tasks done); all 13/13 tasks now done: book_status/is_trading_book fixes, book_purpose_type/ledger_feed_type/is_sweepable/rates_centre_code shipped, hierarchy/legal-entity/allowed-lists/Wash-link questions resolved, ledger_ccy renamed to functional_currency, manual chapter enriched, Book window toolbar buttons added via the existing codegen facet.
Move book to refdata DONE 2026-07-11 2026-07-11 Moved Book/BookStatus/RegulatoryBookType Qt CRUD + plugin wiring from TradingPlugin to RefdataPlugin (no cross-component leakage), incl. a new Reference Data > Book Codes submenu. Portfolio's equivalent move is intentionally separate for parallel work.
Book codegen drift remediation DONE 2026-07-11 2026-07-12 Regenerate book/book_status/regulatory_book_type against current codegen templates, restore any silently-dropped SQL validations, end-to-end test, then migrate book to composite-entity versioning and regen/test again. Unblocked, resuming.
Resolve codegen model unification blockers DONE 2026-06-27 2026-07-15 Carried from sprint 22; 6/7 own blockers done (B6/#+has_qt abandoned, superseded). Remaining backlog merged into Retire legacy codegen profile system; add junction support to physical-space codegen.
Consolidate history dialogs onto HistoryDialogBase DONE 2026-06-05 2026-07-21 Carried from sprint 19; shipped the entire new server-side diff architecture and the single generic HistoryDialog widget, ores.qt.refdata fully migrated. Closed with acceptance narrowed to what shipped; Phase C rollout (retire old per-entity dialogs) split into a Sprint 24 story.
Migrate ores.qt.refdata onto the generic HistoryDialog DONE 2026-07-14 2026-07-18 Rolled out the generic HistoryDialog widget to every ores.qt.refdata entity; narrowed from all of ores.qt (other components now their own backlog captures). Last two entities (floating_index_type, leg_type) also moved their backend from ores.trading to ores.refdata to fix a component-ownership mismatch. Contributes to unblocking the sibling story's "Retire HistoryDialogBase" task once every component has migrated.
IR Rates synthetic data generation DONE 2026-07-03 2026-07-20 Carried from sprint 22 (mislabeled ABANDONED there, no such decision recorded): short-rate stochastic process, Curve Template raw instrument generation, tenor-collision validation, tick-batch publishing all DONE. Remaining forward-looking work split into a product-backlog story.
Synthetic data collections: Basic and Realistic DONE 2026-07-03 2026-07-17 Carried from sprint 22 (6/8 tasks done, mislabeled ABANDONED there): feed namespacing by collection and Market Simulator tree grouping remain.
Add a default party per account with a quick-login checkbox DONE 2026-07-11 2026-07-12 Account gains a default_party_id; login dialog gets a quick-login checkbox that bypasses PartyPickerDialog; provisioning scripts set the default.
Model calendars as proper ORE Studio reference data DONE 2026-07-11 2026-07-21 First-class calendar entity with FK-referenceable relationships, replacing free-text holiday_calendar/advance_calendar fields, plus Qt screens (PR #1638 merged). Closed with acceptance narrowed to what shipped; XML export boundary and DQ publish split into a Sprint 24 story. Three extras previously split into a product-backlog story.
Cross-rates matrix (CRM) DONE 2026-07-11 2026-07-18 Pulled in from product backlog next: driver/derived spanning-tree topology, no-arbitrage triangulation, risk recentering, management UI in ores.marketdata.
Commission: day_count_fraction_type DONE 2026-07-12 2026-07-12 Pulled in from product backlog next (misfiled under sprint 22): move day_count_fraction_type from ores.trading to ores.refdata alongside the other *_convention entities, commission it fully, repoint trading_swap_legs' one soft-FK.
Sprint 23 planning session DONE 2026-07-11 2026-07-11 16 stories seeded into sprint 23; deep backlog refinement audited all 559 items (71 discarded/relocated, 1 merged); bucket rescoring moved 310 items and emptied inbox.
Extract stochastic process math from ores.synthetic into ores.analytics.quant DONE 2026-07-12 2026-07-12 Moved GMM/OU stochastic processes, process factory, and parameter validation out of ores.synthetic into ores.analytics.quant, with 54 new Catch2 tests and updated component documentation.
Commission: business_centre DONE 2026-07-12 2026-07-15 Pulled in from product backlog next: update codegen model, enable variability knobs, regenerate, reconcile diffs, verify Qt post-NATS, add manual chapter, capture shell/CLI/Wt/HTTP backlog.
Compass improvements DONE 2026-07-12 2026-07-20 Catch-all for small compass enhancements: bearings/vcpkg drift check, environment-update tooling. Output-monitoring task split into a product-backlog story.
Improve Data Librarian accession card UI/UX DONE 2026-07-12 2026-07-13 Promoted from deferred backlog. Redesign the dataset detail dialog into a persistent-header, two-column layout with merged Provenance/Methodology tab, per a Gemini UI review.
Commission: contact_type DONE 2026-07-13 2026-07-13 Rebuilt contact_type's codegen model from the current meta-model and regenerated every layer, verified the Qt UI end-to-end post-NATS (11/11 scenario steps), and filed backlog captures for shell/CLI/Wt/HTTP support; manual chapter deferred to a backlog capture since contact_type is an aux type that documents as a subsection of the not-yet-written Contact chapter.
Commission: party, counterparty, and party_status DONE 2026-07-13 2026-07-20 Consolidates and supersedes the three Sprint 22 per-entity commission stories, now that their shared blockers (composite hierarchy Qt widgets, temporal composite versioning) are DONE: party/counterparty regenerated zero-diff, Qt UI verified end-to-end post-NATS, manual chapters for all three written. At health review 1 (2026-07-20) the 2 remaining independent tasks were split into Party/counterparty follow-ups in the product backlog.
Commission: portfolio DONE 2026-07-16 2026-07-18 Codegen/drift and manual-chapter tasks both DONE. Two non-blocking follow-ups split into Portfolio display follow-ups in the product backlog.
Sprint health review — System 2 analysis DONE 2026-07-20 2026-07-20 System 2 health review 1: RED overall (sprint load and focus both RED, 2 days past planned close).
Codegen legacy-profile retirement follow-ups DONE 2026-07-20 2026-07-20 Split from the now-DONE "Retire legacy codegen profile system" story: split-model backcompat removal (B7, PR #1652) DONE in jolly_knuth, absorbing the duplicate table-model-type task as ABANDONED. Mustache-to-address renames and the junction-codegen rollout split further into Codegen: mustache-to-address rename + junction codegen rollout in the product backlog.

Hotfixes

Story State Start End Description
Hotfix: Windows Clang CI compiler-launcher wrapper DONE 2026-07-11 2026-07-11 windows-clang-debug-ninja and windows-clang-release-ninja fail to configure because the clang preset's environment launcher (a .sh wrapper) leaks into CMake's project()-time compiler detection on Windows.
Hotfix: ores.iam.core build fails, missing ores.eventing.core include dependency DONE 2026-07-14 2026-07-14 party_cache.hpp includes ores.eventing.core/service/cache/partitioned_cache.hpp but ores.iam.core's CMakeLists.txt doesn't depend on ores.eventing.core, so the include path is missing and the build fails.
Improve badge colour scheme support DONE 2026-07-15 2026-07-21 Shipped the badge_mapping browser UI and migrated badge_definition/badge_severity/code_domain onto standard codegen + DQ publishing. Closed with acceptance narrowed to what shipped; remaining scope split into two Sprint 24 stories: visual polish/self-badging fixes and badge adoption coverage audit/rollout.
Commission ores.qt.dq — full-stack codegen for the DQ component DONE 2026-07-16 2026-07-21 catalog/change_reason/change_reason_category/data_domain commissioned onto standard codegen; lookup_entity architecture unified into domain_entity. Closed with acceptance narrowed to what shipped; remaining scope split into two Sprint 24 stories: commission remaining DQ entities and codegen infrastructure follow-ups.
Clean up application menus DONE 2026-07-16 2026-07-18 The application's menu structure has grown organically and is now inconsistent: Reference Data menu is a grab-bag, System menu mixes app-chrome with operational concerns (Telemetry, Message Queue, Administration), Data Management menu is misleadingly named for what's actually transfer/import actions, and there's no coherent home for DQ metadata entities (change reasons, code domains, badges, etc.). Redesign the menu structure from first principles: System = app chrome only (Testing, Reset); Operations = Jobs, Workflows, Data Transfer, Data Catalogue, Telemetry, Message Queue, Administration; Reference Data = cleaned up; Data Quality = new menu for DQ metadata entities.
Hotfix: ores.dq.core fails to build, missing ores.diff link DONE 2026-07-17 2026-07-17 ores.dq.core includes ores.diff headers but its CMakeLists never links or includes ores.diff.lib, breaking the build.
Hotfix: Windows CI builds timing out / failing on header dependency scanning DONE 2026-07-19 2026-07-19 Windows CI (msvc-release and clang-debug/release) consistently fails or times out at 6h because CMake's automatic C++ module dependency scanning (clang-scan-deps) invokes via cmd.exe, whose ~8191-char command-line limit truncates the very long include/define argument list, silently dropping the ores.diff include path and causing 'file not found' errors or scanner hangs. Fixed by setting CMAKE_CXX_SCAN_FOR_MODULES OFF (PR #1645).
Hotfix: Windows link fails, ir_curve_template_resolver free functions not exported DONE 2026-07-20 2026-07-20 lld-link: undefined symbol for ores::synthetic::service::resolve() (and sibling free functions in ir_curve_template_resolver.hpp) when linking ores.synthetic.service.tests.exe on windows-clang-debug-ninja – the functions are missing the ORES_SYNTHETIC_SERVICE_EXPORT macro, so they never make it into the DLL's export table on Windows, though the default ELF/Mach-O visibility on Linux/macOS hides the gap. Fixed by exporting the three free functions; verified locally on Linux, Windows CI is the real check.

Achievements

Milestones worth capturing as they happen, so the release notes at sprint close have the evidence to hand. Add a dated ** subheading per milestone, with any screenshot via [[proj:assets/images/<file>.png]].

IR synthetic data generator (2026-07-20)

The Market Simulator's IR side end-to-end: a CIR short-rate process configured live (Simple/Advanced engine controls, curve-shape preview, sample short-rate paths), feeding a running CAD CORRA collection alongside the existing FX collections. Known limitation: ticks are being treated as full trading days by the process update step, so a day's worth of mean-reversion/volatility lands every real-time update_frequency interval (60s here) instead of once per day — producing rate swings of thousands of basis points within minutes. Consistent with the day-scaled kappa and sigma defaults still producing unrealistic (~150-250) rates in the seeded synthetic.ir_curve_configs.basic dataset over longer tick counts — same missing dt scaling factor, not a separate bug. See the story's Now field and the release notes' Known Limitations section for detail. Analysis and fix deferred to next sprint. Also note: every seeded curve is single-curve (self-discounting) only, not a discounting/projection dual-curve model — correct for the seeded overnight RFR indices, not yet for IBOR-style term indices; tracked in the IR Rates follow-on backlog story.

sprint_23_ir_synthetic_data_generator.png

Interest rates and calendars (2026-07-20)

The new calendar reference-data entity (US/UK financial-centre and public-holiday calendars) alongside the Interest Rates series browser and live Curve Snapshot windows (grid + bucketed history + curve-shape chart) for USD/SOFR and EUR/ESTR.

sprint_23_interest_rates_calendars.png

Cross-rates matrix (2026-07-20)

Three live Cross-Rates Matrix windows (majors, scandies, exotics) plus the Market Series browser — derived rates computed from drivers and updating on a 5s interval, each with an FX Pair Overview sparkline. Known limitation: the CRM has no interest-rate awareness — it triangulates pure FX spot ratios, with no way to represent forward points, covered-interest-rate-parity, or spot-date lag (today + spot lag, typically T+2), all of which are IR-driven. Scope deferred to next sprint, pending the IR scaling fix above.

sprint_23_cross_rates_matrix.png

Data Librarian accession card redesign (2026-07-20)

The Data Librarian's dataset detail dialog ("accession card") redesigned into a persistent-header, asymmetric two-column layout — Provenance & Methodology and Dependencies tabs, shown here across three datasets (Currency Pair Convention Calendars, Calendars, and FpML Asset Class).

sprint_23_data_librarian_accession_card.png

Generic history dialog with GitHub-style diff view (2026-07-20)

Every ores.qt.refdata entity now shares one HistoryDialog: a version timeline plus a GitHub-style unified diff between any two versions, with field-level highlighting. Shown here on Currency history (ANG's DQ import lineage; AOA's v2=→=v3 "Angolan Kwanza2" → "Angolan Kwanza" typo rectification).

sprint_23_history_dialog_diff_view.png

Captures

Real captures filed during this sprint that have not been pulled into a story as tasks — listed here purely for visibility into what the sprint surfaced. Each is an inbox capture (compass capture); triage them at the health review (promote to a story, move to next, or discard).

Capture Tags Description
     

Health Review

# Date Day Overall Task
1 2026-07-20 day 9 RED Health review 1 — sprint 23 analysis

Charts

Charts generated via compass sprint charts. See Sprint health charts for what each chart measures, its purpose, and how to read it.

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.

prs_commits.png

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.

line_churn.png

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.

pr_cycle.png

Cumulative Stories Done

Line chart tracking stories marked DONE during the sprint. Steady upward slope is healthy; plateauing signals a stall.

stories_done.png

Retrospective

(Filled at sprint close.)

Release Notes

See release_notes.org for the full narrative.

Emacs 29.3 (Org mode 9.6.15)