Conformance-gate hardening.
Runward's deterministic gate, the one that verifies rule by rule that the delivered code carries a traced decision, becomes hard to fool. Still zero-LLM, still owned by the operator.
A field test had exposed the hole: an agent could cite a craft rule without ever applying it, and the gate still turned green. v0.8.0 closes that hole and hardens the gate against gaming, without ever betraying the founding bet.
What's new
- Non-vacuity. A routed-rule floor per phase and non-trivial
n/areasons: the gate can no longer be neutralised in one silent edit. - Form-lint. A manifest that lists a rule twice, or references a slug that does not exist (a typo that hid a gap), is caught before the semantic check.
- Drift detection. An
appliedpointer whose file no longer resolves is flagged: the manifest stops silently rotting as the code moves. - Guided migrations. A renamed rule becomes a guided migration, not a break.
- Actionable messages. Every violation now carries its fix.
- Advisory LLM verification. A
verifyworkflow runs an adversarial cite-vs-apply pass ("does this code apply the rule it names, or only cite it?") — never in the exit code, never blocking. - Hook seam.
runward check --hooksruns operator commands around the audit, opt-in: a clone runs nothing by surprise.
The invariant held
The gate stays deterministic, zero-LLM, zero-run. The LLM verification layer and the hooks sit beside the gate, subordinate and optional — never inside. A gate that cannot be jailbroken by injection is the whole argument; we do not sabotage it.
Every hardening was decided before the code, locked in an ADR, proven by tests — Runward's own method applied to Runward.
Install: npx runward init
Release v0.8.0 on GitHub · CHANGELOG
← All news