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_feedsneedsprovision_partyas well aspublish_bundle, so it binds every party the LEI import creates. A freshacme_demoprovision 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 thatsubscribe()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.