Adopt spec v0.2: schema, semantic validator, operating modes; workplans updated
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s
Work Records / validate (push) Successful in 13s

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:
tegwick 2026-09-29 10:49:10 +02:00
parent b6868a3a58
commit 79996ab249
15 changed files with 1090 additions and 64 deletions

View file

@ -3,7 +3,6 @@ import shutil
import subprocess
import pytest
import yaml
from rtut import pack as P, run as R
@ -22,28 +21,6 @@ def test_showcase_is_valid():
assert P.load(SRC / "pack.yaml").ok
def test_v02_draft_is_wellformed_and_self_consistent():
d = yaml.safe_load((SRC / "pack.v0.2.draft.yaml").read_text())
assert d["spec"] == "runbook-pack/v0.2"
actors = {a["id"] for a in d["actors"]}
dps = {x["id"] for x in d["datapoints"]}
steps = {}
for st in d["stages"]:
for s in st["steps"]:
steps[s["id"]] = s
assert s["actor"] in actors
for u in s.get("uses", []):
assert u in dps, u
gates = {g["id"] for st in d["stages"] for g in st.get("gates", [])}
stages = {st["id"] for st in d["stages"]}
for st in d["stages"]:
for r in st.get("requires", []):
assert r.removeprefix("gate:") in gates | stages
assert any(s.get("reversible") is False for s in steps.values())
assert any("one_of" in s for s in steps.values())
assert not any(k.startswith("secret") for x in d["datapoints"] for k in x)
def test_scripted_playthrough(pk):
r = R.create(pk, "tester", {"keeper": "Ada", "weather": "storm", "motto": "Light on"})
for s in pk.data["steps"]: