Task: Round trip the stress test configuration

Table of Contents

This page documents a task in the Model the ORE report configuration as entities story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

Stress is the first file with the shift vocabulary, so it proves the family lookup and the shift row shape that the other analytics reuse.

2. Status

Field Value
State DONE
Parent story Model the ORE report configuration as entities
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-09-27

3. Acceptance

  • Every stresstest.xml in the corpus imports, exports and matches.
  • A shift family is a seeded row and a shift is one row per family, not one struct per family.
  • The shift tenors, strikes and point grids are rows keyed to a tenor entity, not comma separated strings.

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
Stress documents in the corpus 20 find external/ore/examples -name "stress*.xml" 06719d57b0
Scenarios they hold 46, in 26 distinct names python3 census over external/ore/examples/ 06719d57b0
Shift families a scenario can carry 18 in the schema, 14 in use the same census 06719d57b0
Shift entries in the corpus 348, in one table rather than fourteen the same census 02006fc04b

6. Notes

  • The document is modelled as a library of named scenarios, and a scenario's shifts as rows of one table rather than one table per family: the fourteen families in use are the same shape – an object named by one attribute, a shift type, and the shift as parallel lists of values and of tenors or expiries – so the family is a column and the object's name is object_key. Adding a family is then a value, not a table.
  • The mapper maps the library and its scenarios over all twenty documents, and DiscountCurves is the first family mapped end to end. The other families are counted into unmodelled rather than dropped, and the case asserts the counts for the four busiest, so the gap is measured.
  • Where the work stands, for whoever picks it up. Each family still to map needs two things: reading its key attribute back into its own type, and reading its extras – ShiftSize, ShiftScheme, ShiftingZeros, ParConversion and the rest – which differ from family to family. Reading ORE's spellings back needs a table per key type, and the two smallest live in ore_code_tables.hpp; a family whose key is a currency pair or an index needs one table each.
  • An empty shift block is written back as no block, because an element with no entries means the same as its absence and the corpus carries one.

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
#2398 [analytics] Model the stress test configuration

9. Review

Comment summary File Decision Notes
       

10. Result

DONE. The kind is modelled as three tables – ores_analytics_stress_test_libraries_tbl, ores_analytics_stress_test_scenarios_tbl and ores_analytics_stress_test_shifts_tbl – and the library, all forty-six scenarios and the DiscountCurves family round trip over the twenty documents the corpus ships. The shift families that have no reader yet are counted by name rather than dropped, and the case asserts the counts for the four busiest, so the gap is measured instead of hidden.

Measured, on the rebased head with the database recreated from the same tree: the full suite is 89 of 89, and compass services start brings up 24 of 24 units (running=24 stopped=0 failed=0 missing=0). Component drift, the ER diagram, SQL hygiene, the protocol twins, handler permissions, shell menus, route auth, the recipe inventories and compass lint are clean. Merged as 8edb093b4e.

Two things to carry forward. The verification job never reached its services step: the from-scratch debug build was cancelled at three and a half hours, so the merge rests on the local run of the same sequence at the same head. And the kind is not complete: thirteen of the fourteen families the corpus uses have no reader, each needing the key type it names its object by and its own extras, which is the first thing the next task on this story should pick up.

Emacs 29.3 (Org mode 9.6.15)