fix: relative_when tolerates tz-naive timestamps
legacy memory rows (observations, interactions) were written with
`datetime.now().isoformat()` — no tz info. relative_when used
`datetime.now(UTC) - parsed` which raises TypeError on tz-naive operands:
can't subtract offset-naive and offset-aware datetimes
consequence: build_user_context partially rendered the OBSERVATIONS
block header, then threw inside the render loop, landing in the except
branch that appends the "no previous interactions" fallback. phi saw
both the header and the fallback — confusing, and per-user memory was
effectively silenced.
fix: when fromisoformat returns a naive datetime, assume UTC. matches
how the legacy rows were written (the code calling datetime.now() was
running in UTC on fly). new writes should migrate to tz-aware over time
but that's a separate concern — stale rows will keep existing for
months and the parser needs to handle them.
test: new relative_when case for tz-naive input.
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>