Holds, maintenance windows and blackouts
The recurring windows that hold factory work without anyone pressing a switch, what a held run looks like, and what happens to work that arrived while it was held.
Four things hold factory work. Held work is never dropped: it waits, shows up on the cockpit and in Checkpoints, and starts again when the hold lifts.
| Hold | Set by | Holds |
|---|---|---|
| Pause | The cockpit’s Pause all automations | Every trigger. Running steps finish. |
| Stop | Settings’ Stop the factory | Every trigger. Running steps are cancelled. |
| Maintenance window | pix.maintenance |
Every new step while the window is open. |
| Schedule blackout | schedules.blackout |
Every new step while the window is open. |
Pause and stop are covered in Pause, stop and resume. This page covers the windows.
Maintenance windows
A maintenance window is a recurring time when your Pix Sandbox may be updated and restarted. While it is open the factory starts no new step. A queued run becomes held and is queued again when the window closes; a run already running starts no new step until then.
[{ "days": ["sun"], "start": "02:00", "end": "04:00", "tz": "Australia/Melbourne" }]
This is the factory’s own setting. The sandbox’s page has a separate relaunch window, stored on the sandbox in a different shape, and saving one does not change the other. Each pix.maintenance window is evaluated in its own tz, not schedules.tz.
Schedule blackouts
A blackout is a recurring time when the factory starts no new work, such as a release freeze or a weekend. Runs that schedule fires or events start during the window wait as held until it ends.
[{ "from": { "day": "fri", "time": "16:00" }, "to": { "day": "mon", "time": "08:00" }, "label": "release freeze" }]
day is mon to sun, and time is HH:MM. Blackouts use schedules.tz, the timezone for every schedule. It defaults to UTC, so set it to your own zone before you rely on a blackout.
What happens to held fires
A schedule fire that arrives while the factory is paused or stopped starts no run; the scheduler is answered held with reason stopped. (The documented reasons are paused, stopped, maintenance or blackout, but a fire during a window is not held at the scheduler: it starts its run, which waits as held.) schedules.missed is the policy for held fires:
| Value | When the hold lifts |
|---|---|
run_once |
One run per trigger that had held fires. The default. |
skip |
No run. |
run_all |
One run per held fire, up to 24. |
The trigger table has no held-fire counter yet, so resume answers heldFires: 0 and reports the policy in applied without replaying any fire.
Seeing a hold
- The cockpit shows the factory state and whether a window is active now, with the next window and when it starts and ends.
- A held run has status
heldon the Runs page. - The event stream records a
runeventheldwith the reason, and the audit log agate.heldentry.
Settings
| Setting | Default | Format |
|---|---|---|
pix.maintenance |
none | list of {days, start, end, tz}. Stored on the sandbox. |
schedules.blackout |
none | list of {from: {day, time}, to: {day, time}, label} |
schedules.tz |
UTC |
IANA timezone name |
schedules.missed |
run_once |
run_once, skip, run_all |