746aaa4844
Postgres had only primary keys on these tables, so loading a conversation, listing conversations, checking for a first message on every send, and fetching memories/artifacts were sequential scans. Migration generated with aerich; index-only apart from the no-op JSONB re-casts aerich emits on every run (as in migrations 16 and 18), which were checked not to rewrite tables. Upgrade and downgrade verified on a throwaway pgvector database. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>