Establish what is happening
Bind output to its job
Capture job ID, terminal state, output identifier, content revision, creation time, expiry time, and reader request. Confirm the reader used the current key and job revision. Keep a missing key separate from an expired object or an authorization response.
Compare immediate and delayed reads
Read a known completed output within its retention window, then repeat after the recorded expiry. Check status, message, empty state, and whether metadata survives. Preserve the request timestamps so a cache or clock issue is not mistaken for retention behavior.
Inspect rebuild and downstream use
Follow the documented rebuild, rerun, or regenerate path and inspect any consumer that expects the output to remain available. Determine whether a missing result blocks a decision or merely requires a new run. Mark outputs with unknown expiry as a contract gap.
What to carry forward
Return job and output identifiers, terminal and retention timestamps, read responses, expiry policy, and recovery path. Classify the scope as wrong key, premature expiry, reader timing, or missing fallback. Keep the cause provisional when storage evidence and application status disagree.
Technical background: Rails guides.
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