You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Gate DebugFileLog behind Developer Mode, rotate at 5 MB, and stop
logging transcript content (lengths only) — previously every dictated
utterance was written to an unbounded plaintext log in every install
- Move meeting-start title/roster AX scraping and the 15 s roster poll
off the main thread, with a 1 s AXUIElementSetMessagingTimeout so a
busy Teams can't stall the app
- Generalize app-audio process collection per meeting app
(MeetingApp.isProcessFamilyMember) so Zoom/Webex helpers are tapped,
not just Teams
- skipNaming: use processingJob (not activeJob) so a stale failed job
can't pin the phase at .processing
- Remove dead partialTranscript plumbing and its 10 Hz polling loop
- Cap the dictation buffer at 4 hours (matches recording max duration)
- Free pipeline sample buffers after their last consuming stage
(mic after transcription, app after diarization) to cut peak memory
- Validate the cached System Audio TCC grant once per launch so a
revoked permission no longer shows "Granted" forever
- Track skipped review findings in ROADMAP.md
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: ROADMAP.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,9 @@ To preserve the focus, performance, and simplicity of Heard as a lean, native, s
9
9
These represent the remaining areas of focus to clean up and stabilize:
10
10
11
11
### Active Tech Debt & Known Issues
12
+
-**Watchdog abort can leak a zombie pipeline task.**`PipelineProcessor.abortAndFailCurrentJob` cancels the pipeline task and starts the next job, but FluidAudio may not honor cancellation promptly. A stuck transcribe/diarize call that eventually returns will write into the shared per-job state (`appTrack`, `appTranscription`, `appDiarization`, `transcriptionProgress`) while the next job is using it. Fix: tag each run with a generation/job ID and have stage write-backs verify they still own the current generation before mutating shared state.
13
+
-**App-audio self-test rebuild invalidates `micDelaySeconds`.**`attemptAppAudioRebuild` truncates and reopens the app WAV ~2–4 s after the original start and updates `appStartTime`, but the session's `micDelaySeconds` was computed once in `startRecording` and never recalculated. After a rebuild, mic/app track alignment is off by the rebuild delay, which skews `SegmentDeduplicator.dropMicBleed` and segment interleaving. Fix: recompute the delay (or store a rebuild offset on the session) after a successful rebuild.
14
+
-**PermissionCenter republishes identical state every 3 s.**`refresh()` builds a fresh `statuses` array on every poll tick, so every observing view re-renders 20×/minute for the app's lifetime even when nothing changed — plus a system-wide AX IPC call per tick while Accessibility is ungranted. Fix: make `PermissionStatus` equatable and only assign when the array actually changed. Related: the detector polls at 1 s while the docs (CLAUDE.md/handoff.md) say 3 s — reconcile the cadence or the docs.
12
15
-**In-meeting note editing.** Today the user edits notes by opening the rendered `.md` directly. A future polish: a "Notes" disclosure on each completed job in the menu bar dropdown that lists captured notes and lets the user edit/delete before the transcript is finalized (or rewrite the `.md` if it's already been written).
13
16
-**`Views.swift` size.** All SwiftUI UI components live in a single ~1.9 kLOC file after the Paper design system was implemented. Split this by tab or view area to improve build times and maintenance once early UI iteration is finished.
14
17
-**Menu bar dropdown height clipping.** The menu bar dropdown uses `.window` style and has a fixed max height. The jobs list can clip when many jobs accumulate.
0 commit comments