Task: Start the feeds after the parties exist

Table of Contents

This page documents a task in the Organise feeds by provider and scope story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

Every party a tenant run creates is bound to the run's synthetic feeds.

2. Status

Field Value
State DONE
Parent story Organise feeds by provider and scope
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-12

3. Acceptance

  • start_market_feeds needs provision_party as well as publish_bundle, and a test states it.
  • An acme_demo provision binds every Acme party to the Bloomberg feeds.

4. Plan

Make the feed step need provision_party, so it binds the parties the import creates. Verify on a fresh acme_demo provision that every party is bound and stores Bloomberg prices.

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
       

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
#3172 [iam,marketdata] Bind feeds after the parties exist and ingest ticks again

9. Review

# Comment summary File Decision Notes
1 PR #3172: the ingest loop appends the wildcard by hand feed_ingest_loop.cpp Declined One call site, with a comment saying why it stays relative; a client helper for one caller adds API, not safety.
2 PR #3172: subjects_below() has no remaining direct callers client.hpp Noted Its doc says it is for stream filters and other absolute uses.
3 PR #3172: sandbox ticks are not ingested feed_ingest_loop.cpp No change Intended: a sandboxed feed's ticks are never stored, as producer_subject.hpp states.
4 Local gate: format and the visibility test failed on this branch app_feed_ingest_loop_tests.cpp, synthetic_system_feed_visibility_test.sql Accepted Fixed in 1173441b64; 4f836f1b45 drops drift files that commit swept in.

10. Result

Shipped:

  • start_market_feeds needs provision_party as well as publish_bundle, so it binds every party the LEI import creates. A fresh acme_demo provision bound all five Acme parties to the 55 Bloomberg sources; before, only the system party was bound.
  • The verification found a second bug, on main since 80dcac6037: the feed ingest loop subscribed to an already-prefixed wildcard that subscribe() prefixed again, so no synthetic tick was stored in any environment. The loop subscribes to the relative wildcard, and a test that publishes a tick on the bus fails on the old subscription and passes on the fix.

After both fixes every Acme party stores Bloomberg FX ticks and IR curve ticks.

Emacs 29.3 (Org mode 9.6.15)