Task: Give every marketdata entity its shell commands

Table of Contents

This page documents a task in the Rewrite the oresmd grammar as a hand-written codec checked against ORE story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

Every marketdata entity and the junction can be driven from the shell, and every command is proved against the live fleet.

2. Status

Field Value
State DONE
Parent story Rewrite the oresmd grammar as a hand-written codec checked against ORE
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-02

3. Acceptance

  • S01: feed_binding, market_observation, market_fixing and the asset-class junction have generated shell command units and tests.
  • S02: each has a generated recipe, and the recipe inventory lists them.
  • V04: every marketdata shell command runs against the live fleet, and the run log is on the task. Any command that cannot run is recorded with its reason.

4. Plan

Bind the models to the shell surface, regenerate, then run the recipes.

  1. Opt feed_binding, market_fixing and market_observation into ores.cpp.shell-command in their property drawers. Their profiles, readonly-timeseries and none, do not turn the facet on.
  2. Give the junction a list read. Codegen withholds every messaging facet, the protocol and the shell unit from a junction that declares no list_by side, so market_series_id gets :list_by: true.
  3. Regenerate marketdata at the ores address, wire the new registrar and the four shell units into their hand-written aggregators, and seed the two permissions the junction's handler checks.
  4. Regenerate the cmake lists, the recipe inventory and the script library, then run every marketdata script against the live fleet.

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
Marketdata models with shell commands, before and after 3 before, 7 after ls projects/ores.shell/marketdata/src/app/commands/marketdata/ ec7c5bdff4
Scripts the tangle added 26, in 4 new folders; no existing script changed compass build --direct tangle_shell_scripts, then git status ec7c5bdff4
Marketdata scripts run against the live fleet 73: 32 ok, 19 missing, 18 failed, 4 aborted; each with its reason evidence/marketdata_shell_commands_run.txt ec7c5bdff4
Shell unit tests 16 of 16 suites pass compass test run -R ores.shell ec7c5bdff4
Marketdata tests 5 of 5 suites pass compass test run -R ores.marketdata ec7c5bdff4

6. Notes

6.1. The live run

Each of the 73 marketdata scripts ran in its own ores.shell --load invocation, logged in as the ACME tenant administrator, because the shell stops at the first failing command. The full table is evidence/marketdata_shell_commands_run.txt.

  • 32 ok: the command reached its service and decoded. That includes the three marketdata import scripts, whose hand-written command prints counts rather than an outcome.
  • 19 missing: the sentinel key addresses no row.
  • 18 failed: each is the database refusing a sentinel, never a fault. The nil UUID breaks the id check on set and put-many; __none__ is not a series subclass; the lineage sentinel is not JSON; the junction's nil series is no series.
  • 4 aborted: the crm_rates_* scripts. No shell menu answers crm since commit ee4e739a65 deleted the hand-written CRM commands, so these cannot run. Recorded as The CRM shell recipes call a command that no longer exists.

Today only market_series, observation_lineage and series_classification_rule have shell commands. See the 2026-10-02 review, section 4.

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
#2643 [marketdata] Give every marketdata entity its shell commands

9. Review

Comment summary File Decision Notes
       

10. Result

Every marketdata entity and the asset-class junction now has generated shell commands, tests and a recipe that the inventory lists. The junction gained its NATS surface on the way, because codegen gives a junction no protocol until a side declares a list read. Every marketdata script ran against the live fleet, and each verdict has a reason; the four CRM scripts cannot run and are a capture of their own.

Emacs 29.3 (Org mode 9.6.15)