Keep the lesson for the next incident
Name safe cancellation points
List each batch phase and identify the last check before its side effect. State whether cancellation waits for the current step, prevents the next step, or can interrupt safely. Keep this close to the worker flow so new phases cannot omit the check silently.
Clarify acknowledgement semantics
Define whether accepted means requested, observed, no-new-effects, or fully terminal. Give the status reader enough context to tell those states apart. Record the item and batch records that prove the worker has reached the promised boundary.
Watch for recurrence
Review traces for side effects after the no-new-effects boundary, cancellation requests that remain unobserved, and new blocking phases. Keep one fixture for each safe point. Reassess the contract when an external call, retry, or batch step changes its effect timing.
What to carry forward
Preserve a phase-by-phase cancellation contract, precise acknowledgement states, and a reconciliation path for in-flight calls. The recurrence check should compare request, observation, and effect timestamps. Reopen the work when a new side-effect phase lacks a safe checkpoint or the status wording hides remaining uncertainty.
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