Skip to content

Release v0.4.1 - #793

Merged
sujithatzackriya merged 104 commits into
mainfrom
release/v0.4.1
Sep 10, 2026
Merged

sujithatzackriya merged 104 commits into
mainfrom
release/v0.4.1

Conversation

@athulchandroth

@athulchandroth athulchandroth commented Sep 9, 2026 •

Copy link
Copy Markdown
Collaborator

Release v0.4.1

Release of release/v0.4.1 into main, prepared from devtest. Includes recording, transcription, model-download, summary, and Windows compatibility improvements since v0.4.0.

Fixes

Chores & Docs

Build verification

  • cargo check --locked — passed on adbccd9 with 8 application-library warnings. The subsequent fix(tests): resolve Bun TypeScript errors #795 merge changed only development dependencies and test typings.
  • pnpm tsc --noEmit — passed on source identical to merged release commit 24fd4a1.
  • bun test tests — 45 passed, 0 failed.

sujithatzackriya and others added 30 commits June 5, 2026 19:23
…AC half-duration bug)

Symphonia has no SBR support: for HE-AAC files it decodes only the
AAC-LC core at half the container-declared rate (e.g. 24 kHz for a
48 kHz HE-AAC m4a, a common phone-recorder format). decode_audio_file
trusted codec_params.sample_rate from the container, so the decoded
samples were labeled at 2x their true rate: imported recordings played
at double speed, transcribed as garbled text, and covered only half
their real duration (an 84-min meeting produced a transcript ending at
42:03 with the second half apparently missing).

Take the sample rate from the first decoded buffer's spec instead,
exactly like the existing channel-count correction one line above.

Also fix the VAD flush force-end timestamp: silero's SpeechStart
timestamp_ms is already session-absolute, so adding processed_samples
double-counted and produced segment start times past the end of the
audio (a 162-min start in an 84-min file).

Adds an HE-AAC regression fixture (5 s, 440 Hz sine, explicit SBR
signaling: container says 48 kHz, core decodes at 24 kHz) and a test
asserting decode reports ~5 s, not ~2.6 s.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add a resizable transcript/summary splitter with Settings-style tabs,
keep summary actions in the top toolbar for empty state, and size
action labels from panel width via container queries.
Allow thinking models to reason, remove that text from saved summaries,
and expose reasoning_stripped/reasoning so the UI can notify the user.
Removes the confidence-threshold gate that silently discarded non-empty transcripts (e.g. short acknowledgements like "Yes"/"ok") when confidence was below 0.3. Emission now only depends on the transcript text being non-empty, via a new should_emit_transcript helper. Adds unit tests for the helper.
The Anthropic response parser assumed content[0] is always a text block
with a required `text` field. Models that enable thinking by default
(claude-sonnet-5, claude-opus-5) return a `thinking` block first, which
has no `text` field, so deserialization failed outright with
"Failed to parse LLM response: missing field `text`" and those models
could not be used at all - even though they are offered in the model
picker, which is populated live from /v1/models.

- Make `text` optional on ClaudeChatContent so non-text blocks parse.
- Select the first block that actually has text instead of content[0].
- Raise max_tokens 2048 -> 8192: it is a shared budget for thinking plus
  the answer, so 2048 truncated summaries mid-sentence on these models.

Backwards compatible: models without thinking return a single text block
first, which is still what gets picked.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
fix(summary): preserve transcript coverage across chunks
fix(import): use decoder output sample rate, not container rate (HE-AAC half-duration bug)
…ding-readiness

fix(recording): respect selected transcription provider
- Follow up PR #608 / issue #607: repair pre-fix HE-AAC metadata during
  explicit retranscription by persisting the corrected decoded duration.
- Follow up PR #639 / issue #637: keep active Local Whisper downloads
  authoritative during discovery and clear stale transfer state on
  terminal
  errors.
- Add regression coverage for historical recovery and early download
  feedback
- Keep each active download owned until its worker completes cleanup,
  preventing a cancelled worker from clearing a retry’s state.
- Interrupt stalled requests and response streams with a per-download
  cancellation token, then remove cancelled partial files.
- Preserve the existing IPC/UI contract by treating expected
  cancellation as non-error and add lifecycle regressions for retry
  ownership and terminal cleanup.
fix(summary): handle Claude thinking blocks in Anthropic response parsing
- Align the frontend status contract with the backend’s nested download
  progress payload.
- Keep discovery and cleanup from exposing a completed download as still
  active.
- Add focused regressions for readiness detection and the final
  Available transition.
- send an explicit versioned User-Agent for Whisper model requests
- validate downloaded artifacts before publishing them as available
- remove failed partial downloads and restore the backend cache to
  Missing
- bound cancellation acknowledgement without reopening download
  ownership races
- add loopback regressions for headers, validation, partial streams, and
  timeout ownership
- Prevent header-valid truncated downloads from being published as
  Available.
- Apply the catalog’s existing 90% minimum-size rule before terminal
  success.
- Cover cleanup and Missing-state recovery for an undersized
  valid-prefix response.
- Prevent cancellation finalization and model discovery from acquiring
  download-state locks in conflicting order.
- Keep the active owner reserved until cleanup publishes the terminal
  backend state, returning `pending` while shutdown continues.
- Reconcile the UI with backend state before enabling retry, preserving
  a model that completed just before cancellation.
- Add deterministic regressions for lock ordering, pending cleanup, and
  late cancellation.
fix(transcription): complete post-merge follow-ups
Fix: stop dropping transcripts below confidence threshold (#675)
…ollama

fix(ui/summary): meeting-details layout and Ollama reasoning strip (#592)
[skip ci]

- request disabled reasoning effort only for Ollama-compatible chat
  calls
- retry Ollama requests without reasoning_effort on documented legacy
  rejection
- strip leading reasoning envelopes before each summary pipeline stage
- reject empty visible output after reasoning removal
- retain only a reasoning_stripped metadata flag in summary results
- redact legacy reasoning fields for flagged persisted summaries
- unify desktop and mobile summary/transcript panes under accessible
  tabs
- preserve keyboard and pointer resizing with clamped persisted split
  ratios
Revert the expanded sidebar wordmark to the compact blue Meetily pill
used on devtest. Keep the collapsed logo asset unchanged.
Raise the transcript pane minimum to 30% and compact its toolbar
until all labeled actions can fit without overflow.
- Remove unused className props and cn wrappers from transcript and
  summary panels.
- Preserve their fixed layout classes because the sole caller supplies
  no overrides.
…el-downloads

fix(parakeet): preserve completed files across download retries
- Retry legacy Ollama reasoning-effort rejections once without
  duplicating unrelated failed requests, while preserving accurate
  timeout and HTTP status diagnostics.
- Fail chunked summary generation after one retry instead of publishing
  partial completed summaries.
- Stabilize mobile summary-tab selection, model Markdown and legacy
  summary data explicitly, and make editor dirty state render-driven.
- Treat split-pane storage as an optional preference so blocked
  localStorage cannot break resizing.
- Invalidate the active generation before cancellation so an in-flight
  poll cannot restore an empty summary UI after Stop.
- Gate generation setup, polling callbacks, cancellation recovery, and
  error paths behind the current generation ID.
- Preserve normal backup restoration for cancellations not initiated by
  the user.
On macOS a freshly-connected Bluetooth mic can leave its input callback
asleep for 40-90s after AudioDeviceStart returns noErr, so a new recording
captures no audio until the link wakes on its own. Play a brief burst of
silence out the output device just before opening the mic to wake the link,
so audio flows immediately.

macOS-only, non-fatal on error, verified on hardware (deep-cold AirPods).

Refs #450
safvanatzack and others added 15 commits September 7, 2026 21:05
- Preserve devtest's 500ms live VAD policy and corrected forced-flush boundaries.
- Keep ONNX readiness gating and fallible pipeline startup through the merge.
fix(windows): load compatible ONNX Runtime dynamically
…ion-detection

Fix microphone checks, summary progress, and Start button layout [skip ci]
- Exclude cooldown notices and report each error class at most once
  per session to prevent repeated failures from inflating event volume.
- Replace raw error messages with bounded codes and deduplicate before
  delivery, including when delivery fails.
- Clear limits on new sessions, successful opt-out, and reset.
- Add regression coverage for error bursts and session renewal while
  leaving recording behavior and transcription retries unchanged.
- Release session state before emitting the session-end event.
- Add a local regression test confirming cleanup completes.
fix(instrumentation): reduce duplicate transcription diagnostics
safvanatzack and others added 8 commits September 10, 2026 09:31
- Reveal Generate Summary, Regenerate Summary, Processing, and Stop once
  the summary pane reaches 384px.
- Keep the controls compact with 12px horizontal padding and an 8px
  icon-to-text gap.
- Document Vulkan-based Windows packages, the AVX2 baseline, disabled AVX-512, and CUDA as a configured source-build option.
- Align source-build setup with pnpm 9.15.9, frozen-lockfile installation, and committed lockfile updates.
- Describe the CI portability guard, cache isolation, and pre-bundle validation across release, standalone Windows, and DevTest workflows.
- Distinguish the Rust x86-64-v2 target from Whisper's native AVX2
  baseline and disabled AVX-512.
- Keep the Windows build workflow Vulkan-only and make the Linux quick
  start install the committed dependency set.
hotfix(ui): polish sidebar and meeting controls
fix(tests): resolve Bun TypeScript errors
@sujithatzackriya
sujithatzackriya merged commit a2cb62e into main Sep 10, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants