Files
Keysat c7b74a2704 Email search/query + windowed digest preview (v0.1.0:83)
Communications tab (search/query roadmap items 1 & 2):
- Fix the investor dropdown: the facet only listed grid investors, so it
  came back empty whenever email matched a classic contact or org domain
  (no grid id — the common case). It now mirrors the email list, resolving
  each link to a typed identity (fund:/org:/contact:/addr:) with precedence
  grid -> org -> contact -> address; investor_id accepts the typed key
  (bare id = fund: for back-compat) and an unknown prefix matches nothing.
- Add a date-range filter and a click-to-expand full-body view
  (GET /api/email/detail, admin, soft-delete-gated; body_text only, never
  raw remote HTML).
- Add a "Search content" mode: GET /api/email/search wraps the ingest
  hybrid_search over the Qdrant email index (doc_type=email), hydrated and
  soft-delete-filtered against SQLite (canonical), 503 if Spark/Qdrant down.

Daily digest:
- Settings -> Admin builds a digest over a chosen window (last 24h or since
  a date) as an in-app preview before sending (POST /api/admin/digest/preview),
  so the local-Spark summarizer can be verified on demand even on a quiet day.
  Manual send uses the same window; neither advances the daily cursor, so a
  preview never suppresses the scheduled digest.

Code-only, migrations no-op. 22/22 backend tests, render-smoke pass.
2026-06-16 20:46:15 -05:00

25 lines
1.4 KiB
TypeScript

import { VersionInfo } from '@start9labs/start-sdk'
// Email search/query + windowed digest preview. Code-only, no schema change (migrations no-ops):
// * Communications tab: fixed the investor dropdown (was empty whenever email matched a
// classic contact / org domain rather than a grid investor) — the facet now mirrors the
// list with typed keys (fund:/org:/contact:); added a date-range filter and a click-to-
// expand full-body view (GET /api/email/detail), and a semantic "Search content" mode over
// indexed email bodies (GET /api/email/search -> ingest hybrid_search, soft-delete-filtered).
// * Daily digest: Settings -> Admin now builds a digest over a chosen window (last 24h or
// since a date) as an in-app preview before sending (POST /api/admin/digest/preview), and
// the manual send uses the same window. Exercises the real local-Spark summarizer; neither
// touches the daily schedule cursor.
export const v_0_1_0_83 = VersionInfo.of({
version: '0.1.0:83',
releaseNotes: {
en_US: [
'Communications: the investor dropdown now lists every matched relationship (not just',
'grid investors), plus a date-range filter, a full-body view, and a semantic content',
'search over email bodies. Daily Digest: preview a digest over any window before sending.',
'No data changes.',
].join(' '),
},
migrations: { up: async () => {}, down: async () => {} },
})