Commit graph

  • 36292beb16 Checkpoint: Shonar Desktop state master avi 2026-09-23 19:00:22 -05:00
  • 6e34161828 make-deb.py: rebuild the Debian package from the current compose distributable on any host (stdlib-only ar/tar writer, GNU tar format for dpkg) avi 2026-09-23 16:23:10 -05:00
  • 6efec5702c generateBuildInfo: register commit as task input — a plain rebuild after a new commit kept the STALE baked sha (task UP-TO-DATE), which made the in-app update check forever report 'update available' avi 2026-09-23 14:59:51 -05:00
  • 205342bcbc update-app.sh: authenticated pull via ~/.config/shonar-desktop/forgejo.token (chmod 600, outside the repo) — one-click in-app update works without interactive credentials; anonymous pull kept as fallback when no token file avi 2026-09-23 14:56:04 -05:00
  • 028724ff4d update-app.sh: last-resort kill by exact process name (pgrep -x) — the loose -f 'shonar-desktop' pattern still caught invoker shells outside the script's own ppid chain (persistent command daemons whose cmdline quotes the script path) avi 2026-09-22 12:30:37 -05:00
  • c948ca7367 update-app.sh: kill by pattern EXCLUDING own process lineage — pkill -f matched any ancestor shell mentioning the script path, so an update run could SIGTERM its own invoker; app-kill now walks the ppid chain and spares it avi 2026-09-22 12:24:26 -05:00
  • 668ecbefd0 update-app.sh: also kill the packaged binary (…/bin/shonar-desktop), not just java MainKt — without it a packaged run survived the update and the relaunch left a twin window avi 2026-09-22 12:20:55 -05:00
  • fc5502a7cd Installable app + one-click update from forgejo avi 2026-09-22 12:18:24 -05:00
  • b4e335d720 Model registry: Large v3 speed label corrected to measured ~0.3-0.4x real-time (CPU int8 quiet-machine benchmark Sep 22: 0.27x on 300s, 0.43x on 1200s; prior '~1x' was optimistic) avi 2026-09-22 10:38:34 -05:00
  • 89a882cb55 STATUS: close both Sep-16 open items — pump-error.log already gone; Large v3 quiet-CPU benchmark measured (0.27x RTF on 300s, 0.43x on 1200s, CPU int8, beam_size=5, engine args) avi 2026-09-22 10:00:32 -05:00
  • 7195aa1ae6 Settings: 'About & updates' — check-for-updates against the forgejo repo avi 2026-09-22 09:12:09 -05:00
  • 7ec6229d76 Theme: 'Meridian' renamed to 'Dark' (legacy 'meridian'/'dark' prefs load it); Light mode retoned to warm paper (page #EDEAE3, off-white cards, warm-charcoal ink) — full white was glaring per user avi 2026-09-21 20:23:25 -05:00
  • a4cd446926 Theme rename: 'Sonar' is now 'Default' (user directive) — Settings pill label, enum, and pref key 'default'; legacy 'dark'/'sonar' prefs load as Default; helper text fixed to teal avi 2026-09-21 19:52:36 -05:00
  • 13aae7818d Library rows: circular teal play button at row left (Android-home affordance) — plays/stops without opening the detail page; DONE files only; Stop square while playing avi 2026-09-21 19:45:20 -05:00
  • d362dc6f42 Sonar theme = Android's real default: teal 4FD1C5 accent (not coral), dark ink on teal, logo tile #0B1220 with teal hairline, single-accent-color ping logo; icon.png regenerated teal-on-#0B1220 to match Android launcher avi 2026-09-21 19:36:43 -05:00
  • a459ed1e4c Library rows: metadata line no longer paints in the accent (coral) on DONE — Android HomeScreen uses onSurfaceVariant for all statuses, error only for FAILED; matches the companion app avi 2026-09-21 18:42:28 -05:00
  • 5526699103 Theme: default is now 'Sonar' — Android companion's palette (DeepNavy 070D18, NavySurface, coral E76F51 accent, flat bg) so desktop and phone read as one product; previous charcoal/blue look kept as optional 'Meridian'; Settings pills Sonar/Meridian/Light; legacy 'dark' pref loads as Sonar avi 2026-09-21 18:28:19 -05:00
  • 7cc3737f92 Detail page: Play and Delete match library Delete-1 style — red-outline ghost buttons with white ink (ShonarDangerButton gains ink param; solid-filled variant removed) avi 2026-09-21 18:18:30 -05:00
  • d0de0cc405 Detail page: Play and Delete are one solid red (Shonar.Error fill, black ink) via new ShonarDangerFilledButton; verified pixel-identical fills on-device avi 2026-09-21 17:13:24 -05:00
  • 81f9855c1f Theme: every typography tier + LocalContentColor carry explicit palette ink; root Surface transparency made Compose's black default visible-on-dark text (fix unresolved foundation.LocalContentColor -> material3) avi 2026-09-21 16:25:21 -05:00
  • 7fc388be4b Background: darker meridian page gradient (#1B1D21 top -> #101113 bottom) behind transparent root surface, per reference ramp avi 2026-09-21 15:54:37 -05:00
  • 758842ae2a Icons: brand blue (#6190E5) for in-app sonar logo and window/taskbar icon; recolor icon.png, ship as window icon avi 2026-09-21 15:45:12 -05:00
  • 0fce24644b Palette: neutral #232323 cards + #323232 borders on blue-cast #15161A page, matching reference pixel samples avi 2026-09-21 15:18:01 -05:00
  • 33438f44a1 Fainter red per reference: mauve row wash #573440 for highlighted recordings, white titles, darker page #141619 avi 2026-09-21 14:50:43 -05:00
  • 30a9facf89 Match reference palette: charcoal page, blue interactive accent, pink-red reserved for recording titles and selected rows avi 2026-09-21 13:59:02 -05:00
  • 93151bf85e Theme: charcoal canvas + pink accent per reference screenshot; teal reserved for the brand logo only avi 2026-09-21 13:17:43 -05:00
  • 5852101a37 Revert "Shell: persistent sidebar (views, engine status, theme) + library top bar with search/sort/batch; responsive rail and drawer modes; Ctrl+F search" avi 2026-09-21 12:57:12 -05:00
  • ceb3be3dda Shell: persistent sidebar (views, engine status, theme) + library top bar with search/sort/batch; responsive rail and drawer modes; Ctrl+F search avi 2026-09-21 12:35:19 -05:00
  • 6e5a47ed5c Components: app-wide keyboard focus rings plus workspace primitives (icon button, nav row, tag chip, status dot, banner, empty state) avi 2026-09-21 12:20:27 -05:00
  • f3a84a2333 Design tokens: theme-aware palette via CompositionLocal, light theme, shape/elevation/motion tokens, persisted ui.theme pref with Settings toggle avi 2026-09-21 12:04:29 -05:00
  • 90f6f1b786 Detail: summary paragraph, voice chips, and copy actions consolidated into one card avi 2026-09-21 11:29:48 -05:00
  • a6e1d30f92 Typography: explicit line heights on every tier so body text stops reading as a dense wall avi 2026-09-21 11:29:48 -05:00
  • c32fc2079c PipelinePanel: wrap card content in a Column so stages stop painting over the headline avi 2026-09-20 20:49:21 -05:00
  • 514d75fe92 Raw provider crash fails the job instead of escaping into the sweep requeue loop avi 2026-09-19 15:24:50 -05:00
  • 15381b2c41 Commit upload session row before responding; client's follow-up GET raced the post-response commit into a 404 avi 2026-09-18 23:17:04 -05:00
  • b541cc2314 Never swallow detail-screen updates: revision field on DetailUi avi 2026-09-18 22:05:04 -05:00
  • 05b84a361a Show the busy label the instant a click lands, before the first job row exists avi 2026-09-18 21:18:30 -05:00
  • b5836d0fb6 Keep watching the job through transient fetch failures; don't freeze the screen avi 2026-09-18 21:11:58 -05:00
  • 70483b4cf8 Voice chips follow the saved report's voice in saved-report view avi 2026-09-18 19:58:42 -05:00
  • 1a6acd92d6 Honest processing pipeline panel: real stages, real percent, real elapsed avi 2026-09-18 19:45:58 -05:00
  • 8dc74a98a9 Export button at the top of the detail actions row too avi 2026-09-18 18:45:50 -05:00
  • b5113f4abc Detail, Settings, Engine, dialogs, and toasts on the design system (phase 4-5) avi 2026-09-18 18:39:56 -05:00
  • a3d16a6c18 Dashboard on the design system (redesign phase 3) avi 2026-09-18 18:17:03 -05:00
  • 5c0d1edbef Design system: Shonar tokens + shared UI primitives (redesign phase 2) avi 2026-09-18 18:13:09 -05:00
  • 4800364f09 Export report as .odt from the detail screen avi 2026-09-18 17:54:34 -05:00
  • d1a85bb6d0 Keep the clicked voice chip selected while its summarize job runs avi 2026-09-18 17:46:25 -05:00
  • 11bb13cb3d Fix re-summarize running one voice behind: commit the job row before poking the inline queue. avi 2026-09-18 17:03:37 -05:00
  • 39aaa04a00 Honest summarize progress from real completed work units avi 2026-09-18 15:42:16 -05:00
  • f258470a6a Detail bar shows real percent + tone once progress > 0 avi 2026-09-18 15:00:45 -05:00
  • 61f2124b1c AI progress: honest milestone bar from closed JSON contract units avi 2026-09-18 15:00:04 -05:00
  • 6ec811393a Migrations no longer clobber app logging: drop fileConfig(alembic.ini) from migrations/env.py. fileConfig rewrote the root logger (WARN + disable_existing) during the engine's startup migration, silently muting every INFO line afterwards — engine.log froze at the migration's last line and uvicorn access logs vanished, swallowing the TRACE instrumentation. The app owns logging (main.py basicConfig); alembic.ini's [loggers] applied only to standalone CLI runs. Verified: fresh engine boot now logs access lines live (GET /jobs flowing), 83 tests pass. avi 2026-09-18 13:13:40 -05:00
  • 768b75915a Instrumentation only: TRACE log lines for the tone-mismatch + progress investigation — reprocess (rid, requested tone, prior tone/status), summarize-start (rid, job, tone the worker actually read), progress (every distinct pct the provider emits), store_summary (rid, tone saved). rid minted per click joins all lines; zero behavior change. avi 2026-09-18 10:49:28 -05:00
  • e8bd5623d4 PRODUCT.md: impeccable product record — local-first promise, four fixed voices, honest-status principles; sonar look incumbent but not binding avi 2026-09-18 09:46:11 -05:00
  • 54e1f90c22 Detail: upload+transcribe now polls the WHOLE pipeline (transcribe AND summarize) before leaving the live-update loop — breaking on transcribe alone left 'Summarizing… 0%' on screen after the summary actually finished (seen live on 'Ali Tall buildings': engine succeeded at 13:38:52, screen kept the stale job snapshot until reopen). Also clears the busy label when no job is active instead of leaving the last one. avi 2026-09-18 09:10:45 -05:00
  • bcb32e4f01 Detail playback row: drop the redundant Pause/Resume pill and the duplicate Stop text button — one filled Stop button, always present while playing avi 2026-09-18 08:33:43 -05:00
  • 5d1f615d4a Snapshot: summary-notify compiles + SummaryNotifyTest (compile+tests green) avi 2026-09-17 22:23:35 -05:00
  • add622d649 WIP snapshot: summary-ready toast + unseen badge (safety commit before power loss; sibling session actively editing — may not compile yet) avi 2026-09-17 22:17:59 -05:00
  • 3061629dc5 Summarize: LAN primary with local-Ollama rescue + in-app failure guidance avi 2026-09-17 21:44:02 -05:00
  • cb0492fb3e Fix stuck 'Summarizing… 0%': the 'already running — attach to it' branch in reprocessInPlace returned without polling, stranding the initial busy label on screen forever (comment promised live progress the code never did). Now it falls through to the same poll loop as a fresh job. Also makes every early-return clear the busy state. avi 2026-09-17 16:16:27 -05:00
  • 1eb6d55f4d Honest summarize progress: backend percent pins at 99 the moment tokens start (thinking models stream immediately) then holds there for minutes — so streaming now shows 'Summarizing… working · m:ss' with an indeterminate bar; '0% waiting for model' stays for the pre-token wait; 100 only on success. Transcribe keeps its real percentage. avi 2026-09-17 14:43:03 -05:00
  • 8586bc2476 Summarize always shows a percentage: the pre-token wait state read 'Summarizing… waiting for model' with no number; now 'Summarizing… 0% waiting for model' everywhere it appears (jobProgress, both detail labels, reprocess initial busy). Tests updated. avi 2026-09-17 14:26:16 -05:00
  • 50d5a0c982 Library filter chips: drop Done and Failed (user request — All and Untranscribed cover the actionable cases; filter logic untouched). avi 2026-09-17 14:12:36 -05:00
  • 26f7b273ce Never double-import a file into the engine: detail Transcribe bails when the pump already owns the file (in-flight check was absent there — mid-upload the mapping sidecar doesn't exist yet, so the upload path created a second server recording; happened live with Gambino Tahoe 11-50). Pump's transcribeFile reuses an existing mapping via /reprocess instead of uploading fresh (a pipeline killed mid-run no longer re-imports as a new recording on next pump). Purged the 11:08 orphan recording from the engine DB. avi 2026-09-17 13:38:01 -05:00
  • 1f688e79bc Voice chips directly under the summary (before the long sections): every position further down fell off-screen and read as 'missing'; saved-report path keeps them under the report; dedupe with the bottom block avi 2026-09-17 11:09:19 -05:00
  • 104aaa4d66 Detail/library UX pass from live-use feedback: - Detail: pinned header (leave from anywhere), Prev/Next + Alt+arrows + Esc - Summary above transcript with full sections (key points/decisions/action items/details) + Copy summary / Copy action items buttons - Voice chips moved under the summary; one-page scroll below the header - Stuck-at-99% fixed: detail re-fetches transcript+summary when a watched job finishes while the screen is open - Playback: Pause/Resume + seek slider + position readout over mpv IPC (socket verified; controls hide if IPC unavailable) - Library: sort Name/Newest/Oldest (persisted, date shown per row) and status filter All/Untranscribed/Done/Failed - Delete is undoable: trash + 10s Undo toast replaces confirm dialogs (single + bulk); startup sweeps stale trash; engine purge on undo-window close avi 2026-09-17 10:00:03 -05:00
  • 134742fc67 STATUS: 2026-09-16 open-item audit — Large v3 first-use download verified end-to-end in an isolated HF cache (2.9 GB snapshot, model loads + transcribes); skipped test resolved as intentional; adoption/mapping items already closed avi 2026-09-16 20:16:57 -05:00
  • 0a0702f15d Summarize progress counts reasoning tokens: thinking models stream most of the run in reasoning_content, which the ticker ignored — UI sat at 'waiting for model' then jumped to done with no percentage avi 2026-09-16 18:28:59 -05:00
  • 8f7e1f9ea5 Detail: voice chip click re-summarizes immediately; separate Re-summarize button removed (redundant) avi 2026-09-16 17:28:42 -05:00
  • 25d53cb251 Detail: always fetch live summary for open file — voice tag was invisible for library-opened files (the report's own '## Summary' section defeated the fetch heuristic) avi 2026-09-16 17:12:10 -05:00
  • 3e1ec8eff8 Queue wait is visible: 'Queued… · Ns' + created_at on job payloads avi 2026-09-16 16:15:32 -05:00
  • 1dde1019e9 Detail: unmapable Summarize/transcript-save say why instead of silently doing nothing avi 2026-09-16 11:57:36 -05:00
  • 5ed4f31973 Always state the summary's voice: tag on the detail screen, Voice line in the saved report avi 2026-09-16 11:36:50 -05:00
  • d66c27463c Settings: pick the summarizer (LAN H200 / laptop Ollama / auto); waiting label shows elapsed wait avi 2026-09-16 11:26:15 -05:00
  • 8e465bdb93 Detail: edit the transcript in place (user version wins over re-transcribe) avi 2026-09-16 11:26:15 -05:00
  • ba54cb853b Adopt engine jobs at startup and on 'already running'; live work outranks a saved report avi 2026-09-15 19:45:02 -05:00
  • 7fa99e8291 Summarize streams with real progress: adapters reassemble SSE/NDJSON deltas and report 0-99% as tokens arrive avi 2026-09-15 19:45:02 -05:00
  • cd1b08fda0 Summarize voices: exactly the four personas, drop custom-voice chip avi 2026-09-15 15:40:19 -05:00
  • 7d3e0e886d Detail: inline summarize progress + more voices + custom voice avi 2026-09-15 15:10:39 -05:00
  • 994dbc3690 Detail: personality picker beside Re-summarize avi 2026-09-15 14:24:36 -05:00
  • b63f49241d Summarize tone: re-summarize in a chosen voice (backend) avi 2026-09-15 14:24:36 -05:00
  • 0d8f3be614 Settings screen: make root column scrollable avi 2026-09-15 14:00:25 -05:00
  • 2a1d5d5ab2 Add STATUS.md checkpoint: verified state, architecture decisions, open items avi 2026-09-15 12:47:10 -05:00
  • 6599935e28 Config: drop unused search_backend knob avi 2026-09-15 12:46:18 -05:00
  • 0b778e179d Desktop: drop per-row Delete; selection bar's Delete is the one path avi 2026-09-15 12:11:33 -05:00
  • 71b55715b4 Remove all Android/phone code: the app is standalone desktop avi 2026-09-15 11:42:20 -05:00
  • 751428cf3e Desktop: batch card shows overall % plus current file's stage and % avi 2026-09-15 10:53:58 -05:00
  • 36a1d2374b Desktop: queued files can be deleted/renamed; only running jobs lock avi 2026-09-15 10:15:28 -05:00
  • 757595aaed Desktop: move folder path + Choose-folder into Settings avi 2026-09-15 10:15:28 -05:00
  • 957b4d7c77 Desktop: Transcribe-all button with batch progress bar avi 2026-09-15 07:37:14 -05:00
  • 087e8386f5 Transcription: dwindle model choice to Whisper Base + Whisper Large v3 avi 2026-09-15 07:24:57 -05:00
  • 7234a62eb5 Debian support: verified build/packaging path + friend install guide avi 2026-09-15 07:10:27 -05:00
  • 5859a082d2 Desktop: make Ctrl+-/= zoom actually work avi 2026-09-15 06:52:30 -05:00
  • b45e9ff216 Desktop: replace tiny Swing folder chooser with in-app themed picker avi 2026-09-15 06:41:05 -05:00
  • 3e0e3b50cb Desktop: adopt the Android app's companion design (navy+teal sonar skin) avi 2026-09-15 06:26:16 -05:00
  • 0a713879b9 Desktop: progress-while-open, search-within-recording, click-hit-to-playback avi 2026-09-15 05:45:30 -05:00
  • fb1d0e4880 Desktop: multi-select library rows for bulk delete avi 2026-09-15 05:37:56 -05:00
  • a5aedb2b0a Desktop: delete a recording from the app (library row + detail, with confirm) avi 2026-09-15 05:14:20 -05:00
  • c25d3ab150 Bundle the whisper base model + one-shot standalone provisioning avi 2026-09-14 21:05:41 -05:00
  • a94609c07b Backend tests run on SQLite by default (78 passed, 1 skipped); no Postgres needed avi 2026-09-14 20:59:49 -05:00
  • adc40201a1 Engine venv is now local to this repo (uv venv + editable install of this backend) avi 2026-09-14 20:46:50 -05:00