Task: Map the remaining stress shift families
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
Every shift family a shipped stresstest.xml uses round trips, so the stress kind is proven end to end.
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-10-01 |
3. Acceptance
- The corpus's fourteen families all map and reverse
- Every shipped stresstest.xml round trips through the database
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 |
|---|---|---|---|
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 |
|---|---|
| #2488 | [ore] Map every stress shift family in both directions |
9. Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|
10. Result
All sixteen shift families map both ways, so every shipped stress document round trips. The mapper went from one family to sixteen.
A family keeps four fields in columns of their own: shift_type, shifts,
shift_tenors and shift_expiries. Everything else travels in extras as
name=value pairs joined by ;, and a nested struct joins its own fields by
|. ParShifts is three flags rather than a list, so it becomes one row
carrying them in extras. A composite key joins its present parts with |,
and a leading | marks a key with no currency.
Three defects were found and fixed on the way. A ParConversion convention id
shared the separator of the structure holding it, so the id and every
convention after the first were destroyed. The composite key decoder guessed a
lone part's meaning from the currency vocabulary, so a key that spelled a
currency was silently read as the currency and lost. The library flag was
written back with a capitalised boolean, so no document round tripped byte for
byte. The build then found a fourth: the configuration_id generator called
boost::uuids::nil_uuid() without the header declaring it.
The round trip is proved twice, and the second proof is the load-bearing one.
Over the corpus: twenty files, forty-six scenarios, 2047 assertions. Over a
document that fills every member of every family at once: 147 checks. The
corpus alone would not have found the ParConversion collision, because no
shipped file carries that element; the maximal document did.
compass build succeeds, and ores.ore.core.tests, ores.analytics.core.tests,
ores.analytics.service.tests and ores.shell.analytics.tests all pass against
a fleet restarted on a database recreated from the tree. Merged as PR #2488.
One limit is recorded rather than hidden: a separator embedded inside a data value still corrupts, 45 adversarial probes failing. No realistic value in this domain contains one, so no shipped document is affected. Escaping is a task of its own and the data does not ask for it yet.