Aglet

How to diagnose stale results by request and state version

Stale results are a freshness failure: the screen shows data from an older request, cache, read model, or background update. This triage guide records the requested state and displayed state, aligns versions and timestamps, and compares a fresh result with the stale path.

Establish what is happening

  1. Capture requested and displayed state

    Record route, input or filter, request identifier, client state version, response timestamp, data version, cache or read-source context, and the action taken from the result. Compare the newest known record state with what the screen or API returned. Redact values while preserving ordering and versions.

  2. Reproduce a freshness race

    Issue an older slow request followed by a newer fast request, or update a record while the view is loading. Compare response arrival, application decision, displayed identifiers, timestamps, and version markers. Keep the route and inputs fixed so stale ownership is distinct from a valid historical view.

  3. Separate source and presentation boundaries

    Check whether the stale value originated in client state, a cache, a delayed read model, an API response, or a background projection. Compare source timestamps and invalidation or refresh events. Mark the first boundary where newer state becomes unavailable or an older result is applied.

What to carry forward

Return a freshness scope statement naming the requested state, displayed state, version or timestamp evidence, first stale boundary, and uncertainty. Route next work to response ordering, cache, read model, invalidation, or presentation. Stop when one controlled race distinguishes source staleness from client application.

Keep the decision with the work.

Use a Work Item in Aglet to record the problem, the evidence you have, and the next decision. Add an owner and priority, then keep updates in the discussion so the next person can follow the reasoning.

Create an account See the product workflow