Part of #51 (storage axis, 1.1.1). The linchpin: define the storage_* contract (check/describe/init/insert_message/unread/mark_read/history/watermark/unread_since/rename/export/import) per docs/spec/driver-interface.md §2, with structured parameters (team/agent pairs, ISO-8601 timestamps) — NOT raw SQL WHERE fragments. The current watermark/unread_since leak SQL, which breaks non-SQL drivers (jsonl/redis). Acceptance: contract documented; callers pass structured args only.
Part of #51 (storage axis, 1.1.1). The linchpin: define the
storage_*contract (check/describe/init/insert_message/unread/mark_read/history/watermark/unread_since/rename/export/import) per docs/spec/driver-interface.md §2, with structured parameters (team/agent pairs, ISO-8601 timestamps) — NOT raw SQL WHERE fragments. The currentwatermark/unread_sinceleak SQL, which breaks non-SQL drivers (jsonl/redis). Acceptance: contract documented; callers pass structured args only.