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
3.3 KiB
| id | type | title | domain | repo | status | flavor | owner | topic_slug | created | updated | depends_on | state_hub_workstream_id | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RBT-WP-0008 | workplan | Runbook maturity, projects and idempotency | infotech | runbook-tutorials | active | implementation | claude | stack | 2026-09-29 | 2026-09-29 |
|
8f11966b-1e6c-5b12-8bc4-a13c52307c4c |
Goal
Separate what a runbook is (characteristics), how far it can be trusted (maturity, earned and bound to a
pack revision), and what state an environment is in (projects). Replaces the environment-dependent
exercise_status. Model and candidate terminology: docs/maturity-and-projects.md.
Decide the terminology and model
id: RBT-WP-0008-T01
status: progress
priority: high
state_hub_task_id: "904939c5-ed69-53a0-8fe1-2a0ae6d5337d"
Review docs/maturity-and-projects.md with Bernd: names (project or target, environment class), maturity
ladder and thresholds, project states, where project files live, retry policy for non-idempotent steps.
Idempotency as a declared characteristic
id: RBT-WP-0008-T02
status: done
priority: high
state_hub_task_id: "911ef051-ee55-5c65-b134-57fa9f1fddce"
Done 2026-09-29: idempotent: idempotent | non-idempotent | conditional (+ idempotent_note) per step in the v0.2
schema, validator rule for conditional, derived runbook value (flow.pack_idempotency), declared honestly in the
showcase. Values are words because YAML reads unquoted yes/no as booleans. Follow-ups: show it in the UI, and use
it for the retry policy (T07).
Bind runs to a pack revision
id: RBT-WP-0008-T03
status: wait
priority: high
state_hub_task_id: "a79e5b3d-221b-5ac6-a7a1-44737139c8f3"
Record a digest of the pack directory in every run so maturity and project state can be tied to the revision used, and expire when it changes.
Derive maturity from run history
id: RBT-WP-0008-T04
status: wait
priority: high
state_hub_task_id: "53fe81cd-6b67-5508-bdbd-38073a0d77e7"
draft, reviewed, rehearsed, proven, stale, derived from clean runs (no deviations) in rehearsal and other
environments, replacing exercise_status and the "Record pack as exercised" click.
Project specification and shared datapoints
id: RBT-WP-0008-T05
status: wait
priority: high
state_hub_task_id: "d022c7fb-1421-5738-a00f-5b18593fb1a2"
project.yaml: environment class, shared non-secret datapoints provided as defaults to member runbooks, member
runbooks and ordering. Validator, and runs that belong to a project.
Project state
id: RBT-WP-0008-T06
status: wait
priority: medium
state_hub_task_id: "41f2b781-3699-5d21-bdfd-4ff3c2c0b777"
Derive planned, applying, applied, stale (later drifted) from each member's latest run at the current revision.
Retry policy for non-idempotent steps
id: RBT-WP-0008-T07
status: wait
priority: medium
state_hub_task_id: "8b34c57b-3380-5f7b-aaf5-6227a47dcf60"
Retrying a failed non-idempotent step requires the operator to confirm the earlier attempt did not partly apply.
Acceptance Criteria
- "Exercised" has a precise, environment-aware meaning; a production project is never called "exercised".
- Maturity is derived from runs, bound to a revision, and expires when the pack changes.
- A value shared by several runbooks is entered once, in the project.