Task: Verify party Qt UI end-to-end post-NATS
Table of Contents
This page documents a task in the Commission: party, counterparty, and party_status story. It captures the goal, current status, acceptance, and any notes or results.
Goal
Re-verify the party Qt list window, detail dialog, history dialog, delete, and cross-session eventing against a live environment now that party is fully under codegen with the composite child-entity table/ hierarchy facet in place; fix regressions found.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Commission: party, counterparty, and party_status |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-07-15 |
Acceptance
- List, Read, Update, Delete, Identifiers tab, Contact Information tab, Hierarchy tab, and History all verified live against BARCLAYS PLC.
- All regressions found during verification fixed or filed:
entity_type_of(party)missing (party's hand-patched domain profile never picked up the genericHistoryDialogdispatch function the other 5 entities got via regen).crm_topology_bundlesartefact type seeded with amarketdataprefix instead ofrefdata, hanging the tenant-provisioning workflow forever.is_auto_generated_keycodegen bug: matched anyis_keyDetail field on an entity with a UUID primary key, not specifically the field that is that key – wrongly locked party/counterparty's naturalshort_codefield permanently read-only, silently blocking Create (disabled Save, no error shown).has_pagination: truenever set on party/counterparty's Qt facet –ClientPartyModel=/=ClientCounterpartyModelreported the current page's row count as the total, permanently hiding anything past page 1 (looked like saves vanished).changeReasonCachenever forwarded fromPartyDetailDialog=/=CounterpartyDetailDialogto their child identifier/contact-information tables, silently blocking every LEI/contact-information save ("Change reasons not loaded").- 8 stale
ores.refdata.core.testsfiles (pre-context-refactor repository signatures) fixed, plus 2 synthetic-generator bugs (invalid enum suffixes, hardcoded unseeded country codes) the fix then surfaced. All 113 cases pass.
- Two non-blocking UX gaps captured to backlog rather than fixed here
(CJK glyph fallback via
transliterated_name; disabled-Save-with- no-feedback on required-field validation).
Plan
(Implementation strategy. Written when work starts; key decisions
are distilled into the parent story's * Decisions at close, but the
plan itself stays — it is the historical record of what we did.)
Notes
Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario, run
through the QA Validation Runner panel) that verify this task. Link
new ones here as they're created; the scenario doc itself links back
via its "Verifies task" field.
| Scenario | State | Notes |
|---|---|---|
| Verify party Qt UI end-to-end post-NATS | PENDING | Covers list/create/read/identifiers/contacts/hierarchy/update/delete/history plus cross-client eventing (blue/red). |
PRs
| PR | Title |
|---|---|
| 1581 | [refdata,qt,codegen] Commission party, counterparty, and party_status |
Review
| # | Comment summary | File | Decision | Notes |
|---|---|---|---|---|
| 1 | Pagination bug also present in the 4 standalone child list models (ClientPartyIdentifierModel/ClientPartyContactInformationModel/ClientCounterpartyIdentifierModel/ClientCounterpartyContactInformationModel) | ClientPartyIdentifierModel.cpp et al. | Fixed | Added :has_pagination: true to the 4 child .org models, regenerated. Commit 0705f18d5. |
| 2 | Synthetic generator fix (round 1) patched generated .cpp directly, not durable against regen |
party_identifier_generator.cpp et al. | Fixed | Root-caused to the domain-type generator template unconditionally suffixing natural-key text columns; added a no_generator_suffix facet and moved the rotating-valid-values expression into the .org generator blocks themselves. Commit 0705f18d5. |
| 3 | Minor: two identifier generators duplicate scheme codes instead of reusing party_id_scheme_constants::all |
party_identifier_generator.cpp, counterparty_identifier_generator.cpp | Declined | Consistent with existing codebase convention (party_type/currency_pair generators also hardcode plain literals directly); reusing the constants header would add a dependency generators don't otherwise have. |
| 4 | PR description discrepancy: crm_topology_bundles prefix fix / party_category default claimed as landing in this PR, reviewer found no diff | (description only) | Declined | Both fixes are genuinely in this branch's commit history (24d5d38de, party.hpp hand-patch); reviewer's diff search likely missed them since they're several commits back from HEAD at review time. |
| 5 | Minor: ClientCounterpartyModel dropped the Transliterated Name column | ClientCounterpartyModel.cpp | Declined (captured) | Pre-existing gap, not introduced by this PR; captured separately as party_grid_ignores_transliterated_name. |
Result
Verified live against BARCLAYS PLC in two Qt client instances (blue/
red): list, read, update, delete, identifiers tab (add/edit/delete),
contact information tab (add/edit/delete, country flag combo),
hierarchy tab, generic history dialog, and cross-client eventing all
PASS. Along the way, found and fixed a string of real regressions
rather than working around them: missing entity_type_of(party),
crm_topology_bundles seed data hanging tenant provisioning, an
is_auto_generated_key codegen bug wrongly locking short_code
permanently read-only, party/counterparty pagination reporting page
size as total (in both the parent lists and the four standalone child
list models found during PR review), missing changeReasonCache
wiring blocking every LEI/contact-information save, and 8 stale
ores.refdata.core.tests files plus 4 more across ores.reporting=/
=ores.iam=/=ores.synthetic (pre-context-refactor repository
signatures) with 2 synthetic-generator bugs the fix surfaced. Create
against a second party/counterparty remains blocked on a real,
separately-tracked gap (no UI path to set parent_party_id) –
intentionally out of scope for this task. Merged via PR #1581.