# Upgrade Guide — v0.23.6

<!-- bump: patch -->

## What Changed

The AgentRegistry heartbeat now includes automatic recovery from stale lock files. After a process crash (such as the mutex abort during auto-update restart), the `proper-lockfile` lock on `registry.json` could get stuck indefinitely, causing every heartbeat to fail with "Lock file is already being held." The heartbeat now tracks consecutive failures and after 3 failures, force-removes the stale lock and retries. This makes the registry self-healing after crash scenarios.

A new `forceRemoveRegistryLock()` function is exported for programmatic use.

## What to Tell Your User

- **Self-healing registry**: "If you were seeing repeated 'Lock file is already being held' errors in the logs, that's now fixed. The registry automatically recovers from stale locks after a crash — no manual intervention needed."

## Summary of New Capabilities

| Capability | How to Use |
|-----------|-----------|
| Registry lock auto-recovery | Automatic — kicks in after 3 consecutive heartbeat failures |
