RecurringEngine

The runs of recurring specs (trove-recurring §TRC-D-4).

Inherits QObject

In the namespace octomy::trove::recurring. Declared in src/libs/libtrove/trove/recurring/RecurringEngine.hpp.

Detailed description

A run is a row of the spec database and a state machine. Each state is written before its work starts, so a restart resumes a run from its state:

| State | What happens | |—|—| | `scheduled` | Clockwork fired, or the operator pressed Run now | | `measuring-before` | Each probe on a fresh checkout of main. `done` when every probe meets its target already | | `dispatched` | A unit from the template, dispatched to a lane. A run that waits for a lane stays here | | `working`, `verifying` | The session implements, then verifies | | `measuring-after` | Each probe on the head of the lane's branch | | `judged` | STD-MEASURE is recorded and the unit's status follows (§TRC-D-6) | | `landing` | The trusted lander, up to three attempts | | `landing-deferred`, `done`, `failed`, `canceled` | Terminal |

A firing of clockwork is a batch job of the type `trove.recurring.run`. The engine takes it, and ends it when the run is terminal, so clockwork's "wait for the last run" holds: no run starts while the last one runs.

In this section