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.

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

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

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.tradeores.trading (component rename).
  • party no longer keyed by LEI; LEI lives in a junction; internal parties use generated short codes.
  • modified_by vs performed_by now 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_template databases gone; RLS replaces template cloning for test isolation.
  • Generators take a generation_context so audit fields + FK refs are resolved consistently.
  • FSM framework lives in Postgres; trade envelope is the first client.

Emacs 29.1 (Org mode 9.6.6)