Task: Move the conventions bundle into refdata's contract

Table of Contents

This page documents a task in the Make ores.ore the only owner of ORE formats story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

ores.ore.core depends on refdata's contract alone, and the bundle types sit beside the protocol that carries them.

2. Status

Field Value
State DONE
Parent story Make ores.ore the only owner of ORE formats
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-27

3. Acceptance

  • conventions_bundle, conventions_bundle_row and conventions_apply_result are declared in ores.refdata.api.
  • ores.ore.core includes no ores.refdata.core header and links no ores.refdata.core library.
  • Refdata's stage, commit and apply path and the ORE conventions import still pass their suites.

4. Plan

The header held three payload structs and a service that needs a session. The structs are the contract between a caller that reads an ORE document and the service that applies the rows, so they move to ores.refdata.api/messaging/conventions_bundle.hpp; the service stays where the database is, and re-exports the names it works with.

The codec then includes the api header alone, and its family units name refdata::messaging::conventions_bundle rather than the service namespace. The dependency block drops ores.refdata.core and the story's Notes lose one of the six.

The removal also exposed a test helper that read its stream through a transitive include, which is now stated.

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
ORES libraries libores.ore.core.so declares, before 19 =readelf -d …/libores.ore.core.so grep NEEDED grep -c libores= 012bb09361
The same, after 18 the same command HEAD
Of those, what the move took refdata.core; refdata.api stays, because the codec names the bundle diff of the two lists HEAD
Codec sources naming refdata::service:: 0 grep -rn 'refdata::service::conventions_bundle' projects/ores.ore HEAD

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
#3997 [refdata] Move the conventions bundle into the contract

9. Review

Comment summary File Decision Notes
       

10. Result

Merged as #3997. The three payload structs are in ores.refdata.api/messaging/conventions_bundle.hpp, the service stays with the database and re-exports the names, and the codec names the bundle through the messaging namespace.

The codec now declares eighteen ORES libraries where it declared nineteen, and refdata.core is gone: refdata appears only as its api. The four affected suites pass, and both touched components regenerate to exactly what is committed.

The removal also exposed a test helper that read through a transitive include, which is now stated, and an environment whose database lacked the equity underlying table and its grants; both were repaired, the second by applying the create script and the grants the schema's setup would have given it.

Emacs 29.3 (Org mode 9.6.15)