Skip to content

v0.4.0 - looper lint + runner contract

Latest

Choose a tag to compare

@ksimback ksimback released this 07 Jul 22:17
48ed538

v0.4.0 — the rubrics become law, the spec becomes an interchange format.

looper lint — the design rubrics as a static checker

python scripts/looper.py lint path/to/loop.yaml   # --strict, --json

No wizard, no interview. Errors mean the spec won't behave the way it reads at runtime (judge criteria a runner never evaluates, undeclared cross-vendor egress, egress entries naming nobody); warnings are rubric coaching (all-vibe verification, same-family judge, missing caps, and ten more). Exit 1 on errors — wire lint --strict into CI to gate loop specs in PRs the same way you lint code. The wizard runs it after every compile.

Runner contract v1 + conformance suite

loop.resolved.json is now an interchange format. RUNNER-CONTRACT.md is the normative contract for third-party runners — gates, caps, fail-closed consent, two-layer redaction, state/log obligations, exit codes — and the conformance suite proves a runner honors it:

python conformance/check_runner.py path/to/your-runner

Ten scenarios, deterministic fixtures, no model CLIs needed. Sabotage-tested: a runner with redaction disabled fails five scenarios. The reference runner is held to the suite in CI.

Redaction covers every send

The host was the one recipient whose prompts were never scrubbed — flagged-file content that leaked into an artifact went verbatim to the host CLI. Now: every send is scrubbed (host included), cmd context-source output is scrubbed, caught leaks are logged and surfaced in state.json, the consent prompt shows leak warnings before asking, and unscrubbable flagged files (>1MB, non-UTF-8) are reported as blind spots instead of silently skipped.

Positioning

README reframed around the Claude Code team's loop taxonomy (turn-based / goal-based / time-based / proactive): each loop type hands something off — the check, the stop condition, the trigger, the whole prompt — and Looper is the design layer that supplies each hand-off.


Test suite 27 → 49; CI green on Python 3.9–3.13 × ubuntu/windows/macos. Every PR (#16#19) passed a pre-merge high-effort adversarial review. Full details in CHANGELOG.md.