Named steps allow a retried job to skip work that completed in a previous attempt.
Headgate writes the in-progress checkpoint before side effects and rechecks the lease
fence at every boundary.
Named steps
Inspect a checkpoint
Checkpoint and cursor state is intentionally absent from ordinary job/list responses.
Cursor bytes can contain application data, so operators request it explicitly:
The response contains the ordered completed steps, the step checkpointed before its side
effects, cursor step and base64 cursor bytes, step schema/hash, and crash counts by step.
An existing job that has never used resumable steps returns an empty checkpoint; 404
means the job itself is missing.
The console loads this endpoint only when job detail is opened. Its Resumable execution
section shows completed and current steps, renders JSON/text cursors when possible, keeps
binary cursors in base64, and makes per-step crash attribution visible. It cannot show
future handler steps because those definitions live in worker code and are not persisted
with the job.
Cursor steps
Cursor steps resume a loop from durable application progress. Each cursor update is
fence-verified.
Side effects exactly once
step_once / StepOnce claims an effect key and commits the application’s transaction
with the completion checkpoint. It requires a transactional backend; Redis declines it.
Changing the step set during a deployment requires a declared mapping. An unknown step set
becomes undecodable rather than silently restarting at step one.