docs: log KC-38 (voice input — speech-to-task via mic button)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1163,3 +1163,33 @@ Files: `TodayView.swift` (`NLTaskParser`). 6 parser tests added.
|
|||||||
### Pending (follow-up)
|
### Pending (follow-up)
|
||||||
- **Hourly / sub-day recurrence** is unsupported by the day-granular occurrence
|
- **Hourly / sub-day recurrence** is unsupported by the day-granular occurrence
|
||||||
engine. Would need an engine + repeating-notification extension. **Pending.**
|
engine. Would need an engine + repeating-notification extension. **Pending.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## KC-38 — Voice input: add tasks by speaking
|
||||||
|
|
||||||
|
**Status:** Implemented (committed `eb7d563`)
|
||||||
|
**Area:** Tasks / Quick-add
|
||||||
|
|
||||||
|
### Description
|
||||||
|
The quick-add mic button is now wired to live, on-device speech recognition so a
|
||||||
|
task can be dictated instead of typed.
|
||||||
|
|
||||||
|
### Implementation
|
||||||
|
- New `SpeechRecognizer` (`Speech` + `AVFoundation`): `SFSpeechRecognizer` driven
|
||||||
|
by `AVAudioEngine`, publishing `transcript` / `isRecording` / `error`. Requests
|
||||||
|
speech + microphone authorization, then streams partial results.
|
||||||
|
- `TodayView` quick-add: mic button calls `speech.toggle()` (mic → mic.fill,
|
||||||
|
accent + pulse while recording); `onChange(of: speech.transcript)` binds the
|
||||||
|
text into the task field, so dictation flows through the **same `NLTaskParser`**
|
||||||
|
— spoken dates/recurrence (e.g. "remind me to pray everyday") parse exactly like
|
||||||
|
typed input (see KC-37). Permission errors surface inline.
|
||||||
|
- Usage strings added: `NSMicrophoneUsageDescription`,
|
||||||
|
`NSSpeechRecognitionUsageDescription`.
|
||||||
|
|
||||||
|
Files: `SpeechRecognizer.swift` (new), `TodayView.swift`, `project.yml`.
|
||||||
|
|
||||||
|
### Notes / follow-up
|
||||||
|
- Recognition locale is `.current`; no manual language picker.
|
||||||
|
- Contains `print("[VOICE] …")` debug logging — harmless, could be removed before
|
||||||
|
release. **Minor.**
|
||||||
|
|||||||
Reference in New Issue
Block a user