Split from the #323 audit (verified @ d1d724f). course_chunks, the match_course_chunks RPC, and CREATE EXTENSION vector appear in ZERO .sql files (425 checked — migrations/, seed.sql, archive/). A database replayed purely from python -m db.migrate has RAG silently dead end-to-end: retrieve_chunks swallows the RPC failure into [] (rag_service.py:137-139), _get_catalog_chunk degrades to "", and indexing failures vanish into a fire-and-forget log line — the tutor answers ungrounded with no error, metric, or user-visible signal, and nothing in the suites or oracles asserts the table exists.
Fix: a numbered migration (IF NOT EXISTS, mirroring 0032's reconcile pattern) codifying the extension + table + RPC to match the live dashboard DDL (shape per docs/superpowers/specs/2026-07-03-rag-document-chunking-design.md — verify against staging before writing). This is the highest-leverage remaining RAG item and it is a migration, not a feature.
Split from the #323 audit (verified @ d1d724f).
course_chunks, thematch_course_chunksRPC, andCREATE EXTENSION vectorappear in ZERO .sql files (425 checked — migrations/, seed.sql, archive/). A database replayed purely frompython -m db.migratehas RAG silently dead end-to-end:retrieve_chunksswallows the RPC failure into[](rag_service.py:137-139),_get_catalog_chunkdegrades to "", and indexing failures vanish into a fire-and-forget log line — the tutor answers ungrounded with no error, metric, or user-visible signal, and nothing in the suites or oracles asserts the table exists.Fix: a numbered migration (IF NOT EXISTS, mirroring 0032's reconcile pattern) codifying the extension + table + RPC to match the live dashboard DDL (shape per docs/superpowers/specs/2026-07-03-rag-document-chunking-design.md — verify against staging before writing). This is the highest-leverage remaining RAG item and it is a migration, not a feature.