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.

1. Mission

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

2. 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

3. Stories

For the definitions of the themes see Themes.

3.1. 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.

3.2. 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.

4. 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]].

4.1. 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

4.2. 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

4.3. 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

4.4. 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

4.5. 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

5. 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
     

6. Health Review

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

7. Charts

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

7.1. 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

7.2. 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

7.3. 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

7.4. Cumulative Stories Done

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

stories_done.png

8. Retrospective

(Filled at sprint close.)

9. Release Notes

See release_notes.org for the full narrative.

Emacs 29.3 (Org mode 9.6.15)