Skip to content

v0.21.0 — Deployment Discipline, Governance Hardening, Executor Reachability

Choose a tag to compare

@Alajmah Alajmah released this 21 Jun 08:19
· 160 commits to master since this release
172fc5c

v0.21.0 closes the CT 115 resilience arc: fail-closed migrations, durable Redis policy, build identity, governance guards, and executor reachability are now externally observable through health/readiness and CI.

Highlights

v0.20.1-A — Deployment Discipline

  • Fail-closed migration entrypoint (docker-entrypoint.sh)
  • Durable Redis memory ceiling in Docker Compose (256mb, noeviction, appendonly)
  • /health deployment visibility (version, git SHA, applied/available migrations)
  • CI Docker build + smoke gate (app + dashboard images)
  • Fresh-DB migration 019 fix (repo_full_name column gap caught by CI)
  • Runbook reconciliation updates

v0.20.2 — Version Centralization

  • Committed build-info fallback module (core + dashboard)
  • Build-time metadata generation (scripts/generate-build-info.js)
  • GITWIRE_COMMIT_SHA Docker/compose wiring
  • Dashboard footer reads build-info instead of hardcoded v0.12.0
  • Version drift CI test (scripts/check-version-drift.js)
  • Version policy documentation

v0.20.3 — Governance Hardening

  • Execute-time drift re-check (checkDrift before mutation)
  • Typed blocked reasons (BLOCKED_REASONS enum, 11 values)
  • blocked as first-class terminal state (distinct from failed)
  • Marker-backed comments ( pattern)
  • Abstention metrics API (GET /api/actions/abstentions)
  • Migration 037: blocked_reason column

v0.21.0 — Executor Reachability

  • EXECUTOR_KINDS taxonomy (local-process / container-runtime / delegated-run)
  • Reachability probes (Docker/Podman, local, delegated placeholder)
  • Backend selection policy with priority ordering
  • /health executor summary (externally observable topology)
  • Docker-unavailable produces typed reason, not ambiguous failure

Production verification

{
  "status": "ok",
  "version": "0.20.1",
  "git_sha": "172fc5c8e538",
  "db_migrations_applied": 37,
  "db_migrations_available": 37,
  "db_migration_status": "current",
  "executor": {
    "selected_kind": "local-process",
    "selected_reason": "selected:local-process"
  }
}

What this prevents

  • Migration drift (entrypoint auto-applies on every start)
  • Redis unbounded growth (durable compose command)
  • Unbuildable code merging (CI smoke gate)
  • Version drift across surfaces (drift CI test)
  • Stale execution (drift re-check + typed blocked reasons)
  • Comment spam (marker-backed comments)
  • Silent abstention (typed reasons + abstention metrics API)
  • Ambiguous executor failure (reachability layer)