Fettle v1.13.0: Evidence Integrity Hardening
Fettle v1.13.0 closes every finding from an adversarial audit of its own
evidence chain. The attacks are pinned by tests so they stay fixed: forged or
stale evidence can no longer turn a gate green, live agent runners lose their
blanket permission bypasses, and policy resolution now governs every consumer.
What Changed
- The assurance record's behavior dimension requires a passing verify stamp
bound to the current session and HEAD revision; a red run is FAIL and a
hand-written or stale stamp stays UNKNOWN. A red stamp also overrides a
completed mutation report. - The verify and CI Stop gates fail closed when a green stamp omits its
canonical-evidence reference; deleting the key from the agent-writable stamp
no longer skips the canonical validation layer. - Assurance dimensions consume real, verifiable evidence: the CI dimension
reads the stampfettle ci waitactually writes and requires a green
verdict bound to HEAD; authorization verifies capsule digest integrity;
UAT requires the canonical sidecar to bind the exact report content,
session, and completion. - Live agent runners replace
--dangerously-skip-permissionsand--yolo
with deny-by-default tool grants; a test invariant pins that no runner argv
carries a permission-bypass flag. - Profile command overrides and assurance release policies resolve through
the layered policy resolver, so a repository-level override can no longer
silently defeat org policy — and org packs can now supply release policies. - UAT sessions, evaluator passes, and eval scenarios launch child agents
under delegation capsules visible tofettle report --lineage; a
provisioning failure downgrades to a traced ungoverned launch, never a
silent one. - The quality gate surfaces subprocess timeout, crash, and unparseable output
astool_errorinstead of a silent allow, restoring failure visibility and
escalation. - The host capability matrix declares per-event enforcement (block vs
notify);fettle doctordiscloses hosts where enforce-mode gates can only
notify, and bridge fail-open toasts say so explicitly. - Supply chain: the TLA+ verification workflow checksum-verifies
tla2tools.jarand runs with least-privilege permissions; workflows and the
published action pin actions by commit SHA and install analyzers at the
pinned tool versions; workflow inputs reach shells only via environment
indirection. - LOW-severity sweep: the
FETTLE_GATE_MODE=offkill switch is screened in
every Bash command segment; mutation subprocesses no longer inherit
credential-bearing environment variables; per-check budget overruns are
traced; the agent-writable profile cache cannot override resolver-governed
commands; published bridge directories are owner-only. - Documentation now leads with
pipx install "finefettle[all]"as the single
installer covering analyzers, mutation, evaluation, commit hooks, and
browser automation on top of the dependency-free core.
Deprecations and Accepted Risks
- The
scripts→fettle/compatibility symlink will be removed in the next
minor release. - Recorded accepted risks: runner prompts remain visible in process argv, and
delegation environment export briefly mutates process environment on
single-threaded launch paths.
Upgrade Notes
pipx upgrade finefettle
fettle doctorLive UAT and eval runners now execute with scoped tool grants instead of
permission bypasses. If an agent run needs a tool outside the default grant,
the denial is visible in the transcript; no configuration migration is
required.