Sprint 21
Table of Contents
This page documents a sprint (Sprint 21) of ORE Studio. 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
Commission the ores.refdata entity library: finish currency and country, and start the twelve entities that were never touched in sprint 20 — with the hard constraint that no new tooling stories enter the sprint unless they directly unblock a commission task.
Status
Stories
For the definitions of the themes see Themes.
Agile
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Open sprint 21 | DONE | 2026-06-12 | 2026-06-12 | Scaffold sprint 21, move 24 postponed stories, wire manifest, update vcpkg. |
Product
Epic: ores.refdata Commissioning
Commission all ores.refdata entities across every access layer: verify Qt UI end-to-end
post-NATS migration (list window, detail window, history, delete, eventing), implement or
verify shell and CLI commands (list, add, remove), document each entity in the user manual,
and file backlog captures for Wt and HTTP gaps. One story per entity. Carried from sprint 20.
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Commission: country | DONE | Verify Qt + shell + CLI (existing); manual; Wt/HTTP captures. |
FaceStudio
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Accumulate face dataset | DONE | 2026-06-11 | 2026-07-02 | Build the external/facestudio/ seed catalog; fix accumulation script; wire into seeder. |
Market data generation
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Consistent synthetic market data generation: approach analysis | DONE | 2026-06-25 | 2026-06-25 | Survey three academic papers; catalogue ORE asset-class data requirements; produce a developer-ready approach document for consistent, evolvable synthetic market data. |
| PoC: synthetic market data generation — FX spot vertical slice | DONE | 2026-06-25 | 2026-06-28 | Vertical PoC implementing FX spot synthetic data generation end-to-end: GMM generation service, NATS tick publishing, DB write, and live trading-style chart. Success; productionising work re-homed to the stories below. |
| Synthetic generation configuration and config-driven feeds | DONE | 2026-06-28 | 2026-07-02 | Producer side: persisted party/tenant-scoped synthetic config in ores.synthetic (container + FX spot sub-config) + CRUD UI; config-driven autonomous generation stamping tenant + source; producer-namespaced tick publishing. |
| Config-driven synthetic feed generation (per-config series, lifecycle) | DONE | 2026-07-02 | Lift the PoC single-EUR/USD-series feed to config-driven: resolve/create a series per config ORE key, start feeds by config id, run multiple feeds, publish to the synthetic producer namespace. (Scope 2 of the Market Simulator work.) | |
| Market data feed binding, ingestion and official stream | DONE | 2026-07-02 | Authority side: source-agnostic feed-config binding (series ← source channel); ingest loop subscribes, persists (tenant + source) and remaps to the official tenant-scoped stream; CRM derivation seam. | |
| Source-agnostic market data control panel | DONE | 2026-07-02 | Generic Qt control panel to list/start/stop/monitor feeds via the feed-config registry and a source-agnostic control contract, independent of the producer. |
Tooling
Epic: Codegen
Codegen drift correction and guardrails: resolve template-production divergence, land safety and CI checks so generated code stays trustworthy. Carried from sprint 20.
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Refactor ores.codegen: merge generator.py into codegen/ package | DONE | 2026-06-26 | 2026-06-26 | Move generator.py into codegen/core.py; remove _import_generator hack; add compass codegen pillar and entity sub-commands. |
Epic: Compass
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Fix compass review workflow for Claude-based code reviews | DONE | 2026-06-26 | 2026-06-26 | compass review reply and review resolve break with Claude bot reviews (issue comments, not review threads). |
| Compass environment improvements: port auto-assignment and fleet env-type display | DONE | 2026-06-24 | 2026-06-25 | Auto-compute base port during env provision; show full/light type in compass fleet. |
Infrastructure
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Environment provisioning overhaul | DONE | 2026-06-14 | 2026-06-25 | GCP-style naming, genesis env, light env type, direct-emacs compass commands, env type through the stack, bootstrap docs. |
Documentation
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Knowledge graph housekeeping | DONE | 2026-06-12 | 2026-06-15 | Ongoing bucket for small doc and knowledge-graph fixes spotted during normal work. |
Hotfixes
| Story | State | Start | End | Description |
|---|---|---|---|---|
| Fix readme badges | DONE | 2026-06-12 | 2026-06-12 | Replace broken dynamic PRs badge; fix stale Sprint-20 → Sprint-21 badge. |
| Hotfix: sccache wrapper breaks Windows builds | DONE | 2026-06-25 | 2026-06-25 | sccache_wrapper.sh is set as CMAKE_CXX_COMPILER_LAUNCHER on all platforms but .sh scripts are not valid Win32 executables; all Windows CI jobs fail with 'CreateProcess: %1 is not a valid Win32 application'. |
| Hotfix: base32 alphabet uses string-literal paren-init rejected by Apple libc++ | DONE | 2026-06-25 | 2026-06-26 | std::array<char,33> was initialised with a string literal via parentheses, which GCC/libstdc++ accepted as an extension but Apple libc++ (Xcode 15.4) rejects. The bug was dormant because sccache had the TU cached; the SCCACHE_BASEDIR change in PR #1294 invalidated the cache, forcing a full recompile that exposed the error. |
| Hotfix: macOS debug CPack packaging fails with Xcode 16 strip regression | DONE | 2026-06-26 | 2026-06-27 | CPack Bundle packaging on macOS debug CI fails because CPACK_STRIP_FILES is set unconditionally in build/cpack/CMakeLists.txt and Xcode 16.2 strip crashes when the LC_DYLD_EXPORTS_TRIE export trie grows larger than the original after pruning in ores.refdata.service. |
| Fix Qt party_type build: request.type renamed to code/codes | DONE | 2026-06-28 | 2026-06-28 | Qt party_type lib failed to build after the party_type messaging codegen rename: PartyTypeMdiWindow, PartyTypeDetailDialog and PartyTypeHistoryDialog still assigned request.type, but delete_party_type_request now uses codes (vector) and get_party_type_history_request uses code. Fixed in PR #1357. |
| Hotfix: market_fixing entity carries audit columns absent from lean SQL schema | DONE | 2026-07-02 | 2026-07-02 | market_fixing domain type, entity, mapper, generator, json_io, handler and service carry version/modified_by/performed_by/change_reason_code/change_commentary fields that ores_marketdata_market_fixings_tbl intentionally omits, causing INSERT failures (column "version" does not exist). |
Achievements
Milestones worth capturing as they happen, so the release notes at
sprint close have the evidence to hand. Add a dated ** subheading
per milestone, with any screenshot via [[proj:assets/images/<file>.png]].
Captures
Real captures filed during this sprint that have not been pulled into a
story as tasks — listed here purely for visibility into what the sprint
surfaced. Each is an inbox capture (compass capture); triage them at the
health review (promote to a story, move to next, or discard).
| Capture | Tags | Description |
|---|---|---|
| Rename or split the project glossary | documentation, knowledge_graph | The glossary is really an agile glossary; rename it or split into focused Zettelkasten documents per domain. |
| Define what a product vision is before stating ORE Studio's | documentation, identity | Add a brief conceptual definition of product vision to product_identity.org before the ORE Studio-specific statement; source from MASD methodology doc. |
| Illustrative org-roam links in doc bodies break the site build | documentation, org_roam, ci | Bare id-link placeholder syntax in prose fails the site build; use code spans for examples; consider a lint check. |
Health Review
| # | Date | Day | Overall | Task |
|---|---|---|---|---|
| 1 | 2026-06-29 | day 17 | RED | Health review 1 — sprint 21 close analysis |
| 2 | 2026-07-02 | day 20 | RED | Health review 2 — sprint 21 close analysis |
Charts
Charts generated via compass sprint charts. See Sprint health charts for what each chart measures, its purpose, and how to read it.
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.
PR Cycle Time
Hours from PR open to merge, one bar per PR. Long bars indicate review bottlenecks. Generated only when PR data is available.
Cumulative Stories Done
Line chart tracking stories marked DONE during the sprint. Steady upward slope is healthy; plateauing signals a stall.
Retrospective
(Filled at sprint close.)
Release Notes
See release_notes.org for the full narrative.