From 2d90504bdda153892192ece3b30bb4ade2b8bcf4 Mon Sep 17 00:00:00 2001 From: Alex Rawlings Date: Mon, 19 Oct 2026 15:20:51 -0600 Subject: [PATCH 1/5] Store project summaries for the picker (#434) --- AGENTS.md | 2 + e2e-tests/tests/perf/app-perf.spec.ts | 5 +- e2e-tests/tests/perf/view-driver.ts | 2 +- perf/storage.ts | 12 +- src/__tests__/main.test.ts | 29 +- src/__tests__/services/projectStorage.test.ts | 476 ++++++++---------- .../services/projectSummaries.test.ts | 192 +++++++ .../services/pt9ImportService.test.ts | 18 +- src/__tests__/test-helpers.ts | 9 + src/main.ts | 22 +- src/services/projectStorage.ts | 214 ++++---- src/services/projectSummaries.ts | 118 +++++ src/services/pt9ImportService.ts | 2 +- src/types/interlinearizer.d.ts | 12 +- 14 files changed, 663 insertions(+), 450 deletions(-) create mode 100644 src/__tests__/services/projectSummaries.test.ts create mode 100644 src/services/projectSummaries.ts diff --git a/AGENTS.md b/AGENTS.md index 357af3f67..76021a292 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -79,6 +79,8 @@ The WebView root component is assigned to `globalThis.webViewComponent` (not exp Drafts are loaded and saved through [AnalysisRepository](src/types/analysis-repository.ts), the seam a later storage backend implements. [DraftRepository](src/services/draftRepository.ts) implements it over the draft envelope and its per-book shards, and rewrites only the books that changed. It imports nothing from PAPI and reaches storage only through a `KeyValueStorage`. That lets the perf harness run it in Node, straight over the storage files ([perf/storage.ts](perf/storage.ts)). +Saved projects are listed through [ProjectSummaries](src/services/projectSummaries.ts): one record holding every project's summary, rewritten on each project write so listing reads no analysis. It is PAPI-free in the same way. + ### Components Prefer Platform.Bible's `platform-bible-react` components (`Button`, `Input`, `Textarea`, `Label`, `Switch`, `RadioGroup`, `Popover`, `Tooltip`, etc.) over hand-rolled raw HTML (`