Maturity from run history, pack revision digests, attribute sets, projects and templates (RBT-WP-0008)
Also fixes run lists and scores mixing runs of different packs in one repository. 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
2f60d47746
commit
0203bf553c
19 changed files with 1311 additions and 33 deletions
|
|
@ -24,13 +24,12 @@ pack revision), and what state an environment is in (projects). Replaces the env
|
|||
|
||||
```task
|
||||
id: RBT-WP-0008-T01
|
||||
status: progress
|
||||
status: done
|
||||
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.
|
||||
Decided 2026-09-29 (Bernd: go with the suggestions, keep *project*): `docs/maturity-and-projects.md`.
|
||||
|
||||
## Idempotency as a declared characteristic
|
||||
|
||||
|
|
@ -50,60 +49,97 @@ it for the retry policy (T07).
|
|||
|
||||
```task
|
||||
id: RBT-WP-0008-T03
|
||||
status: wait
|
||||
status: done
|
||||
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.
|
||||
Done 2026-09-29: `pack.digest()`; every run records `pack_digest` and `context` (project, target, environment class).
|
||||
|
||||
## Derive maturity from run history
|
||||
|
||||
```task
|
||||
id: RBT-WP-0008-T04
|
||||
status: wait
|
||||
status: done
|
||||
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.
|
||||
Done 2026-09-29: `rtut/maturity.py`, review records (`REVIEWS.yaml`, bound to a revision), `rtut maturity`, `rtut review`.
|
||||
`proven` = reviewed + rehearsed + clean in two environments by two operators. Not yet done: retiring `exercise_status` and the
|
||||
"Record pack as exercised" click in the UI (T09).
|
||||
|
||||
## Project specification and shared datapoints
|
||||
|
||||
```task
|
||||
id: RBT-WP-0008-T05
|
||||
status: wait
|
||||
status: done
|
||||
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.
|
||||
Done 2026-09-29: attribute sets (`attribute-set/v0.1`: composition with `extends`, requirement, derived state, provenance,
|
||||
`modified` flag), projects with targets and members (`project/v0.1`), project templates (`project-template/v0.1`),
|
||||
`rtut/attrs.py`, `rtut/project.py`, schemas, CLI (`rtut project ...`), examples under `attribute-sets/` and `project-templates/`.
|
||||
Runs started from a project take the resolved attributes as defaults and record the project as context.
|
||||
|
||||
## Project state
|
||||
|
||||
```task
|
||||
id: RBT-WP-0008-T06
|
||||
status: wait
|
||||
status: done
|
||||
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.
|
||||
Done 2026-09-29: `project.state()`: member status `not-applied | applying | applied | stale | failed`, project state
|
||||
`planned | applying | applied | stale`, plus the members that can start next (`after`) and the attributes still needed.
|
||||
|
||||
## Retry policy for non-idempotent steps
|
||||
|
||||
```task
|
||||
id: RBT-WP-0008-T07
|
||||
status: wait
|
||||
status: todo
|
||||
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.
|
||||
|
||||
## UI for projects, maturity and attributes
|
||||
|
||||
```task
|
||||
id: RBT-WP-0008-T08
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Show maturity and idempotency next to each runbook; a project view (goal, targets, member status, next member, needed
|
||||
attributes with state, source and modified marks); start a run from a project so its attributes fill the form; a
|
||||
template picker that instantiates a project.
|
||||
|
||||
## Retire exercise_status
|
||||
|
||||
```task
|
||||
id: RBT-WP-0008-T09
|
||||
status: todo
|
||||
priority: medium
|
||||
```
|
||||
|
||||
Replace the "Record pack as exercised" click and the `exercise_status` field with derived maturity; migrate the packs.
|
||||
|
||||
## Templates as products: auto-confirm and auto-pilot on a project
|
||||
|
||||
```task
|
||||
id: RBT-WP-0008-T10
|
||||
status: wait
|
||||
priority: medium
|
||||
```
|
||||
|
||||
Run a whole project in manual or auto-confirm mode, member by member in `after` order, with the attributes coming from the
|
||||
project; auto-pilot with execution follows RBT-WP-0006. Attribute states to explore in use: needed, optional, modified,
|
||||
checked; add what real use shows.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- "Exercised" has a precise, environment-aware meaning; a production project is never called "exercised".
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue