Sprint 14

Table of Contents

This page documents a sprint (Sprint 14) 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

Work on messaging infrastructure. Delivered exactly that — but through a messy three-way pivot: pgmq + pg_cron → custom in-process MQ

  • scheduler → NNG broker attempt → NATS for everything. The NATS

landing removed ~107k lines of old binary-protocol code and added ~20k lines of new NATS-idiomatic code across 10 domain services. Alongside it: reporting subsystem from scratch, trade-status FSM, JWT RS256 in ores.security, party codename for per-party queue isolation (with a couple of race-condition fixes), CLI domain layer, ORE Import Wizard, CMake preset suffixes.

Status

Field Value
State DONE
Parent version Version 0
Previous Sprint 13
Start 2026-02-28
End (expected) 2026-03-19
Now Sprint closed 2026-03-19. One BACKLOG item carries forward: the trade- import dialog (second attempt, postponed again). The ORE Import Wizard landed in this sprint covers part of its goal.
Waiting on Nothing.
Next Sprint 15
Release Notes Release notes
Last touched 2026-03-19

Achievements

  • NATS adopted as the messaging substrate; 10 services migrated from binary protocol.
  • ORE Import Wizard landed: seven-page directory-scan wizard.
  • Reporting subsystem complete: schema, domain, messaging, repo, and Qt UI.
  • JWT RS256 centralised in ores.security.
  • Trade status FSM and activity_type taxonomy established.
  • CLI domain layer introduced.

Stories

For the definitions of the themes see Themes.

Infrastructure

Story State Start End Description
pgmq queue management and messaging UI DONE   2026-03-03 first MQ UI.
Custom MQ tables and in-process scheduler DONE   2026-03-04 replace external extensions. Continues from sprint 13 scheduling_subsystem.
JWT RS256 in ores.security DONE   2026-03-04 centralised JWT with RS256.
NNG message broker attempt DONE   2026-03-12 partially built; hook-up cancelled in favour of NATS.
CMake preset build-tool suffixes DONE   2026-03-10 explicit Ninja / Make naming.
NATS migration DONE   2026-03-18 the pivot. Binary protocol replaced with NATS request/reply + JetStream; 10 services migrated.

Product

Story State Start End Description
ORE import wizard DONE   2026-03-01 seven-page directory-scan wizard. Continues from sprint 13 trade_import_analysis.
Reporting subsystem DONE   2026-03-03 design + schema + domain + messaging + repo + Qt UI with cron widget.
Trade status FSM DONE   2026-03-02 status FSM + activity_type taxonomy.
Party codename DONE   2026-03-12 adjective_noun + two race-condition fixes.
Trade import mapping dialog (second attempt) BACKLOG     BACKLOG; postponed again. Continues from sprint 13 trade_import_dialog.

Tooling

Story State Start End Description
CLI domain layer DONE   2026-03-03 domain sub-menu in CLI syntax.

Agile

Story State Start End Description
Sprint 14 housekeeping DONE   2026-03-12 backlog refinement.

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

  • The reporting subsystem went from zero to design + schema + domain

    • UI in a couple of days, riding on the FSM + scheduler + cron-

    widget infrastructure already in place.

  • ORE Import Wizard ended up being a much better shape than the trade-import dialog originally planned; the directory-scan approach is a far better fit for how users actually have ORE data.
  • The NATS landing removed ~107k lines of binary-protocol code and decomposed the service neatly into 10 microservices — by far the largest single architectural simplification of v0.
  • JWT RS256 + JWT-in-frame survived the NNG abandonment; the security layer is independent of the transport choice.
  • Party codename + sequence-based suffix solved batch-insert uniqueness correctly — the second attempt was right.

What hurt

  • Three pivots in one sprint (pgmq → custom → NNG → NATS) is a lot. Each pivot threw away code from the previous iteration; the cost is real even when each individual decision is the right one.
  • Hook up broker and comms service got cancelled — NNG broker is half-implemented dead code we now have to delete or retire.
  • Trade-import dialog postponed for the second consecutive sprint.
  • Sprint is 3 weeks long (Feb 28 – Mar 19), not the usual 1-2 weeks. The pivot stretched the timeline.

What changed

  • Transport is NATS, not the old binary protocol.
  • Service shape is microservices (10 of them), not the monolith.
  • ores.shell is back to its original name (not ores.comms.shell).
  • pgmq + pg_cron extensions are gone; custom MQ + in-process scheduler + JetStream replace them.
  • JWT lives in ores.security, signed RS256, carrying tenant_id + party_id.
  • Parties carry adjective_noun codenames as per-party queue prefix.
  • Trade status enforced via FSM; activity_type taxonomy replaces the loose lifecycle_events concept.
  • CLI commands group under refdata / iam / dq / variability domains.
  • CMake presets name the build tool explicitly.

Emacs 29.1 (Org mode 9.6.6)