Adds the schema groundwork for inline images and file uploads — see
DOC-865 (Attachments — architecture & migration design).
- migrations/047_attachments.sql — SQLite migration. Table + 4 indexes
(workspace, item, hash, parent). Partial indexes on workspace/item/parent
match the items table convention. The hash index is full (not partial)
so dedupe can resurrect a soft-deleted blob if the same bytes are
re-uploaded without writing a duplicate.
- pgmigrations/026_attachments.sql — Postgres mirror with BIGINT for
size_bytes; same partial-index pattern.
- internal/models/attachment.go — Go model with all columns. Uses
pointer types for nullable columns (item_id, width, height, parent_id,
variant, deleted_at) so JSON omitempty works correctly.
No call sites yet — purely schema groundwork. Verified the migration
runs cleanly on a fresh install and on the live dev DB.
Parent: PLAN-866.