auto-evolution

Installation
SKILL.md

Evolution — What Claude Gets Wrong

You refactor like the old version vanishes the instant you deploy. It doesn't. Rolling deploys mean old code reads new data (and vice versa) for minutes or hours. Multi-binary systems mean one binary updates while others run the old version. Config files in the wild don't update themselves.

The Iron Rule

Every change to a shared interface must be safe for both old and new consumers simultaneously. Shared interfaces include: database columns, serialized messages (JSON, protobuf, job queue payloads), API response shapes, config file fields, environment variables, CLI flags, and public function signatures in shared libraries.

Anti-Patterns You Default To

Anti-pattern Example Fix
Destructive rename ALTER TABLE RENAME COLUMN Add new column → backfill → dual-write → migrate consumers → drop old
Required field on existing data model: String (no default) #[serde(default)] model: Option<String> or DEFAULT in migration
Atomic switchover Rename env var everywhere at once New code reads new name, falls back to old, warns
No deprecation warning Old config field silently ignored tracing::warn!("interval_ms is deprecated, use interval_secs")
Missing consumer enumeration Update struct, miss inline SQL/SSE types/dashboard List ALL consumers before changing
Enum variant removal Remove "active" status, old data breaks Keep old variants, map to new internally
Breaking return type change Vec<T> → HashMap<K, T> on public fn Add new method, deprecate old
Installs
2
GitHub Stars
6
First Seen
May 22, 2026
auto-evolution — corvalis-llc/crow-stack