--- model: gpt-5.6-sol service: opencode timestamp: 2026-09-03T23:25:25Z git_ref: fadab3d2 diff_cmd: git diff HEAD~4..HEAD --- ## Prompt The human reported that the MNQ volume subchart repeatedly rendered its last bar at one index around the equity-futures closure, then reported that the volume curve disappeared after reopening. During live testing, the human confirmed that `flow_rates`, which started later, advanced correctly while `dolla_vlm` remained pinned. The human then reported a stale downsampled curve on zoom-out and supplied the repeated console warning: `No yrange provided for dolla_vlm!?` The human requested a live diagnosis and fix, validated each restart, and confirmed the final chart behavior was fixed. ## Response Read-only SHM snapshots showed that `dolla_vlm` remained at exclusive bound `172801` while the source advanced hundreds of rows. Its one current row kept receiving current quote values, explaining the same-index repaint. `flow_rates` remained aligned because it started after regular one-second timestamps resumed. The cascade had inferred its sampler period from the last two distinct timestamps. A market closure therefore looked like the source cadence. Explicit `Flume` RT/history periods now drive sampling and downsampling metadata instead. > `git diff HEAD~4..HEAD -- piker/data/flows.py` > `git diff HEAD~4..HEAD -- piker/fsp/_engine.py` Further SHM inspection found an IB source row with volume `-2319096`. `dolla_vlm` multiplied that value into a `-68277471626` outlier, causing `Viz.maxmin()` to reject the zoomed-out range. Sample ingestion and volume FSP history/realtime calculations now clamp negative volume. > `git diff HEAD~4..HEAD -- piker/data/_sampling.py` > `git diff HEAD~4..HEAD -- piker/fsp/_volume.py` The M4 renderer already returned a cache-reset signal after rebuilding a downsampled path, but `Viz.update_graphics()` overwrote that signal with `False`. The override was removed so Qt's device-coordinate cache is invalidated with the new path. > `git diff HEAD~4..HEAD -- piker/ui/_dataviz.py` Normal quote cycles also redrew unchanged FSP state. A per-`Viz` bounds/timestamp/value signature now suppresses only identical realtime refreshes; forced history redraws still bypass it. > `git diff HEAD~4..HEAD -- piker/ui/_fsp.py` Regression coverage models closure-gap cadence, negative provider volume, unchanged realtime redraws, and the broader FSP synchronization behavior. > `git diff HEAD~4..HEAD -- tests/test_fsp_sync.py` Live verification after restart showed source and `dolla_vlm` advancing at the same bound, zero negative destination rows, and correct zoomed-out rendering. The focused suite completed with 38 passing tests.