Product backlog — discarded
Table of Contents
This is the discarded bucket of the product backlog. A capture lands here when
it has been considered and explicitly rejected — not deferred to a later version,
but decided against. This distinguishes deliberate rejection from open deferral
(deferred/) or imminent candidacy (next/).
Keeping discarded captures in version control (rather than deleting them) means we can answer "why didn't we do X?" and avoid re-proposing the same idea without context.
The table below is regenerated by
projects/ores.codegen/scripts/regenerate_backlog_indexes.py — do not
edit the rows by hand. To discard a capture, run
compass capture file <slug> discarded
and re-run the script.
Discarded captures
| Capture | Tags | Description | |
|---|---|---|---|
| Add a compass client stop command | ores.compass client qt |
compass client launches the Qt client detached but has no stop verb to terminate running instances. | |
| Add a sample set of gravatars for profiles | code |
Add a sample set of gravatars for profiles | |
| Add a skill that processes a capture buffer entry by entry a… | Add a skill that processes a capture buffer entry by entry and decides whether each belongs in the current sprint backlog, a new story, or the product backlog. | ||
| Add claude continuous learning skill | code |
Add claude continuous learning skill | |
| Add CLI commands for contact_type | cli refdata contact_type codegen-gap |
contact_type has no CLI commands; add them once the CLI-entity codegen gap is resolved. | |
| Add CLI commands for purpose_type | cli refdata purpose_type codegen-gap |
purpose_type has no CLI commands; add them once the CLI-entity codegen gap is resolved. | |
| Add compass story done command | compass task done exists but compass story done does not. Closing a story requires manually editing story.org (State, Now, Next, Last touched) and the sprint table. A compass story done command should set State DONE, stamp End date, update the sprint stories table row, and journal the close — analogue of compass task done. | ||
| Add composite primary keys | code |
Add composite primary keys | |
| Add currency and country party-visibility junctions | code |
Add currency and country party-visibility junctions | |
| Add DB schema version table | code |
Add DB schema version table | |
| Add HTTP REST endpoints for business_centre | http refdata business_centre codegen-gap |
business_centre has no HTTP REST API; add it once the HTTP-entity codegen gap is resolved. | |
| Add HTTP REST endpoints for contact_type | http refdata contact_type codegen-gap |
contact_type has no HTTP REST endpoints; add them once the HTTP-entity codegen gap is resolved. | |
| Add missing pgtab extension to database setup | database infrastructure |
The pgtab extension is referenced but not installed during database setup. Add it to the extension installation block. | |
| Add net-new self-referencing hierarchy support to book | codegen refdata book hierarchy |
Give book a parent_book_id hierarchy (column, validation, hierarchy_fn) using the has_parent_id Flag pattern already proven for party/counterparty. | |
| Add shell REPL commands for contact_type | shell refdata contact_type codegen-gap |
contact_type has no shell REPL commands; add them once the shell-entity codegen gap is resolved. | |
| Add shell REPL commands for purpose_type | shell refdata purpose_type codegen-gap |
purpose_type has no shell REPL commands; add them once the shell-entity codegen gap is resolved. | |
| Add skill to review product backlog | infra |
Add skill to review product backlog | |
| Add tenant type management dialog | code |
Add tenant type management dialog | |
| Add Wt web UI support for business_centre | wt refdata business_centre codegen-gap |
business_centre has no Wt web UI; add it once the Wt-entity codegen gap is resolved. | |
| Add Wt web UI support for contact_type | wt refdata contact_type codegen-gap |
contact_type has no Wt web UI; add it once the Wt-entity codegen gap is resolved. | |
| Allow super admin to reset tenant admin accounts | code |
Allow super admin to reset tenant admin accounts | |
| Auto-crop QA Validation Runner screenshots to the active window | qt ui tooling qa documentation |
The Screenshot button captures the full desktop; every manual-chapter screenshot then needs a hand-eyeballed Python/Pillow crop to the target dialog's pixel bounds. Have the runner (or a compass helper) capture just the active/target window's geometry instead. | |
| Business Unit Details' Business Centre field is a plain text field, not a combo | qt refdata ux business_unit |
Unlike party/counterparty's Business Center combo (flagged, populated from business centre codes), BusinessUnitDetailDialog renders business_center_code as a plain line edit. | |
| Business Unit list/detail has no badge emblems | qt refdata ux badges business_unit |
Business Unit's status/type-like fields aren't wired to badge_key, so its list and detail views show plain text where other refdata entities show colour-coded badges – a candidate for the existing badge-adoption coverage audit. | |
| calendar_rules insert trigger references calendars.id, which does not exist (calendars use code as PK) | bug |
ores_refdata_calendar_rules_insert_fn() queries ores_refdata_calendars_tbl.id but that table's primary key column is code, not id – causes 4 test failures in ores.refdata.core.tests (service_calendar_materialisation_service_tests.cpp), surfaced while running the full suite for an unrelated IR curve fix. Traced to commit 7351a89f7. | |
| ccache served stale object files after a codegen field rename | build ccache codegen tooling |
Several book_*.cpp.o files in ores.refdata.core.lib kept emitting the old ledger_ccy column name in compiled SQL long after the source was correctly regenerated to functional_currency; only CCACHE_DISABLE=1 + deleting the build dir fixed it. | |
| Change reason and categories need permissions | code |
Change reason and categories need permissions | |
| Codegen approach: generate eventing registrar for service application.cpp | codegen eventing synthetic refdata architecture |
The eventing pipeline in service application.cpp is hand-written and grows unboundedly as entities are added. The pattern per entity is: | |
| Codegen new-entity recipe/skill stale; register ores.synthetic as a codegen component | codegen recipe synthetic tooling |
The 'How do I create a new entity?' recipe and codegen-add-entity skill reference a non-existent 'compass codegen entity generate' command and JSON models, while the live tooling uses 'compass codegen generate | regenerate' with org models; and ores.synthetic is not in the codegen component catalogue, so entities cannot be generated for it. |
| Codegen-generate the get_hierarchy NATS message once proven | codegen refdata messaging hierarchy resolved |
Once the hand-written get_<entity>_hierarchy pattern is proven end-to-end (party/counterparty, task 3 Qt binding), extend the protocol/service/handler codegen templates to generate it per has_parent_id entity instead of hand-writing. | |
| Codegen: domain_entity SQL validate_fn never computes scope flags | codegen sql bug validation |
sql_schema_domain_entity_create.mustache reads domain_entity.validation_fn.scope_both/system/tenant, but only the legacy table-model path (normalise_sql_table_context) computes those flags — domain_entity models get a validate_fn that only checks null/empty and returns unconditionally, silently dropping soft-FK enforcement. | |
| Commission party, counterparty, and party_status together | product refdata commissioning party counterparty |
Finish commissioning party and counterparty (Qt verification, shell/CLI, manual chapter), including party_status as a dependent composite type documented alongside party, once the composite/hierarchy and temporal-versioning blockers they share are resolved. | |
| Committed IAM service SQL is stale vs templates | Regenerating the service-registry archetypes from current templates/model drops content present in committed projects/ores.sql/create/iam/iam_service_db_grants_create.sql (an _ores_grant_execute_fn block + refdata DML grant for synthetic_service) and reverts a 'compass db recreate' wording in projects/ores.sql/service_vars.sh. The committed generated SQL was hand-edited or generated from a richer model than projects/modeling/service_registry.org now holds. Reconcile: either fold the missing grants into the model/template or regenerate and commit. Surfaced during B8 layer (a) service-registry migration. | ||
| compass add task does not wire the story Tasks table | compass agile bug codegen |
The agile-add-task skill states the story's * Tasks table row is wired automatically, but 'compass add task' only creates the task doc with a correct parent link — the story.org * Tasks table keeps its empty placeholder row. Verified on the commission_purpose_type story (sprint 22): five tasks created, all show in 'compass story status' via the link graph, but story.org's table stayed empty. A wire-probe task reproduced it deterministically. Either fix add task to append the row, or add a 'compass story sync-tasks' command, or update the skill to stop promising auto-wiring. | |
| compass heading ignores story task order and stale STARTED state | compass heading agile backlog |
compass heading ranks any BACKLOG task from the active story without respecting table order, and does not prompt to close STARTED tasks whose PR has merged. | |
| compass list needs sort and filter: ability to sort results … | compass list needs sort and filter: ability to sort results by date (e.g. list recent recipes), and filter by additional criteria beyond type/tag. Use case: list recently added recipes to find newly merged docs without needing to grep git log. | ||
| compass review reply 404s on conversation comments | compass github bug |
review list shows issue (conversation) comment ids, but review reply only posts to the pulls/{pr}/comments/{id}/replies endpoint, which 404s for them (Parent comment not found). Route by comment kind: line-comment ids use the replies endpoint; issue-comment ids should post a new issue comment via issues/{pr}/comments. See compass_review.py _cmd_reply. | |
| Compass search: bucketed results by dimension | compass search tooling llm |
Structure search results into three labelled buckets (recipes, now, historic) each capped at N hits, preventing historic agile matches from drowning out current results. | |
| compass services start's own readiness poll is far slower than systemd's own Type=notify tracking | bug compass systemd performance |
compass services start's own readiness-wait loop (the '22 unit(s) (Service ready)…' progress bar) is the actual bottleneck, taking well over a minute even though systemd itself already reports every unit active/running within 1-5s (units are Type=notify with NotifyAccess=all, so systemd already tracks real readiness via sd_notify). compass appears to run its own separate readiness check (NATS ping/heartbeat polling?) redundant with what systemd already knows, rather than just trusting 'systemctl is-active'/'systemctl –user show -p ActiveState,SubState' or waiting on the units' own Type=notify readiness signal. Should rely on systemd's own readiness tracking instead of a slow independent poll. Found while restarting services to pick up a fresh build during sprint 24 release-notes screenshot prep (2026-08-03). | |
| compass story: add a 'done' verb to close a story | compass tooling agile dx |
compass task has a 'done' verb but compass story does not — closing a story means hand-editing the Status table and #+todo: state. Add 'compass story done' to mirror 'task done': flip the story to DONE, stamp the journal, and verify all child tasks are resolved. | |
| compass task new switches branches mid-scaffold | compass bug agile |
Each compass task new creates AND checks out its own branch. Scaffolding a story with several task new calls leaves the worktree on the last task's branch, so the scaffold commit and PR ride the wrong branch (saw with PR 1165: scaffold rode feature/timeline-environment-stamp). task new should create the branch without switching, or restore the original branch. | |
| Consider adding "global search" via typesense | code |
Consider adding "global search" via typesense | |
| Consider adding otel support | code |
Consider adding otel support | |
| Create a document tracking which entities have full CLI/HTTP… | Create a document tracking which entities have full CLI/HTTP/shell coverage and which are missing layers. Use it as a prioritised backlog for bringing entities into sync, adding recipes as gaps are closed. | ||
| Create a skill to find bearings | Add a new claude code skill to run compass bearings | ||
| Create basic manual | code |
Create basic manual | |
| Currencies: Currency Taxonomy Enrichment | code |
Currencies: Currency Taxonomy Enrichment | |
| Design and implement instrument/trade integration | code trades design |
Instruments and trades are not yet integrated. Design the linkage (instrument attached to trade, shared fields strategy) and implement end-to-end. | |
| Dissolve ores.qt.party plugin; migrate its entities into ores.qt.refdata | qt architecture plugins refdata tech-debt |
Every entity in ores.qt.party (party_type, party_status, party_id_scheme, contact_type, party, counterparty, business_centre, business_unit, business_unit_type) has backend C++ component=refdata; there is no ores.party backend component. ores.qt.party exists as a purely UI-invented grouping with no backend justification, discovered while fixing party_type's broken eventing (its Qt code had been duplicated into both ores.qt.party and ores.qt.refdata after an incomplete codegen migration). | |
| Document hand-patched ORE vendor files against future refresh | ore vendor data-quality backlog |
external/ore/ refresh is a manual copy-and-overwrite with no patch step, so the reversed-FX-key hand-fixes from PR #1423 will be silently lost next refresh. | |
| Editing a business unit doesn't live-refresh Org Explorer | qt trading refdata eventing |
Saving a business unit edit from the Business Units window doesn't trigger Org Explorer's tree to refresh/reflect the change – missing cross-component eventing wiring. | |
| Enforce task result written before PR merge | compass pr workflow process |
compass pr merge should warn or block when the active task's * Result section is empty, preventing the result commit from landing on a dead branch. | |
| Error with new tenant | code |
Error with new tenant | |
| Expand repository test coverage and infrastructure | code |
Expand repository test coverage and infrastructure | |
| Extend dynamic combo codegen with optional per-item flag icons | codegen qt currency combo flag |
No codegen mechanism renders a combo box whose items carry flag icons (e.g. a currency or business-centre picker); the only working example is hand-written, bypassing codegen entirely. | |
| Extend login flow with party selection | code |
Extend login flow with party selection | |
| Extend ores.workflow: barrier-event workflow | code |
Extend ores.workflow: barrier-event workflow | |
| Filter counterparty dataset size for evaluation tenants | code |
Filter counterparty dataset size for evaluation tenants | |
| Fix country combo box sizing in tenant wizard | ui bug |
The country combo box in the tenant wizard expands to fill the entire screen. Constrain its width/height appropriately. | |
| Fix junction codegen template's current_timestamp version-collision bug | sql codegen refdata |
The SQL junction codegen template (sql_schema_junction_create.mustache or equivalent) still uses current_timestamp in its insert trigger, unlike the entity template which was already fixed to use clock_timestamp(). | |
| Fix operational-party association bug in tenant provisioning | code bug iam shell provisioning resolved |
provision_tenant's Phase 3 associates the tenant admin account only with the System Party, repeatedly, instead of every distinct Operational party. RESOLVED — see Update below. | |
| Fix rfl complexity failure in ClientManagerTradeDetail (Windows + macOS) | portability windows macos rfl ores_qt_api |
ClientManagerTradeDetail.cpp fails on both MSVC (C1202 recursive type too complex) and Clang (fold expression with 502 arguments exceeds nesting limit of 256) because get_trade_detail_instrument_wrapper contains an rfl::Literal with 502 fields. | |
| Flaky nightly-only test: mint_token_respects_the_requested_ttl uses a 1-second TTL validated in real time | bug test flaky iam ci |
mint_token_respects_the_requested_ttl (ores.iam.core.tests, service_internal_impersonation_service_tests.cpp:84) intermittently fails with 'claims.has_value() for: false' on Nightly Build only (not Continuous), e.g. runs 30777821573/30727690723/30678814795/30597405755. Root cause: the test mints a token with a 1-second TTL and immediately validates it in the same test body; under Nightly's heavy parallel ctest -j load, more than 1 second can genuinely elapse between mint and validate, so the token is legitimately expired by validation time – a flaky test from too-short a TTL under load, not a real regression. Confirmed unrelated to the 2026-08-03 systemd nats_wire_format fix (different component, predates that commit). Fix: use a longer TTL (e.g. 30s) and assert the expiry window arithmetically instead of relying on real-time validation timing, or mock/inject the clock. | |
| FX Spot Monitor stuck pending: fx_spot_tick decode fails via the JSON branch despite both sides resolving msgpack at startup | bug marketdata nats wire-codec |
FX Spot Monitor shows persistent 'pending' status and ores.marketdata.client.fx_spot_subscription logs a continuous stream of 'Failed to deserialise fx_spot_tick: Could not parse document: unexpected character, expected a JSON value' warnings, even with a live-ticking feed and a freshly rebuilt/restarted, single-instance fleet (ruling out the stale-orphan-process issue found and fixed earlier the same session). The error text is confirmed (via the vendored reflect-cpp headers, rfl/json/read.hpp) to come specifically from rfl::json::read's error path, meaning the failing decode() call took the JSON branch of wire_codec::decode(), not msgpack – yet ores.qt's own startup log shows 'Wire format: msgpack' resolved correctly from ORES_NATS_WIRE_FORMAT, and the publisher side (ores.synthetic.service's fx_spot_feed.cpp) also encodes via the shared default_wire_codec() with no hardcoded JSON and no compression applied by js_publish(). Both binaries are freshly built (2026-08-03 09:08), ruling out stale-binary drift. Static code reading found no discrepancy; the actual live mismatch needs a repro with temporary trace logging of codec.format() immediately before both the fx_spot_feed.cpp encode call and the fx_spot_subscription.cpp decode call, to see which side (or both) disagrees with its own startup-logged default. Found running the sprint 24 release-notes screenshot scenario (2026-08-03), step 4. | |
| Generalize self-referential hierarchy validation into a codegen facet | codegen refdata hierarchy template |
Add a has_parent_id-style codegen facet for the parent_<entity>_id soft-FK hierarchy pattern duplicated by hand across party and counterparty (and likely others). | |
| How do I run codegen? recipe is missing the codegen.sh / org-entity path | The recipe (20D0A77D) only documents run_generator.sh for JSON models. The newer codegen.py entry point (wrapped by codegen.sh) handles org-entity models via 'codegen.sh generate –model <path.org> –address <A>'. The recipe should be extended to cover: (1) codegen.sh as the preferred wrapper, (2) the –model flag accepting an org file, (3) how to find and copy output from output/ to the target component. | ||
| HTTP/CLI/shell/Wt support for CRM topology entities | codegen crm http cli shell wt |
crm_topology_config, crm_driver_pair, and crm_enabled_derived_pair got domain/repository/service/messaging/Qt via codegen; HTTP REST endpoints, ores.cli commands, ores.shell REPL commands, and Wt web UI were deferred (matching the contact_type precedent) and still need commissioning. | |
| Implement recursive CTE in compute_visible_party_ids | code security database |
compute_visible_party_ids currently returns only {party_id}. Implement the recursive CTE over ores_refdata_parties_tbl.parent_party_id so RLS sees the full descendant set. | |
| Integrate the org-mode user manual into Qt's native help sys… | Integrate the org-mode user manual into Qt's native help system: a Python script compiles the exported HTML into a .qch file via qhelpgenerator, and the Qt application loads it via QHelpEngine with a ToC sidebar connected to a QTextBrowser. | ||
| Investigate junction codegen output path/namespace mismatch | codegen drift dq junction |
compass codegen entity generate badge_mapping (a junction) generates into projects/ores.dq/include/ores.dq/domain/… with domain::badge_mapping, but the live hand-written repository lives under ores.dq.api/ores.dq.core using messaging::badge_mapping – a real path/namespace mismatch, not just missing subcomponent config. | |
| IrCurveGenerationConfigDetailDialog's index_family combo doesn't list the new RFR/IBOR families | codegen qt synthetic |
The static indexFamilyCombo in IrCurveGenerationConfigDetailDialog.cpp is a hand-patched addition (no codegen paste-block seam exists for it), so widening index_family's enum via the org model doesn't propagate to it – the interactive Qt create flow still only offers the original 6 families (libor/euribor/sofr/estr/sonia/tona), not the 16 added in task C80D94BB. | |
| It is not possible to override saved connection details in t… | It is not possible to override saved connection details in the connection manager dialog. Users should be able to edit a saved connection without deleting and recreating it. | ||
| Junction messaging-layer codegen generates a handler with no… | Junction messaging-layer codegen generates a handler with no matching service: regenerating currency_calendar/currency_country/currency_currency_group/currency_pair_convention_calendar (plain junctions, no extra_list_requests) via compass codegen entity generate creates a new messaging/*_handler.hpp + registrar that #includes a service.hpp the same run never generates, breaking the build (fatal error: file not found). calendar_date (a junction with a deliberately-added messaging layer, commit 27ae48fc2) has a matching service.hpp/cpp; these four don't and shouldn't yet – the messaging facet appears to now trigger unconditionally for junctions regardless of whether the matching service layer exists. Found and reverted (commit 2c4293dab) during the fix-refdata-model-drift task (A2EDDEDC-D5D3-469D-88C9-7CE00951CC72) after a full ores.refdata.core.lib build caught it. These 4 junctions are excluded from that task's regeneration until this is fixed. | ||
| Make badges a first-class entity with a colour-editing UI | qt badge refdata ux |
Badge definitions (colours, severities, mappings) are currently a fixed catalogue rather than a user-editable entity; add a UI so users can customise badge colours like any other reference-data entity. | |
| Message handlers are not scalable | code |
Message handlers are not scalable | |
| My Account session history dialog shows no bytes sent/receiv… | My Account session history dialog shows no bytes sent/received and sessions are not populated. Either remove the dialog entirely or implement session event recording (at minimum: login and logout events). | ||
| ores.iam.api.tests and ores.iam.core.tests fail on main, pre… | ores.iam.api.tests and ores.iam.core.tests fail on main, pre-existing and unrelated to calendar/pagination work. generate_single_account asserts password_hash is non-empty and fails; generate_multiple_accounts crashes with free() invalid pointer / SIGABRT inside account_generator.cpp, looks like real memory corruption not flakiness. Separately ores.iam.core.tests account/account_role/account_party repository tests fail with Invalid image_id FK violations on inserts that used to work. Reproduced twice, isolated via ctest -R ores.iam, on a branch that touches zero ores.iam files, cut fresh from origin/main after PR 1758 Rework Acme provisioning via internal actor impersonation merged – that PR touched ores.iam and is the most recent change to the component, worth checking first. Needs investigation: is this a real regression from 1758, or pre-existing flakiness surfaced now. account_generator.cpp password hashing and image_id assignment logic are the two most likely spots. | ||
| ores.refdata generated SQL/C++ is stale vs current codegen templates | codegen refdata tech-debt |
Regenerating rounding_type/party (real, non-dry-run) produces large diffs vs checked-in generated code – predates the sql_schema_domain_entity_create.mustache rewrite (clock_timestamp vs current_timestamp, NEW/OLD casing, an added unique index), independent of any key-shape migration. | |
| PartyTypeDetailDialog is missing the Display Order field | refdata qt codegen bug resolved |
party_type's model declares display_order like party_status/party_id_scheme, but the generated PartyTypeDetailDialog.ui has no widget for it – likely codegen/regen drift, found while capturing manual-chapter screenshots. | |
| Populate service_password_hash at database setup time | database security infrastructure |
The service_password_hash column is not populated by recreate_database.sh / setup_user.sql. Update the setup scripts to hash and store each service's DB password. | |
| pr merge close-out should tolerate already-closed tasks. Whe… | pr merge close-out should tolerate already-closed tasks. When every task on the branch is already DONE and the paperwork committed, the close-out's git commit finds nothing to commit, fails, and aborts the merge (post-#1102 hardening). Detect the nothing-to-commit case and proceed to merge instead of aborting; also consider which task the close-out picks when several tasks share the branch. | ||
| pr merge: retry on mergeability race after close-out | After pushing the close-out commit, the immediate gh pr merge can race GitHub mergeability recompute; add a short retry loop. | ||
| profiles.json output patterns stale after component regroup | Several output patterns in ores.codegen profiles.json still target the pre-regroup layout (projects/ores.qt.{component}, projects/ores.{component_include}); regeneration writes into nonexistent directories. The field-group pattern was fixed in the instrument-models task; audit and fix the rest, ideally with a CI zero-diff check. | ||
| Provisioned accounts: force password reset on first login | code |
Provisioned accounts: force password reset on first login | |
| Publish history dialog is non-standard | code |
Publish history dialog is non-standard | |
| QA Validation Runner: add a keyboard-shortcut-armed delayed screenshot so combo box/popup dropdowns can be captured | qt qa tooling screenshot |
QaValidationRunnerWidget::captureScreenshot() already has a 1500ms QTimer::singleShot delay before grabbing the active top-level window, but it's useless for popups/combo-box dropdowns (e.g. HolidayAwareDatePicker's calendar popup, any QComboBox dropdown): clicking the Runner panel's own Screenshot button steals focus and dismisses the popup immediately, before the timer even starts – confirmed live during the sprint 24 release-notes screenshot scenario (step 2, date picker popup: 'i can see calendar but i cannot screenshot it as its a combo box'). Need a way to arm the delayed capture WITHOUT clicking anything in the Runner UI, so the tester can open the combo/popup after arming and it's still open when the timer fires – e.g. a global keyboard shortcut (works while the popup has focus, unlike a button click) that starts the same countdown-then-grab flow already used for the window-switch case. Found while running the sprint 24 release-notes screenshot test scenario (2026-08-03). | |
| QA Validation Runner: no unsaved-changes warning when closing the app | qt qa scenario-runner dx bug |
Closing the Qt client while the QA Validation Runner panel has unsaved test-scenario results (step PASS/FAIL marks not yet written back to the test_scenario doc) gives no warning and silently discards the results. Should prompt to save, like other unsaved-state dialogs in the app. | |
| Realistic-2026 IR curve seed data incompatible with index_family enum | bug |
provision party fails during synthetic.themes.realistic_2026 publish step | |
| Reduce log noise during database setup | database infrastructure |
Database setup emits too many NOTICEs (change reason categories, IAM permissions, TimescaleDB detection). Consolidate to a single informational message per phase; suppress per-row notices. | |
| Regenerate already-synced entities after Delete change-reason category template fix | cpp_qt_detail_dialog.cpp.mustache's Delete change-reason prompt was fixed in PR #1443 to pass category='common' instead of defaulting to 'system' (which only offers the test-data reason). Entities regenerated before this fix — at least CurrencyMarketTierDetailDialog, confirmed by review, likely others synced before PR #1443 — still have the old broken call and need a regen sweep (compass codegen regenerate –address ores.cpp.qt) to pick up the corrected template. | ||
| Remove 3 stale *_protocol.cpp build files (protocol is header-only) | ores.dq/api/src/messaging/{badge_definition,badge_severity,code_domain}_protocol.cpp (~400 lines each) are stale generated artefacts from when the NATS protocol had out-of-class implementations. Protocol is now header-only (cpp_protocol.cpp.mustache was intentionally empty and is now retired in B8). These 3 .cpp are no longer generated by codegen but remain committed and likely still compiled via src/messaging globs. Verify the dq build does not need them, then delete (and check CMakeLists globbing). Separate from B8 codegen work because deleting build inputs needs a build check. | ||
| Remove all stub files from the codebase | code testing housekeeping |
Find all stub.hpp and stub_tests.cpp files. Remove stub.hpp outright; replace stub_tests.cpp only once real tests exist for the component. | |
| Scheduler: complete Qt UI and promote to top-level menu | code |
Scheduler: complete Qt UI and promote to top-level menu | |
| Shell: no wizard support for system, tenant, and party provisioners | shell wizard provisioner ux gap |
The shell REPL lacks wizard-style provisioners for system setup, tenant creation, and party creation — commands exist but no guided multi-step flow. | |
| Source report definitions from DQ instead of hardcoded C++ | code |
Source report definitions from DQ instead of hardcoded C++ | |
| SSH variable needs to be in .env | SSH variable permissions are still an issue due to source command | ||
| story new does not wire its scaffolded tasks into the story table | compass story new generates the scaffold task and the first real task via codegen directly, which unlike compass add task does not append rows to the story's * Tasks table — both rows were missing on the CI retune story (caught by Claude's first PR review). Wire the rows in story new, or route its task scaffolding through the same path as add task. | ||
| Story: Commission ores.qt.admin into codegen | qt admin codegen commissioning product_backlog |
Inventory the entities in ores.qt.admin, check the state of their models and codegen, and generate full stack for all entities in this component, including migrating their history dialogs to the generic HistoryDialog. | |
| Story: Commission ores.qt.analytics into codegen | qt analytics codegen commissioning product_backlog |
Inventory the entities in ores.qt.analytics, check the state of their models and codegen, and generate full stack for all entities in this component, including migrating their history dialogs to the generic HistoryDialog. | |
| Story: Commission ores.qt.compute into codegen | qt compute codegen commissioning product_backlog |
Inventory the entities in ores.qt.compute, check the state of their models and codegen, and generate full stack for all entities in this component, including migrating their history dialogs to the generic HistoryDialog. | |
| Story: Commission ores.qt.marketdata into codegen | qt marketdata codegen commissioning product_backlog |
Inventory the entities in ores.qt.marketdata, check the state of their models and codegen, and generate full stack for all entities in this component, including migrating their history dialogs to the generic HistoryDialog. | |
| Story: Commission ores.qt.synthetic into codegen | qt synthetic codegen commissioning product_backlog |
Inventory the entities in ores.qt.synthetic, check the state of their models and codegen, and generate full stack for all entities in this component, including migrating their history dialogs to the generic HistoryDialog. | |
| Story: Commission ores.qt.trading into codegen | qt trading codegen commissioning product_backlog |
Inventory the entities in ores.qt.trading, check the state of their models and codegen, and generate full stack for all entities in this component, including migrating their history dialogs to the generic HistoryDialog. | |
| Story: Commission ores.qt.workspace into codegen | qt workspace codegen commissioning product_backlog |
Inventory the entities in ores.qt.workspace, check the state of their models and codegen, and generate full stack for all entities in this component, including migrating their history dialogs to the generic HistoryDialog. | |
| Story: Junction eventing: extend codegen with notify-trigger, changed-event, and event-registrar facets for the junction model type | codegen eventing junction architecture product_backlog |
Junction tables (badge_mapping, party_currency, party_country, party_counterparty, currency_currency_group, account_party, dataset_bundle_member, app_version_platform) have zero live NATS eventing support – the notify-trigger/changed-event/event-registrar codegen facets are all scoped to the entity model type only. Extend them to cover junctions, with badge_mapping as the first consumer. | |
| Story: Symmetric onboarding flags for provisioner wizards | sprint_19 v0 provisioner variability onboarding |
Add party_id column to variability settings, introduce symmetric onboarding.* flags for all three provisioner wizards, replace party.status cache check at login, fix NOTIFY listener thread starvation under heavy load. | |
| SUPERSEDED – was thought to be an ores.shell auto-login/NATS request-leak bug, actually a duplicate-fleet symptom | bug nats shell iam |
RESOLVED, root cause was environmental, not a code bug. Originally filed as: compass shell -f's auto-login attempt (–login-username/–login-password) timing out in bootstrap mode appeared to corrupt the next NATS request on the same session ('Failed to parse response: Could not cast to a map'), and a client-side async-request thread leak was suspected. The real cause, found later the same day: a stale, pre-systemd fleet of ~90 orphaned service processes (leftover from before this sprint's controller-service decommission) was still running and sharing the same NATS queue groups as the current systemd-managed fleet. NATS was round-robining requests between a live instance and a zombie instance; any request – not specifically the one after a timed-out login – could land on the zombie and fail or hang. After killing every orphaned process (see doc/agile/versions/v0/sprint_24/release_notes.org's Post Mortem for the incident), providers and logins alike worked cleanly and reproducibly, including the auto-login path this capture originally blamed. No client-side fix needed; discard this capture's original theory. Kept for the record rather than deleted, since the debugging trail (natsConnection_RequestMsg uses a unique inbox per call, ruling out that layer) may be useful if a similar symptom resurfaces. | |
| Surface step colour, prevent result clobbering, and add reload in QA Runner | qt testing qa_validation_runner ux |
The QA Validation Runner panel should indicate which client colour a multi-client step belongs to, prevent concurrent instances from clobbering * Results, and add a Reload button (turning stale-yellow on external file changes) to pick up scenario edits without closing the panel. | |
| Sweep pre-template-fix entities: add security definer and active-rows bootstrap filter | All ores_refdata_validate_*_fn and insert trigger functions generated before PR #1300 (commit 1cb85c9a, sprint 21) lack security definer + set search_path and use a bare not-exists bootstrap check without a valid_to filter. The template is now fixed; this capture tracks whether a coordinated sweep of the existing generated files is warranted before natural recommissioning catches them. | ||
| System provisioner needs an icon | code |
System provisioner needs an icon | |
| Timeline board chart needs a movable time-window with back/forward navigation | ui agile timeline org-js |
The agile-board timeline chart renders the whole period at once and is too crammed to read at 20-minute granularity; add a moving time-window (show N buckets/hours) with back/forward controls to pan through time. | |
| Timeline board recent-entries panel shows no tasks | ui agile timeline org-js bug |
The agile-board timeline 'recent entries' panel does not surface task events (created/updated/state changes); recent entries should include tasks, not only stories/PRs. | |
| Update currency details to use tabs | code |
Update currency details to use tabs | |
| Use exponential backoff for database problems | code |
Use exponential backoff for database problems | |
| Vary synthetic feed tick frequency stochastically | synthetic marketdata |
Synthetic FX feeds currently tick at a fixed, deterministic interval (ticks_per_hour); real market data arrives at irregular, bursty intervals. Consider making tick timing itself stochastic (e.g. a Poisson process) for the Realistic archetype. | |
| VersionNavigationHelper.hpp referenced by codegen but never created | qt codegen build |
cpp_qt_controller.cpp.mustache's has_version_navigation feature includes ores.qt/VersionNavigationHelper.hpp and calls wireVersionHistory<>, but that header doesn't exist anywhere in the repo – any entity regenerated with has_version_navigation:true fails to compile. | |
| Warn about unsaved QA Validation Runner changes on client exit | qt ux qa-validation-runner testing |
If the QA Validation Runner has unsaved step results/notes when the user tries to close the Qt client, warn them and offer to save before exiting instead of silently discarding the changes. | |
| We are missing a plans.org index page that links all plan do… | We are missing a plans.org index page that links all plan documents together, analogous to how runbooks.org and recipes catalogs work. | ||
| Wire 5E47F108 extra-drops kind for remaining entities | codegen sql refdata templates |
Several entities with validate functions (business_unit_types, party_categories, purpose_types, book_statuses) are not yet wired to the extra-drops block kind. | |
| Work units should use a combo box | ui |
Work units are currently a free-text field. Replace with a combo box populated from the work unit table. |