Task: Move the pricing engine documentation onto the one contract
Table of Contents
This page documents a task in the Make every configuration screen follow one standard story. It captures the goal, current status, acceptance, and any notes or results.
1. Goal
Every pricing engine choice and parameter carries the same documentation fields as an engine run setting, so one screen pattern reads both.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Make every configuration screen follow one standard |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-10-24 |
3. Acceptance
- Every pricing model, engine, pair and setting carries the contract's fields: label, help, description, default, format, introduced in, removed in, XPath and whether it changes the numbers.
- The extraction reads the ORE guide chapter and the ORE source, and records the ORE commit it measured.
- A missing entry shows the ORE name and a note on the screen.
- The vocabulary tables keep the mappings a person chooses from, and no longer hold the wording.
4. 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.)
5. Measurements
Every number this task claims about a tree, with the command that produced it
and the commit it was measured at. A number without both is not a measurement,
because a clean-up record describes a tree and trunk moves under a branch: a
consumer count, a gate's component count and a suite's size all change with no
code changing, and the reader of a bare number cannot tell which tree it came
from. Where the raw output matters, put it in an evidence/ file beside the
task and name that file in the Command column.
| What | Value | Command | Commit |
|---|---|---|---|
| Pricing setting rows | 646 unique (type, scope, name) | generate_ore_parameters_dataset.py |
see the branch head |
| Global parameters documented | 17 | generate_ore_parameters_dataset.py |
see the branch head |
| Settings documented on the live API | 834 of 834 | GET /api/reporting/pricing-engines/vocabulary |
see the branch head |
| Models documented | 25 of 25 | same | see the branch head |
| Engines documented | 74 of 74 | same | see the branch head |
| Pairs documented | 194 of 194 | same | see the branch head |
| Web tests | 1972 pass | npx vitest run in packages/web |
see the branch head |
| BFF tests | 941 pass | npx vitest run in packages/bff |
see the branch head |
| ORE commit measured | 3d75a6908 |
git -C /home/marco/Vault/Development/ORE/Engine rev-parse --short HEAD |
— |
6. Notes
7. Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario)
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 |
|---|---|---|
8. PRs
| PR | Title |
|---|---|
9. Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|
10. Result
Every pricing parameter now carries the one contract: a label, a help line, the
description from the ORE user guide, the value the examples use, the format, the
release it entered and the XPath of the leaf. 646 setting rows cover every
(type, scope, name) the guide describes, and 17 global rows cover the guide's
global section and the pseudo-currency block the ORE source reads. The release
each parameter entered is measured from the ORE release tags and kept in
pricing_parameter_releases.json.
The vocabulary joins the rows by (scope, product type, name), so the Product pricing screen reads one field shape: 834 of 834 settings on the live API carry their documentation, and the Global parameters tab reads the globals array.
The models, the engines and the pairs joined the same contract: 956 pricing rows
in all, with 25 models, 74 engines and 194 pairs documented on the live API. The
vocabulary no longer serves its own wording: the settings carry no note, and
the model, engine and pair text comes from the contract. The authoring journey
reads help, not note.
One acceptance item remains, and it is now only dead data: the vocabulary tables
still carry the wording columns (note on the pairs and settings, and the
description and detail on the models and methods). The API no longer reads
them. Drop the columns in a codegen change, so no later reader can take the
wording from the wrong place.