Fix onboarding: model prefetch, shorter flow, escape hatch, real reminders toggle#1353
Fix onboarding: model prefetch, shorter flow, escape hatch, real reminders toggle#1353r3dbars wants to merge 1 commit into
Conversation
…nders toggle Fixes from the onboarding review: - Warm the local voice model while onboarding is open and surface its download state on the try-dictation and final steps, so the first dictation or meeting no longer stalls on a cold ~600 MB download. Emits the already-allowlisted onboarding_model_state_changed event and model_state properties. - Persist the calendar step's Meeting reminders toggle. It previously only fed analytics; it now writes MeetingReminderPreferences, gates the calendar source in MeetingPromptDetector, and has a matching Settings > General row. - Shorten the flow to 9 screens (meetings) / 10 (dictation) from 12/14: privacy pills fold into welcome, dictation intro merges into the live try-it step, the memory and agent-demo screens merge into one payoff screen (keeps the "memory" step id), and the diagnostics toggle moves onto the done screen. - Let users skip the required-permissions step and finish onboarding in a degraded state instead of dead-ending on a disabled button; the done screen points to Settings when grants are still missing. - Re-register the dictation event tap explicitly when Accessibility flips to granted (onboarding poll rebroadcasts transitions via .transcriptedPermissionsDidChange) instead of relying on a preference-write side effect. - Delete the dead legacy FirstRunOnboardingStep flow model and its copy/tests; drop the decorative fake traffic lights that stacked under the real window buttons and hide the zoom button. Updates the QA ui-smoke walk for the merged welcome step and registers the new preference + tests in the fast-test runner and manifest. Not verified by build: authored in a Linux container without a Swift toolchain; needs bash build.sh --no-open, bash run-tests.sh, and swift test --package-path Tools/TranscriptedQA on a Mac. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019pLa23SibHfMcBSbJfqsZw
|
Maestro hold review: HOLD at head a8ca0b4. Still draft and changes first-run activation behavior: model prefetch, shortened flow, permissions escape hatch, persisted meeting-reminders toggle, hotkey recovery, Settings copy, and QA UI smoke path. The PR body says Swift build/tests and visual evidence were not run locally. Smallest clear path: run build.sh --no-open, run-tests.sh, run-integration-smoke.sh, TranscriptedQA UI smoke, then manually verify fresh-install dictation and meetings onboarding, skipped permissions, model status/retry, and Settings reminders state. |
|
Re the hold: most of that checklist has since run in CI. The macOS Still genuinely open, and it needs a human on a Mac:
Happy to fix anything those turn up. Generated by Claude Code |
Why
An onboarding review found six problems with the first-run flow:
.hotkeysDidChangeand reinstall the event tap after Accessibility was granted — fragile coupling.FirstRunOnboardingStepflow model that no longer matched the live flow, and decorative fake traffic lights drawn under the window's real buttons.Product Impact
dictation/meetingsactivationWhat changed
makeOnboardingView()injects a model-state provider and a prefetch trigger intoPermissionsOnboardingView; the view starts the prefetch on appear and polls state alongside the existing permission poll. A newOnboardingModelStatusLineViewshows progress (with retry on failure) on the try-dictation and done steps, backed by a Foundation-pureFirstRunExperience.onboardingModelStatusLine(for:).STTRoutergainsprefetchSelectedModelFiles(); the existing-install variant delegates to it. Emits the already-allowlistedonboarding_model_state_changedevent and addsmodel_stateto step-viewed/CTA/completion events (all already inResources/analytics-events.psv).Sources/Support/MeetingReminderPreferences.swift(default on). The onboarding toggle writes it,MeetingPromptDetector's default calendar gate now checks it alongside TCC access, and Settings > General gets a matching "Meeting reminders" row.memorystep id so funnels stay comparable); the diagnostics toggle moves onto the done screen. All contract-pinned automation identifiers and copy hooks are retained..transcriptedPermissionsDidChange; the app delegate observes it and callsrecoverHotkeysAfterPermissionChange()when Accessibility flips, instead of relying on the preference-write side effect.FirstRunOnboardingStep/FirstRunOnboardingActionState/FirstRunOnboardingCopylegacy model and its test suites; removed the fakeTrafficLightsview and hid the zoom button (close stays as the abandon path).ui-smokewalk updated for the merged welcome step; new preference registered inrun-tests.shAPP_SOURCES andTests/FastTests.manifestwithTests/MeetingReminderPreferencesTests.swift; newFirstRunExperienceTestssuites foranalyticsValueand the model status line;Sources/Support/CLAUDE.mdand CHANGELOG updated.How I checked it
scripts/dev/agent-preflight.sh.agents/test-matrix.ymlfor the files changed — via CIbuild-and-test(green ata8ca0b4):build.sh --no-open,run-tests.sh,swift test,run-integration-smoke.sh,run-e2e-smoke.sh, and all four Tools package testsbash build.sh --no-open— CIbuild-and-test, greenbash run-tests.sh— CIbuild-and-test, greenbuild.sh --no-open; the runtime events check was not run (no runtime-sensitive change here)bash run-integration-smoke.sh— CIbuild-and-test, greenswift test --package-path Tools/TranscriptedQA— CIbuild-and-test, greenbash -n run-tests.shandbash -n scripts/entrypoints/run-tests.shpython3 scripts/dev/check-build-source-lists.pybash scripts/ops/transcripted-qa-bench.sh --mode ui— live AX walk needs local Accessibility permission; CI covers only the TranscriptedQA package testsVerification status: authored in a Linux container with no Swift toolchain, so nothing Swift ran locally — but CI's macOS
build-and-testjob has since run the full stack (build, fast tests, SPM tests, integration smoke, E2E smoke, Tools package tests) green on this head. What remains is the live AX ui-smoke and the manual fresh-install pass above.Risk Review
analyticsValuenever carries failure messages; the model status line uses plain copy, not raw errorsmeeting-reminders-enabled, absent = on, so existing installs keep current behavior).agent-review/visuals/evidence — not possible in this environment; needs a Mac runNotes
Analytics continuity: removed step ids (
privacy,dictation_intro,agent_demo,diagnostics) simply stop firing; the merged payoff screen keeps thememoryid. Existing dashboards keep working; step-count-based funnels will show the shorter flow.Behavior note on the permissions gate: onboarding completion no longer implies permissions are granted.
MeetingRecordingStartGateand the dictation-start paths already handle missing grants at action time, and the done screen plus Settings point users back.Agent handoff
COORD_DONE: BRIEF | https://github.com/r3dbars/transcripted/pull/1353 | six onboarding fixes (prefetch, persisted toggle, shorter flow, skip gate, hotkey re-register, dead-code/visual cleanup) | none | none | CI build-and-test green (build, fast tests, swift test, integration + e2e smokes, Tools packages) plus local preflight/bash -n/source-list checker | human: live AX ui-smoke + manual fresh-install onboarding pass on a Mac🤖 Generated with Claude Code
https://claude.ai/code/session_019pLa23SibHfMcBSbJfqsZw