Sprint 12
Table of Contents
This page documents a sprint (Sprint 12) 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
Add support for party and related entities. Delivered: party, counterparty, business centres, party identifiers, contact information, business units, books, portfolios, the FpML business-centre coding scheme, and the GLEIF data behind all of them. Two RLS layers (tenant
- party). System account + audit trail tightened. Tenant provisioning
wizards (GLEIF + synthetic) and an FSM-backed trade envelope round out the largest v0 sprint to date.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent version | Version 0 |
| Previous | Sprint 11 |
| Start | 2026-02-06 |
| End (expected) | 2026-02-20 |
| Now | Sprint closed 2026-02-20. Three items carry forward: sqlgen follow-up (BLOCKED on vcpkg release of merged upstream features) and the caching analysis (POSTPONED for design / scoping reasons). |
| Waiting on | vcpkg release of sqlgen with the merged features. |
| Next | Sprint 13 |
| Release Notes | Release notes |
| Last touched | 2026-02-20 |
Achievements
- Party and counterparty domain established end-to-end with RLS isolation.
- GLEIF data integrated: datasets, central banks, LEI-to-BIC, provisioning wizards, and hierarchy graph.
- FSM and trade envelope landed; component renamed ores.trade → ores.trading.
- Books, portfolios, and business units modelled.
- Five-tab advanced counterparty dialog and Qt column handling centralised across 24 list windows.
- Multi-tenant provisioning wizards with root-party invariant and GLEIF/synthetic paths.
Stories
For the definitions of the themes see Themes.
Infrastructure
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Test coverage and FK-aware generators | DONE | 2026-02-11 | back over 50% coverage; KVP-context proposal sown. | |
| Infrastructure cleanup | DONE | 2026-02-12 | merge databases away; OSX CI back. | |
| Party-level RLS isolation | DONE | 2026-02-15 | second RLS layer; visible party set; party_counterparties as first scoped junction. | |
| Audit trail and system account | DONE | 2026-02-17 | modified_by vs performed_by; system account; KVP generation context. | |
| Caching analysis | BACKLOG | POSTPONED. |
Product
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Qt and eventing polish | DONE | 2026-02-10 | shell widget; name-based roles; several small fixes. | |
| Party database and domain | DONE | 2026-02-09 | implement party + counterparty + identifier + contact-info end-to-end. Continues from sprint 09 party_database_groundwork. | |
| GLEIF data integration | DONE | 2026-02-13 | datasets, central banks, LEI-to-BIC. Continues from sprint 10 party_schemes_and_fpml_data. | |
| Multi-party brainstorm and short codes | DONE | 2026-02-14 | design + pagination + mnemonic short codes + identifier split. | |
| Counterparty pagination and polish | DONE | 2026-02-14 | pagination, business centres, identifier cardinality. | |
| System and customer party | DONE | 2026-02-11 | Internal type + WRLD BC; optional dataset members. | |
| Tenant administration | DONE | 2026-02-12 | party_types lookup; RLS-aware test provisioning; tenant-type rename; CLI; Super Admin. | |
| Tenant provisioning wizards | DONE | 2026-02-16 | root-party invariant; GLEIF + synthetic; gating; UX polish; first-login onboarding. | |
| Entity modelling: books, portfolios, business units | DONE | 2026-02-19 | modelling pass; business-centre coding scheme; portfolio impl. | |
| GLEIF evaluation wizard and party hierarchy | DONE | 2026-02-19 | wizard + graph viz. | |
| Advanced counterparty dialog | DONE | 2026-02-19 | five-tab layout + strategy-pattern refactor. | |
| Qt column handling centralisation | DONE | 2026-02-19 | ColumnMetadata pattern across 24 list windows. | |
| FSM and trade support | DONE | 2026-02-20 | generic Postgres FSM + trade envelope; ores.trade → ores.trading rename. |
Tooling
| Story | State | Start | End | Description |
|---|---|---|---|---|
| sqlgen follow-up | ? | BLOCKED on vcpkg. |
Agile
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Sprint 12 housekeeping | DONE | 2026-02-20 | backlog + OCR. |
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.
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
- Party + counterparty + identifier + contact info landed end-to-end through codegen — 11 domain types + 40 protocol messages in one large but reviewable PR.
- Two RLS layers (tenant + party) compose cleanly, with system tenant / system party as escape hatches for admin paths.
- The system-account + performed_by split closes a long-standing audit-trail honesty gap.
- The KVP-generation-context refactor pays back across ~36 generators and lets us re-enable strict modified_by validation.
- The FSM framework + trade envelope land on the same day; trade lifecycles get a proper home.
What hurt
- 20 stories / 62 tasks is the largest sprint to date — the breadth was hard to keep coherent and the review queue was long.
- sqlgen-followup ended the sprint still BLOCKED on vcpkg picking up the merged upstream features; the libpq escapes still exist.
- The metadata/production schema split from sprint 10 → consolidated back to public in sprint 11 → has now been re-visited by ores.utility and ores.synthetic / ores.trading naming. Two full-tree changes inside three sprints.
- The caching analysis surfaced design questions we don't have time to answer this sprint; postponed cleanly but the design debt is real.
What changed
ores.trade→ores.trading(component rename).partyno longer keyed by LEI; LEI lives in a junction; internal parties use generated short codes.modified_byvsperformed_bynow have clear, separately-sourced meanings.- Tenant types renamed to describe how they're used: system / production / evaluation / automation.
- Two RLS layers: tenant + party.
ores_admin+ores_templatedatabases gone; RLS replaces template cloning for test isolation.- Generators take a
generation_contextso audit fields + FK refs are resolved consistently. - FSM framework lives in Postgres; trade envelope is the first client.