Product backlog — inbox
Table of Contents
This is the inbox bucket of the product backlog. Every capture created
via compass capture --note "..." lands here. Inbox captures have not yet
been triaged — they are ideas or observations waiting to be assessed.
At triage, move each capture to one of:
next/— ready to pull into an upcoming sprint.deferred/— real but not soon; long-term horizon.discarded/— explicitly decided against.
Or promote directly to a story via compass capture promote <slug>.
The table below is regenerated by
projects/ores.codegen/scripts/regenerate_backlog_indexes.py — do not
edit the rows by hand. To add a capture, run
compass capture --note "..." and re-run the script.
Inbox captures
| Capture | Tags | Description |
|---|---|---|
| Batch 3 of the badge/image/plain-text rendering rollout (tas… | Batch 3 of the badge/image/plain-text rendering rollout (task 08547F5A, closing): the audit/classification story is closed and batches 1-2 (badge_key wiring + regenerated entities) shipped. What remains from the implementation task's acceptance is the plain-text documentation leg: for each entity the audit classified as plain-text (no badge/image wiring), record a one-line documented reason per entity, and publish the plain-text-vs-badge-vs-image policy note. Small, documentation-only, no codegen changes expected. | |
| Codegen template cpp_domain_type_table.cpp.mustache streams … | Codegen template cpp_domain_type_table.cpp.mustache streams enum columns raw (table << iter_var.column), which cannot compile: generated enum classes have no operator<<, only to_string(). trade_type_table.cpp is the first entity table with an enum column (product_type, added in the badge batch-2 trading rollout); it was hand-rendered via to_string(). The template needs an is_enum branch like the existing is_bool/is_optional/is_uuid branches. | |
| Codegen: auto-derive most Qt drawer fields instead of requir… | Codegen: auto-derive most Qt drawer fields instead of requiring them spelled out per entity. domain_include/domain_class/protocol_include are pure functions of component and entity_singular. get/save/delete/history request/response/message_type class names are pure functions of entity_plural/entity_singular plus the standard dq::messaging naming convention already used identically by every entity's generated protocol header. collection_name/item_var are typically just entity_plural/entity_singular themselves. Only key_field, has_uuid_primary_key, settings_group, window_title, icon, and the has_ Qt knobs are genuinely entity-specific and need spelling out. Discovered while manually authoring near-identical Qt drawers for catalog, change_reason, change_reason_category, data_domain, and dataset_bundle – the boilerplate was copy-pasted with only entity-name substitutions each time, exactly the drift-prone pattern profiles exist to eliminate. | |
| Compass has no way to create a story or task without creatin… | compass agile tech-debt paperwork |
Compass has no way to create a story or task without creating a branch. 'compass story new' unconditionally runs 'git switch -c branch base' (see _scaffold_and_branch in compass.py) with no opt-out flag; 'compass task new' creates the branch object without switching (worktree stays put – the start vs add distinction), but still creates a branch; only 'compass task start' switches. There is no branch-free scaffold path at all. Triggered while doing pure paperwork: creating an umbrella story under sprint 25 to group all trading-instrument-to-codegen port tasks, and re-parenting the existing port tasks (pilot equity_position_instrument, task 91ED2388 via PR 1857; the 5-entity batch plus remaining conversions, task F560ADDF via PR 1874; eventing facet work) into it – 'compass task move' already supports relocating tasks between stories UUID-intact, but creating the target story forces a branch switch, which is hazardous on shared mid-flight feature branches with unmerged commits (here: feature/codegen-nats-eventing-and-integration-tests). The manual workaround is to hand-author story.org plus sprint-table row plus task orgs plus regenerate indexes, all of which the scaffold does by itself. Desired: a –no-branch flag (or a story add / task add subcommand) that scaffolds the org files and sprint row without touching git, mirroring how 'task new' already avoids the switch. |
| Evaluate migrating codegen mustache templates to Handlebars | codegen templates tooling tech-debt |
Assess whether ores.codegen's pystache-based templates should move to Handlebars for real boolean-logic helpers, reducing hand-computed OR-flags in core.py. |
| Explore model validation support using ORE output reports | model_validation pricing ore ore_studio sprint_25 v0 |
ORE exports structured pricing reports (flows.csv, additional_results.csv, curves.csv) that allow independent NPV reconstruction without source-code access — cashflow-level discount factors, forward rates, and model parameters are all exposed. Investigate how ORE Studio can consume these outputs to build model validation workflows: benchmarking, vendor comparison, discrepancy drill-down. |
| Fix compass pr create/merge task misattribution on shared branches | compass tooling bug agile |
compass pr create/pr merge pick the wrong task doc when multiple tasks share the same #+branch value, silently editing an unrelated task or blocking merge on its state. |
| Inventory system-scoped entities and rationalise tenant scoping strategy | Currently system-scoped reference data is handled inconsistently: some entities copy data per tenant during provisioning, others rely on a system-tenant context switch. We need an architectural audit. | |
| ores.shell folder feeds: start/stop folder must cover IR cur… | ores.shell folder feeds: start/stop folder must cover IR curve configs too. synthetic start folder <token> only starts fx_spot_generation_config rows (marketdata.v1.market_feed_configs.start_folder, per market_feed_config_protocol.hpp); ir_curve_generation_configs under the same folder are ignored, and ores.shell has no IR curve feed commands at all (the synthetic.service ir_curve_feed_configs.start/stop/list handlers are only reachable via raw NATS, config_id-keyed). Design intent: the top-level folder contains both FX and IR; folder-scoped start/stop should enumerate both config kinds. Extend the folder protocol (or add a synthetic.v1 ir_curve folder variant) and add shell verbs mirroring the FX ones. | |
| Qt codegen: no way to show a friendly name instead of a raw UUID in list columns | codegen qt ux marketdata |
ores.cpp.qt's Columns (Qt model) codegen only supports plain UUID stringification for a uuid-typed column; there is no lookup/display-name mechanism analogous to combo_display_field on detail-dialog combos, so every UUID FK-ish column in a generated list window shows a raw truncated UUID. |
| Story: Codegen developer experience improvements | codegen tooling product_backlog |
Address workflow friction in codegen: address/type incompatibility errors in –component mode; no entity-scoped filter; no way to target a logical group (e.g. currency) within a component. |
| Story: Codegen infrastructure follow-ups from DQ commissioning | codegen infrastructure tooling product_backlog |
General codegen infrastructure gaps surfaced while commissioning DQ entities but not specific to DQ: entity-model lint, consolidating the five ores.cpp.nats-* facets, compound natural-key support in lookup_entity/table SQL templates, and migrating the remaining 10 lookup_entity models to domain_entity. |
| Story: Roll out badge/image/plain-text rendering across classified domain entities | qt badges codegen refdata ux architecture product_backlog |
Consume the completed audit/classification's batched list: annotate each entity with badge_key/image wiring as classified, author any missing badge_definition/badge_mapping or image data, and regenerate, one batch at a time. |
| Story: Split ORE Studio services into one container per service | docker architecture deployment product_backlog |
Move from the single-container process-supervisor (ores.controller.service launching/monitoring the other 17 services as child processes) to the idiomatic Podman/container pattern of one process per container, with the orchestrator (podman pod, compose, or k8s) responsible for start ordering and supervision. |
| Story: Workspaces: finish the feature | workspace codegen qt product_backlog |
Consolidates all workspace-related captures and stories into one place. Objective: get the Live workspace properly set up and allow users to create stand-alone/temporary workspaces (e.g. for importing ORE samples). First step is a code audit establishing what already exists, including UI support, before further implementation work is scoped. |
| Strongly-typed index/currency filter fields for market_series, not string matching | marketdata identifiers oresmd curve-builder |
CurveBuilderWorkbench needs to filter market_series by currency+index to constrain curve bootstrapping, but today that means string-matching qualifier text (dash-vs-slash separator bugs already hit) – these should be strongly-typed soft-FK fields instead. |