feat(db): migrate content_labels from TEXT[] to JSONB for selfLabels
Migrates content_labels column from TEXT[] to JSONB to preserve full
com.atproto.label.defs#selfLabels structure including the optional 'neg' field.
Changes:
- Migration 015: TEXT[] → JSONB with data conversion function
- Convert existing {nsfw,spoiler} to {"values":[{"val":"nsfw"},{"val":"spoiler"}]}
- Update post_repo to store/retrieve full JSON blob (no flattening)
- Update feed repos to deserialize JSONB directly
- Remove pq.StringArray usage from all repositories
Before: TEXT[] storage lost 'neg' field and future extensions
After: JSONB preserves complete selfLabels structure with no data loss
Migration uses temporary PL/pgSQL function to handle conversion safely.
Rollback migration converts back to TEXT[] (lossy - drops 'neg' field).