Engine v0.2: flow graph, datapoint states, gates, modes, overrides, deviations (RBT-WP-0007)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: sonnet Assistant-Process: 295952@bnt-lap001 Assistant-Session: e93f64ad-516c-46eb-9666-aad8d300c477
This commit is contained in:
parent
3fc279a6ed
commit
60d983769f
13 changed files with 1017 additions and 22 deletions
|
|
@ -60,3 +60,41 @@ back, as documentation or for inspection when the engine cannot reach the system
|
|||
detect every secret, so the operator stays responsible. For `output-contains` steps the output can
|
||||
be **pasted for verification** (`source: pasted-for-verification`), which checks the `contains` text
|
||||
without running anything. Exit-code checks cannot be verified from pasted output.
|
||||
|
||||
## Run record `runbook-run/v0.2` (packs of `runbook-pack/v0.2`)
|
||||
|
||||
Implemented in `rtut/run2.py` (graph in `rtut/flow.py`). It adds to the v0.1 record:
|
||||
|
||||
| Field | Meaning |
|
||||
| --- | --- |
|
||||
| `mode` | `manual` or `autopilot` |
|
||||
| `datapoints.<id>` | `state` nil, set, err or ok; `value`, `how` (initial, manual, produced, check, manual confirmation), `error` |
|
||||
| `steps.<id>` | as v0.1, plus `alternative` (chosen `one_of` branch), `authorized_by`, `pushed_through` |
|
||||
| `gates.<id>` | `state` open, passed, failed or waived; per-check `results`; `waiver` |
|
||||
| `deviations[]` | every override, waiver and push-through (see `docs/pack-spec-v0.2.md`) |
|
||||
| `autopilot` | `preauthorized` irreversible steps, `authorized_by`, and `stopped` if a timeout stopped the run |
|
||||
|
||||
Rules the engine enforces:
|
||||
|
||||
- **Preconditions** of an item are its `requires` (and those of enclosing stages), the `set`/`ok`
|
||||
state of the datapoints it `uses`, and, for a gate, completion of the steps of its stage.
|
||||
- **Recommended next action**: the running item first, else the first ready item in the pack's canonical
|
||||
order. `next_actions(run)` returns the recommended item, all ready items (parallel work) and the blocked
|
||||
ones with what they wait for.
|
||||
- **Alternatives**: a `one_of` step is started with an alternative (default: the first whose
|
||||
`recommended_when` matches the datapoints).
|
||||
- **Datapoints**: invalid input leaves the datapoint `err` and is never stored; a step's `produces` become `set`
|
||||
when it completes; `confirmed_by` promotes them to `ok` when that step or gate passes.
|
||||
- **Override** (manual mode only): starting an item with unmet preconditions needs a reason and an acknowledged
|
||||
downstream risk; it is recorded as a deviation.
|
||||
- **Waiver**: only for gates that declare `waivable`, with a reason; recorded as a deviation.
|
||||
- **Confirmation**: irreversible steps need the exact confirmation phrase at start. In autopilot they run only
|
||||
if the run pre-authorized them, and never if the step is `autopilot: manual-only`.
|
||||
- **Autopilot** (`autopilot_tick`): the engine applies confirmation when preconditions are met: it starts the
|
||||
recommended item, runs its checks (manual checks are auto-confirmed and marked so) and completes it. It
|
||||
never runs a step's own command; the work is done by the operator or, later, by opt-in execution. A step
|
||||
with `evidence` waits for the operator. If checks keep failing until the item's `timeout` (or the pack
|
||||
default), the run stops, or with `on_timeout: push-through` the item is marked done with
|
||||
`pushed_through` and a deviation is recorded.
|
||||
- **Deviations and exercise**: a run with any deviation or pushed-through step can be finalized but never exercises a pack.
|
||||
`finalize(succeeded)` also needs every gate passed or waived.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue