Skip to content

gauntlet 0.4.0 — campaign gates go mechanical

Choose a tag to compare

@github-actions github-actions released this 21 Jul 13:23
19f3c45

Highlights

  • Resumable merge runner. Campaign finalization becomes a SHA-pinned, restartable tool (merge.py): full validation on the cleanup/merge paths, identity and foreign-label refusal on the ledger-only and terminal paths, so an interrupted finalize resumes instead of restarting. (#134) A follow-up pair makes a BLOCKED-but-merely-behind PR rebase instead of parking for a human — first at the stage-3 merge gate (#137), then one layer down in the runner itself (#139), both via the base-ancestry probe the campaign already owns.
  • Mechanical tier derivation. Review-tier triage is now deterministic: triage.py classifies each PR's diff (human / code / sensitive) into a mechanical floor, with the driver's semantic judgment layered only above it. A depth-raising escalation on unchanged content voids the tally and stops in-flight reviews, so a shallower pass can never count toward a deeper tier. (#135)
  • Verdicts gated on base preflight. The base-preflight proceed becomes a mechanical precondition: a new non-settable base_ok_sha ledger field is stamped only by a real preflight pass, verdicts are refused unless it matches the head under review, and any head move voids it. Review rounds are never spent over a conflicting or stale base. (#136)
  • Deterministic dispatch and repair prompts. Prompt assembly moves from prose instructions into executable owners: repair bundles built from validated review history and bound to the exact prompt, ledger, worktree, and head SHA (#122); a review dispatch materializer with attempt-scoped recovery (#123); and a fix-worker prompt materializer publishing host-neutral prompt bytes plus role/model metadata as one atomic bundle (#128).
  • Strict readers for campaign state. The verifier now derives and strictly parses each attempt's review result, rejecting malformed reports (#126); gating-finding audits get a strict JSONL accessor with derived fix/refutation scopes (#121); and the run-scoped PR snapshot query has one executable owner that validates and atomically preserves prs.json (#124).
  • Durable review-learnings store. A new review-learnings.py accessor accumulates refuted and demoted finding classes across runs — consulted by the driver at adoption and finding-audit time, never injected into a review pass, with promotion left to the user. (#132)

What's Changed

Full Changelog: gauntlet-v0.3.5...gauntlet-v0.4.0