Task: IR curve follow-ups
Table of Contents
This page documents a task in the IR curve follow-ups story. It captures the goal, current status, acceptance, and any notes or results.
Goal
Two follow-ups surfaced during IR curve work: realistic-2026 seed data incompatible with index_family enum (provision party fails), and IrCurveGenerationConfigDetailDialog's hand-patched index family combo doesn't list the 16 new RFR/IBOR families.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | IR curve follow-ups |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-08-10 |
Acceptance
index_familyenum accepts all 22 families the SQL CHECK allowsis_overnight()matches the SQL tenor rule: only libor/euribor are term- Provision of a party with realistic-2026 seed data no longer fails
- Dialog index family combo lists all 22 families
Plan
Follow-up #2 (dialog combo) is already resolved on main: commit b36839fd0 (Aug 8) added the 16 new families to the combo. Verify and record; nothing to do.
Follow-up #1 (enum vs seed) is a ores.marketdata enum mismatch. Ground
truth is the SQL CHECK at
projects/ores.sql/create/synthetic/synthetic_ir_curve_generation_configs_create.sql:
22 families, of which only libor/euribor require a non-empty tenor; all
20 others are overnight-style (tenor = ''). The realistic-2026 seed uses
20 RFR families with empty tenor.
The oresmd side has only 6 values, so the seed breaks provisioning at the
oresmd identifier round-trip: parse_enum<index_family> throws
"Unrecognised index value" for the 16 new families, and is_overnight()
misclassifies them as term, which trips the parser's "term index fixing
requires a tenor" validation.
Fix:
- Extend
enum class index_familyin oresmd_enums.hpp to the 22 SQL CHECK values (libor, euribor, sofr, estr, sonia, tona, saron, aonia, corra, honia, sora, swestr, nowa, kofr, mibor, zaronia, destr, polonia, nzonia, shibor, tiie, taibor), docstring cites the CHECK. is_overnight()in oresmd_index_family_utils.hpp: true for every family except libor/euribor, matching the SQL tenor rule.- Tests: parser coverage that all 16 new families parse as fixing without tenor (overnight classification, behavioral); a projection test that the index name drops the tenor suffix for a new family; reject_unrecognised_index_family_value stays green (bogus is not among the 22).
No changes needed on the synthetic side: config index_family is a plain lower-case token there, and the SQL already accepts all 22.
Notes
Follow-up #2 (dialog combo) verified resolved on main at HEAD: commit
b36839fd0 (Aug 8) added the 16 new families to
IrCurveGenerationConfigDetailDialog's index family combo (all 22 listed,
including libor/euribor). Nothing to do for this follow-up; noted for the
close-out. The combo remains hand-patched — it mirrors the 22-family SQL
CHECK, same source of truth the extended index_family enum now uses.
Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario, run
through the QA Validation Runner panel) that verify this task. Link
new ones here as they're created; the scenario doc itself links back
via its "Verifies task" field.
| Scenario | State | Notes |
|---|---|---|
PRs
| PR | Title |
|---|---|
| #1939 | [ores.marketdata] Extend index_family enum to the 22 SQL CHECK families |
Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|
Result
Follow-up #1 fixed: enum class index_family in oresmd_enums.hpp now
mirrors the 22-family CHECK constraint on
ores_synthetic_ir_curve_generation_configs_tbl exactly, and
is_overnight() matches the SQL tenor rule (only libor/euribor are term;
all 20 other families are overnight-style). The realistic-2026 seed's
families now round-trip through oresmd: parse_enum<index_family> accepts
them and fixing identifiers without a tenor no longer trip the
tenor-required validation, so provisioning a party from realistic-2026
seed data no longer fails.
Test coverage added: a parser test that all 16 new RFR/IBOR families parse
as fixing without a tenor, and a projections test that a new family's
index name drops the tenor suffix (CHF-SARON). The full
ores.marketdata.core suite passes (147 test cases, 310 assertions).
Follow-up #2 verified already resolved on main: commit b36839fd0 (Aug 8) added the 16 new families to IrCurveGenerationConfigDetailDialog's index family combo; nothing to do. The combo remains hand-patched, mirroring the same 22-family SQL CHECK the enum now uses.
Verification: compass build ores.marketdata.core.tests clean
(linux-clang-debug-make); ctest 1/1 passed.