email: live backfill progress on Email Capture panel — v0.1.0:61

The first Gmail backfill leaves the account at "pending · never synced" until it
fully completes (the sync_runs row only finalizes at the end), so there was no
feedback. /api/email/status now also returns captured_emails (total, which climbs
page-by-page during backfill), the latest sync run, and a backfilling flag. The
panel shows a "Backfilling… N captured so far" banner + an Emails Captured count
and auto-refreshes every 5s while a backfill is in progress. Verified live in
preview with seeded data (count auto-climbed 37 -> 50 without manual refresh).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Keysat
2026-06-06 12:29:01 -05:00
parent 1850bc4431
commit 2cb476e36b
5 changed files with 60 additions and 12 deletions
+3 -2
View File
@@ -25,8 +25,9 @@ export const PACKAGE_TITLE = 'Ten31 Database'
// * 0.1.0:57 (redaction fix: magnitude regex no longer eats the word after an amount)
// * 0.1.0:58 (seed 5 Architect positioning framings into the Workshop as candidate options)
// * 0.1.0:59 (Email Capture admin panel + matched email into the grounding corpus)
// * Current: 0.1.0:60 (Email Capture: single-mailbox enroll field for testing)
export const PACKAGE_VERSION = '0.1.0:60'
// * 0.1.0:60 (Email Capture: single-mailbox enroll field for testing)
// * Current: 0.1.0:61 (Email Capture: live backfill progress + auto-refresh)
export const PACKAGE_VERSION = '0.1.0:61'
export const DATA_MOUNT_PATH = '/data'
export const WEB_PORT = 8080
+3 -2
View File
@@ -21,8 +21,9 @@ 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'
import { v_0_1_0_60 } from './v0.1.0.60'
import { v_0_1_0_61 } from './v0.1.0.61'
export const versionGraph = VersionGraph.of({
current: v_0_1_0_60,
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, v_0_1_0_59],
current: v_0_1_0_61,
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, v_0_1_0_59, v_0_1_0_60],
})
+18
View File
@@ -0,0 +1,18 @@
import { VersionInfo } from '@start9labs/start-sdk'
// Email Capture: show live backfill progress. The status endpoint now reports total
// emails captured (climbs page-by-page during backfill, since the sync-run row only
// finalizes at the end), the latest sync run, and whether a backfill is still in
// progress. The panel shows a "Backfilling… N captured so far" banner + an Emails
// Captured count, and auto-refreshes every 5s while a backfill runs. No schema migration.
export const v_0_1_0_61 = VersionInfo.of({
version: '0.1.0:61',
releaseNotes: {
en_US: [
'Email Capture now shows live backfill progress: a count of emails captured so far',
'that ticks up while the first sync pulls your history, plus a clear backfilling banner',
'that refreshes on its own. No more staring at a static "pending" with no feedback.',
].join(' '),
},
migrations: { up: async () => {}, down: async () => {} },
})