Skip to content

fix(voice): restore model folders and add a dictation sound cue - #32484

Closed
screen-gd wants to merge 759 commits into
pingdotgg:maria/redesign/6-workspace-panesfrom
screen-gd:fix/redesign-model-folders
Closed

screen-gd wants to merge 759 commits into
pingdotgg:maria/redesign/6-workspace-panesfrom
screen-gd:fix/redesign-model-folders

Conversation

@screen-gd

@screen-gd screen-gd commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Problem

The redesign removed Model folders, so users could no longer reuse voice models downloaded by another app. Dictation also had no sound to indicate when recording started.

Change

Restore Model folders in Voice settings. T3 verifies models before loading them and never changes files in those folders.

Add an optional recording sound, off by default, with seven choices. It plays when recording starts; retrying saved audio stays silent. Available on web and desktop.

The sounds are unchanged from Hex. Its MIT license permits reuse with attribution. The full copyright and license notice are included in T3's web and desktop notices.

Scope and approval

Model folders restores the behavior from merged #30224 on the redesign branch. The recording sound is a separate addition; no maintainer approval to include it here is linked yet.

Verification

  • Folder tests cover reusing verified models, rejecting corrupt files and leaving external files untouched.
  • Changed-file checks passed, including 209 tests. All 11 Voice settings browser tests and the desktop build also passed.
  • All seven sounds match Hex's originals; generated web and desktop notices contain the full license.
  • One separate license test fails on an existing Windows path-format assertion. Audible recording-start playback and macOS/Linux were not checked with the current sounds.

Screenshots show the folder fix; they predate the sound picker.

Before After
Voice settings without Model folders Voice settings with Model folders

Made with GPT-6.1 Sol in Codex and Claude Opus 5.5 in Claude Code, through T3 Code.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Nov 7, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 86cb4a6

Macroscope's review found this PR approvable — Adds optional model folders so speech can reuse verified catalog downloads without modifying external files. Existing behavior remains unchanged until folders are configured, and model deletion remains limited to app-owned storage.

You can add or adjust custom eligibility rules. Learn more.

@maria-rcks
maria-rcks force-pushed the maria/redesign/6-workspace-panes branch 5 times, most recently from b6239a3 to f70f0bb Compare November 9, 2026 00:26
@screen-gd
screen-gd force-pushed the fix/redesign-model-folders branch from 86cb4a6 to 274caed Compare November 9, 2026 00:40
@screen-gd screen-gd changed the title fix(voice): restore model folders in the redesigned speech system fix(voice): restore model folders and add a dictation sound cue Nov 9, 2026
@maria-rcks
maria-rcks force-pushed the maria/redesign/6-workspace-panes branch from df060bc to 60f68d3 Compare November 9, 2026 00:45
@github-actions github-actions Bot added size:XXL 1,000+ changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Nov 9, 2026
@screen-gd
screen-gd force-pushed the fix/redesign-model-folders branch from 521cde2 to bb84779 Compare November 9, 2026 00:48
@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). and removed size:XXL 1,000+ changed lines (additions + deletions). labels Nov 9, 2026
@maria-rcks
maria-rcks force-pushed the maria/redesign/6-workspace-panes branch from 60f68d3 to 4577fd2 Compare November 9, 2026 00:59
@screen-gd
screen-gd force-pushed the fix/redesign-model-folders branch from bb84779 to 20726eb Compare November 9, 2026 01:31
@maria-rcks
maria-rcks force-pushed the maria/redesign/6-workspace-panes branch 4 times, most recently from 8673be9 to 94e50e3 Compare November 9, 2026 09:10
maria-rcks and others added 19 commits November 10, 2026 05:26
Maria wanted the space above and below the list changed, not between its items.
Uses the Orbital Sunrise vector itself instead of its grayscale render, dimmed to the level that render used.
Off by default. Web and desktop play a short click when recording starts, on
every dictation path that shares the speech hook. Retrying saved audio stays
silent because nothing new is being recorded.

Settings search for Model folders also falls back to the destination row when
that row is not on screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the camera shutter with Hex's seven dictation start sounds and
add a picker beside the Sound cue switch. Choosing a sound previews it.
The selected cue loads while recording prepares so it plays on time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The external-folder test overwrote a verified file with same-size bytes
and expected a re-hash. Verification is keyed on size, mtime, device and
inode, so two writes in one filesystem clock tick looked unchanged and CI
failed intermittently. Set a distinct mtime for the replacement, and
assert that removing the owned model leaves the external bytes intact.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@screen-gd

screen-gd commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor Author

Note

🤖 GPT-6.1 Sol responding on behalf of screen-gd

Updated to the latest redesign and resolved the conflicts. Model folders and the optional recording sounds are preserved. Hex's MIT attribution is included in the shipped notices. Checks passed; the description lists the remaining limits and approval needed for the sound cue.

This replaces the earlier progress updates. Current details and screenshots are in the PR description.

@github-actions github-actions Bot added size:XXL 1,000+ changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Nov 10, 2026

@binjamshid binjamshid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Restoring Model folders looks well contained: external files are SHA-256 verified before use, only the app-owned copy is ever removed, and the new endpoint sits behind AuthSettingsWriteScope. Most of my notes are about scope rather than logic.

  1. medium, PR scope. The PR currently shows 100 commits / 295 files (+10.5k) against maria/redesign/6-workspace-panes, because the head merged a newer redesign than the base has. Only five commits (9934c4d, 56f7529, 8e78835, 20726eb, 751dfbf) are this change, so the voice work is hard to find among unrelated pane, sidebar, orchestration and mobile-theme diffs. A rebase onto the current base (or retargeting) would bring this down to the ~25 voice files and avoid reintroducing redesign commits if the base moves again.

  2. low, apps/server/src/speech/SpeechModelStore.ts:83. verifiedExternal lives only in memory, so a shared model is fully re-hashed on the first transcription after every server restart. For large GGUF files this adds noticeable first-use latency each launch. That may be the right tradeoff for "never write into external folders", but a one-line comment, or a verification marker kept under T3's own state dir and keyed by path + identity, would make it explicit.

  3. low, apps/server/src/speech/SpeechService.ts:976. Dedupe is only trim(), so /models and /models/ (or C:\models vs C:/models) are stored as two folders and both are scanned. path.normalize before the Set would fix it. Separately, updateModelDirectories always calls disposeModel(), even when the list is unchanged or only an unrelated folder was removed. That forces a cold reload on the next dictation. Skipping the dispose when the normalized list equals the current setting would avoid it.

  4. low, apps/web/src/speech/useEnvironmentSpeechInput.ts:401-402. The cue plays when the controller emits recording. In controller.ts, that happens right after recorder.record(), so on laptop speakers the cue can end up at the start of the captured audio and the live stream. Hex starts its sound before capture begins. Playing it just before record(), or briefly delaying capture, would keep it out of the transcript input. This is worth checking once audibly, since the description notes playback wasn't verified.

  5. low, apps/web/src/components/settings/VoiceSettingsPanel.tsx. The client-side valid regex accepts \\server without a share segment, but the server rejects that on win32 with invalid_command. The user then sees a generic "Could not update model folders". Either align the regex with the server's UNC check or surface the invalid-directory reason.

Process: the description already notes this bundles the folder restore with the new sound cue, and the cue has no linked approval. Splitting the cue into its own PR would let the restore land independently.

@maria-rcks
maria-rcks force-pushed the maria/redesign/6-workspace-panes branch 4 times, most recently from 84ea585 to 2c7c7a4 Compare November 11, 2026 09:17
@screen-gd

Copy link
Copy Markdown
Contributor Author

Note

🤖 Claude Opus 5.5 responding on behalf of screen-gd

Closing this. #34096, now in maria/redesign/6-workspace-panes, covers the model folder restore: Download checks Handy and the Hugging Face cache, and Use existing links a verified file or folder without copying or deleting it. Porting the folder setting on top would add a second way to do the same thing, so review points 2, 3 and 5 no longer apply.

The sound cue moved to #34265, rebuilt on the current base as one commit (18 files instead of 1,094). It also fixes point 4: the cue now plays and finishes before recorder.record(), and controller.test.ts asserts that order.

@screen-gd screen-gd closed this Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants