Decompose: Break down #7 into implementable work units #22

Closed
opened 2026-05-27 00:57:30 +00:00 by Mark · 2 comments
Owner

Assessment

Issue #7 requests semantic notebook features — the current implementation uses basic SQL LIKE for search with no summarization, topic extraction, or notes.

Proposed Phases

P1: Full-text search (FTS5) — Connect existing infrastructure

Replace SQL LIKE search with SQLite FTS5 for proper full-text search across notebook entries. Add ranking, snippets, and query syntax.

Changes needed:

  • SegmentDao.kt line 33-38: replace LIKE '%' || :query || '%' with FTS5 text MATCH :query query on transcript_segments_fts
  • Add ranking/snippet support via FTS5 rank and snippet() functions
  • Add FTS5 query syntax support (quoted phrases, AND/OR operators)
  • SearchScreen (MainScreen.kt ~line 1431): wire results display with highlighted snippets

Note: FTS5 virtual table transcript_segments_fts + sync triggers already exist in MIGRATION_1_2 (AppDatabase.kt lines 34-73). Only the DAO query and UI need switching.

P2: Automatic summarization

Add an LLM-based summarization step that generates a short summary for each notebook entry on creation/update. Store summary alongside entry content.

Changes needed:

  • New method summarizeTranscript() on LLMTopicExtractor (or separate TranscriptSummarizer) with different prompt, reusing existing LLMConfig infrastructure
  • Add summary TEXT column to RecordingSession entity via new migration
  • UI: show summary in session detail, regenerate button

P3: Topic extraction & clustering — ✅ DONE

Extract topics/keywords from entries using TF-IDF or LLM. Provide a topic view/dashboard for navigating entries by theme.

  • LLMTopicExtractor.kt (#19): post-recording LLM topic segmentation → creates Subject entities + SessionTag(TYPE_SUBJECT) — closed
  • KeywordTopicDetector.kt (#20): live keyword-pattern detection with sliding window — closed

P4: Rich notes support

Add support for notes metadata: tags, cross-references, pinned notes, markdown rendering.

Changes needed:

  • Add notes_tags table (session_id, tag TEXT) to Room schema
  • Add notes_crossref table (source_session_id, target_session_id, note TEXT) to Room schema
  • Add is_pinned INTEGER DEFAULT 0 to RecordingSession entity
  • Markdown rendering via Compose Markdown library in session detail view

P5: Semantic search endpoint

Create an API endpoint that accepts natural language queries and returns semantically relevant entries (combining FTS5 with optional LLM reranking).

Changes needed:

  • After P1 (FTS5) is connected, add optional LLM reranking step on top of FTS5 results
  • API endpoint: either Android local (ViewModel method) or HTTP endpoint for external querying
  • Leverage LLMConfig from topic extraction for the reranker

P6: Session title/naming

  • RecordingSession.title currently auto-set to "Recording " with no edit surface
  • Add title editing to session detail screen (MainScreen.kt)
  • Auto-generate title suggestion via LLM (reuse LLMConfig) after recording
## Assessment Issue #7 requests semantic notebook features — the current implementation uses basic SQL LIKE for search with no summarization, topic extraction, or notes. ## Proposed Phases ### P1: Full-text search (FTS5) — Connect existing infrastructure Replace SQL LIKE search with SQLite FTS5 for proper full-text search across notebook entries. Add ranking, snippets, and query syntax. **Changes needed:** - `SegmentDao.kt` line 33-38: replace `LIKE '%' || :query || '%'` with FTS5 `text MATCH :query` query on `transcript_segments_fts` - Add ranking/snippet support via FTS5 `rank` and `snippet()` functions - Add FTS5 query syntax support (quoted phrases, `AND`/`OR` operators) - `SearchScreen` (MainScreen.kt ~line 1431): wire results display with highlighted snippets **Note:** FTS5 virtual table `transcript_segments_fts` + sync triggers already exist in `MIGRATION_1_2` (AppDatabase.kt lines 34-73). Only the DAO query and UI need switching. ### P2: Automatic summarization Add an LLM-based summarization step that generates a short summary for each notebook entry on creation/update. Store summary alongside entry content. **Changes needed:** - New method `summarizeTranscript()` on `LLMTopicExtractor` (or separate `TranscriptSummarizer`) with different prompt, reusing existing `LLMConfig` infrastructure - Add `summary TEXT` column to `RecordingSession` entity via new migration - UI: show summary in session detail, regenerate button ### P3: Topic extraction & clustering — ✅ DONE Extract topics/keywords from entries using TF-IDF or LLM. Provide a topic view/dashboard for navigating entries by theme. - `LLMTopicExtractor.kt` (#19): post-recording LLM topic segmentation → creates `Subject` entities + `SessionTag`(TYPE_SUBJECT) — **closed** - `KeywordTopicDetector.kt` (#20): live keyword-pattern detection with sliding window — **closed** ### P4: Rich notes support Add support for notes metadata: tags, cross-references, pinned notes, markdown rendering. **Changes needed:** - Add `notes_tags` table (session_id, tag TEXT) to Room schema - Add `notes_crossref` table (source_session_id, target_session_id, note TEXT) to Room schema - Add `is_pinned INTEGER DEFAULT 0` to `RecordingSession` entity - Markdown rendering via Compose Markdown library in session detail view ### P5: Semantic search endpoint Create an API endpoint that accepts natural language queries and returns semantically relevant entries (combining FTS5 with optional LLM reranking). **Changes needed:** - After P1 (FTS5) is connected, add optional LLM reranking step on top of FTS5 results - API endpoint: either Android local (ViewModel method) or HTTP endpoint for external querying - Leverage `LLMConfig` from topic extraction for the reranker ### P6: Session title/naming - `RecordingSession.title` currently auto-set to "Recording <timestamp>" with no edit surface - Add title editing to session detail screen (MainScreen.kt) - Auto-generate title suggestion via LLM (reuse `LLMConfig`) after recording
Author
Owner

GSD VERIFY phase found no changes after implementation.
Worker output: ]11;?\[?7h ┊ review diff

[?7ha//home/b/Projects/transcriber/.gsd/gate-state.json → b//home/b/Projects/transcriber/.gsd/gate-state.json

[?7h@@ -14,15 +14,15 @@

[?7h "gates": {

[?7h

GSD VERIFY phase found no changes after implementation. Worker output: ]11;?\[?7h ┊ review diff [?7ha//home/b/Projects/transcriber/.gsd/gate-state.json → b//home/b/Projects/transcriber/.gsd/gate-state.json [?7h@@ -14,15 +14,15 @@ [?7h "gates": { [?7h
Author
Owner

This issue has been decomposed into the following sub-issues:

# Title Phase Scope
#23 Break down #7 into implementable work units — Phase 1: Full- Replace SQL LIKE search with SQLite FTS5 for proper full-text search across note
#24 Break down #7 into implementable work units — Phase 2: Autom Add an LLM-based summarization step that generates a short summary for each note
#25 Break down #7 into implementable work units — Phase 3: Topic Extract topics/keywords from entries using TF-IDF or LLM. Provide a topic view/d
#26 Break down #7 into implementable work units — Phase 4: Rich Add support for notes metadata: tags, cross-references, pinned notes, markdown r
#27 Break down #7 into implementable work units — Phase 5: Seman Create an API endpoint that accepts natural language queries and returns semanti
#28 Break down #7 into implementable work units — Phase 6: Sessi - RecordingSession.title currently auto-set to "Recording " with no

Each sub-issue has been labeled with needs-triage and will be evaluated by the triage pipeline before queue routing.

This issue has been decomposed into the following sub-issues: | # | Title | Phase Scope | |---|-------|-------------| | #23 | Break down #7 into implementable work units — Phase 1: Full- | Replace SQL LIKE search with SQLite FTS5 for proper full-text search across note | | #24 | Break down #7 into implementable work units — Phase 2: Autom | Add an LLM-based summarization step that generates a short summary for each note | | #25 | Break down #7 into implementable work units — Phase 3: Topic | Extract topics/keywords from entries using TF-IDF or LLM. Provide a topic view/d | | #26 | Break down #7 into implementable work units — Phase 4: Rich | Add support for notes metadata: tags, cross-references, pinned notes, markdown r | | #27 | Break down #7 into implementable work units — Phase 5: Seman | Create an API endpoint that accepts natural language queries and returns semanti | | #28 | Break down #7 into implementable work units — Phase 6: Sessi | - `RecordingSession.title` currently auto-set to "Recording <timestamp>" with no | Each sub-issue has been labeled with `needs-triage` and will be evaluated by the triage pipeline before queue routing.
Mark closed this issue 2026-05-28 07:17:00 +00:00
Sign in to join this conversation.
No description provided.