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.