Sprint Backlog 08

Sprint Mission

  • implement basic reference data.

Stories

Active

Table 1: Clock summary at [2026-01-11 Sun 22:00], for Sunday, January 11, 2026.
Tags Headline Time     %
  Total time 15:12     100.0
  Stories 15:12     100.0
  Active   15:12   100.0
code Change reasons UI fixes     0:57 6.2
code Add UI for log viewing     1:35 10.4
code Add key entity skills     3:35 23.6
code Analysis on the entities necessary to create books     3:05 20.3
code Finish missing entity features in shell     4:11 27.5
code Discover notification channels dynamically     1:49 12.0
Table 2: Clock summary at [2026-01-11 Sun 22:00]
Tags Headline Time     %
  Total time 81:20     100.0
  Stories 81:20     100.0
  Active   81:20   100.0
agile Sprint and product backlog refinement     1:50 2.3
code Rerun SQL scripts from scratch     7:52 9.7
code Run qt client and validate all new features     1:19 1.6
code Refactor options and parser     0:27 0.6
code Check functionality in ores.wt     2:03 2.5
code Rename ores.shell to ores.comms.shell     1:30 1.8
code Review HTTP service     7:24 9.1
code Assorted fixes to currency dialog     4:19 5.3
code Add support for offsets in pagination     1:46 2.2
code Assorted fixes to feature flags dialog     2:52 3.5
code Add country support     6:31 8.0
code Amend and delete reasons base infrastructure     5:58 7.3
code Change reasons UI fixes     3:34 4.4
code Assorted fixes to currencies dialog     7:52 9.7
code Add UI for log viewing     1:35 1.9
code Add key entity skills     3:35 4.4
code Analysis on the entities necessary to create books     3:05 3.8
code Finish missing entity features in shell     4:11 5.1
code Discover notification channels dynamically     1:49 2.2
code Assorted fixes to accounts dialog     1:10 1.4
code Review comms analyser work     0:27 0.6
code Review telemetry work     10:11 12.5

COMPLETED Sprint and product backlog refinement   agile

Updates to sprint and product backlog.

sprint_backlog_08_stories_pie_sorted.png

sprint_backlog_08_stories.png

sprint_backlog_08_tags.png

COMPLETED OCR scan notebooks for this sprint   infra

We need to scan all of our finance notebooks so we can use them with AI. Each sprint will have a story similar to this until we scan and process them all.

POSTPONED Add AI generated sprint summary   infra

At the end of the sprint, generate the sprint summary using the prompt.

CANCELLED Sprint Demo   infra

Time spent doing the demo. This is the first one so it will be very basic.

  • Presentation
    • ORE Studio v0.0.4, "Fazenda Camilunga"

      Marco Craveiro Moimba Software Engineering Released on 16th November 2025

COMPLETED Rerun SQL scripts from scratch   code

We need to validate the scripts and fix all issues we find.

This pull request significantly refines the integration of TimescaleDB within the ORES SQL schema, making it more adaptable to different TimescaleDB license tiers and ensuring robust functionality. It introduces runtime license detection to intelligently enable or disable advanced TimescaleDB features, alongside implementing per-database extension installation for PostgreSQL. Furthermore, this PR substantially expands the project's documentation by adding detailed architectural overviews for the ores.assets and ores.comms.analyser components, and a comprehensive guide to the overall SQL schema, enhancing clarity and maintainability for developers and users alike.

Highlights:

  • Enhanced TimescaleDB Integration: The system now correctly integrates with both Apache and Timescale license editions of TimescaleDB, dynamically adjusting features based on the detected license.
  • Per-Database Extension Installation: PostgreSQL extensions are now installed on a per-database basis, ensuring proper functionality within each ORES database instance, including the template.
  • Runtime License Detection: SQL scripts now include runtime checks for the TimescaleDB license, gracefully skipping advanced features like compression, retention policies, and continuous aggregates if only the Apache license is present.
  • New Component Documentation: Detailed Org-mode documentation has been added for the ores.assets and ores.comms.analyser components, outlining their architecture, domain types, and usage.
  • Comprehensive SQL Schema Documentation: The ores.sql.org file has been added, providing extensive documentation on the ORES SQL schema, including architecture, design patterns, PostgreSQL extensions (especially TimescaleDB), and database creation processes. Schema Prefix for TimescaleDB Functions: TimescaleDB function calls in sessions_create.sql and session_stats_create.sql now explicitly use the public. schema prefix to avoid issues when search_path is set to 'ores'.

COMPLETED ores.qt is not using client session   code

Rationale: implemented in previous sprint.

Refactor client manager to use it.

COMPLETED Remove seeders in code   code

Since we have to seed from SQL scripts, having code seeding as well is just confusing.

This pull request fundamentally shifts the database seeding mechanism from C++ application code to SQL population scripts. This change centralizes the initial setup of permissions, roles, and system flags directly within the database template, simplifying application startup logic and ensuring consistent data across new instances. Consequently, the test suites have been refactored to accommodate this pre-seeded state, improving test reliability and reflecting the new database initialization flow.

Highlights:

  • Migration to SQL for Database Seeding: The C++ rbac_seeder and system_flags_seeder have been replaced with dedicated SQL population scripts for permissions, roles, and system flags, centralizing initial data setup within the database template.
  • Directory Renaming for Clarity: The sql/data/ directory, containing various population scripts and assets, has been renamed to sql/populate/ to better reflect its purpose.
  • Test Suite Adaptation: Numerous test cases across ores.iam, ores.refdata, and ores.variability have been updated to correctly handle pre-seeded database data, moving away from assumptions of empty databases and instead accounting for existing entries.
  • Streamlined Instance Initialization: The init_instance.sql script has been simplified, removing direct seeding calls as the population is now handled during the database template creation process.
  • Documentation Refinements: A modeling link in projects/modeling/system_model.org was corrected, and doc/recipes/sql_recipes.org was updated with new SQL commands and output examples.

COMPLETED Run qt client and validate all new features   code

We added quite a few new features during the holidays but due to the laptop constraints we could not validate them properly. Check they all work correctly and fix what needs fixing. Features:

  • session monitoring. Looks good for tracking, cannot view in app.
  • flags display. Looks good.
  • Roles and permissions: cannot edit, display should use a table.

COMPLETED Refactor options and parser   code

We have a lot of boost program options parsers and options. We need to do an inventory of all of the implementations and figure out if we can have common code under utility.

This pull request significantly refactors the command-line interface (CLI) configuration across various applications by introducing a modular and composable architecture. The primary goal is to ensure consistency in how command-line options are defined and parsed, making it easier to manage and extend CLI functionality. This change centralizes common options and provides dedicated classes for specific configurations like server, client, and compression settings, while also enhancing logging capabilities with a new PID inclusion option.

Highlights:

  • Composable CLI Configuration: Introduced new composable configuration classes (common_configuration, server_configuration, client_configuration, compression_configuration) to standardize command-line options across applications.
  • Standardized CLI Flags: Standardized common CLI flags such as -h/–help, -v/–version, and –verbose across all relevant applications.
  • Log PID Inclusion: Added a new –log-include-pid option to include the process ID in log filenames, enhancing log management and identification.
  • Application Migration: Migrated ores.comms.service, ores.cli, ores.qt, and ores.comms.analyser applications to utilize the new configuration architecture and standardized flags.

COMPLETED Check functionality in ores.wt   code

We created the application but did not validate it.

Notes:

  • need support for dark and light themes.
  • currencies are hard-coded.
  • password written to log file.
  • can't see details in accounts dialog.
  • edit currency dialog is too tall.
  • use images for site logo, etc.

COMPLETED Rename ores.shell to ores.comms.shell   code

The shell is specific to the binary protocol.

This pull request implements a significant renaming effort, transitioning the ores.shell component to ores.comms.shell. This change clarifies the component's specific function as an interactive shell for the binary communications protocol. The modifications are comprehensive, touching all aspects of the project from file paths and C++ namespaces to build configurations and user-facing documentation, ensuring consistency and improved clarity regarding the component's purpose.

Highlights:

  • Project Renaming: The ores.shell project has been renamed to ores.comms.shell to accurately reflect its role as a shell specifically designed for the binary communications protocol.
  • Namespace Updates: All C++ namespaces within the project have been updated from ores::shell to ores::comms::shell.
  • Build System & Paths: CMake targets, include paths, and header guards across the project have been modified to align with the new naming convention.
  • Documentation Alignment: System UML diagrams, documentation references, and shell recipe examples have been updated to reflect the ores.comms.shell name.

COMPLETED Review HTTP service   code

We need to make sure the swagger works, create recipes etc.

COMPLETED Assorted fixes to currency dialog   code

At present the following is not working or is a snag:

  • can we make the details windows unmaximisable.
  • We need to either make the columns configurable, or remove some less useful columns such as symbol, fraction etc. These are still visible in details.
  • can we refactor reload logic into common entity code?
  • wrong icon in revert for currency history. no option to reload history
  • when creating a new currency we cannot attach a flag to it.

COMPLETED Troubleshoot skills in claude   infra

Rationale: this seems to work now, with the rename to SKILLS.md.

We don't seem to be able to use skills reliably.

Links:

COMPLETED Add support for simple log shipping   code

Rationale: implemented with telemetry work.

It would be very useful to be able to browse both client and server logs from the client (either command line or qt). This will be even more useful with AI agents. Add a simple component that periodically loads up the logs to the database.

Possible names: log shipping, log forwarding, etc.

COMPLETED Merge toolbars when you maximise currencies   code

Rationale: you can't maximise currencies any longer.

At present we end up with two tool bars, one below the other.

COMPLETED Add support for JWT   code

Rationale: implemented.

When we add support for HTTP/REST, we need to ensure it uses JWT.

Links:

COMPLETED Add support for offsets in pagination   code

This pull request focuses on a significant upgrade to the sqlgen library, moving to version 0.6.0. This update allows for the removal of several previous workarounds, including custom vcpkg overlay ports and a single_connection hack for aggregation queries. The primary impact is the adoption of sqlgen's native offset() and limit() operators, which streamlines pagination logic across various repositories, improving the robustness and maintainability of database interactions throughout the codebase.

Highlights:

  • SQLGen Update: The sqlgen library has been updated to version 0.6.0 by updating the vcpkg submodule to the latest release.
  • Overlay Port Removal: Custom vcpkg overlay ports for sqlgen have been removed as the necessary fixes and features are now merged upstream into the main sqlgen repository.
  • Native Pagination Support: Manual offset and limit workarounds in database queries have been replaced with sqlgen's new native offset() and limit() operators, simplifying pagination logic.
  • Single Connection Removal: The single_connection hack, previously used for aggregation queries due to a sqlgen limitation (issue Fix cli tests #99), has been removed as sqlgen 0.6.0 resolves this issue. Consequently, the single_connection member has been removed from the database context entirely.
  • Expanded Pagination: Pagination support (offset/limit + total count) has been added to feature_flags_repository, role_repository, permission_repository, image_repository, tag_repository, and login_info_repository.

Now available in vcpkg with all required features.

At present we disabled pagination in UI because sqlgen does not support offset. We implemented this feature in sqlgen. When it is released to vcpkg we should update our code to use it.

Remember also this:

// HACK: Using single connection instead of session because sqlgen sessions
// doesn't seem to support SELECT FROM with aggregations. Plain connections
// work fine. This is a temporary workaround until the sqlgen library is
// fixed. See: https://github.com/getml/sqlgen/issues/99
struct count_result {
    long long count;
};

Links:

COMPLETED Add faker support to model   code

Rationale: already implemented.

vcpkg will support faker soon:

When that is available, we should try to add support for it.

COMPLETED Assorted fixes to feature flags dialog   code

This pull request significantly enhances the user experience for managing feature flags within the Qt application. It introduces real-time feedback through event subscriptions and visual cues like pulsing highlights for recent changes and colored badges for status. Additionally, it improves data presentation by adding new columns and refining the detail dialog, while also updating the backend protocol to support these new data points. The changes aim to make feature flag management more intuitive and informative for users.

Highlights:

  • Real-time Updates: The UI now subscribes to feature flag change events, enabling real-time updates and notifications when flags are modified externally.
  • Recency Highlighting: Recently modified feature flags in the list view will now display a pulsing yellow highlight to draw attention to their recent changes.
  • Enhanced 'Enabled' Column: The 'Enabled' column in the feature flags list now uses colored badges (green for 'Yes', gray for 'No') for improved visual clarity.
  • New Data Columns: The feature flags list has been augmented with 'Version' and 'Recorded At' columns, providing more detailed historical context for each flag.
  • Improved Detail Dialog UX: The feature flag detail dialog has been updated to use a combo box for the 'Enabled' status and now displays the 'Recorded At' timestamp.
  • Optimized Reload Behavior: Saving a feature flag or receiving an external change notification now marks the list as 'stale' instead of triggering an immediate auto-reload, improving responsiveness.
  • Protocol Updates: The underlying communication protocol has been updated to version 20.0 to include the new 'recorded_at' and 'version' fields for feature flags.
  • Logging Cleanup: All MXN-specific debug logging has been removed from the ImageCache component, streamlining log output.

COMPLETED Create a set of fake currencies   code

We need to create fake data so we can explore the problem domain. This is something to work on in the future. We can use LLMs to help with the fake data, where it makes sense.

Example:

Country code Country name Currency Code Currency Number Currency
AL Aerilon ALD 10001 Aerilonian Dollar
AR Arcturia ARA 10002 Arcturian Arct
BA Balthoria BAF 10003 Balthorian Florin
BE Belloria BEB 10004 Bellorian Bell
CA Calandria CAC 10005 Calandrian Crown
CD Caledonia CDC 10006 Caledonian Caled
DA Daeloria DAD 10007 Daelorian Dinar
DE Delvadia DED 10008 Delvadian Delv
ER Eriador ERE 10009 Eriadoran Euro
ES Esteria ESE 10010 Esterian Est
FE Feloria FEF 10011 Felorian Franc
FN Fendaria FNF 10012 Fendarian Fen
GA Galdoria GAG 10013 Galdorian Galleon
GR Grendoria GRG 10014 Grendorian Grend
HE Helvetia HEF 10015 Helvetian Franc
HY Hydronia HYH 10016 Hydronian Hyd
IR Iridia IRD 10017 Iridian Dollar
IT Ithaca ITI 10018 Ithacan Ith
JE Jethro JEJ 10019 Jethronian Jet
JO Jorvik JOK 10020 Jorvikian Krona
KA Kaelor KAK 10021 Kaelorian Krown
KR Krynn KRK 10022 Krynnish Krynn
LU Luminia LUL 10023 Luminian Lum
LY Lysandria LYL 10024 Lysandrian Lira
MA Maldoria MAM 10025 Maldorian Mal
MR Mariposa MRP 10026 Mariposan Peso
NE Nektonia NEN 10027 Nektonian Nek
NT Netharia NTN 10028 Netharian Naira
OR Orinoco ORB 10029 Orinocan Bolivar
OL Orlanthia OLO 10030 Orlanthian Orl
PA Paldoria PAP 10031 Paldorian Peso
PY Pyrrhia PYP 10032 Pyrrhian Pyr
QU Quentaria QUQ 10033 Quentarian Quen
QN Quinaria QNQ 10034 Quinarian Quetzal
RE Rendellia RER 10035 Rendellian Rend
RI Rivenia RIR 10036 Rivenian Ruble
SE Serendia SES 10037 Serendian Shilling
SI Sildoria SIS 10038 Sildorian Sild
TA Tandor TAT 10039 Tandorian Taka
TE Tenebria TET 10040 Tenebrian Ten
UL Uldoria ULU 10041 Uldorian Uld
UT Utopia UTU 10042 Utopian Unit
VA Valoria VAV 10042 Valorian Valt
VL Valtaria VLV 10043 Valtarian Val
WI Wintervale WIW 10044 Wintervalean Won
WY Wysteria WYW 10045 Wysterian Wys
XA Xandria XAX 10046 Xandrian Xan
XE Xenoria XEX 10047 Xenorian Xen
YS Yslandia YSY 10048 Yslandian Yen
ZE Zephyria ZEZ 10049 Zephyrian Zephyr

COMPLETED Add country support   code

This pull request significantly expands the application's data management capabilities by adding full support for ISO 3166-1 countries. It establishes new data structures, persistence mechanisms, and a service layer for country-related operations, alongside user interface components for interactive management. The changes ensure that country data is stored bitemporally, allowing for historical tracking and auditing, and provides a framework for associating countries with visual assets like flags.

Highlights:

  • ISO 3166-1 Country Support: Introduced a comprehensive system for managing ISO 3166-1 countries, including domain models, bitemporal repository, and a dedicated service layer within the ores.refdata module.
  • Database Schema and Population: Added new SQL scripts to create a bitemporal countries table and populate it with data for all 249 ISO 3166-1 countries. Also included drop scripts for cleanup.
  • Country Image Linkage: Implemented a new country_images table and associated domain, repository, and mapper components in ores.assets to link countries with their flag images.
  • Web UI Components: Developed new Wt UI components, country_list_widget and country_dialog, enabling full CRUD (Create, Read, Update, Delete) operations for country data through the web interface.
  • Service Integration: Integrated the new country_service into the application_context to make country management functionalities available across the application.

Add standard ISO country codes.

COMPLETED Amend and delete reasons base infrastructure   code

This pull request significantly enhances the database's change tracking capabilities by introducing a comprehensive amendment control schema. The new tables and associated logic provide a structured way to record and categorize reasons for data modifications and deletions, which is crucial for maintaining data integrity and meeting stringent regulatory requirements. This foundational change enables a more auditable and compliant data management framework.

Highlights:

  • New Temporal Tables for Amendment Control: Introduced three new temporal tables: reason_categories, amendment_reasons, and entity_reason_categories. These tables are designed to track changes and provide historical context for data amendments and deletions.
  • Regulatory-Compliant Taxonomy: Implemented a taxonomy for amendment reasons that aligns with key financial regulatory standards, including BCBS 239, FRTB, FINRA, and MiFID II, ensuring robust auditability and compliance.
  • Idempotent Data Population: Added idempotent population scripts that seed the new tables with initial data, including 3 reason categories ('system', 'common', 'trade') and 17 specific amendment reasons. This ensures consistent setup across environments.
  • Temporal Versioning and Soft Deletes: Each new table incorporates temporal versioning via valid_from and valid_to columns, managed by BEFORE INSERT triggers. Deletion is handled as a soft delete using INSTEAD OF DELETE rules, preserving historical data.
  • Tasks
    • [X] Create SQL schema for change_reason_categories and change_reasons tables
    • [X] Create C++ domain types (change_reason_category, change_reason)
    • [X] Create JSON I/O for both types
    • [X] Create Table I/O for both types
    • [X] Create generators for both types
    • [X] Create repository entities and mappers
    • [X] Create repositories with CRUD operations
    • [X] Create change_management_service
    • [X] Create messaging protocol (get_change_reason_categories, get_change_reasons, get_change_reasons_by_category)
    • [X] Integrate handlers into accounts_message_handler
    • [X] Build and test (895 assertions, 227 test cases passed)
    • [X] Create Qt UI for change management
    • [ ] Add protocol support for creating/updating/deleting reasons
  • Modified files
    • projects/ores.iam/include/ores.iam/domain/change_reason_category.hpp - Domain type
    • projects/ores.iam/include/ores.iam/domain/change_reason.hpp - Domain type
    • projects/ores.iam/src/domain/change_reason_category_json_io.cpp - JSON serialization
    • projects/ores.iam/src/domain/change_reason_json_io.cpp - JSON serialization
    • projects/ores.iam/src/domain/change_reason_category_table*.cpp - Table I/O
    • projects/ores.iam/src/domain/change_reason_table*.cpp - Table I/O
    • projects/ores.iam/src/generators/change_reason_category_generator.cpp - Test data generation
    • projects/ores.iam/src/generators/change_reason_generator.cpp - Test data generation
    • projects/ores.iam/src/repository/change_reason_category_*.cpp - Repository layer
    • projects/ores.iam/src/repository/change_reason_*.cpp - Repository layer
    • projects/ores.iam/src/service/change_management_service.cpp - Service layer
    • projects/ores.iam/src/messaging/change_management_protocol.cpp - Protocol messages
    • projects/ores.iam/src/messaging/accounts_message_handler.cpp - Handler integration
    • projects/ores.comms/include/ores.comms/messaging/message_types.hpp - New message types (0x2050-0x2055)
    • projects/ores.iam/include/ores.iam/eventing/change_reason_category_changed_event.hpp - Category change event
    • projects/ores.iam/include/ores.iam/eventing/change_reason_changed_event.hpp - Reason change event
    • projects/ores.qt/include/ores.qt/ClientChangeReasonCategoryModel.hpp - Qt model for categories
    • projects/ores.qt/src/ClientChangeReasonCategoryModel.cpp - Qt model implementation
    • projects/ores.qt/include/ores.qt/ChangeReasonCategoryMdiWindow.hpp - Category list window
    • projects/ores.qt/src/ChangeReasonCategoryMdiWindow.cpp - Category list window implementation
    • projects/ores.qt/include/ores.qt/ChangeReasonCategoryController.hpp - Category controller
    • projects/ores.qt/src/ChangeReasonCategoryController.cpp - Category controller implementation
    • projects/ores.qt/include/ores.qt/ClientChangeReasonModel.hpp - Qt model for reasons
    • projects/ores.qt/src/ClientChangeReasonModel.cpp - Qt model implementation
    • projects/ores.qt/include/ores.qt/ChangeReasonMdiWindow.hpp - Reason list window
    • projects/ores.qt/src/ChangeReasonMdiWindow.cpp - Reason list window implementation
    • projects/ores.qt/include/ores.qt/ChangeReasonController.hpp - Reason controller
    • projects/ores.qt/src/ChangeReasonController.cpp - Reason controller implementation
    • projects/ores.qt/ui/MainWindow.ui - Added menu entries for change management
    • projects/ores.qt/include/ores.qt/MainWindow.hpp - Added controller declarations
    • projects/ores.qt/src/MainWindow.cpp - Integrated change management controllers

    Sketch analysis:

    All entities need a reason for amends and deletes, and they should also support comments.

    Different entities will have different reasons. For example, reasons for currencies, countries:

    • Front Office Error
    • Operations Error
    • Dummy Amend (we need a button for dummy amend and maybe a better name)
    • Duplicate (delete only)

    We need some kind of grouping for the reasons:

    • static data group
    • trade related
    • market data

    And the reason should say if is applicable to amend and/or delete.

COMPLETED Change reasons UI fixes   code

This pull request significantly enhances the system's data integrity and auditability by introducing a robust change tracking mechanism. It establishes a structured framework for recording and categorizing reasons behind all entity modifications, crucial for regulatory compliance and transparent data management. This foundational change impacts both the database schema and the user interface, ensuring that every alteration is justified and documented.

Highlights:

  • Change Tracking Infrastructure: Introduced 'change_reasons' and 'change_reason_categories' database tables for comprehensive entity modification tracking.
  • Entity Integration: Integrated 'change_reason_code' and 'change_commentary' fields into all temporal entities across the system for audit trails.
  • Qt User Interface for Management: Implemented a Qt UI for administrators to manage change reason categories and individual reasons.
  • Mandatory Reason Selection: Added a 'ChangeReasonDialog' popup to enforce mandatory reason selection when saving existing entities in the UI.
  • Client-Side Caching: Developed a 'ChangeReasonCache' for efficient client-side caching and event-driven refresh of change reasons.
  • History Visibility: Enhanced entity history dialogs to display the associated change reason and commentary.
  • Protocol Version Update: Updated the messaging protocol version to 21.1, standardizing naming conventions (e.g., 'list' to 'get', 'create'/'update' to 'save') and incorporating change tracking fields.

Review:

  • both: missing reason for change in change reasons. Done.
  • categories: does not ask for reason on save, no option to add comment. Done.
  • categories: remove description from main list, add header configuration so users can add them if they want. Done
  • change reasons are not showing categories in combo box. would be nice if there was a box to show the category details near the combo box. Done.
  • both: recorded at uses human readable time but no other dialog does. Done.
  • change reason: make description a bigger box. Done.
  • change reason cannot save. Done.
  • history: don't need change reason and commentary in full details, it's already at the top. Done.
  • save dialog: rename "save changes" to just "save". Done.
  • details dialogs: should allow save even when no fields have changed, but then it should be hard coded to touch. will be checked on the server side. Done.
  • save dialog: cannot be touch if any of the fields changed. will be checked on the server side. Done.
  • details dialogs: meta-data missing change management fields. Done.
  • code: CHECK_DIFF_STRING: why not use a regular c++ function? avoid macros. Done.
  • both change management dialogs: should be possible to add, delete and edit. Done.
  • change reason: code column should be wider.
  • change reason: commentary column is too narrow.
  • both change management dialogs: remove description, will show in details dialog.
  • change reason: is grid following CSS with spacing, etc? Done.
  • both change management dialogs: recorded at should use human readable time. Done.
  • both change management dialogs: icons not following skill icon-guidelines. Done.
  • both change management dialogs: no history. Done.
  • both change management dialogs: details is not a standard details window like all other details. Done.
  • change reason: use emblems like we do in accounts for yes and no, with yes in green. Done.
  • both change management: menu icons for change are not very informative. have a look at the icons for change reasons and change reason categories: /home/marco/Development/fluentui-system-icons-mayin/assets. Done.
  • both change management dialogs: not using standard icons. see skill icon-guidelines. Done.
  • refactor: have a common save dialog.

COMPLETED Assorted fixes to currencies dialog   code

  • updating flag does not seem to update after reload. Done.
  • can't see flag changes in history. Done.
  • cannot revert to version in history. Get an error saying incorrect version. Done.

COMPLETED Add UI for log viewing   code

We should be able to see the log from qt.

Notes:

  • it should be possible to change the log level from the UI for both the Qt app and the service.

Links:

COMPLETED Add key entity skills   code

  • we need skills for http end points, shell, cli, qt and wt.
  • Qt Entity

    This pull request significantly enhances development workflows by introducing two new documentation-based skills. The 'qt-entity-creator' skill provides a structured, phase-based guide for building comprehensive Qt user interfaces for domain entities, from data models to controllers. Complementing this, the 'feature-branch-manager' skill offers a robust procedure for handling Git branches across these multi-phase projects, ensuring a clean and manageable commit history. Furthermore, the 'domain-type-creator' skill has been updated to incorporate these new phase-based PR checkpoints. The PR also includes an in-depth analysis of existing Qt entity dialogs, identifying areas for refactoring to improve code consistency and reduce duplication.

    Highlights:

    • New Qt Entity Creator Skill: A new skill, 'qt-entity-creator', has been added to guide the creation of Qt UI components for domain entities, including list windows, detail dialogs, history dialogs, and controllers.
    • New Feature Branch Manager Skill: A new 'feature-branch-manager' skill is introduced to provide a structured approach for managing Git branches across multi-phase implementations, ensuring a clean and organized history.
    • PR Checkpoint Phases Integration: Both the new 'qt-entity-creator' skill and the existing 'domain-type-creator' skill have been updated to include explicit PR checkpoint phases, promoting incremental development and review cycles.
    • Entity Dialog Refactoring Analysis: A new analysis document has been added, detailing refactoring recommendations for existing Qt entity dialogs to reduce code duplication and improve consistency.
  • Shell Entity

    This pull request introduces a comprehensive new documentation skill designed to standardize and streamline the process of adding shell commands for domain entities. By breaking down the development into distinct, manageable phases, it provides clear, step-by-step instructions for implementing new commands, registering them with the REPL, and ensuring they are properly documented with runnable examples. This enhancement aims to improve consistency and ease of development for extending shell functionality.

    Highlights:

    • New Skill Introduction: A new skill, shell-entity-creator, has been added to guide developers in creating shell commands for domain entities within the ores.comms.shell framework.
    • Phased Development Guidance: The skill outlines a three-phase approach for command creation: Phase 1 covers header, implementation, and REPL registration for list/add commands; Phase 2 focuses on adding history commands with formatting helpers; and Phase 3 details the creation of recipe documentation.
    • Documentation Updates: The main skill catalog (claude_code_skills.org) has been updated to include the new shell-entity-creator skill, and cross-references have been added between this new skill and the ores-shell-recipes skill.
  • HTTP Entity

    This pull request introduces a new 'HTTP Entity Creator' skill, designed to guide developers through the process of building HTTP REST API endpoints for domain entities within the ores.http.server framework. The skill provides a structured, three-phase approach to implementing common CRUD operations, ensuring consistency in API design, integration with existing services, and automatic OpenAPI documentation generation.

    Highlights:

    • New Skill Introduction: Introduces the 'HTTP Entity Creator' skill, a comprehensive guide for building HTTP REST API endpoints for domain entities within the ores.http.server framework.
    • Phased Implementation Strategy: Outlines a structured, three-phase PR strategy for incrementally implementing API endpoints, covering initial setup, core CRUD operations, and documentation.
    • Standard CRUD Operations: Provides detailed instructions and code patterns for implementing common HTTP operations: GET (list with pagination, single by ID, history), POST (save/create/update), and DELETE (batch).
    • API Development Best Practices: Includes guidance on OpenAPI metadata generation, coroutine-based handler patterns, integration with the service layer, JSON serialization via rfl, and conventions for logging and URL patterns.
    • Documentation Updates: Adds a new documentation file doc/skills/http-entity-creator/skill.org and updates doc/skills/claude_code_skills.org to list the newly added skill.
  • HTTP Recipes

    This pull request significantly enhances the project's documentation capabilities by introducing a dedicated skill for managing HTTP API recipes. It standardizes the process for documenting and verifying HTTP endpoints, ensuring that API documentation remains current, accurate, and easily maintainable. The new skill provides clear guidelines for creating and updating recipes, improving the overall discoverability and usability of the API.

    Highlights:

    • New Skill Added: Introduced a new skill named ores-http-recipes to facilitate the documentation of HTTP API recipes.
    • Documentation Pattern Alignment: This new skill follows the established pattern of existing ores-shell-recipes and ores-cli-recipes, ensuring consistency across documentation efforts.
    • Recipe Documentation Guidelines: The skill provides comprehensive instructions on how to add new recipes to doc/recipes/http_recipes.org utilizing Emacs verb mode for structured API documentation.
    • Route Source Referencing: It includes references to the source locations of HTTP routes within projects/ores.http.server/src/routes/, aiding in the verification and maintenance of documented endpoints.
    • Typo Correction: Corrected a capitalization typo in doc/skills/claude_code_skills.org, changing 'feature-branch-manager' to 'Feature Branch Manager'.
  • Wt Entity

    This pull request significantly expands the documentation for code generation skills. It introduces a detailed guide for creating Wt web UI entities, breaking down the process into manageable, PR-driven phases. Concurrently, it refines the existing feature branch management skill by automating critical steps like PR merge verification and handling of work-in-progress changes, thereby improving developer efficiency and ensuring cleaner git history.

    Highlights:

    • New Skill: Wt Entity Creator: Introduced a new skill, wt-entity-creator, which provides a comprehensive, multi-phase guide for generating Wt web UI components (list widgets, detail dialogs, and application integration) for domain entities, following established patterns in the ores.wt codebase.
    • Improved Feature Branch Manager: Enhanced the feature-branch-manager skill with automated checks for merged Pull Requests using GitHub CLI or Git, and integrated automatic stashing and restoring of uncommitted changes during phase transitions, streamlining the workflow and preventing data loss.
  • CLI Entity

    This pull request introduces a new cli-entity-creator skill, designed to standardize and simplify the process of adding command-line interface commands for domain entities in the ores.cli framework. The skill provides a detailed, multi-phase guide, ensuring that new CLI commands are consistently implemented with proper parsing, application logic, and thorough documentation, thereby improving maintainability and ease of development for future CLI extensions.

    Highlights:

    • New Skill Introduction: A cli-entity-creator skill has been added to guide the creation of CLI commands for domain entities within ores.cli.
    • Phased Development Approach: The skill outlines a structured 3-phase PR strategy, mirroring the shell-entity-creator pattern, to systematically build out CLI functionality.
    • Comprehensive Documentation: It provides detailed instructions for implementing parsers, defining options, developing application logic, and documenting CLI recipes for new entity commands.

COMPLETED Analysis on the entities necessary to create books   code

We need to have a quick go at modeling the key entities necessary to support books. Use FPML as the basis and iterate with Gemini and Qwen. It does not have to be super complex but it must at least conform to known use cases, or ignore them explicitly as too complex for now.

COMPLETED Finish missing entity features in shell   code

At present we are lacking a lot of features in shell for the new entities.

  • Country

    This pull request establishes the foundational support for managing country data within the shell's interactive environment. It introduces the ability to retrieve and add country records, enhancing the shell's utility for data administration. The changes also include a robust mechanism for presenting this data in a clear, tabular format, improving user experience when interacting with country information.

    Highlights:

    • New Shell Commands for Countries: Introduced countries get to list all countries from the server and countries add to create new country entries, marking the first phase of country management in the shell.
    • Formatted Table Output: Added new utility classes (country_table.hpp/cpp and country_table_io.hpp/cpp) to provide structured, formatted table output for country data using the fort library.
    • Country Command Implementation: Implemented the backend logic for get and add country operations, including handling client sessions, authentication, and communication with the server's country protocol.
    • REPL Integration: The new 'countries' menu and its associated commands have been successfully registered within the shell's REPL (Read-Eval-Print Loop) for interactive use.

COMPLETED Discover notification channels dynamically   code

This pull request refactors the eventing system to support dynamic discovery of event channels, eliminating the need for hardcoded channel lists in client applications. It introduces a server-side registry for event channels, new protocol messages for querying this registry, and updates the shell client to leverage this new discovery mechanism. This change centralizes event channel management, improves system flexibility, and simplifies client-side event subscription.

Highlights:

  • Dynamic Event Channel Discovery: Clients now query the server for available event channels instead of relying on hardcoded lists, enhancing flexibility and maintainability.
  • New Protocol Messages: Introduced list_event_channels_request (0x0015) and list_event_channels_response (0x0016) to facilitate server-side channel discovery.
  • Event Channel Registry Service: A new event_channel_registry service component was added to manage and provide information about all registered event channels, including human-readable descriptions.
  • Expanded Event Coverage: Added registration for country_changed, change_reason_changed, and change_reason_category_changed events, making them discoverable and subscribable.
  • Shell Client Update: The events channels command now dynamically fetches channel information from the server, and events listen * subscribes to all dynamically discovered channels.

POSTPONED Assorted fixes to accounts dialog   code

  • on my account, email saved successfully is not very visible. Instead, make save button enabled after changes, once saved disable it. My account should be a regular dialog, allowing you to keep it open and interact with rest of the app.
  • session history should not be maximisable.
  • sessions still have 0 bytes sent and received.
  • add any details such as instance id to session.
  • last login field does not fit the screen.
  • cannot reload account in account details. Need reload button.
  • remove "grant administrative privileges" from details screen.
  • old users remain online. Server should check sessions on start and update table.
  • cannot tell who unlocked an account and when.
  • do not use "old" for accounts who never logged in. Maybe "unused"?
  • at present you can't tell if you asked for a password reset. We probably should use Status to mean: locked, unlocked, reset. And maybe "Age" or "Last Login" to mean: online, never, recent, old.
  • add right-click menu with the context options from the toolbar.
  • after reload, lock etc remember which line we were on and return to it.
  • email updated message is truncated.
  • user cannot lock it's own account.

POSTPONED Review comms analyser work   code

Need to check this works and add UI for it.

POSTPONED Review telemetry work   code

It seems we did not add database support for telemetry.

Ores.QT:

  • logging about telemetry generates telemetry events. Done.
  • unknown in telemetry. Done.
2026-01-07 12:03:24.195664 [INFO] [ores.telemetry.messaging.telemetry_message_handler] Persisted 29 telemetry log entries from unknown
  • event viewer is always on top
  • can't see timestamps properly in event viewer. can't see event type.
  • make accounts dialog bigger. do not allow resizing.
  • update flag does not update cache in currency dialog.

POSTPONED Event viewer review   code

  • event details is not a proper dialog.
  • new events raise the dialog.
  • cannot see account created events but can see currencies created.
  • when a user logs in or out it does not generate an event, should it?
  • saving new flag does not save it in server side.
  • non admin users can see roles, update feature flags.
  • account is locked due to many failed attempts: just say account is locked.
  • remove check box in main feature flags table.
  • replace the blurb in feature flags with a simple combo for enabled/disabled.
  • enabling feature flag does not show events in event viewer on any ores.qt, reload does not go yellow.
  • can't add, delete etc for roles. Make dialog bigger, do not allow maximising. Probably has no eventing.
  • cannot add or remove permissions for a role, cannot add new permissions (which probably makes sense?)
  • cannot distinguish accounts created by user or by sign-up.
  • event viewer should have a ring buffer with the last N events. always captures even when dialog is not switched on. We don't know when we want to see events up front.
  • error events should be marked with an error so we can see them quickly.

Footer

Previous: Version Zero