Rename open to stalled and autopilot to auto-confirm; add pushed state; declare idempotency; propose maturity and projects model (RBT-WP-0008)
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
f39d5cec3c
commit
f5619e1a52
19 changed files with 429 additions and 105 deletions
|
|
@ -27,17 +27,17 @@ CLI: `rtut run new|list|status|cmd|start|verify|done|fail|retry|skip|finish <pac
|
|||
|
||||
## Outcome, score and exercise status
|
||||
|
||||
A run is **open** until finalized. `rtut run finalize` (or the UI's *Close this run*) records
|
||||
A run is unfinished (**stalled**) until finalized. `rtut run finalize` (or the UI's *Close this run*) records
|
||||
an `outcome`:
|
||||
|
||||
| Outcome | Rule |
|
||||
| --- | --- |
|
||||
| `succeeded` | every step is `done` (skipped steps do not count) |
|
||||
| `failed` | at least one step has failed; otherwise abandon |
|
||||
| `abandoned` | any time. An open run untouched for 7 days also counts as abandoned in the score |
|
||||
| `abandoned` | any time. An unfinished run untouched for 7 days also counts as abandoned in the score |
|
||||
|
||||
A finished run is read-only, except for feedback. The **score** of a runbook is derived from
|
||||
its run records: tried, succeeded, failed, abandoned, open, plus a tally of feedback ratings
|
||||
its run records: tried, succeeded, failed, abandoned, stalled (unfinished), plus a tally of feedback ratings
|
||||
(`rtut score <root>`; shown in the UI). Run records live in `.local/` of the machine that ran
|
||||
them, so the score is per machine until run histories are shared.
|
||||
|
||||
|
|
@ -67,12 +67,12 @@ Implemented in `rtut/run2.py` (graph in `rtut/flow.py`). It adds to the v0.1 rec
|
|||
|
||||
| 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` |
|
||||
| `mode` | `manual` or `auto-confirm` |
|
||||
| `datapoints.<id>` | `state` nil, set, err, ok or pushed; `value`, `how` (initial, manual, produced, check, manual confirmation), `error` |
|
||||
| `steps.<id>` | as v0.1 (`pushed` is an additional state), plus `alternative` (chosen `one_of` branch), `authorized_by` |
|
||||
| `gates.<id>` | `state` open, passed, failed, waived or pushed; per-check `results`; `waiver` or `pushed` |
|
||||
| `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 |
|
||||
| `auto-confirm` | `preauthorized` irreversible steps, `authorized_by`, and `stopped` if a timeout stopped the run |
|
||||
|
||||
Rules the engine enforces:
|
||||
|
||||
|
|
@ -88,13 +88,20 @@ Rules the engine enforces:
|
|||
- **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
|
||||
- **Confirmation**: irreversible steps need the exact confirmation phrase at start. In auto-confirm they run only
|
||||
if the run pre-authorized them, and never if the step is `auto_confirm: manual-only`.
|
||||
- **Auto-confirm** (`auto-confirm_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.
|
||||
state `pushed` 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.
|
||||
- **Pushed is its own state.** A step, gate or datapoint passed over by push-through is `pushed`: not `done`,
|
||||
not `set`, not `err`. Dependents may proceed (that is the point of pushing through), but a pushed datapoint
|
||||
has no value, so a command that needs it fails its check instead of running with nothing. A run with pushed
|
||||
items can be finished as `failed` (never `succeeded`) and never exercises a pack.
|
||||
- **Stalled**: an unfinished run is counted as `stalled` in the score, and as `abandoned` after a week.
|
||||
- **Modes** are `manual` and `auto-confirm`. Auto-confirm applies confirmation only; running the step's own
|
||||
command is a separate, later level ("auto-pilot with execution", RBT-WP-0006).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue