Run real-data members at the sidecar pip — the graph broker uses the synthetic pip while the manifest stamps the real one #232

Closed
opened 2026-07-10 17:14:52 +02:00 by Brummel · 1 comment
Owner

wrap_r builds the broker as SimBroker::builder(SYNTHETIC_PIP_SIZE) (0.0001) unconditionally (crates/aura-cli/src/main.rs:1269); SimBroker's pip is closure-captured and the node declares no params (crates/aura-std/src/sim_broker.rs:61), so it cannot be rebound after construction. On the real-data paths the resolved geometry-sidecar pip reaches only the manifest: manifest.broker = r_sma_broker_label(pip) (main.rs:1386 and 1430), and campaign members pass geo.pip_size to run_blueprint_member where it never touches the graph (crates/aura-cli/src/campaign_run.rs:296).

Effect on every real-data run: total_pips and max_drawdown are computed with divisor 0.0001 regardless of instrument — on GER40 (sidecar pipSize=1) inflated by 10^4 — while the recorded broker label claims the sidecar pip. The label misstates what ran. R metrics are pip-free (the RiskExecutor branch) and unaffected; within a family the distortion is uniform, so intra-family ranking survives; cross-instrument pip comparisons do not.

The doc comment at main.rs:73-80 ("The real path threads the sidecar's looked-up pip_size instead") is true only for the label. Fix home is the same scaffolding #231 retires — the pip belongs to the source binding.

  • the broker in the graph runs at the resolved instrument pip on real data (or pip-denominated metrics are dropped from real-data reports)
  • the manifest broker label matches what actually ran
`wrap_r` builds the broker as `SimBroker::builder(SYNTHETIC_PIP_SIZE)` (0.0001) unconditionally (crates/aura-cli/src/main.rs:1269); SimBroker's pip is closure-captured and the node declares no params (crates/aura-std/src/sim_broker.rs:61), so it cannot be rebound after construction. On the real-data paths the resolved geometry-sidecar pip reaches only the manifest: `manifest.broker = r_sma_broker_label(pip)` (main.rs:1386 and 1430), and campaign members pass `geo.pip_size` to `run_blueprint_member` where it never touches the graph (crates/aura-cli/src/campaign_run.rs:296). Effect on every real-data run: `total_pips` and `max_drawdown` are computed with divisor 0.0001 regardless of instrument — on GER40 (sidecar pipSize=1) inflated by 10^4 — while the recorded broker label claims the sidecar pip. The label misstates what ran. R metrics are pip-free (the RiskExecutor branch) and unaffected; within a family the distortion is uniform, so intra-family ranking survives; cross-instrument pip comparisons do not. The doc comment at main.rs:73-80 ("The real path threads the sidecar's looked-up pip_size instead") is true only for the label. Fix home is the same scaffolding #231 retires — the pip belongs to the source binding. - [ ] the broker in the graph runs at the resolved instrument pip on real data (or pip-denominated metrics are dropped from real-data reports) - [ ] the manifest broker label matches what actually ran
Brummel added this to the Real-project readiness — role-complete research loop (no freeze) milestone 2026-07-10 17:14:52 +02:00
Brummel added the bug label 2026-07-10 17:14:52 +02:00
Author
Owner

Fix direction decided (2026-07-10): thread the resolved pip into the harness scaffolding rather than dropping pip-denominated metrics from real-data reports — the manifest already stamps the resolved pip, so running the graph at it restores label truthfulness without shrinking the report.

Landed as eb5fc21 (RED: metamorphic pip-invariance test — total_pips * pip must agree across two distinct pips on identical input) + ed1e8a0 (GREEN): wrap_r gained a pip_size parameter passed to SimBroker::builder. Real-pip call sites pass the resolved sidecar pip (run_signal_r, run_blueprint_member, and the campaign trace re-run in persist_campaign_traces — the latter required so the determinism drift alarm compares re-run and nominee at the same pip); param-space/axis probes keep the synthetic pip explicitly (metrics discarded). The two golden stitched_total_pips pins rescaled by exactly the 10^4 bug factor while n_trades/expectancy_r stayed byte-identical — confirming R metrics were never pip-contaminated, as the issue predicted.

Both acceptance boxes are met on the branch: the graph broker runs at the resolved instrument pip on real data, and the manifest broker label matches what ran. Closes via commit on merge.

Fix direction decided (2026-07-10): thread the resolved pip into the harness scaffolding rather than dropping pip-denominated metrics from real-data reports — the manifest already stamps the resolved pip, so running the graph at it restores label truthfulness without shrinking the report. Landed as eb5fc21 (RED: metamorphic pip-invariance test — `total_pips * pip` must agree across two distinct pips on identical input) + ed1e8a0 (GREEN): `wrap_r` gained a `pip_size` parameter passed to `SimBroker::builder`. Real-pip call sites pass the resolved sidecar pip (`run_signal_r`, `run_blueprint_member`, and the campaign trace re-run in `persist_campaign_traces` — the latter required so the determinism drift alarm compares re-run and nominee at the same pip); param-space/axis probes keep the synthetic pip explicitly (metrics discarded). The two golden `stitched_total_pips` pins rescaled by exactly the 10^4 bug factor while `n_trades`/`expectancy_r` stayed byte-identical — confirming R metrics were never pip-contaminated, as the issue predicted. Both acceptance boxes are met on the branch: the graph broker runs at the resolved instrument pip on real data, and the manifest broker label matches what ran. Closes via commit on merge.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#232