Sprint 24

Table of Contents

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

Continue commissioning work across components, and improve IR generation.

Status

Field Value
State DONE
Parent version Version 0
Previous Sprint 23
Start 2026-07-21
End (expected) 2026-07-28
Now Closed. See Sprint 25.
Waiting on Nothing.
Next Nothing.
Release Notes Sprint 24 – Release Notes
Last touched 2026-08-03

Achievements

  • Commissioned Acme Corporation as ORE Studio's fully populated synthetic holding-group test entity, replacing Barclays Plc, with data-driven party-scoped bundle provisioning across the Qt wizard and shell CLI.
  • Shipped a holiday-aware date picker widget, fixed a silent 100-row list-truncation bug across 29 refdata/marketdata Qt entities, and materialised real QuantLib calendar holidays/adjustments into refdata, completing the calendar reference-data story end to end.
  • Built and rolled out a configurable NATS wire format (JSON/MessagePack, chosen once at startup) across ores.service/ores.qt/ores.shell, fixing the base64-overhead problem for every NATS message type; also fixed image-batch NATS payload overflow with byte-size-aware batching and SVG compression.
  • Audited and classified all 120 FK-like/lookup domain entities for badge/image/plain-text rendering policy, shipped the badge colour scheme's visual polish and self-badging fixes, and began the batched rollout of the classification.
  • Settled entity-classification dimensions and built an automated drift-measurement tool, proven on the ores.refdata pilot – replacing several fragmented, hand-maintained drift-tracking documents with one quantified, automated report.
  • Proved ORE Studio's service runtime containerised and running reproducibly (all 18 services, full Acme scenario) on a remote WSL host, and migrated shared build/ccache storage to btrfs to fix a cross-worktree corruption bug.
  • Closed out four separate CI-breaking hotfixes (CMake 4.4 warnings, Windows pip self-upgrade, an IAM model-drift schema regression, a wire-codec/systemd-notify regression) and updated the vendored ORE Engine to 1.8.16.0.

Stories

For the definitions of the themes see Themes.

Product

Story State Start End Description
Open sprint 24 DONE 2026-07-21 2026-07-21 Scaffold sprint 24, wire version manifest, bump project version, update vcpkg submodule.
Improve FX Spot Monitor widget UI/UX DONE 2026-07-29 2026-07-30 Reduce color fatigue, fix numeric alignment, apply JPY 3-decimal convention, and replace the repeated LIVE badge, per a Gemini UI review.
Make party-scoped bundle provisioning data-driven, not one hand-written phase per bundle DONE 2026-07-22 2026-07-22 Pulled from product backlog next: replace the fixed hand-written phase list in both the Qt provisioning wizard and the ores.shell CLI with a data-driven list of bundle codes to publish, so a new party-scoped bundle never requires new phase code in either provisioner. Also fixed the Data Librarian tree regression (RLS-defeating tenant filter on shared DQ governance entities).
Commission Acme Corporation: a realistic holding-group test entity DONE 2026-07-22 2026-08-03 Comprehensive synthetic holding-group entity — parties, business units, portfolios, books, and locale-appropriate staff — to replace Barclays Plc as the fully populated test entity.
DQ/Refdata service boundary cleanup ABANDONED 2026-07-11 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23: route DQ bundle publication through refdata.v1.* NATS endpoints instead of direct table writes.
IAM/Refdata service boundary cleanup ABANDONED 2026-07-11 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23: replace ores.iam.core's direct refdata table access with NATS calls.
Sprint 22 leftover cleanup DONE 2026-07-11 2026-07-25 Carried from sprint 23: close out four standalone leftover tasks parked at sprint 22 close.
Refdata entity NATS event registrar audit ABANDONED 2026-07-11 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23: wire NATS event registrars for the 26 refdata entities still missing one.
As-of lookup resolution codegen facet DONE 2026-07-12 2026-07-25 Carried from sprint 23: generalise the hand-written, unwired read_at_timepoint into a proper codegen facet; piloted on book_status/regulatory_book_type; reconciled currency/country hand-written precedents. Rollout to remaining refdata entities deferred as a follow-on.
Codegen developer experience improvements ABANDONED 2026-06-25 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23 (originally sprint 22): downgrade address/type mismatch to skip in –component mode; add –entity filter; add entity group/tag system; literate template commentary.
Market data cleanup: retire dead duplicate tables and preserve hand-written overrides DONE 2026-07-02 2026-07-22 Carried from sprint 23 (originally sprint 22): drop legacy marketdata tables; remove stale validation_ignore.txt entries; protect market_observation's hand-written overrides from codegen regeneration.
Stochastic tick arrival times for synthetic feeds ABANDONED 2026-07-11 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23: named, shared arrival-profile configs (liquid/illiquid rates) driving Poisson/MMPP tick timing, decoupled from the GMM price process.
Audit refdata entities for composite (temporal-versioned) child relationships ABANDONED 2026-07-11 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23: generalise temporal composite entity versioning (proven on party/counterparty) across refdata.
Codegen: generate NATS subject constants per component ABANDONED 2026-07-13 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23: generate a per-component API header of named NATS subject constants (requests, events, publish-from-dq) so codegen-generated registrar/handler/client code never uses raw string literals – a missing subscription or typo becomes a compile error, not a silent runtime failure. Discovered via a real bug in the CRM story.
Server-side UUID generation for all entities ABANDONED 2026-07-14 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Carried from sprint 23: clients must never generate primary-key UUIDs – move id assignment from the client-side setCreateMode() (shared Qt detail-dialog codegen template) to the server, returned in the save response. Surfaced while fixing the CRM cross-rates matrix task's editable id-field bug.
Badge colour scheme: visual polish and self-badging fixes DONE 2026-07-22 2026-07-30 Split from Sprint 23's badge colour scheme story at close: palette swatch rendering + data-driven fallback badge, and self-badging for badge-source entities.
Audit and classify FK-like/lookup entities for badge/image/plain-text rendering DONE 2026-07-30 2026-07-30 Split out at sprint 24 health review from the story below: inventory every FK-like/code/lookup domain_entity model (all 120), classify each as colour badge, image/flag, or plain text/neither, with documented reasoning and a stated policy. Batched for implementation.
Roll out badge/image/plain-text rendering across classified domain entities ABANDONED 2026-07-30 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Renamed at sprint 24 health review to carry only the implementation rollout, after the completed audit/classification was split into its own story above. Implementation in progress, batch by batch.
Sprint 24 closure: release notes and demo DONE 2026-08-03 2026-08-03 Close out sprint 24: generate release notes from the collected PR data and closed tasks' Result sections, capture demo screenshots via a QA test scenario, and write the retrospective.
Classify FK-like/lookup entities and decide badge vs image vs plain-text rendering policy ABANDONED 2026-07-25 2026-07-30 Merged into the badge-adoption-audit story above – same underlying question asked from two angles.
Junction eventing: extend codegen with notify-trigger, changed-event, and event-registrar facets for the junction model type ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Surfaced while testing the fallback badge: a badge_mapping edit has no live NATS event at all, unlike a regular entity – every junction table in the codebase (party_currency, party_country, party_counterparty, currency_currency_group, account_party, dataset_bundle_member, app_version_platform, badge_mapping) has zero eventing support since the notify-trigger/changed-event/event-registrar codegen facets are scoped to the entity model type only.
Commission remaining DQ entities ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from Sprint 23's DQ codegen commissioning story at close: subject_area, data_management history-dialog migration, change_reason_code bug, Data Librarian tree regression.
Codegen infrastructure follow-ups from DQ commissioning ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from Sprint 23's DQ codegen commissioning story at close: entity lint, NATS facet consolidation, compound natural-key SQL support, remaining lookup_entity migrations.
Unify entity key modeling: one way to declare primary/natural keys, with compound-key support DONE   2026-07-23 Design deep-dive from the compound natural-key task above: unify the two divergent SQL table-creation templates (surrogate-id domain_entity vs. surrogate-less table/lookup_entity) into one, driven by a single Columns + :primary_key: flag model shape; migrate every entity .org model to it; regenerate ores.dq only, refdata et al. deferred. Supersedes that task's narrower plan.
Finish integrating calendar reference data: XML export and DQ publish DONE 2026-07-22 2026-07-24 Split from Sprint 23's calendar reference data story at close: ORE XML export boundary mapping and DQ-publish for currency_country/currency_calendar.
Calendar entity follow-ups: date picker, list-pagination fix, QuantLib materialization DONE 2026-07-19 2026-08-03 Promoted from the product backlog: holiday-aware date picker widget, list-pagination truncation fix, and QuantLib calendar-holiday materialisation/adjustments. All three original acceptance items DONE. Closed at sprint 24 health review; three remaining pagination-scope follow-up tasks not required by acceptance split into a new sprint-backlog story below.
Calendar follow-ups: remaining hand-written list pagination cleanup ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from the calendar entity follow-ups story at sprint 24 close: three remaining follow-on tasks not required by that story's acceptance – backfill missing Qt-drawer hand-authored entities, fix legacy primary-key heading models, and paginate remaining hand-written Qt list entities.
Retire per-entity history dialogs: Phase C rollout ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from Sprint 23's history-dialog consolidation story at close: delete HistoryDialogBase and remaining per-entity dialogs once every ores.qt component has migrated onto the generic HistoryDialog.
IR Rates synthetic data: dataset seeding, index cleanup, dual-curve, quoting conventions ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Pulled in from product backlog: seed a realistic vintage dataset, normalize duplicate floating-index catalogs, extend to a dual discount/projection curve, add proper IR quoting-convention display.
Rate display conventions: convention-aware formatting across all Qt rate surfaces (FX + IR) ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from the IR Rates story: FX has the exact same convention-not-consumed gap CRM's own formatter fixed only for its own cells, so fix both families together – close the remaining FX rate-display gaps and add the IR equivalent (ir_index_convention + ir_rate_formatter).
Market data notation: design an ORE Studio canonical URN mapping to ORE/Bloomberg/Reuters DONE 2026-07-22 2026-07-27 Surfaced while sourcing the vintage IR dataset: our IR curve identifiers don't model ORE's real index/curve/quote key scheme. Survey ORE, Bloomberg, and Reuters notations and design a canonical ORE Studio URN that projects into each.
Migrate to oresmd, delete market_series qualifier and ore_key ABANDONED 2026-07-28 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from a product backlog capture: follow-on implementation to the oresmd design – migrate ir_curve_generation_config, market_series, and fx_spot_generation_config onto oresmd, then delete the legacy free-text qualifier/ore_key fields. Starting with an in-depth analysis task.
Extend oresmd to full ORE quote-type coverage ABANDONED 2026-07-30 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split off from the ORE curve-config/market-data XML round-trip task: oresmd's design represents ~7 of the 49 ORE quote types the market data catalogue documents. Extend the design and implementation family by family (IR, credit, equity, commodity, FX, inflation, volatility surfaces, correlation) so oresmd can express every ORE-supported identifier.
Fix image-batch NATS payload overflow, add SVG compression DONE 2026-07-22 2026-07-29 Surfaced while testing the vintage IR dataset: country flags partially failed to load because ImageCache batches image fetches by count, not byte size, so a batch of several large SVGs can exceed NATS's max payload and silently drop. Make batching byte-size aware (or move to HTTP storage transfer) and add compression.
Fix jetstream_admin missing gzip decompression DONE 2026-07-29 2026-07-29 Split from the image-batch story at close: peek_message()/peek_last_message() in jetstream_admin don't decompress gzip'd JetStream payloads, unlike extract_message(). Raised non-blocking in PR #1706 review.
Make NATS wire format configurable: JSON/MessagePack, decided once at startup DONE 2026-07-28 2026-08-03 Surfaced while scoping the image-batch story's raw-bytes-not-base64 follow-up: the base64 overhead isn't image-specific, it's every rfl::json-encoded NATS message. Build a single wire_codec chosen once at startup from .env, threaded through ores.service/ores.qt/ores.shell – solves the base64 problem for every message type at once, superseding the narrower image-specific task.
IR curve bootstrapping + official curve republish ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: bootstrap the raw instrument grid into a desk-consumable zero/discount curve, and republish it as an official curve stream.
Commission ores.qt.admin into codegen ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: inventory, model, and full-stack codegen for ores.qt.admin's entities; unblocks Phase C history-dialog retirement.
Commission ores.qt.analytics into codegen ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: inventory, model, and full-stack codegen for ores.qt.analytics's entities; unblocks Phase C history-dialog retirement.
Commission ores.qt.compute into codegen ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: inventory, model, and full-stack codegen for ores.qt.compute's entities; unblocks Phase C history-dialog retirement.
Commission ores.qt.marketdata into codegen ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: inventory, model, and full-stack codegen for ores.qt.marketdata's entities; unblocks Phase C history-dialog retirement.
Commission ores.qt.synthetic into codegen ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: inventory, model, and full-stack codegen for ores.qt.synthetic's entities; unblocks Phase C history-dialog retirement.
Commission ores.qt.trading into codegen ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: inventory, model, and full-stack codegen for ores.qt.trading's entities; unblocks Phase C history-dialog retirement.
Commission ores.qt.workspace into codegen ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: inventory, model, and full-stack codegen for ores.qt.workspace's entities; unblocks Phase C history-dialog retirement.
Generalize as-of and as-of-bucket queries across repositories ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: document and generalise the as-of/as-of-bucket query shapes proven on market_observations_repository.
Add a server-side rate-history endpoint for chart panels ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: shared server-side history endpoint for chart-style UI panels, starting with the CRM cross-rates matrix sparkline.
Audit ores.synthetic.service headers for missing export macro ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Promoted from an inbox capture: same latent Windows-export bug as PR #1656, audit for other unexported cross-boundary symbols.
Sprint 24 quick bug fixes: currency CRUD, party re-provisioning DONE 2026-07-22 2026-07-22 Promoted from inbox captures: currency add Save-disabled bug, currencies list pagination broken, party re-provisioning duplicate-key error.
Entity classification and drift baseline: ores.refdata pilot DONE 2026-07-31 2026-08-03 Settled the classification dimensions and built the automated entity-drift tool, proven on the ores.refdata pilot. Closed at sprint 24 health review; rollout to the remaining ~19 components split into the story below.
Entity classification and drift baseline across all components ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from the ores.refdata pilot story at sprint 24 close: run the classification/drift tool across every remaining component, produce the full quantified report, re-scope the 14 ad hoc per-component drift tasks using real data, and delete entity_coverage_matrix.org, entity_evaluation_checklist.org, and entity_catalogue.org.
Audit and standardize the display_order field across lookup/code-table entities ABANDONED 2026-07-25 2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Surfaced while capturing purpose_type manual screenshots: PurposeTypeDetailDialog is missing Display Order despite the SQL/spec having it and the list grid showing it. Define the field's semantics, survey affected entities (display_order appears in ~92 SQL files), fix the codegen Qt detail-dialog templates, backfill entities, and recapture manual screenshots.
Containerize the ORE Studio service runtime and verify it on a remote WSL host DONE 2026-07-23 2026-08-03 Containerized the service runtime, worked out the networking/deployment model for a native-Postgres remote host, and proved all 18 services plus a full Acme scenario running reproducibly on the Newton WSL host. Remaining WSL-offload cutover work split into a new sprint-backlog story below at sprint 24 health review.
Offload service and DB runtime to a WSL host over SSH ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from the containerize-and-deploy story at sprint 24 close: the actual cutover to running the dev environment's services/DB on a WSL host day-to-day, starting with first-class compass tooling to build/stage/transfer/deploy the service-runtime image to a remote host.
Split ORE Studio services into one container per service ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Surfaced while building the Docker service-runtime deployment: move from the single-container process-supervisor (controller exec'ing the other 17 services as child processes) to one container per service, orchestrator-supervised.
Systemd resource management and per-environment isolation ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Root cause of the 2026-07-31 reboot: compass services was entirely cgroup-unaware, and Claude session slices had no MemoryMax anywhere on the box, so kernel OOM was a global decision rather than a per-environment one. Converge compass onto systemd as the single wrapper for process lifecycle across the fleet, with per-environment resource limits. Was missing from this table – wired in retroactively at sprint 24 health review.
Migrate shared ccache/build storage to btrfs for reflink-safe hardlink-free caching DONE 2026-07-28 2026-07-29 Surfaced while investigating repeated NATS provisioning timeouts: root-caused to ccache's hard_link=true store step racing across concurrent worktree builds on ext4 (no reflink support), corrupting a shared object file. Reformat /mnt/development to btrfs, reconfigure ccache for file_clone, recreate every worktree and the Postgres cluster.
Compass quality-of-life improvements DONE 2026-07-29 2026-08-03 Small developer-experience improvements to the compass CLI that don't fit any single domain story. Shipped: compass claude, a systemd-scoped Claude Code launcher, and environment-scoped naming. Remaining not-yet-started tasks split into a new sprint-backlog story below at sprint 24 health review.
Compass quality-of-life improvements: remaining follow-ups ABANDONED   2026-08-03 Carried unfinished to the product backlog inbox at sprint 24 close. Split from the compass quality-of-life improvements story at sprint 24 close: three remaining self-contained tasks not yet started – prune merged git branches, show systemd scope info in fleet/bearings, support multiple named .env files.
Replace GLOB_RECURSE with explicit source lists across the build DONE 2026-07-28 2026-07-29 Surfaced while debugging pair_code flag icon task's mandatory pre-PR build: file(GLOB_RECURSE …) without CONFIGURE_DEPENDS silently misses new/changed source files after a rebase until a manual reconfigure, causing both link failures and residual ABI-mismatch memory corruption. A CONFIGURE_DEPENDS mitigation was sideloaded onto the –entity filter task's PR; this story replaces GLOB_RECURSE entirely with explicit, checked-in source lists – the idiomatic fix.
Automate connections.db master-password unlock via CLI/env DONE 2026-07-29 2026-07-29 Let ores.qt supply the connections.db master password via CLI arg or .env instead of requiring a click through MasterPasswordDialog every launch, so QA/automation scenarios and multi-client dev workflows aren't blocked on a manual unlock dialog.
Fix cross-tenant badge lookup: stale generated repositories ignore tenant_read_scope: shared DONE 2026-07-29 2026-07-30 Found by brave_hopper: badge repositories hard-code a tenant_id filter narrower than RLS. Investigated live: an independent upstream provisioning change (tenants now get their own bundle-published badge copy) already resolved the reported symptom; the RLS-fallback fix was reverted after live QA showed it causes duplicate-row regressions given the new provisioning behaviour. Kept an unrelated, harmless primary-key model-shape migration discovered along the way.
Update vendored ORE Engine to 1.8.16.0 DONE 2026-07-30 2026-08-01 Refresh the vendored ORE Engine binary package, examples, and XSD schemas to a current build, fixing the previously-broken (non-self-contained) engine package and automating hand-patch preservation across future refreshes.

Hotfixes

Story State Start End Description
Hotfix: CMake 4.4 uninitialized-variable warnings on Linux CI DONE 2026-07-22 2026-07-22 Linux CI started emitting a batch of new CMake Warning (uninitialized) messages on 2026-07-20, all from the project() call at CMakeLists.txt:51 under CMake 4.4.0.
Hotfix: remaining CMake 4.4 uninitialized-variable warnings DONE 2026-07-22 2026-07-22 Fix the remaining CMake 4.4.0 uninitialized-variable warnings discovered while fixing the vcpkg-toolchain batch in PR #1664: two genuine use-before-define bugs (SPRINT, flags), one dead-variable reference (DOGEN_VERSION), and CPack/InstallRequiredSystemLibraries vendored-module noise.
Party generator test expectations and business_center_code drift DONE 2026-07-28 2026-07-28 party_generator_produces_valid_instance asserted stale pre-standardization values (version==1, change_reason_code=='system.new'); party.org's business_center_code generator block specifies GBLO, an FpML code not guaranteed seeded, a landmine for the next clean regen.
Windows CI: pip self-upgrade fails invoking pip.exe directly DONE 2026-07-28 2026-07-28 compass.sh's requirements-install step ran '$VENV_BIN/pip install –upgrade pip -q', which on Windows fails because pip.exe cannot overwrite its own running binary ('ERROR: To modify pip, please run the following command…'), breaking the Windows CI job's Setup Database step.
Qt as-of combo facet and primary-key model shape migration DONE 2026-07-28 2026-07-28 The as-of lookup facet's Qt-side wiring was hand-patched onto generated output instead of becoming a template facet, invisible to codegen. Adds a combo_as_of_fetch_fn detail-field annotation to the Qt detail-dialog codegen.
Fix Windows CMake warning: uninitialized CMAKE_THREAD_LIBS_INIT DONE 2026-07-30 2026-07-30 target_link_libraries references ${CMAKE_THREAD_LIBS_INIT} across ~98 CMakeLists.txt files; the legacy variable can be left uninitialized on some platforms/generators (e.g. Windows), producing a CMake warning at every affected target. Replace with the Threads::Threads imported target, which find_package(Threads REQUIRED) always defines.
Hotfix: Revert PR #1788 (IAM model drift) — broken DB schema DONE 2026-07-31 2026-07-31 PR #1788 broke the database schema on main; revert merge commit 7645312a2 to restore a good state.
Hotfix: xsdcpp domain drift on compositeTradeComponents SubTrade DONE   2026-08-01 instruments.xsd's compositeTradeComponents was updated upstream to use subTradeGroup/SubTrade (old Trade element commented out), but domain.hpp/domain.cpp were never regenerated to match.
Hotfix: default wire codec flip to msgpack breaks ores.qt.headless.tests DONE 2026-08-02 2026-08-03 b34181e6a flipped the process-wide default_wire_codec() from JSON to MessagePack, but instrument_parse_dispatch_tests.cpp still hand-encodes its fixtures via rfl::json::write() – every parse_trade_instrument dispatch test now fails to decode, red on Continuous Linux/MacOS/Windows and Nightly Build across main since. Merged as PR #1807.
Hotfix: Windows -Werror deprecated-declarations on std::getenv in compute_commands.cpp DONE 2026-08-03 2026-08-03 Windows clang-cl build fails with -Werror=deprecated-declarations on std::getenv in projects/ores.shell/src/app/commands/compute_commands.cpp:51 (MSVC STL flags it in favour of _dupenv_s). Replace with the project's ores::platform::environment::environment::get_value_or_default() helper, consistent with the prior fix applied to systemd_notify.cpp (commit 530a5f97b). Merged as PR #1810.
Hotfix: release notes export produces broken/relative id links DONE   2026-08-03 ores-build-release-notes.el never called org-id-update-id-locations, so every id link outside release_notes.org itself rendered as a broken-link placeholder in the exported .md, the GitHub release body. Also fix the org-id link exporter to resolve to the published site, matching ores-build-manual.el's convention, instead of a relative .md path that does not exist standalone in a release body.

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
     

Health Review

# Date Day Overall Task
1 2026-07-30 day 9 RED Health review 1 — sprint 24 mid-sprint analysis
2 2026-08-03 day 13 RED Health review 2 — sprint 24 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.

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

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.

pr_cycle.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

See the release notes' Post Mortem section for the full write-up. Summary:

What worked

  • High absolute throughput: 151 PRs merged, 34 stories closed DONE, across a sprint that ran roughly double its intended window.
  • The story-splitting pattern (audit vs. rollout, containerise vs. cutover, pilot vs. full rollout) kept delivered work honestly recorded as shipped instead of one bloated story silently carried forward wholesale at close.
  • Once a cross-platform regression was found, the response was thorough: the wire-codec hotfix manually dispatched Continuous macOS/Windows against the fix branch to confirm before merging.
  • Two written health reviews (mid-sprint and close) caught the goal drift and duration overrun in a durable record.

What didn't work

  • The sprint ran ~13-14 days against a 7-day target; the day-9 health review already flagged this RED, and it still ran four-plus days past that verdict.
  • The "improve IR generation" mission goal didn't ship a real improvement – only a design document.
  • Cross-platform breakage (Windows/macOS) was repeatedly found late, only by CI – five of this sprint's seven hotfixes were exactly this pattern.
  • Two changes with many silent consumers (msgpack default flip, an upstream XSD schema update) broke consumers nothing forced anyone to check before merging.
  • Sprint bookkeeping drifted from reality multiple times: stale Stories-table rows, a story with no table row at all.
  • A stale, pre-systemd fleet of ~90 orphaned processes sat running undetected for three-plus days, causing intermittent NATS decode failures.

Improve next sprint

  • Enforce the 7-day box at the day-of-decision level.
  • Treat "improve X" mission goals as requiring a shipped, user-visible improvement, not just design/analysis work.
  • Dispatch Windows/macOS CI proactively for platform-sensitive changes.
  • Treat "flip a global default" or "an upstream schema changed" as its own checklist item: grep every consumer before merging.
  • Wire every new story into sprint.org's Stories table at creation time; spot-check story-file State against the table periodically.
  • Prioritise the "Systemd resource management and per-environment isolation" story next sprint.

Release Notes

See release_notes.org for the full narrative.

Emacs 29.3 (Org mode 9.6.15)