Reporting writes the report blobs to a bucket ore does not read

Table of Contents

This page is a capture in the discarded bucket of the product backlog.

ABANDONED 2026-09-27 — Closed by Move reporting's write path onto the storage protocol. The plan names no bucket of its own, both keys are built with object_keys::make("reporting", "runs", <instance_id>, <name>), and the test that pinned the retired name now asserts the protocol's shape.

1. What

ores.reporting gathers a report's inputs by asking ores.trading and ores.marketdata to write them to object storage. It hands both of them the bucket and the key, so neither handler owns either: the bucket comes from service::report_data_bucket, which is report-data, and the key is report_instance_id + "/trades.msgpack".

ores.ore then reads those same blobs when it packages the report, but it reads them from object_keys::ores_bucket, which is ores, and it receives the keys the writer echoed back. So the writer and the reader of one object disagree about the bucket, and the read cannot find what the write stored.

2. Why

The interface task migrated the consumers onto the protocol in Object Storage and recorded "the compute, ore-imports and report-data names are gone". That is true of compute and of ore, and false of reporting: report_data_bucket is still report-data. The migration also left the key as two segments, where the protocol is <service>/<purpose>/<id>[/<name>]; the protocol's own comment on the trading request already names the intended shape, reporting/runs/{instance_id}/trades.msgpack.

The two spellings agreeing is what the header comment claims: "the ore service names the same bucket for the packaging step, and the two spellings have to agree". They do not.

Nothing catches it because the server keeps no bucket allow-list – it creates a bucket on first write – so the write succeeds into report-data and only the later read fails. That is the shape of the class: with no list to fall behind, the only signal is the read.

Found while researching what "the trading and marketdata export handlers are main's own and were untouched" meant, as part of Close the object storage interface leftovers. Not fixed there: reporting is another environment's live work.

3. References

  • projects/ores.reporting/core/include/ores.reporting.core/service/execution_storage_plan.hpp:37 — report_data_bucket = "report-data"
  • projects/ores.reporting/core/src/service/execution_storage_plan.cpp:25 — report_instance_id + "/trades.msgpack"
  • projects/ores.reporting/core/src/messaging/report_execution_handler.cpp:180 — the bucket handed to trading
  • projects/ores.ore/service/src/messaging/report_package_handler.cpp:40 — the bucket the reader uses
  • projects/ores.reporting/core/tests/service_execution_storage_plan_tests.cpp:35 — the test that pins the retired name

4. See also

Emacs 29.3 (Org mode 9.6.15)