PostgreSQL Integration Module Organization
context-pg owns every PostgreSQL-specific concern: SQL objects, SPI access,
catalog hydration, ACL/RLS checks, pgrx conversion, SQLSTATE translation, index
access-method callbacks, and PostgreSQL-backed tests. This makes it the largest
workspace crate, but its dependency direction remains correct: reusable types
and algorithms stay in the pure crates and context-pg adapts them.
context-pg is decomposed into the private boundaries below:
| Owner | Responsibilities | Existing boundary | Decision |
|---|---|---|---|
hnsw_hierarchy |
hierarchical graph construction and search | graph mutation/search implementation is isolated in graph_impl |
Keep the pure hierarchy owner while separating its implementation-heavy graph operations. |
artifact_segments |
publish, validate, list, retire, and reclaim rebuildable artifacts | diagnostics, serving readiness, SPI persistence, result conversion, and file cleanup are separate submodules or private include fragments | Keep one transactional owner; its operations share catalog locks and lifecycle invariants. |
table_search |
registered-table exact search, scroll, count, facets, and source visibility | catalog access, candidate recheck, grouped search, named search, recommendations, and shared support are submodules | Keep the facade; isolated search strategies remain behind explicit private boundaries. |
build_jobs |
build-job lifecycle and authoritative source scanning | backend identity, job types, validation, and SPI persistence are separate private fragments | Keep one lifecycle owner so status transitions and catalog writes cannot drift. |
vector_catalog |
dense and sparse vector registration/configuration | SPI persistence and catalog hydration are isolated from the SQL-facing facade | Keep one catalog owner until dense and sparse catalogs gain independently changing contracts. |
operations |
index status, diagnostics, memory estimates, optimization, vacuum advice, and recall checks | advisor logic and checked catalog/value helpers are private fragments | Keep one operator-facing diagnostics facade while centralizing checked conversions. |
hnsw_am |
access-method registration, callback routing, scan state, persisted pages, and validation | SQL declarations, callback, FFI, bitmap, options, codec, storage, vacuum, WAL, and MVCC concerns are isolated | Keep one PostgreSQL AM owner; SQL dependencies and unsafe callback invariants are independently reviewable. |
vector_variants |
PostgreSQL types, casts, distance functions, and aggregates for half, sparse, and bit vectors | aggregate finalization helpers are isolated; exact kernels remain in context-core |
Keep the SQL type facade; do not duplicate exact metric semantics here. |
No additional crate is justified by this review. A future split requires at least one concrete trigger: a different dependency surface, an independently published contract, a distinct team owner, or a reusable pure component that can be tested without PostgreSQL. File length alone is not a crate boundary.
The mechanical guard is scripts/check-source-hygiene.sh: Rust files over the
review threshold must have a pinned maximum and cannot silently grow. The
architectural guard is scripts/check-crate-boundaries.sh, which prevents
PostgreSQL and transport concerns from leaking into pure crates.