Part of #77.
Single SQL contract + thin Node and Python wrappers (coldstart is Python).
- claim_or_skip: INSERT ... ON CONFLICT(conversation_id,member_slot) DO UPDATE ... WHERE stale OR same_session, token=token+1 RETURNING token (CAS, read changes()).
- heartbeat: UPDATE WHERE token/session still match.
- fence: outbound re-checks token==current; else drop/mark superseded.
- heartbeat 5s, TTL 20s, reclaim after 2 missed, jitter.
AC:
- S0.2a concurrency: two processes claim simultaneously -> exactly one wins.
- S0.2b WAL smoke: heartbeat under concurrent daemon+foreground+coldstart, p99 write latency no regression, no DLQ storm.
Part of #77.
Single SQL contract + thin Node and Python wrappers (coldstart is Python).
AC: