-- RAG vector DB schema (runs automatically on first Postgres init). -- GigaChat Embeddings = 1024; for OpenAI use vector(1536). CREATE EXTENSION IF NOT EXISTS vector; CREATE TABLE IF NOT EXISTS stories ( id SERIAL PRIMARY KEY, slug TEXT UNIQUE NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() AT TIME ZONE 'utc'), indexed_base_ref TEXT, indexed_head_ref TEXT, indexed_at TIMESTAMPTZ ); CREATE TABLE IF NOT EXISTS documents ( id SERIAL PRIMARY KEY, story_id INTEGER NOT NULL REFERENCES stories(id) ON DELETE CASCADE, path TEXT NOT NULL, version TEXT NOT NULL, updated_at TIMESTAMPTZ NOT NULL, UNIQUE(story_id, path) ); CREATE TABLE IF NOT EXISTS chunks ( id SERIAL PRIMARY KEY, document_id INTEGER NOT NULL REFERENCES documents(id) ON DELETE CASCADE, chunk_index INTEGER NOT NULL, hash TEXT NOT NULL, content TEXT NOT NULL, embedding vector(1024) NOT NULL, start_line INTEGER, end_line INTEGER, change_type TEXT NOT NULL DEFAULT 'added' CHECK (change_type IN ('added', 'modified', 'unchanged')), previous_content TEXT ); CREATE INDEX IF NOT EXISTS idx_documents_story_id ON documents(story_id); CREATE INDEX IF NOT EXISTS idx_chunks_document_id ON chunks(document_id); CREATE INDEX IF NOT EXISTS idx_chunks_embedding ON chunks USING ivfflat (embedding vector_cosine_ops); CREATE INDEX IF NOT EXISTS idx_chunks_change_type ON chunks(change_type);