# Quick Task Summary: Fix check_alive parent_pid fallback

## What Changed

**Problem:** `check_alive` (used by deliver/reply/send) and `list` GC reported agents as STALE when their poll process PID was dead, even if the parent Claude session was still alive. This caused false delivery failures for agents between poll cycles.

**Root cause:** Between poll invocations, info.json contains the PID of the last owl.exe poll process. When that process exits after delivering a message, the PID becomes stale. But the `parent_pid` field (the Claude session that owns the agent) is still alive — the agent is just processing the message before re-polling.

**Fix:** Added `parent_pid` fallback to both `check_alive` and list GC:
- If poll `pid` is dead but `parent_pid` is alive → treat as alive (agent is between polls)
- If both are dead → report STALE / GC as before

## Files Modified

| File | Change |
|------|--------|
| `src/common/types.rs` | Added `get_parent_pid_from_info()` helper |
| `src/owl/deliver.rs` | `check_alive` falls back to `parent_pid` before reporting STALE |
| `src/owl/list.rs` | GC logic checks `parent_pid` before cleaning perch |

## Verification
- `cargo build --release` succeeds
- Binary deployed to `~/.claude/skills/owl/owl.exe`
- Tested: deliver to `todlando` (dead poll PID, alive parent) now succeeds
- `owl list` correctly shows todlando as ACTIVE instead of cleaning it
