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.
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
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.shellis back to its original name (notores.comms.shell).- pgmq + pg_cron extensions are gone; custom MQ + in-process scheduler + JetStream replace them.
- JWT lives in
ores.security, signed RS256, carryingtenant_id+party_id. - Parties carry
adjective_nouncodenames 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 / variabilitydomains. - CMake presets name the build tool explicitly.