feat(phase9): migration v14 + storage and Tauri command extension for llm_tags

Adds llm_tags TEXT NOT NULL DEFAULT '' to the transcripts table via
new migration v14. SELECT statements + TranscriptRow + transcript_row_from
now carry the column. update_transcript_meta gains a sixth Option for
llm_tags following the existing COALESCE pattern; an
#[allow(too_many_arguments)] keeps clippy happy without inverting the
signature into a struct that would just shift the indirection.

The Tauri-side TranscriptDto + UpdateTranscriptMetaRequest + the
update_transcript_meta_cmd command pass llm_tags through unchanged.
Pre-existing manualTags persistence path now has a sibling for
llmTags ready for the frontend to call.

Phase 8 brittle test fix included: list_recent_completions_uses_local_day_boundary
was anchoring its "-2 days" UTC offset against the local-day spine,
which drifted across UTC midnight. Anchored to the local date directly
so it matches the spine regardless of clock.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-25 00:10:54 +01:00
parent ef42c95000
commit 489c066a70
4 changed files with 100 additions and 12 deletions

View File

@@ -451,6 +451,18 @@ const MIGRATIONS: &[(i64, &str, &str)] = &[
WHERE done_at IS NOT NULL;
"#,
),
(
14,
"transcripts: llm_tags column for Phase 9 LLM content tags",
r#"
-- Phase 9 of the feature-complete roadmap. AI-generated content
-- tags (topic:* and intent:*) are stored alongside manual_tags as
-- a comma-joined string, mirroring how manual_tags persists. Pre-
-- existing rows default to empty string. The frontend chips loop
-- handles "" as "no tags".
ALTER TABLE transcripts ADD COLUMN llm_tags TEXT NOT NULL DEFAULT '';
"#,
),
];
/// Split SQL into individual statements, respecting BEGIN...END trigger blocks.
@@ -600,7 +612,7 @@ mod tests {
.fetch_one(&pool)
.await
.unwrap();
assert_eq!(count, 13);
assert_eq!(count, 14);
sqlx::query("INSERT INTO settings (key, value) VALUES ('test', 'value')")
.execute(&pool)
@@ -619,7 +631,7 @@ mod tests {
.fetch_one(&pool)
.await
.unwrap();
assert_eq!(count, 13);
assert_eq!(count, 14);
}
#[tokio::test]