Read: end playback visibly when the audio source throws a read error
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 74/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- swift
- Domain
- audio-video-rtc, desktop
Research direction
Start in Sources/LocalVoice/ReadingAudio.swift, tracing the source.read error path around lines 326–366 and the existing engine recovery path around lines 403–405. Use an isolated throwing ReadingAudioSource fixture to check failures before the first frame and after buffered audio, while confirming not-yet-rendered streaming input still works. Done means each failure settles visibly once with useful retry guidance, preserves text and voice, and Retry can complete.
Written by the indexing model from the issue text.
Description
Outcome and evidence
P2, source-confirmed recovery gap; native fault injection pending. An audio-source read error is swallowed, leaving the player eligible to retry while its playing state can remain active with no audible progress.
Workbench Preview 2.3.0, build 20260928054038, source 00be555139f87d4557f48fcffc132b8621c251a2, unmodified source, macOS 26.5.1 (25F80), Apple M5, built-in display. Identity verified in the running app using Copy build details on 28 September 2026.
Normal installed Listen → Pause → Resume → Stop was exercised with synthetic text and returned to editable text. That pass does not cover this error branch. No live audio file was removed or corrupted.
Owner and bounded change
Source links below pin the earlier audited commit 9578d8cf; the relevant paths were checked against installed 00be5551 and the described behaviour is unchanged. Source findings and native observations are distinguished below.
ReadingAudio.swift uses try? source.read and breaks scheduling on error without finish(false). The tick path around lines 326–340 can attempt scheduling again while frames remain. Engine recovery already reports failure around lines 403–405.
Route an actual source-read failure once through the existing completion/error path. Clear active/paused state, retain the input text and give an actionable retry. Distinguish a thrown error from streaming audio that is not ready yet.
Acceptance
- An isolated throwing ReadingAudioSource fixture fails before first frame and after some buffered audio; both settle visibly with one useful error.
- No endless playing state, retry loop or repeated error storm remains.
- Not-yet-rendered streaming input continues normally.
- Original text and chosen voice survive; Retry can complete.
- Retest installed normal playback, Pause/Resume, Stop, seek and export with synthetic material.
- Report code/fixture validation separately from the signed installed build and audible/hardware checks.
Related: PR #129 and installed verification #140. Use an isolated fixture instead of damaging user audio to reproduce.
- Dominant language
- Swift
- Stars
- 0
- Forks
- 1
- Avg merge
- 8h 5m
- Merged PRs (30d)
- 215
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Ship-Work/workbench
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
documentation good first issue help wanted
Difficulty 2/5 Half a day Newbie friendliness 74/100
Ship-Work/workbench#29 · 1 comment ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 55/100
Maintainers usually reply within 1 day
All issues in Ship-Work/workbench
Similar issues
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 69/100
cuappdev/resell-ios#131 ·
-
bug: Swift integration guide uses inconsistent client variable namesPossibly taken @timokoethe claimed this today. Openbug
Difficulty 1/5 Under an hour Newbie friendliness 82/100
logto-io/logto#9787 · 1 comment ·
Maintainers usually reply within 1 day
-
Review backlog (style): Test helper still reads stdout after waitUntilExitPossibly taken @hivecommons-hive claimed this today. Openagent/reviewer help wanted hive/claimed-by-scanner stage/030-pr-in-progress
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
hivecommons/hotshot#243 · 1 comment ·
Maintainers usually reply within 1 day
-
Ctrl+C while pictures are drawing also kills the image worker (traceback, story ends partial/failed)Openlow-priority
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
jessvb/tiny-talk-adventures#92 ·
Maintainers usually reply within 1 day
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 78/100