Skip to content

Pillar v0.4.0 — Production Hardening & Resilience

Pre-release
Pre-release

Choose a tag to compare

@vinicius-paraujo vinicius-paraujo released this 13 Jul 16:19
· 26 commits to main since this release

Pillar v0.4.0 — Production Hardening & Resilience

Iteration 4 closes the reliability gap. It transforms the system from a functioning MVP into a fault-tolerant mesh that degrades gracefully under fire. We've introduced explicit degraded modes, a self-healing background garbage collector for abandoned state, and local-first telemetry.

Telemetry & Diagnostics

  • /pillar doctor command — New administrative subcommand exposing typed decision telemetry and anomaly-focused health checks. Built with a strictly local-first philosophy (zero-cost AtomicLong counters and ring buffers), it ensures diagnostic availability even when Redis is down.

Self-Healing & Resilience

  • Orphan-inbox reaping — The proxy now runs a self-healing background service (InboxReaper) that safely reaps abandoned inboxes and dead-letters from permanently dead nodes. It uses atomic Lua scripts (EXISTS + DEL) to prevent memory leaks over time.
  • Degraded modes — Introduced read-outcome-driven stale retention with bounded windows. Nodes now automatically fall back to their last-known-good state during transient Redis outages, explicitly documenting their degraded contracts rather than failing blindly.

Targeted Operations

  • Targeted reloads — Added /pillar reload <role> to allow signal-only RELOAD_CONFIG fan-out to specific server roles, replacing cluster-wide config blasts and reducing unnecessary I/O.

Internal Quality & Hot-path Optimizations

  • Zero-allocation Routing — Refactored DecisionBuffer (placement history) into a lock-free, zero-allocation Ring Buffer using AtomicReferenceArray.
  • Sum Types — Rewrote PlacementDecision types using Java 21+ sealed interfaces and records, eliminating Optional heap allocation overheads in critical loops.
  • Failure Drills — Added automated Testcontainers assertions locking the degraded-mode contract and orphan reaping mechanisms, ensuring these resilience features are immune to future regressions.

Upgrading from 0.3.0

Drop-in replacement. No breaking configuration changes. Requirements remain unchanged: Paper 26.1.2 and/or Velocity 3.4.0, Java 25, Redis 7.

What's next (Iteration 5 — Public API Surface)

Iteration 5 will focus on extracting the stable public surface into a pillar-api module and enforcing strict package boundaries with ArchUnit tests, preparing the system for external adoption and the public documentation site (Iteration 6).