Skip to content

v0.22.0 — Gap 1 validator execution model + shutdown hardening

Choose a tag to compare

@Alajmah Alajmah released this 21 Jun 20:05

v0.22.0 — Gap 1 validator execution model + shutdown hardening

Contents

Gap 1 validator execution model (PR #18)

  • Backend pass-capability derivation: local-process is never pass-capable; container-runtime is pass-capable only when reachable + backed by complete validator image identity; delegated-run has a vendor-neutral provider contract + null placeholder.
  • /health extended with validator readiness: executor.selected_pass_capable, validator.configured, validator.pass_capable, validator.reason.
  • Validator image identity resolution via GITWIRE_VALIDATOR_IMAGE_REF / GITWIRE_VALIDATOR_IMAGE_DIGEST (digest pinning + digest-match checks).
  • Execution receipts extended with executor_kind, executor_pass_capable, validator_image_ref, validator_image_digest, validator_result, validator_result_status. proof_collected_at is a sibling (not in receipt_content) — preserves write-once dedup.
  • Pure pass-gate helper validateGap1ValidatorBindings (checks 3f–3j).
  • getDefaultBackend() reachability-honest for auto-selection (explicit configured selection unchanged).

Shutdown-handler crash-loop fix (PR #19, CT 115 incident 2026-06-21)

  • Idempotent + bounded graceful shutdown. Fixes the crash-loop where an uncaughtException under memory pressure re-entered shutdown() and looped forever on db.end() "Called end on pool more than once".

Safety invariants

local-process never pass-capable
pass evidence requires live pass-capable backend + complete validator image identity
uncaughtException → ONE shutdown attempt → process exits

Version note

Package versions advance from 0.20.1 to 0.22.0. Intermediate tags v0.20.2, v0.20.3, and v0.21.0 shipped operational milestones without package-version bumps; v0.22.0 reconciles the package version with the current release line.

Exclusions

  • No database migration.
  • No CT 115 ad-hoc changes outside the deployment runbook.