uttrflow / uttrflow/uttrflow-swift

The speech model download page doesn't give the size or time, blocks the rest of setup, and its Cancel silently skips the step

Open
#690 0 comments 0 reactions 0 assignees View on GitHub
area:general enhancement needs-info P2
Dominant language
Swift
Stars
4
Forks
17
Avg merge
3h 32m
Merged PRs (30d)
277

Description

## What happens

Onboarding's "Setting things up" page starts the speech model download as soon as it appears (`OnboardingFlow.enter(.setup)` → `beginInstall()`, `Sources/UttrflowUX/OnboardingFlow.swift:211-212`, `:272-301`). While it runs the page shows (`Sources/UttrflowUX/OnboardingPresenter.swift:165-212`, `Sources/Uttrflow/Onboarding/OnboardingView.swift:424-458`):

- the subtitle "A one-time download, then you can start talking.";
- "Downloading the speech model" with a percentage and a bar;
- buttons **Cancel** and a disabled **Continue**.

What it does not say or allow:

- **How big it is.** About 600 MB (`Docs/speech-model-install.md`, "re-downloading six hundred megabytes"). The AI suggestions banner, by contrast, says "about 3 GB, once" (`Sources/UttrflowUX/SettingsPresenter.swift:398`).
- **How long, or how fast.** Only a percentage; no bytes, rate or time left, so a stalled download and a slow one look the same until the percentage moves.
- **Going on while it downloads.** Continue is disabled until the download ends, so the rest of setup (the last page, the shortcut) waits on the network. The pages before it (sign-in, microphone, Accessibility) do not need the model, but this one blocks.
- **What Cancel means.** Cancel stops the download *and* leaves the page (`perform(.cancelInstall)` → `abandonInstall()` then `moveOn(after: .setup)`, `OnboardingFlow.swift:135-137`). The button does not say that it skips the step, and after onboarding has finished there is no route back to the download (see #671).
- **Metered or slow connections.** Nothing warns that the download starts on entry.

## Why it matters

On a slow or metered connection (a phone hotspot, a hotel network) a first-run user is asked to wait an unknown time for an unknown amount of data, with no way to finish setting up meanwhile, and the only other button silently skips the one thing dictation cannot work without.

## How to reproduce

Remove the installed model for the dev bundle, delete the onboarding record, throttle the network to a slow profile, and go through onboarding.

## Acceptance criteria

Product calls (hence `needs-info`): may the user go on to the last page while the download continues in the background, and should the download wait for a press on metered connections?

Then:

- The page states the size before or as the download starts, and shows downloaded / total (and, if cheap, time left) next to the percentage.
- Cancel is labelled for what it does (for example "Skip for Now"), or, if the download can continue in the background, becomes "Continue in Background" with progress shown by the menu bar (#670 covers the menu bar half).
- `Tests/UttrflowUXTests/OnboardingPresenterTests.swift` and `OnboardingFlowTests.swift` cover the new wording and the chosen Continue behaviour.

Contributor guide

Open the contributing guide

Research direction

Resolve the product calls about continuing setup during download and waiting on metered connections first. Read Sources/UttrflowUX/OnboardingFlow.swift, OnboardingPresenter.swift, and Sources/Uttrflow/Onboarding/OnboardingView.swift, then inspect Docs/speech-model-install.md and the referenced tests. Done means the page communicates download size and progress, and OnboardingPresenterTests.swift and OnboardingFlowTests.swift cover the chosen wording and behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, swift
Domain
desktop-dev, frontend
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.