fix(kv): 修复每日 list 配额烧穿导致聊天 500（缓存+降级+干净报错）

线上故障：v1/v2 聊天全部返回 500「服务端处理失败」。
根因：Workers KV 免费版每天仅 1000 次 list（账户级、00:00 UTC 重置），
聊天检索每条消息要列举 mem/hl/exp 三族共 5 次，密集测试 + 用户重试
一天即烧穿；超额后 list() 抛未捕获异常 → toAppError 兜底成 500。
国内版（无 CF KV）与本地复现（无配额）因此完全正常。

修复：
- listNamesCached：读取路径按前缀缓存列举结果（mem/hl/exp/rel 5 分钟），
  连续聊天从 5 次 list/条降到 0；导入/备份/墓碑路径仍取最新保证幂等
- 新增高光/经历/关系后 invalidateListCache，同 isolate 立即可见
- list 失败转成干净 503 kv_list_failed（人类可懂文案），不再神秘 500
- 聊天检索失败降级不中断：凭近期对话继续回复 + notice 前端提示
- 归档写入失败同样降级，消息仍能回复
- saveMemory 去掉 legacy meta_lastTs 双写 + 同分钟去重，减少写放大
- 各错误响应补 message 字段（前端显示人话而非错误码）
- 新增 tests/test_p0_kv_quota.mjs（17 项），全量 237 项回归通过
