Story: Prove the report grid run end to end

Table of Contents

This page documents a story in Sprint 28. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

The ACME report definition runs to completion against the compute grid from an input bundle that already exists, the compute results are retrieved, and the run is reproducible from a freshly recreated database.

2. Status

Field Value
State DONE
Parent sprint Sprint 28
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-24

3. Acceptance

The story closes on the tasks it finished:

  • Export the trades as the ORE portfolio the engine reads.
  • Retrieve the compute results.
  • Seed the risk report configurations the report definitions need.
  • Treat an engine error as a failed result.

4. Tasks

Task State Start End Description
Export the trades as the ORE portfolio the engine reads DONE 2026-10-08 2026-10-21 The run document names a portfolio file, but the packaging step wrote the gathered trades blob at a hardcoded trades.msgpack, so the engine loaded its market data and then stopped at 'Pricing: Build Portfolio'. The exporter already existed as ores.ore.xml::exporter::export_portfolio; the run path never called it. PR 2857 decodes the stored export response, exports it, and writes the portfolio where the run document names it. The engine-level acceptance awaits the hourly validation and a run.
Do not replay a compute assignment whose result is gone ABANDONED     The JetStream assignments stream outlives a database recreate. On the recreated environment the wrapper replayed assignments from the previous one and answered 'results.submit failed: Result not found' for each, because the result rows were gone. Either the recreate purges the stream, or the result-submit handler treats an unknown result as an expired assignment and acknowledges it instead of erroring, so a wrapper stops retrying work that cannot exist.
Retrieve the compute results DONE 2026-10-08 2026-10-21 Task for: Run an example bundle through the compute grid from a report definition
Seed the risk report configurations the report definitions need DONE     The acme_demo profile seeds 155 report definitions but no risk report configurations. The report execution chain resolves a risk_report_config by definition id before it does anything else, and fails the instance with 'risk_report_config not found' when there is none, so every seeded definition is unrunnable. Seed at least one configuration and its book or portfolio scope for the definitions the stories exercise, and decide whether the rest stay unconfigured.
Treat an engine error as a failed result DONE 2026-10-08 2026-10-21 The wrapper judged a job by the engine's exit code alone. ORE printed 'Error: Error in ORE analytics: error opening file Input/market_20160205_flat.txt' and exited 0, so the wrapper packed an Output/ holding only the log, uploaded it, and reported outcome 1 (Success). PR 2890 moves the verdict to ores.ore as a pure function over the engine's output and its own log, read through the repository's existing ORE log parser, and makes the wrapper fail when no analytics were written. Awaits a live failing run.

5. Decisions

  • Closed at sprint 28 close with its 4 done tasks. The 3 open tasks and the original acceptance moved to Prove the report grid run end to end — the remaining work in the product backlog inbox.
  • 2026-10-21: The task about stale assignments is abandoned. The assignments stream was retired (74b9989f14) and the wrapper claims its work from the work ledger (40880bca00), so no assignment outlives a database recreate.
  • 2026-10-21: The three tasks that carry a merged PR or an implemented step are closed on what the code does. The live observations they list are not lost: they are the acceptance of Prove the run end to end and keep it repeatable.

6. Out of scope

Emacs 29.3 (Org mode 9.6.15)