Aglet

Triage long-job time limits by phase and cleanup state

A time limit can be correct for one phase and unsafe for another. Triage one job near its deadline and record the configured limit, phase, unfinished work, cleanup path, and final state. Compare a job just below the limit with one that crosses it so timeout behavior is not inferred from a single alarm.

Establish what is happening

  1. Mark the deadline timeline

    Record job start, deadline calculation, phase transitions, limit signal, cleanup start and end, commit events, worker exit, and terminal state. Include any retry decision. Keep the clock source and timezone visible so a timestamp conversion issue is not mislabeled as a time-limit defect.

  2. Separate work from cleanup

    List the side effects completed before the limit, the step interrupted at the boundary, and the cleanup actions that followed. Check whether cleanup can safely repeat and whether the job reports timed out, failed, or still running. Preserve unknown effects as unresolved evidence.

  3. Compare boundary cases

    Inspect runs that finish just before the deadline, reach it during a short step, and exceed it while waiting on a dependency. Identify the first difference in signal or terminal mapping. A limit that fires consistently but leaves the same committed state may need wording rather than execution change.

What to carry forward

Return the deadline calculation, phase, side effects, cleanup timeline, worker exit, and terminal mapping for matched boundary cases. Classify the scope as deadline calculation, phase allowance, cleanup, or retry ambiguity. Keep causation provisional when commit and timeout records lack a shared order.

Technical background: Celery documentation.

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