email: Email Capture admin panel (status / enroll / sync / re-match) — v0.1.0:59

Adds an admin-only "Email Capture" page so Gmail capture can be turned on and
monitored from the UI instead of an API call: shows whether the integration is
enabled, how many mailboxes are enrolled, how many emails are matched to investors,
and last sync; with Enroll Ten31 mailboxes / Sync now / Re-match buttons and a hint
that domain-wide delegation must be authorized in Google Workspace first. Disabled
state renders cleanly (no scary error) when the integration is off. Bundles the
email-into-grounding corpus wiring (bf829b7).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Keysat
2026-06-05 21:00:14 -05:00
parent bf829b784a
commit ee02ccfd64
4 changed files with 194 additions and 4 deletions
+3 -2
View File
@@ -23,8 +23,9 @@ export const PACKAGE_TITLE = 'Ten31 Database'
// * 0.1.0:55 (Architect grounding boundary: redaction/re-hydration privacy gate)
// * 0.1.0:56 (Thesis Workshop redesign: edit/choose/delete + approve-as-current)
// * 0.1.0:57 (redaction fix: magnitude regex no longer eats the word after an amount)
// * Current: 0.1.0:58 (seed 5 Architect positioning framings into the Workshop as candidate options)
export const PACKAGE_VERSION = '0.1.0:58'
// * 0.1.0:58 (seed 5 Architect positioning framings into the Workshop as candidate options)
// * Current: 0.1.0:59 (Email Capture admin panel + matched email into the grounding corpus)
export const PACKAGE_VERSION = '0.1.0:59'
export const DATA_MOUNT_PATH = '/data'
export const WEB_PORT = 8080
+3 -2
View File
@@ -19,8 +19,9 @@ import { v_0_1_0_55 } from './v0.1.0.55'
import { v_0_1_0_56 } from './v0.1.0.56'
import { v_0_1_0_57 } from './v0.1.0.57'
import { v_0_1_0_58 } from './v0.1.0.58'
import { v_0_1_0_59 } from './v0.1.0.59'
export const versionGraph = VersionGraph.of({
current: v_0_1_0_58,
other: [v_0_1_0_39, v_0_1_0_40, v_0_1_0_41, v_0_1_0_42, v_0_1_0_43, v_0_1_0_44, v_0_1_0_45, v_0_1_0_46, v_0_1_0_47, v_0_1_0_48, v_0_1_0_49, v_0_1_0_50, v_0_1_0_51, v_0_1_0_52, v_0_1_0_53, v_0_1_0_54, v_0_1_0_55, v_0_1_0_56, v_0_1_0_57],
current: v_0_1_0_59,
other: [v_0_1_0_39, v_0_1_0_40, v_0_1_0_41, v_0_1_0_42, v_0_1_0_43, v_0_1_0_44, v_0_1_0_45, v_0_1_0_46, v_0_1_0_47, v_0_1_0_48, v_0_1_0_49, v_0_1_0_50, v_0_1_0_51, v_0_1_0_52, v_0_1_0_53, v_0_1_0_54, v_0_1_0_55, v_0_1_0_56, v_0_1_0_57, v_0_1_0_58],
})
+20
View File
@@ -0,0 +1,20 @@
import { VersionInfo } from '@start9labs/start-sdk'
// Email Capture admin panel + email-into-grounding wiring. The new "Email Capture"
// page (admin-only) shows whether Gmail capture is on, lets an admin enroll Ten31
// mailboxes, sync now, and re-match emails to investors — so capture can be turned
// on from the UI instead of an API call. Backend: the Architect's grounding corpus
// now includes matched email bodies (through the redaction boundary, never to Claude
// directly), inert until a mailbox is enrolled. No schema migration.
export const v_0_1_0_59 = VersionInfo.of({
version: '0.1.0:59',
releaseNotes: {
en_US: [
'New Email Capture page (admin): see whether Gmail capture is on, enroll your Ten31',
'mailboxes, sync now, and re-match emails to investors — all from the UI. Once capture',
'is on, the Architect can ground the thesis in what LPs actually wrote, through the',
'redaction boundary. Requires domain-wide delegation authorized in Google Workspace.',
].join(' '),
},
migrations: { up: async () => {}, down: async () => {} },
})