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:
kutesir
2026-06-24 21:13:26 +03:00
parent e8c2c5c8ea
commit f8d0a80f17

View File

@@ -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.**