Deferred from Stage 05a on 2026-08-30. See stage-05-decisions.md decision 8.
Stage 05a ships scoped search over displayId, subject, and contact name/email only — all on conversation and contact, small tables with ordinary indexes.
Standing rule from the plan: never ILIKE conversationMessage. It is the fastest-growing table in the system. When body search is needed, build it properly:
tsvector column on conversationMessage, GIN index, maintained by trigger
EXPLAIN must confirm no sequential scan
Volume-triggered. Do not creep into this via ILIKE.
Deferred from Stage 05a on 2026-08-30. See
stage-05-decisions.mddecision 8.Stage 05a ships scoped search over
displayId, subject, and contact name/email only — all onconversationandcontact, small tables with ordinary indexes.Standing rule from the plan: never
ILIKEconversationMessage. It is the fastest-growing table in the system. When body search is needed, build it properly:tsvectorcolumn onconversationMessage, GIN index, maintained by triggerEXPLAINmust confirm no sequential scanVolume-triggered. Do not creep into this via
ILIKE.