Skip to content

Preserve explicit live-partial semantics during timeline interaction #191

Description

@danielway

Problem

An active sweep may appear as InFlight from the live projection while its partial data exists only in the worker accumulator. Clicking or seeking that timeline item detaches the playhead, which removes the live accumulator from display resolution and falls back to IDB before a durable blob necessarily exists. At volume end, the accumulator may be cleared before the final partial reaches the canvas through a cached render.

Relevant code: src/ui/timeline/interaction.rs:301-319, src/app/live_mode.rs:348-407, and src/core/worker_ingest.rs:325-428.

Scope

  • Define whether active partial cells are inspectable/selectable and what selection means.
  • Represent selection as a concrete frame/source identity rather than only a timestamp when needed.
  • Preserve access to a selected live partial through a bounded immutable snapshot, or make the cell explicitly non-renderable until committed.
  • Define atomic handoff from active accumulator revision to durable cached revision at sweep/volume completion.
  • Ensure the final End chunk can become the displayed complete sweep without a stale interval.
  • Clear stale live projection/container state between volumes and avoid duplicate settled/live representations.

Acceptance criteria

  • Timeline styling and interaction accurately communicate whether an active partial can be selected.
  • Selecting an inspectable active partial renders that exact accumulator revision or a documented immutable snapshot.
  • Detaching to review history cannot accidentally blank or substitute a different frame for the selected partial.
  • Completion hands canvas/timeline ownership from live partial to durable cached sweep without losing the final chunk.
  • Between volumes, the completed scan appears once and no stale in-flight status remains.
  • Pure lifecycle tests cover attached, detached, partial selection, next chunk, completion, End, site/session stop, and between-volume states.

Parent: #185. Depends on serialized live ingestion and generation-gated render results. Related live UX umbrella: #160.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    Status
    Blocked

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions