Repository navigation
v0.21.0 — Deployment Discipline, Governance Hardening, Executor Reachability
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)