Story: Show a curve evolving in ores.web
Table of Contents
This page documents a story in Sprint 27. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
1. Goal
A person opens ores.web, names a curve or a surface, and watches it evolve as an aligned matrix of instants by nodes, with each node's change, staleness and provenance.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 27 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-10-11 |
3. Acceptance
- The BFF exposes the identity, snapshot, slice and evolution reads, each behind the permission the server checks.
- A person reaches the evolution screen from the market data area and reads the aligned matrix for a named object.
- The screen shows each node's status, the age of each value and, on request, where each value came from.
- A hole is shown as a hole and a refused request is shown as a reason.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Scaffold story: Show a curve evolving in ores.web | DONE | 2026-10-10 | 2026-10-10 | Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR. |
| Give the BFF the curve read routes | DONE | 2026-10-10 | 2026-10-10 | Route each curve read through the BFF. |
| Build the watch a curve or surface evolve screen | DONE | 2026-10-11 | 2026-10-11 | Build the screen of the journey: name an object, pick a range or a set of instants, read the aligned matrix with each node's change, age and provenance. |
| Fix the snapshot warning type | DONE | 2026-10-11 | 2026-10-11 | The snapshot reply carries warning as a boolean and the contract said string, so the Now panel failed to read a real snapshot. Fix the contract and show the warning in words. |
5. Decisions
- One module, four POST routes. The BFF reads a composite object through
/api/curves/series, snapshot, slice and evolution. Each is a POST because the identity is a structure. The routes check structure only. The server keeps the permission and the shape rules, and a refused read reaches the person as the server's reason. - The screen is the evolution matrix plus the object now. Nodes are rows and instants are columns. Each node states its change over the range. A missing value is a hole and never a zero. The Now table gives the age of each value and, when asked, its source.
- Curve data is visible to the party that owns it. The first look in a browser showed an empty page, because the demo data belonged to the System Party and the person had signed in as another party. The screen now says so instead of saying the object has no node. The story does not change the rule.
- Real data found what canned data hid. The contract typed the snapshot's
warningas a string and the server sends a boolean. Tests built on invented replies passed. A run against the running stack with ORE's own FX volatility data found it. Contract tests for a wire shape should use a reply the server sent.
Left for later, none of it in this story.
- A series list route and a picker, so the object is chosen and not typed. It should list
only the series the party can see. Capture
curve_screen_series_picker. - A shape declared when a synthetic feed starts. Feed ticks never declare axes, so a
synthetic curve has points and cannot be shown. It crosses into the synthetic story,
which another environment owns. Capture
synthetic_feed_declares_its_shape. - A wire operation to key and clear a manual point, and the adjust-by-hand screen.
Capture
key_a_manual_point_from_the_web. - The approval chain and the publication record. Capture
curve_publication_and_approval.
6. Out of scope
- Writing a point. Keying and clearing a manual point needs a wire operation first.
- The approval chain: ask, decide, publish and withdraw.
- Charts beyond the aligned matrix. The first screen is a table.