Problem
Cached sweep identity names an IDB key but not a content revision. Live requests use a sentinel empty-site timestamp-zero scan key and carry no volume/chunk generation. Volume responses discard their request identity and are uploaded unconditionally. Render dedup is recorded before success, so transient failures and prefetch can suppress the render that should eventually own the primary texture.
Relevant code: src/nexrad/decode/decode_worker/send.rs:89-145, src/core/worker_decoded.rs:152-205, src/core/worker_decoded.rs:295-376, src/app/worker_results.rs:497-566, and src/nexrad/render/render_coordinator.rs:107-130.
Scope
- Carry
{site, scan, elevation, product, content revision, request generation} through cached render requests and responses.
- Carry real volume/session identity plus accumulator/chunk revision for live renders.
- Preserve scan, product, mode, and request generation for 3D volume responses.
- Accept GPU uploads only when they match current desired display and are not older than the accepted generation.
- Separate requested, prefetched, succeeded, failed, and resident GPU state; deduplicate only states that can satisfy current intent.
- Retry or invalidate dedup after transient failure and reconcile
NotFound with cache inventory.
- Keep render-coordinator elevation inventory scan-scoped.
Acceptance criteria
- Delayed results from a prior site, scan, product, elevation, live volume, or 3D request cannot overwrite current canvas data.
- An older partial result for the same live elevation cannot replace a newer accepted partial.
- Prefetch does not prevent the prefetched sweep from becoming the primary displayed texture at its frame boundary.
- A transient failure permits retry without unrelated user interaction.
DisplayedSweep records the exact accepted source identity and revision for timeline highlighting and captions.
- 3D responses expose their scan and coverage and are rejected when stale.
- Pure ordering/dedup tests cover out-of-order cached, live, prefetch, failure/retry, product switch, site switch, and 3D cases.
Parent: #185. Consumes the cache inventory revision and live accumulator revision established by earlier issues.
Problem
Cached sweep identity names an IDB key but not a content revision. Live requests use a sentinel empty-site timestamp-zero scan key and carry no volume/chunk generation. Volume responses discard their request identity and are uploaded unconditionally. Render dedup is recorded before success, so transient failures and prefetch can suppress the render that should eventually own the primary texture.
Relevant code:
src/nexrad/decode/decode_worker/send.rs:89-145,src/core/worker_decoded.rs:152-205,src/core/worker_decoded.rs:295-376,src/app/worker_results.rs:497-566, andsrc/nexrad/render/render_coordinator.rs:107-130.Scope
{site, scan, elevation, product, content revision, request generation}through cached render requests and responses.NotFoundwith cache inventory.Acceptance criteria
DisplayedSweeprecords the exact accepted source identity and revision for timeline highlighting and captions.Parent: #185. Consumes the cache inventory revision and live accumulator revision established by earlier issues.