Commit Graph
27 Commits
Author SHA1 Message Date
iamdoubz e6e209e1c4 feat(tags): register set_tags/list_tags commands (T8.3, FR-SEARCH-2) 2026-07-02 10:38:36 -05:00
iamdoubz d1ca2f63dd feat(tags): add set_tags/list_tags commands; extend list_meetings (T8.3, FR-SEARCH-2) 2026-07-02 10:38:31 -05:00
iamdoubz fc6a2fa0aa feat(tags): wire tags + list filters (T8.3, FR-SEARCH-2)
tags/meeting_tags existed since migration 0001, completely unused.
Adds upsert_tag/tags_for_meeting (mirroring upsert_participant's
find-or-create pattern) and real set_tags/list_tags implementations.

Extends list_meetings with tag/participant/date filters via a new
MeetingFilter struct, replacing the old query-only signature — the
participant filter matches either a speaker mapped to that participant
or an attendee of the meeting's linked calendar event, since neither
signal alone covers "who was in this meeting." Tags are populated on
Meeting/MeetingListItem/SearchHit via a per-row lookup (N+1, but
meeting counts are small enough that this is simpler than GROUP_CONCAT
string-splitting).
2026-07-02 10:38:26 -05:00
iamdoubz c2d282e5ba feat(tags): add tags fields to MeetingListItem/SearchHit (T8.3, FR-SEARCH-2) 2026-07-02 10:38:19 -05:00
iamdoubz c9c049ce2a feat(search): register the search command (T8.2, FR-SEARCH-1) 2026-07-02 10:07:40 -05:00
iamdoubz d928dfd51d feat(search): add search command; route notes.md writes through the store (T8.2, FR-SEARCH-1)
The initial notes.md render after finalize/resume/recovery bypassed
the Store abstraction entirely (raw std::fs::write) — routing it
through update_notes means that first render also gets FTS-indexed and
bumps updated_at, instead of only later manual edits doing either.
2026-07-02 10:07:29 -05:00
iamdoubz 68379f8f56 feat(search): wire meeting_fts population + real search (T8.2, FR-SEARCH-1)
meeting_fts existed since migration 0001 but nothing ever wrote to it.
Adds reindex_fts (called from finalize_meeting/update_notes so the
index can't drift from what's on disk), a one-time startup backfill
for meetings finalized before this feature existed, delete_meeting
cleanup (meeting_fts is a virtual table with no FK/CASCADE support),
and a real Store::search() replacing the hardcoded stub. Query input
is phrase-quoted per token so stray FTS5 operators in free-text search
input can't throw a MATCH syntax error.
2026-07-02 10:07:20 -05:00
iamdoubz b5aa1714ad feat(search): add SearchHit type (T8.2, FR-SEARCH-1)
Same fields as MeetingListItem plus a highlighted snippet of what matched.
2026-07-02 10:07:03 -05:00
iamdoubz fc9c1d9fc2 feat(audio): forward capture-event sink to recording://level/device (T7.3)
start_recording now creates the EventSink alongside the existing frame
channel and forwards Level/DeviceChanged onto a small fire-and-forget
thread that emits "recording://level" and "recording://device".
2026-07-01 21:09:34 -05:00
iamdoubz 098331d6f5 feat(audio): compute level meter + device-change recovery (T7.3, FR-CAP-5/6)
Adds AudioLevel (rms/peak per chunk, throttled to ~20Hz) and
CaptureEvent::DeviceChanged emitted through a new EventSink alongside
the existing FrameSink. On a capture read failure, reopens against
whatever is now the default render device and continues the same WAV
file if the new format is compatible; otherwise fails loudly rather
than silently corrupting the recording.
2026-07-01 21:09:28 -05:00
iamdoubz 70c8c61af5 feat(privacy): implement privacy_self_check command (T7.6, FR-SEC-2)
Reports LLM endpoint/local-only status and enabled sync targets so the
UI can prove local-only handling, per the shape fixed in
docs/04-api-contracts.md. Sync targets stay empty until Phase 9 lands
SyncManager; list_sync_targets' not_implemented error is swallowed
rather than failing the whole self-check.
2026-07-01 17:01:40 -05:00
iamdoubz 38c14bc267 Verify event linking and participant-aware speaker naming round-trip (T6.6) 2026-07-01 15:08:15 -05:00
iamdoubz b419eb4cc5 Verify PST import dedups events and participants by source and raw_uid 2026-07-01 15:08:11 -05:00
iamdoubz b2425fa5e6 Add calendar_event_participants table and dedup index for PST re-imports 2026-07-01 15:08:07 -05:00
iamdoubz 826d87c7fa Persist calendar events/attendees with dedup; link meetings to events (T6.2/T6.3/T6.6) 2026-07-01 15:07:40 -05:00
iamdoubz cd170c2907 Add CalendarEvent, AttendeeInfo, ImportedEvent types for calendar import (T6.1) 2026-07-01 15:07:36 -05:00
iamdoubz 1112b38501 Replace Anthropic provider todo!() stubs with typed errors; panics abort in release 2026-07-01 15:07:32 -05:00
iamdoubz f9e2f06ef1 Register new calendar commands with the Tauri invoke handler 2026-07-01 15:07:29 -05:00
iamdoubz 6229b58645 Add calendar commands; replace todo!() stubs with typed errors to avoid panics 2026-07-01 15:07:25 -05:00
iamdoubz 35c2de5da0 Implement PstSource via readpst shell-out and iCalendar VEVENT parsing (T6.1) 2026-07-01 15:07:21 -05:00
iamdoubz d4f7eb80a8 Enable pst feature by default; readpst is shelled out to, no crate dependency 2026-07-01 15:07:17 -05:00
iamdoubz 27373effb7 Phase 5 2026-07-01 10:54:03 -05:00
iamdoubz 5757cd7345 Phase 4 2026-07-01 07:53:23 -05:00
iamdoubz ba48f0afc2 Phase 3 2026-06-30 23:53:33 -05:00
iamdoubz f9b172aff4 Phase 2 2026-06-30 23:18:29 -05:00
iamdoubz 02834e9cd2 Phase 1 2026-06-30 22:17:30 -05:00
iamdoubz aae22a0e23 Add all scaffolding, design, and decision documentation AKA first commit 2026-06-30 16:12:55 -05:00