Story: Make every configuration screen follow one standard
Table of Contents
This page documents a story in Sprint 29. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
1. Goal
One screen standard covers every configuration that comes off an ORE XML document: the same list, the same record page, the same sections, the same documentation, the same reach, the same history, the same import and the same lifecycle. A person who learns one configuration screen knows them all.
Two configurations carry the word "engine" and a person confuses them today. The standard gives each one a name that says what it decides, and every page says what the configuration is and which other configurations the same report binds.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 29 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-11-08 |
3. Acceptance
The story closes on the tasks it finished:
- Apply the standard to the pricing engine configuration.
- Author the documentation of every product type.
- Correct the value sets against the ORE code.
- Export a pricing engine configuration as ORE XML.
- Extract the shared parameter list, control and edit lifecycle.
- Fix the second value the parameter history test writes.
- Import a pricing engine configuration as ORE XML.
- Investigate the two engine-facing configurations.
- Make the parameter data model the source of valid values and rules.
- Manage the sensitivity templates.
- Model the valid values of a parameter.
- Move the curation out of the Python literals.
- Move the engine settings groups out of code.
- Move the pricing engine documentation onto the one contract.
- Validate a saved document on the server.
- Put the numbers-changing engine run settings through sign-off.
- Record the sourcing and curation methodology.
- Rename the configuration screens and their words.
- Serve the history of the whole pricing engine document.
- Show every party's configurations on the list.
- Update the configuration journeys and prototypes.
- Write the configuration screen standard.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Investigate the two engine-facing configurations | DONE | 2026-10-24 | 2026-10-27 | Establish what the pricing engine configuration and the engine run settings each decide, where one ends and the other starts, how they are linked, and which names and patterns follow. |
| Write the configuration screen standard | DONE | 2026-10-24 | 2026-10-24 | Generalise the engine run settings pattern into one UX standard for every configuration that comes off ORE XML, and record the pricing engine configuration as its second application. |
| Update the configuration journeys and prototypes | DONE | 2026-10-24 | 2026-10-24 | Bring the pricing engine configuration and engine run settings journeys and prototypes onto the standard, and add the cross-links that say how the two configurations relate. |
| Rename the configuration screens and their words | DONE | 2026-10-24 | 2026-10-25 | Apply the standard's screen words to the area cards, the list and record pages, the journeys and the translations. |
| Apply the standard to the pricing engine configuration | DONE | 2026-10-24 | 2026-10-25 | Bring the pricing engine configuration list, page, dialogs, journey and import onto the standard. |
| Move the pricing engine documentation onto the one contract | DONE | 2026-10-25 | 2026-10-27 | Extract the pricing engine pairs, models, engines and parameters from the ORE guide and source into the one documentation contract, with the format, the release and the XPath. |
| Put the numbers-changing engine run settings through sign-off | DONE | 2026-10-28 | 2026-11-08 | A change to an engine run settings group that alters the numbers a run computes becomes a proposal, signed off by the kind's approval parts. |
| Manage the sensitivity templates | DONE | 2026-10-27 | 2026-10-27 | Give the sensitivity templates a screen: the codes a pricing parameter refers to, with their asset class, method and description, and the shifts the configuration sets. |
| Record the sourcing and curation methodology | DONE | 2026-10-25 | 2026-10-25 | Write the methodology for the pricing data: extraction, curation, generation, review and provenance, with the curation file schema. |
| Move the curation out of the Python literals | DONE | 2026-10-25 | 2026-10-25 | Move the authored texts, name fixes, typo fixes, extra types and global parameters from Python dicts into curation data with reason, source and curator per entry. |
| Move the engine settings groups out of code | DONE | 2026-10-25 | The GROUPS constant hard-codes the group and setting metadata while the pricing equivalent is in tables. Put the engine settings metadata in data so both screens read one shape. | |
| Extract the shared parameter list, control and edit lifecycle | DONE | 2026-10-25 | 2026-10-25 | One component for the parameter row, the control by domain, the filters and the edit state, used by product pricing, global parameters and engine settings. |
| Validate a saved document on the server | DONE | 2026-10-25 | 2026-10-25 | Move the checks in the web's check() to the write path, so a client cannot save what the dialog refuses and every client gets the same answer. |
| Make the parameter data model the source of valid values and rules | DONE | 2026-10-29 | 2026-10-30 | One clean model for a parameter: its value domain, enumerated values, range, regex, referenced catalogue, default, required flag, compatibility (type/model/engine pair), lifecycle and provenance. The write path enforces it; every screen reads it; no screen restates a valid value. |
| Serve the history of the whole pricing engine document | DONE | 2026-10-25 | 2026-10-25 | Read the configuration, its products and its parameters as one timeline, so an edit to a setting appears in the History tab with its difference, drawn by the shared timeline. |
| Author the documentation of every product type | DONE | 2026-10-25 | 2026-10-25 | Write a curated description for each of the 108 product types, so the workbench says what the product is instead of the generated sentence about its pairs. |
| Show every party's configurations on the list | DONE | 2026-10-25 | 2026-10-25 | The list offers All parties but the read is scoped to the acting party. Decide how another party's configurations are reached, and make the filter say what it does. |
| Model the valid values of a parameter | DONE | 2026-10-25 | 2026-10-25 | Give every ORE parameter a value set: its storage type, its allowed values and, where the values are other ORE Studio data, the catalogue they come from. The screen draws the control from it and the write path enforces it. |
| Export a pricing engine configuration as ORE XML | BACKLOG | A server operation renders one pricing engine configuration as the ORE XML document ORE reads, with a download from the screen and a command in ores.shell. | ||
| Fix the second value the parameter history test writes | DONE | 2026-10-27 | The history test appended a suffix to a real value to force a second version, which ORE cannot parse and the value set guard refuses. | |
| Import a pricing engine configuration as ORE XML | DONE | 2026-10-27 | 2026-10-28 | The import half of the ORE document pair: parse a pricingengine.xml on the server, state what it holds and what the vocabulary does not know, compare it with the target configuration, and write it on the press. |
| Correct the value sets against the ORE code | DONE | 2026-10-30 | 2026-10-30 | The audit of the seeded sets found disagreements with ORE 1.8.17: sets that state text where ORE parses a fixed list or a switch, lists that refuse a value ORE accepts, and bounds ORE enforces that no set states. This task corrects the curation, restores the two catalogue sets whose registry could not check a document, and keeps the model honest about the two names ORE's builder registry decides. |
5. Decisions
- The screen words, decided by the owner on 2026-10-24. The configuration that
selects the model and the engine for each product type is a Pricing engine
configuration. The configuration that holds the
Setupchoices of a run is Engine run settings. The pricing page's Settings tab is Parameters. The model names, the configuration type codes and the API routes are unchanged. The analysis is in Investigation: the two engine-facing configurations. - The lifecycle attaches to a section, not to a kind, decided by the owner on 2026-10-24. A write to a section that changes the numbers a run computes is a proposal and needs the kind's sign-off. A write to an operational section lands directly with a reason and a history entry. One record may hold both.
- A configuration no report binds is a draft and changes in place, following the draft rule the pricing engine configuration already has. It becomes governed the moment a report binds it. Decided with the section rule on 2026-10-24.
- The journeys and prototypes come first. The owner signs them off before the standard is written and before any code changes. Decided by the owner on 2026-10-24.
- A value set is the one statement of a parameter's control and its rule. A
parameter's allowed values, bounds, pattern and catalogue live in the value
set tables and nowhere else. The per-pair
kindandoptionscolumns are gone, and so are the four control columns of the group settings table. A screen draws its control from the set, and the write path refuses a value by the same set. - The set states a number's bounds, and one function enforces them. The parameter trigger and the sign-off proposal path call the same function, so a proposal cannot ask a person to sign a value the store would refuse.
- The engine run settings join the contract through the
Setupscope. Each of the fifteen settings links to a set by its ORE name, and the screen reads the same fields the pricing screen reads. - A link is keyed by scope and name, not by pair. A setting that two engine families read differently states the union of the two lists and says so in the set's description. A per-pair difference needs a model change, and no screen needs one today.
- A gate keeps the model true.
check_parameter_value_sets.pyfails when a drawn parameter has no set, when a set breaks its own rule, when the seed is stale, or when a per-pair override column returns. - The set contents are verified against the ORE code, not the guide, and that work is separate. An audit of the seeded sets against ORE 1.8.17 found 31 disagreements: wrong kinds, wrong bounds, and lists that refuse a value ORE accepts. The report is Investigation: Verify the value sets against the ORE code, and the correction is its own task. A set that states a stricter rule than ORE is not yet a correct set.
- Closed on 2026-11-08 at sprint 29 close with its done tasks. The open tasks and the original acceptance moved to Make every configuration screen follow one standard — the remaining work.
6. Out of scope
- Renaming a table, a configuration type code or an API route. The screen words change; the model does not.
- Changing the pricing engine model. The analysis found six live
Setupchoices that the model does not hold; whether to add them is an open question in the investigation.