6 KiB
SHONAR Desktop — Status
Checkpoint for the standalone desktop app. Prepend a new dated section per material change; keep history below.
2026-09-22 — open-item audit closed; Large v3 quiet benchmark; in-app update check
- pump-error.log (open item 1, Sep 16): CLOSED — already gone. Nothing
named pump-error.log exists under
~/.config/shonar-desktop/anymore (onlylogs/engine.log). The code path that writes it (DesktopState.ktpump failure logger) is current and legitimate. - Large v3 full-length timing (open item 2, Sep 16): MEASURED. Quiet
machine (app + engine stopped), CPU int8, same args as the engine
(beam_size=5), clips cut from a real 2 h 09 m recording:
- 300 s audio → 1107 s wall (0.27× real-time), first segment 37 s, model load 8.7 s.
- 1200 s audio → 2768 s wall (0.43× real-time), first segment 52 s. The earlier note ("300 s clip ran well under 7 min") was optimistic — under real quiet-CPU conditions Large v3 is ~4–8× slower than that. Practical read: a 2-hour recording ≈ 4–8 h of CPU transcription; Base (~7× real-time) stays the sensible default, Large v3 is for shorter, quality-critical clips.
- In-app update check (
7195aa1, pushed): Settings gains "About & updates" — build commit baked into the jar (generateBuildInfo→shonar-build.properties), a Check-for-updates button against the Forgejo commits API (up to date / update available with Open-repo link / newer-than-remote for dev builds), verified live on-device.
2026-09-16 — open-item audit; Large v3 provisioning verified
- Large v3 first-use download verified end-to-end in an isolated
HF_HUB_CACHE:snapshot_downloadfetched 2.9 GB in ~2.5 min,is_model_downloaded('large-v3')→ True, model loaded in 4.6 s (CPU int8) and transcribed a real clip. Note:setup-standalone.shvendors only Base; Large v3 is deliberately a first-use auto-download into themodels/hf-cachethe app exports — the registry'sdownload_instructions()already covers the manual path. No defect. - Skipped backend test resolved: intentional (
test_ai_adapters.py:55skips when faster-whisper IS installed — the missing-dep path can't be exercised then). Not a Postgres test. Current count: 80 passed, 1 skipped. - Earlier open items 1–2 (startup job adoption, upload-mapping reuse) were
closed by
ba54cb8+ the.shonar.jsonsidecar.
2026-09-15 (evening) — summarize progress bar, job adoption
Committed: 7fa99e8 streaming summarize progress, ba54cb8 job adoption.
- Summarize now shows a real determinate bar +
Summarizing… N%(same look as the main screen). Backend: both LLM adapters stream (SSE / NDJSON) and report 0–99% as tokens arrive; 100 only on success. No fake movement — before the first token the label reads "Summarizing… waiting for model" (cold LLM / server queueing was indistinguishable from a dead app). - Adoption of engine jobs across app restarts: startup scan no longer skips files that have a report (re-summarize was orphaned), a reprocess that hits 409 "already running" attaches to the running job instead of erroring, and live work outranks a saved report in library status.
- Verified live: screencap 19:41 — library row shows the bar + waiting label mid re-summarize; job settled to succeeded 100 with the % racing 48→99→100 once tokens flowed (H200 queueing caused the earlier "nothing happens"). pytest 79 passed/1 skipped · ruff clean · gradle green.
- Note: the dev loop died once (~19:35, cause unclear — gradle
runexit 143 chain); relaunched via background./desktop-dev.sh.
Done earlier (Sep 15 morning): see below.
2026-09-15 — standalone desktop, Android fully removed
Verified state (live this session):
- HEAD
6599935, clean tree, single branchmaster, no stashes - Backend tests:
78 passed, 1 skipped(pytest, SQLite) ·ruff checkclean - Frontend tests:
39 passedacross 7 gradle suites - Engine runs locally on
127.0.0.1:8000(healthz ok); runtime state in~/.config/shonar-desktop/(engine.db,settings.json)
What the app is: Compose Desktop (Kotlin) UI + bundled FastAPI engine
(SQLite + in-process queue, self-migrating on boot). No Postgres/Redis/Docker,
no server, no phone component. faster-whisper (Base vendored under
models/hf-cache/, Large v3 downloadable) + an LLM for summaries
(openai_compat or ollama).
Architecture decisions worth keeping:
- All Android/phone code deleted (
71b5571) — desktop is the product. The old server-era source lives on the main repo'sdeferred/desktop-serverbranch for reference only. - Shared code sits at
shared/com/shonar(nosrc/), pulled in viasrcDir("../shared")inapp/build.gradle.kts. - Search picks its path by SQL dialect inside
services/search.py(SQLite substring scan / Postgres tsvector) — intentionally nosearch_backendconfig knob (removed6599935; nothing ever read it). - Engine endpoint root is
/api/v1(/healthz,/system/status, …). - Dev loop:
./desktop-dev.sh(inotifywait restarts app on.kt; uvicorn--reloadfor backend). Debian path:INSTALL-debian.md.
Done this cycle (Sep 14–15): batch transcribe-all with overall + per-file stage progress; library multi-select/bulk delete (single delete path); queued-file delete/rename; folder picker in-app + path in Settings; zoom keys; search-within-recording; click-hit-to-playback; model choice narrowed to Base + Large v3; Debian packaging + install guide; standalone provisioning with vendored base model.
Open items / candidates:
- Stale-noise cleanup:
~/.config/shonar-desktop/pump-error.logholds old Android→server upload 404s (pre-desktop pivot); no action taken. - Optional: full-length Large v3 transcription timing (300 s clip ran well under 7 min on CPU int8 while the app + LLM were also active; a quiet benchmark would pin the number).
Known debt: none blocking. No dead stubs; one former TODO (search backend) resolved by deletion.